This commit is contained in:
2024-10-01 02:46:18 +01:00
parent c4f3961672
commit f69d150e00
13 changed files with 276 additions and 318 deletions
+27 -16
View File
@@ -5,6 +5,7 @@ module Dodge.HeldUse
)
where
import Color.Data
import Dodge.Base.Coordinate
import Dodge.Base.Collide
import Dodge.Inventory.Lock
@@ -24,7 +25,7 @@ import Data.Maybe
import Dodge.Creature.HandPos
import Dodge.Data.World
import Dodge.Gas
import Dodge.Item.Weapon.BatteryGuns
--import Dodge.Item.Weapon.BatteryGuns
--import Dodge.Item.Weapon.Launcher
import Dodge.Item.Weapon.Radar
import Dodge.Item.Weapon.Shatter
@@ -187,9 +188,9 @@ useLoadedAmmo _ _ (cme,w) (_,Nothing) = (cme, w)
useLoadedAmmo itmtree cr (cme,w) (mzid,Just (mz,x,magtree)) = (,) (cme & cmeSound .~ True) $
removeAmmoFromMag x mid cr . makeMuzzleFlare mz itm cr $ case _mzEffect mz of
MuzzleShootBullet -> shootBullet itmtree cr (mz,x,magtree) w
MuzzleLaser -> shootLaser' itm cr mz w
MuzzleLaser -> shootLaser itm cr mz w
MuzzleTesla -> shootTeslaArc itm cr mz w
MuzzleTractor -> shootTractorBeam itm cr w
MuzzleTractor -> shootTractorBeam cr w
MuzzleLauncher -> createProjectile magtree mz itmtree cr w
MuzzleNozzle {} -> useGasParams mid mz itm cr $ walkNozzle mzid mz itm cr w
MuzzleShatter -> shootShatter itm cr w
@@ -219,15 +220,15 @@ walkNozzle mzid mz itm cr w = fromMaybe w $ do
wa = min maxa $ max (negate maxa) (_nzCurrentWalkAngle nz + walkamount)
shootTractorBeam :: Item -> Creature -> World -> World
shootTractorBeam itm cr w = w & cWorld . lWorld . tractorBeams .:~ tractorBeamAt spos outpos dir power
shootTractorBeam :: Creature -> World -> World
shootTractorBeam cr w = w & cWorld . lWorld . tractorBeams .:~ tractorBeamAt spos outpos dir power
where
cpos = _crPos cr
spos = cpos +.+ (_crRad cr + 10) *.* unitVectorAtAngle dir
xpos = cpos +.+ 400 *.* unitVectorAtAngle dir
dir = _crDir cr
outpos = fst $ collidePointWallsFilter (const True) cpos xpos w
power = _attractionPower . _itParams $ itm
power = 1
tractorBeamAt :: Point2 -> Point2 -> Float -> Point2 -> TractorBeam
tractorBeamAt pos outpos dir power =
@@ -240,23 +241,33 @@ tractorBeamAt pos outpos dir power =
where
d = unitVectorAtAngle dir * power
shootLaser' :: Item -> Creature -> Muzzle -> World -> World
shootLaser' itm cr mz w = w
shootLaser :: Item -> Creature -> Muzzle -> World -> World
shootLaser itm cr mz w = w
& randGen .~ g
&
cWorld . lWorld . lasers
.:~ lasRayAt
(_lasColor $ _itParams itm)
(_lasDamage $ _itParams itm)
(_phaseV $ _itParams itm)
pos
dir
& cWorld . lWorld . lasers
.:~ LaserStart
{ _lpType = DamageLaser . _lasDamage $ _itParams itm
, _lpPhaseV = _phaseV $ _itParams itm
, _lpPos = pos
, _lpDir = dir
, _lpColor = _lasColor $ _itParams itm
}
where
pos = _crPos cr + rotateV (_crDir cr) (_mzPos mz + aimingWeaponZeroPos cr itm)
(a,g) = randomR (-inacc,inacc) $ _randGen w
inacc = _mzInaccuracy mz
dir = _crDir cr + _mzRot mz + a
lasRayAt :: Color -> Int -> Float -> Point2 -> Float -> LaserStart
lasRayAt col dam phasev pos dir =
LaserStart
{ _lpType = DamageLaser dam
, _lpPhaseV = phasev
, _lpPos = pos
, _lpDir = dir
, _lpColor = col
}
removeAmmoFromMag :: Int -> Maybe Int -> Creature -> World -> World
removeAmmoFromMag x mid cr = fromMaybe id $ do
magid <- mid