diff --git a/src/Dodge/Base/Collide.hs b/src/Dodge/Base/Collide.hs index 6cfb911bd..eb0b6c194 100644 --- a/src/Dodge/Base/Collide.hs +++ b/src/Dodge/Base/Collide.hs @@ -192,7 +192,7 @@ crHeight cr = case cr ^. crHP of Avatar {} -> 25 CrabCrit {} -> 25 SlinkCrit {} -> 25 - SlimeCrit {_slimeRad = r} -> r + SlimeCrit {_slimeRad = r} -> min 15 r BeeCrit {} -> 10 HiveCrit {} -> 25 _ -> error "Need to define crHeight for this crType" diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index 48ac4e3cf..78918b67c 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -48,7 +48,7 @@ drawCreature w m cr = translateSP (_crPos cr) . fallrot . rotateSP (_crDir cr) $ HoverCrit{} -> noPic $ drawHoverCrit cr SlinkCrit{} -> noPic $ drawSlinkCrit cr SlimeCrit{} -> noPic $ drawSlimeCrit cr - BeeCrit{_beeSlime=x} -> noPic $ drawBeeCrit x + BeeCrit{} -> noPic $ drawBeeCrit cr HiveCrit{} -> drawHive where fallrot = case cr ^? crStance . carriage . carDir of @@ -57,7 +57,7 @@ drawCreature w m cr = translateSP (_crPos cr) . fallrot . rotateSP (_crDir cr) $ drawSlimeCrit :: Creature -> Shape drawSlimeCrit cr = colorSH green - $ upperPrismPolyHalf Medium Typical (cr ^?! crType . slimeFeedProgress + min 10 r) $ polyCirc 6 r + $ upperPrismPolyHalf Medium Typical (cr ^?! crType . slimeEngulfProgress + min 15 r) $ polyCirc 6 r & each %~ scaleAlong d s & each %~ scaleAlong (vNormal d) (1 / s) & each %~ rotateV (-cr ^. crDir) @@ -119,13 +119,13 @@ drawHoverCrit cr = colorSH (_skinHead cskin) drawHive :: SPic drawHive = noPic $ upperPrismPolyHalfMI 25 $ polyCirc 6 20 -drawBeeCrit :: Float -> Shape -drawBeeCrit x = colorSH yellow +drawBeeCrit :: Creature -> Shape +drawBeeCrit cr = colorSH yellow (upperPrismPolyHalfMI 3 $ polyCirc 6 r) <> colorSH (dark yellow) (overPosSH (Q.apply (beakpos)) $ upperPrismPolyHalfST 1 $ [V2 0 (-2), V2 4 0,V2 0 2]) where - r = sqrt $ 2 ^(2::Int) + x + r = cr ^. crType . to crRad beakpos = (V3 (r-1) 0 0, Q.qid) drawCrabCrit :: World -> Creature -> Shape @@ -278,7 +278,7 @@ makeCorpse g cr = case cr ^. crType of HoverCrit{} -> noPic $ drawHoverCrit cr ChaseCrit{} -> noPic $ chaseCorpse g cr CrabCrit{} -> noPic $ crabCorpse g cr - BeeCrit{} -> noPic $ drawBeeCrit 0 + BeeCrit{} -> noPic $ drawBeeCrit cr _ -> noPic . scaleSH (V3 crsize crsize crsize) diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index 941854ae0..649b6129f 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -111,7 +111,11 @@ updateBeeCrit cr cid w , Just x <- cr ^? crType . beeSlime , x >= 15 = w & tocr . crActionPlan . apAction .~ PathTo (hcr ^. crPos . _xy) NoAction - & tocr . crStance . carriage .~ Flying 1 + & tocr . crStance . carriage .~ Flying 0 + | Just hcr <- gethive + , Just x <- cr ^? crType . beeSlime + , x >= 15 + = w & tocr . crActionPlan . apAction .~ PathTo (hcr ^. crPos . _xy) NoAction | Nothing <- cr ^? crActionPlan . apStrategy . harvestTarget , Just tcr <- find isslime $ crsNearCirc (cr ^. crPos . _xy) 100 w = w & tocr . crActionPlan . apStrategy .~ HarvestFrom (tcr ^. crID) @@ -120,12 +124,13 @@ updateBeeCrit cr cid w & tocr . crStance . carriage .~ Mounted ti (cr ^. crPos - tcr ^. crPos) | Just tid <- cr ^? crStance . carriage . mountID , Just SlimeCrit{} <- w ^? cWorld . lWorld . creatures . ix tid . crType = w - & tocr . crType . beeSlime +~ 0.5 - & cWorld . lWorld . creatures . ix tid . crType . slimeRad %~ (sqrt . subtract 0.5 . (^(2::Int))) + & tocr . crType . beeSlime +~ sspeed + & cWorld . lWorld . creatures . ix tid . crType . slimeRad %~ (sqrt . subtract sspeed . (^(2::Int))) | Just (tcr,_) <- gettarg = w & tocr . crActionPlan . apAction .~ PathTo (tcr ^. crPos . _xy) NoAction | otherwise = w & tocr . crActionPlan . apStrategy .~ Search where + sspeed = 0.1 gettarg = do i <- cr ^? crActionPlan . apStrategy . harvestTarget tcr <- w ^? cWorld . lWorld . creatures . ix i @@ -159,7 +164,7 @@ slimeCritUpdate cid w & cWorld . lWorld . creatures . ix cid . crDamage .~ [] & tocr %~ doSlimeRadChange & tocr . crType . slimeSplitTimer %~ (max 0 . subtract 1) - & tocr . crType . slimeFeedProgress %~ (max 0 . subtract 0.5) + & tocr . crType . slimeEngulfProgress %~ (max 0 . subtract 0.5) where tocr = cWorld . lWorld . creatures . ix cid cr = w ^?! cWorld . lWorld . creatures . ix cid @@ -233,7 +238,7 @@ splitSlimeCrit p v cr = do & crType . slimeRad .~ r2 & crType . slimeCompression .~ rotateV (argV (-mvdir)) (V2 r2 0) & crDir .~ argV (-mvdir) - & crType . slimeFeedProgress .~ 0 + & crType . slimeEngulfProgress .~ 0 ) where cxy = cr ^. crPos . _xy diff --git a/src/Dodge/Data/Creature/Misc.hs b/src/Dodge/Data/Creature/Misc.hs index e7827b79e..6c9503e58 100644 --- a/src/Dodge/Data/Creature/Misc.hs +++ b/src/Dodge/Data/Creature/Misc.hs @@ -77,7 +77,7 @@ data CreatureType , _slimeSplitTimer :: Int , _slimeCompression :: Point2 , _slimeIsCompressing :: Bool - , _slimeFeedProgress :: Float + , _slimeEngulfProgress :: Float } | BeeCrit { _beeSlime :: Float diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 51dec0f7b..815999658 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -43,6 +43,7 @@ tocrs = uvWorld . cWorld . lWorld . creatures testStringInit :: Universe -> [String] testStringInit u = u ^.. tocrs . ix 2 . crType . hiveChildren . to show + <> u ^.. tocrs . ix 3 . crStance . carriage . to show -- u ^.. tocrs . ix 1 . crPos . _xy . to show -- <> u ^.. tocrs . ix 1 . crType . slimeCompression . to show -- <> u ^.. tocrs . ix 1 . crType . slimeCompression . to norm . to show diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 44cc4398c..e3bd1cb1c 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -1069,8 +1069,8 @@ slimeFood cr = case cr ^. crType of feedSlime :: Creature -> Creature -> World -> World feedSlime s c w = fromMaybe w $ do ch <- crHeight c - return $ if min 10 r1 + s ^?! crType . slimeFeedProgress < max 15 (ch + 2) - then w & cWorld . lWorld . creatures . ix (s ^. crID) . crType . slimeFeedProgress %~ (min r1 . (+0.7)) + return $ if min 10 r1 + s ^?! crType . slimeEngulfProgress < max 15 (ch + 2) + then w & cWorld.lWorld.creatures.ix (s^.crID).crType.slimeEngulfProgress%~ (min r1.(+0.7)) & slimeSuck s c else w