Work on gibs and chasms
This commit is contained in:
+51
-9
@@ -26,7 +26,6 @@ aGib =
|
||||
, _prUpdate = PropFallSmallBounce
|
||||
, _prPosZ = 10
|
||||
, _prVelZ = 5
|
||||
, _prTimer = 20
|
||||
, _prQuat = Q.axisAngle (V3 1 0 0) 0
|
||||
, _prQuatSpin = Q.axisAngle (V3 1 1 0) 0.1
|
||||
, _prColor = white
|
||||
@@ -73,13 +72,18 @@ addGibsAtDir dir minh maxh col p w =
|
||||
quats :: [Q.Quaternion Float]
|
||||
quats = replicateM 4 (Q.vToQuat (V3 0 0 1) <$> randOnUnitSphere) & evalState $ _randGen w
|
||||
|
||||
addGib4 ::
|
||||
Point2 ->
|
||||
Color ->
|
||||
(Point2, Float, Q.Quaternion Float, Float) ->
|
||||
World ->
|
||||
World
|
||||
addGib4 p col (v, zs, q, h) =
|
||||
addGib4 :: Point2 -> Color -> (Point2, Float, QFloat, Float) -> World -> World
|
||||
addGib4 p col (v, zs, q, h) = cWorld . lWorld . debris
|
||||
.:~ DebrisChunk
|
||||
{ _dbPos = p `v2z` h
|
||||
, _dbType = Gib 3 col
|
||||
, _dbVel = v `v2z` zs
|
||||
, _dbRot = q
|
||||
, _dbSpin = Q.axisAngle (vNormal v `v2z` 0) (-0.1)
|
||||
}
|
||||
|
||||
addGib4' :: Point2 -> Color -> (Point2, Float, QFloat, Float) -> World -> World
|
||||
addGib4' p col (v, zs, q, h) =
|
||||
plNew
|
||||
(cWorld . lWorld . props)
|
||||
prID
|
||||
@@ -93,7 +97,25 @@ addGib4 p col (v, zs, q, h) =
|
||||
)
|
||||
|
||||
addGibAt :: Float -> Color -> Point2 -> World -> World
|
||||
addGibAt h col p w =
|
||||
addGibAt h col p w = addGibAtDir d h col p (w & randGen .~ newg)
|
||||
where
|
||||
(d, newg) = randomR (0, 2 * pi) $ _randGen w
|
||||
-- f = do
|
||||
-- s <- state $ randomR (1, 4)
|
||||
-- dir <- unitVectorAtAngle <$> state (randomR (0, 2 * pi))
|
||||
-- zs <- state $ randomR (-8, 8)
|
||||
-- q <- Q.vToQuat (V3 0 0 1) <$> randOnUnitSphere
|
||||
-- let v = s *.* dir
|
||||
-- return $ DebrisChunk
|
||||
-- { _dbPos = p `v2z` h
|
||||
-- , _dbType = Gib 3 col
|
||||
-- , _dbVel = v `v2z` zs
|
||||
-- , _dbRot = q
|
||||
-- , _dbSpin = Q.axisAngle (vNormal v `v2z` 0) (-0.1)
|
||||
-- }
|
||||
|
||||
addGibAt' :: Float -> Color -> Point2 -> World -> World
|
||||
addGibAt' h col p w =
|
||||
w
|
||||
& plNew (cWorld . lWorld . props) prID gib
|
||||
& randGen .~ newg
|
||||
@@ -117,6 +139,26 @@ addGibAt h col p w =
|
||||
|
||||
addGibAtDir :: Float -> Float -> Color -> Point2 -> World -> World
|
||||
addGibAtDir dir h col p w =
|
||||
w
|
||||
& cWorld . lWorld . debris .:~ gib
|
||||
& randGen .~ newg
|
||||
where
|
||||
(gib, newg) = runState f $ _randGen w
|
||||
f = do
|
||||
s <- state $ randomR (1, 4)
|
||||
zs <- state $ randomR (-4, 4)
|
||||
q <- Q.vToQuat (V3 0 0 1) <$> randOnUnitSphere
|
||||
let v = s *.* unitVectorAtAngle dir
|
||||
return $ DebrisChunk
|
||||
{ _dbPos = (p +.+ (5 *.* normalizeV v)) `v2z` h
|
||||
, _dbType = Gib 3 col
|
||||
, _dbVel = v `v2z` zs
|
||||
, _dbRot = q
|
||||
, _dbSpin = Q.axisAngle (vNormal v `v2z` 0) (-0.1)
|
||||
}
|
||||
|
||||
addGibAtDir' :: Float -> Float -> Color -> Point2 -> World -> World
|
||||
addGibAtDir' dir h col p w =
|
||||
w
|
||||
& plNew (cWorld . lWorld . props) prID gib
|
||||
& randGen .~ newg
|
||||
|
||||
Reference in New Issue
Block a user