Bounce gibs

This commit is contained in:
2022-06-03 20:43:29 +01:00
parent dd985c6a49
commit fa60ea0028
+23 -7
View File
@@ -1,4 +1,6 @@
module Dodge.Prop.Gib where
import Dodge.Zone
import Dodge.Base
import Dodge.Data
import ShapePicture
import Shape
@@ -20,7 +22,7 @@ aGib = PropZ
,_pjPosZ = 10
,_pjVelZ = 5
,_pjTimer = 20
,_pjQuat = Q.axisAngle (V3 1 1 0) 1
,_pjQuat = Q.axisAngle (V3 1 0 0) 0
,_pjQuatSpin = Q.axisAngle (V3 1 1 0) 0.1
}
drawGib :: Prop -> SPic
@@ -29,25 +31,37 @@ drawGib pr = noPic
. uncurryV translateSHf (_pjPos pr)
. colorSH red
. overPosSH (Q.rotate (_pjQuat pr))
$ upperPrismPoly 5 $ square 5
. translateSHz (negate 5)
$ upperPrismPoly 10 $ square 5
updateGib :: Prop -> World -> World
updateGib pr = props . ix (_pjID pr) %~ updateGib'
updateGib pr w = w & props . ix (_pjID pr) %~ updateGib' w
updateGib' :: Prop -> Prop
updateGib' pr
updateGib' :: World -> Prop -> Prop
updateGib' w pr
| newposz < 0 && velz < (-2) = pr
& pjVelZ %~ ((*0.5) . negate)
-- & pjPos +~ (0.5*.* vel)
& updateWithVel (0.5 *.* vel)
& pjVel %~ (0.5 *.*)
-- & pjPos +~ (0.5*.* vel)
| newposz < 0 = pr & pjUpdate .~ const id
& pjZ .~ 0
-- & pjQuat *~ (_pjQuatSpin pr)
| otherwise = pr
& pjVelZ -~ 1
& pjPosZ +~ velz
& pjPos +~ vel
& updateWithVel vel
& pjQuat *~ (_pjQuatSpin pr)
where
newposz = _pjPosZ pr + velz
velz = _pjVelZ pr
vel = _pjVel pr
pos = _pjPos pr
--updateWithVel v = case reflectPointWalls pos (pos + v) $ wallsAlongLine pos (pos +v) w of
updateWithVel v = case collidePointAnyWallsReflect pos (pos + v) $ wallsAlongLine pos (pos +v) w of
Nothing -> pjPos +~ v
Just (p,v') -> (pjPos .~ p) . (pjVel .~ v')
addGibsAt :: Point2 -> World -> World
addGibsAt p w = w & addg (V2 2 2)
@@ -56,5 +70,7 @@ addGibsAt p w = w & addg (V2 2 2)
& addg (V2 (2) (-2))
where
addg v = plNew props pjID (aGib & pjPos .~ p
& pjVel .~ v)
& pjVel .~ v
& pjQuatSpin .~ Q.axisAngle (vNormal v `v2z` 0) (-0.1)
)