Work on chase crit animations, eating dead bees
This commit is contained in:
@@ -180,8 +180,8 @@ crabUpperBody _ cr =
|
||||
|
||||
chaseUpperBody :: World -> Creature -> Shape
|
||||
chaseUpperBody w cr =
|
||||
colorSH
|
||||
(_skinUpper cskin)
|
||||
-- colorSH
|
||||
-- (_skinUpper cskin)
|
||||
( overPosSH
|
||||
(Q.apply torsoq)
|
||||
( upperPrismPolyHalfMI tz $
|
||||
@@ -189,19 +189,36 @@ chaseUpperBody w cr =
|
||||
& each %~ vNormal
|
||||
& each . _y *~ 0.6
|
||||
)
|
||||
<> overPosSH (Q.apply neckq) (upperPrismPolyHalfMI 3 $ (+ V2 8 0) . vNormal <$> trapTBH 2 5 8)
|
||||
<> overPosSH (Q.apply neckq) lneckshape
|
||||
<> overPosSH (Q.apply neckq2) uneckshape
|
||||
)
|
||||
<> colorSH
|
||||
(_skinHead cskin)
|
||||
(overPosSH (Q.apply headq) (upperBox Medium Important 2 [V2 0 (-4), V2 9 0, V2 0 4]))
|
||||
-- (_skinHead cskin)
|
||||
yellow headshape
|
||||
where
|
||||
-- time = fromIntegral (mod (w ^. unpauseClock) 100) / 5
|
||||
tz = 4
|
||||
cskin = crShape $ _crType cr
|
||||
torsoq = (V3 0 0 (10 + tz + tbob), Q.qid)
|
||||
torsoq = (V3 0 0 (10 + tz + tbob), Q.qy (-cr ^?! crType . chaseqy0))
|
||||
mcool = 1 - min 10 (fromIntegral . _meleeCooldown $ _crType cr) / 10
|
||||
neckq = torsoq `Q.comp` (V3 6 0 0, Q.qz aimrot * Q.axisAngle (V3 0 1 0) (-1.8 * mcool))
|
||||
headq = neckq `Q.comp` (V3 16 0 0, Q.axisAngle (V3 0 1 0) (2 * mcool + vocaltilt) * Q.qz aimrot)
|
||||
-- (qy1,qy2,qy3)
|
||||
---- | CloseToMelee i <- cr ^?!crActionPlan.apStrategy
|
||||
---- = (0,0,0)
|
||||
-- | otherwise = (pi/3,-2*pi/3,pi/3)
|
||||
-- | otherwise = (pi * w^.cWorld.cClock.to ((*0.01).fromIntegral),0,0)
|
||||
-- | otherwise = (-1.8 * mcool , 0, 2 * mcool + vocaltilt)
|
||||
qy1 = cr ^?! crType . chaseqy1
|
||||
qy2 = cr ^?! crType . chaseqy2
|
||||
qy3 = cr ^?! crType . chaseqy3
|
||||
lneckshape = colorSH red $ upperPrismPolyHalfMI 4 (vNormal <$> trapTBH 2 5 (nlen/4))
|
||||
& each . sfVs . each +~ V3 (nlen/4) 0 (-2)
|
||||
uneckshape = colorSH green $ upperPrismPolyHalfMI 3 (vNormal <$> trapTBH 3 2 (nlen/4))
|
||||
& each . sfVs . each +~ V3 (nlen/4) 0 (-1.5)
|
||||
headshape = overPosSH (Q.apply headq) (upperBox Medium Important 2 [V2 0 (-4), V2 9 0, V2 0 4])
|
||||
neckq = torsoq `Q.comp` (V3 8 0 4, Q.qz aimrot * Q.qy (pi + qy1))
|
||||
neckq2 = neckq `Q.comp` (V3 (nlen/2) 0 0, Q.qy qy2)
|
||||
headq = neckq2 `Q.comp` (V3 (nlen/2) 0 0, Q.qy (pi + qy3) * Q.qz aimrot)
|
||||
nlen = 16
|
||||
vocaltilt = case cr ^? crVocalization . vcTime of
|
||||
Just x | x < 20 -> -pi * 0.05 * (10 - abs (fromIntegral x - 10))
|
||||
_ -> 0
|
||||
@@ -220,6 +237,29 @@ chaseUpperBody w cr =
|
||||
guard $ hasLOSIndirect cxy tcxy w
|
||||
return . (0.5 *) . nearZeroAngle $ argV (tcxy - cxy) - cr ^. crDir
|
||||
|
||||
{- NECK ARTICULATION
|
||||
Viewed from side, all hinges, torso/lower neck also hinges in Q.qz (not shown)
|
||||
na1 na2 na3 <- angles, in diagram all == 0, in Q.qy
|
||||
| | |
|
||||
---.---.---.--- z
|
||||
| | | | ^>x
|
||||
torso | u.neck|
|
||||
l.neck head
|
||||
Rough examples
|
||||
Flat aim: Resting:
|
||||
.\\
|
||||
\ \\
|
||||
. .
|
||||
/ \ /
|
||||
---. .--- ---.
|
||||
a1 = 60 a1 = 60
|
||||
a2 = -120 a2 = 60
|
||||
a3 = 60 a3 = -160
|
||||
-}
|
||||
|
||||
--ikTwoArms :: Point3 -> Point3 -> Point3 -> Point3 -> (QFloat,QFloat)
|
||||
--ikTwoArms
|
||||
|
||||
oneSmooth :: Float -> Float
|
||||
oneSmooth x = sin (pi * x * 0.5)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user