Allow debris to do damage
This commit is contained in:
@@ -36,9 +36,9 @@ someDebris = PropZ
|
|||||||
{_prPos = 0
|
{_prPos = 0
|
||||||
,_pjStartPos = 0
|
,_pjStartPos = 0
|
||||||
,_pjVel = 0
|
,_pjVel = 0
|
||||||
,_prDraw = \pr -> drawMovingShape pr (debrisShape pr)
|
,_prDraw = \pr -> drawMovingShape pr (debrisShape 4 pr)
|
||||||
,_pjID = 0
|
,_pjID = 0
|
||||||
,_pjUpdate = fallSmallBounce
|
,_pjUpdate = fallSmallBounceDamage
|
||||||
,_pjPosZ = 10
|
,_pjPosZ = 10
|
||||||
,_pjVelZ = 5
|
,_pjVelZ = 5
|
||||||
,_pjTimer = 20
|
,_pjTimer = 20
|
||||||
@@ -46,5 +46,5 @@ someDebris = PropZ
|
|||||||
,_pjQuatSpin = Q.axisAngle (V3 1 1 0) 0.1
|
,_pjQuatSpin = Q.axisAngle (V3 1 1 0) 0.1
|
||||||
,_pjColor = white
|
,_pjColor = white
|
||||||
}
|
}
|
||||||
debrisShape :: Prop -> Shape
|
debrisShape :: Float -> Prop -> Shape
|
||||||
debrisShape pr = colorSH (_pjColor pr) . translateSHz (-5) $ upperPrismPoly 10 $ square 5
|
debrisShape size pr = colorSH (_pjColor pr) . translateSHz (-size) $ upperPrismPoly 8 $ square size
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ data DamageType
|
|||||||
| BLUNT
|
| BLUNT
|
||||||
| CUTTING
|
| CUTTING
|
||||||
| SPARKING
|
| SPARKING
|
||||||
|
| CRUSHING
|
||||||
| FLAMING
|
| FLAMING
|
||||||
| LASERING
|
| LASERING
|
||||||
| ELECTRICAL
|
| ELECTRICAL
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ placeLineBlock basePane bm blockWidth depth a b gw = ( 0
|
|||||||
{ _blID = i + blid, _blWallIDs = IS.fromList $ ksAtI i
|
{ _blID = i + blid, _blWallIDs = IS.fromList $ ksAtI i
|
||||||
, _blHPs = [5,5], _blShadows = shadowsAt i, _blMaterial = bm
|
, _blHPs = [5,5], _blShadows = shadowsAt i, _blMaterial = bm
|
||||||
, _blFootprint = cornersAt p -- TODO check winding (clockwise, anticlockwise)
|
, _blFootprint = cornersAt p -- TODO check winding (clockwise, anticlockwise)
|
||||||
, _blPos = p, _blDraw = const mempty , _blDeath = const id}
|
, _blPos = p, _blDraw = const mempty , _blDeath = makeBlockDebris bm}
|
||||||
insertBlocks = flip (foldr insertBlock) $ zip is blockCenPs
|
insertBlocks = flip (foldr insertBlock) $ zip is blockCenPs
|
||||||
ksAtI i = map ( + (wlid + i*4) ) [0,1,2,3]
|
ksAtI i = map ( + (wlid + i*4) ) [0,1,2,3]
|
||||||
visibilityAt i
|
visibilityAt i
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
module Dodge.Prop.Moving where
|
module Dodge.Prop.Moving
|
||||||
|
( drawMovingShape
|
||||||
|
, fallSmallBounceDamage
|
||||||
|
, fallSmallBounce
|
||||||
|
) where
|
||||||
import Dodge.Zone
|
import Dodge.Zone
|
||||||
import Dodge.Base
|
import Dodge.Base
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
@@ -13,9 +17,25 @@ import LensHelp
|
|||||||
|
|
||||||
import qualified Quaternion as Q
|
import qualified Quaternion as Q
|
||||||
--import Data.List (zip4)
|
--import Data.List (zip4)
|
||||||
|
--
|
||||||
|
fallSmallBounceDamage :: Prop -> World -> World
|
||||||
|
fallSmallBounceDamage pr w = w
|
||||||
|
& dodamage
|
||||||
|
& props . ix (_pjID pr) %~ fallSmallBounce' w
|
||||||
|
where
|
||||||
|
p = _prPos pr
|
||||||
|
v = _pjVel pr
|
||||||
|
dodamage
|
||||||
|
| _pjPosZ pr < 25 = creatures %~ fmap dodamage'
|
||||||
|
| otherwise = id
|
||||||
|
dodamage' cr
|
||||||
|
| dist (_crPos cr) p < _crRad cr = cr & crState . crDamage
|
||||||
|
.:~ Damage CRUSHING (floor . (*10) . max 0 . subtract 5 . abs $ _pjVelZ pr) (p -.- v) p (p +.+ v) NoDamageEffect
|
||||||
|
| otherwise = cr
|
||||||
|
|
||||||
fallSmallBounce :: Prop -> World -> World
|
fallSmallBounce :: Prop -> World -> World
|
||||||
fallSmallBounce pr w = w & props . ix (_pjID pr) %~ fallSmallBounce' w
|
fallSmallBounce pr w = w
|
||||||
|
& props . ix (_pjID pr) %~ fallSmallBounce' w
|
||||||
|
|
||||||
fallSmallBounce' :: World -> Prop -> Prop
|
fallSmallBounce' :: World -> Prop -> Prop
|
||||||
fallSmallBounce' w pr
|
fallSmallBounce' w pr
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ damageBlockWith dm = case _dmType dm of
|
|||||||
CUTTING -> blHPs %~ reduceHead dam
|
CUTTING -> blHPs %~ reduceHead dam
|
||||||
EXPLOSIVE -> blHPs %~ reduceHead dam
|
EXPLOSIVE -> blHPs %~ reduceHead dam
|
||||||
CONCUSSIVE -> blHPs %~ reduceHead dam
|
CONCUSSIVE -> blHPs %~ reduceHead dam
|
||||||
|
CRUSHING -> blHPs %~ reduceHead (dam `div` 4)
|
||||||
LASERING -> id
|
LASERING -> id
|
||||||
SPARKING -> id
|
SPARKING -> id
|
||||||
FLAMING -> id
|
FLAMING -> id
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ defaultWallDamage dm wl = wallDamageEffect dm wl . case _dmType dm of
|
|||||||
LASERING -> colSparkRandDir 0.2 8 lSparkCol outTo (reflDirWall sp p wl)
|
LASERING -> colSparkRandDir 0.2 8 lSparkCol outTo (reflDirWall sp p wl)
|
||||||
PIERCING -> colSparkRandDir 0.2 8 pSparkCol outTo (reflDirWall sp p wl) . wlDustAt wl outTo
|
PIERCING -> colSparkRandDir 0.2 8 pSparkCol outTo (reflDirWall sp p wl) . wlDustAt wl outTo
|
||||||
BLUNT -> wlDustAt wl outTo
|
BLUNT -> wlDustAt wl outTo
|
||||||
|
CRUSHING -> id
|
||||||
EXPLOSIVE -> id
|
EXPLOSIVE -> id
|
||||||
CUTTING -> id
|
CUTTING -> id
|
||||||
SPARKING -> id
|
SPARKING -> id
|
||||||
|
|||||||
Reference in New Issue
Block a user