Refactoring
This commit is contained in:
+16
-84
@@ -13,8 +13,10 @@ import Dodge.WorldEvent.Cloud
|
||||
import Dodge.Creature.YourControl
|
||||
import Dodge.Creature.Inanimate
|
||||
import Dodge.Creature.State
|
||||
import Dodge.Creature.Picture
|
||||
import Dodge.Item
|
||||
import Dodge.Picture.Layer
|
||||
import Dodge.Creature.Picture
|
||||
import Picture
|
||||
import Geometry
|
||||
|
||||
@@ -37,15 +39,12 @@ import qualified Data.Map as M
|
||||
import Foreign.ForeignPtr
|
||||
import Control.Concurrent
|
||||
|
||||
colouredEnemy col = pictures [color col $ circleSolid 10, circLine 10]
|
||||
|
||||
spawnerCrit :: Creature
|
||||
spawnerCrit = defaultCreature
|
||||
{ _crUpdate = stateUpdate $ spawnerAI chaseCrit
|
||||
, _crHP = 300
|
||||
, _crPict = basicCrPict blue
|
||||
, _crState = defaultState {_goals = [[WaitFor 0]]
|
||||
}
|
||||
, _crState = defaultState {_goals = [[WaitFor 0]] }
|
||||
, _crInv = IM.empty -- IM.fromList [(0,frontArmour)]
|
||||
}
|
||||
smallChaseCrit :: Creature
|
||||
@@ -54,8 +53,10 @@ smallChaseCrit = defaultCreature
|
||||
, _crHP = 1
|
||||
, _crRad = 4
|
||||
, _crPict = basicCrPict green
|
||||
, _crState = defaultState {_goals = [[Wait]]
|
||||
,_faction = ChaseCritters}
|
||||
, _crState = defaultState
|
||||
{_goals = [[Wait]]
|
||||
,_faction = ChaseCritters
|
||||
}
|
||||
, _crInv = IM.empty -- IM.fromList [(0,frontArmour)]
|
||||
, _crCorpse = onLayer CorpseLayer $ color (greyN 0.5) $ circleSolid 4
|
||||
}
|
||||
@@ -64,8 +65,10 @@ chaseCrit = defaultCreature
|
||||
{ _crUpdate = stateUpdate chaseAI
|
||||
, _crHP = 300
|
||||
, _crPict = basicCrPict green
|
||||
, _crState = defaultState {_goals = [[Wait]]
|
||||
,_faction = ChaseCritters}
|
||||
, _crState = defaultState
|
||||
{_goals = [[Wait]]
|
||||
,_faction = ChaseCritters
|
||||
}
|
||||
, _crInv = IM.empty
|
||||
}
|
||||
armourChaseCrit :: Creature
|
||||
@@ -142,40 +145,17 @@ pistolCrit = defaultCreature
|
||||
autoCrit :: Creature
|
||||
autoCrit = defaultCreature
|
||||
{ _crPict = basicCrPict red
|
||||
--, _crUpdate = checkDeadStopSound n . shooterFootsteps n . makeStateAI autoShooterAI n
|
||||
, _crUpdate = stateUpdate basicShooterAI
|
||||
--, _crUpdate = shooterFootsteps n . makeStateAI autoShooterAI n
|
||||
, _crInv = IM.fromList [(0,autoGun),(1,medkit 100)]
|
||||
, _crInvSel = 0
|
||||
, _crRad = 10
|
||||
--, _crState = ShooterWait
|
||||
, _crState = defaultState {_goals = [[InitGuard]]}
|
||||
, _crHP = 300
|
||||
}
|
||||
addArmour :: Creature -> Creature
|
||||
addArmour = over crInv insarmour
|
||||
where insarmour xs = IM.insert i frontArmour xs
|
||||
where i = newKey xs
|
||||
|
||||
equipOnTop :: (Creature -> Picture) -> Creature -> Picture
|
||||
--equipOnTop f cr = onLayer CrLayer $ pictures $ fst (drawEquipment cr) ++ [f cr] ++ snd (drawEquipment cr)
|
||||
equipOnTop f cr = pictures [onLayer CrLayer (f cr) , drawEquipment cr]
|
||||
|
||||
drawEquipment :: Creature -> Picture
|
||||
drawEquipment cr = pictures $ map f $ IM.toList (_crInv cr)
|
||||
where f (i,it) = case it ^? itEquipPict of
|
||||
Just g -> g cr i
|
||||
_ -> blank
|
||||
|
||||
--drawEquipment :: Creature -> ([Picture],[Picture])
|
||||
--drawEquipment cr = (map fst p1, map fst p2)
|
||||
-- where f (k,it) = join $ (it ^? itEquipPict) <*> (pure cr) <*> (pure k)
|
||||
-- picts = sortBy (compare `on` snd) $ mapMaybe f $ IM.toList (_crInv cr)
|
||||
-- (p1,p2) = partition (\ x -> snd x < 0) picts
|
||||
|
||||
frontArmouredPict = const $ pictures [ color (greyN 0.8) $ circleSolid 20
|
||||
, color red $ circLine 20
|
||||
]
|
||||
where
|
||||
insarmour xs = IM.insert (newKey xs) frontArmour xs
|
||||
|
||||
--packCrits :: (Int -> World -> World) -> [Int] -> [Creature]
|
||||
--packCrits ai is = [(defaultCreature i)
|
||||
@@ -220,27 +200,7 @@ frontArmouredPict = const $ pictures [ color (greyN 0.8) $ circleSolid 20
|
||||
-- , line [(-3,3),(3,-3)]
|
||||
-- , line [(0,-3),(0,3)]
|
||||
-- ]
|
||||
|
||||
flamerPict = const $ pictures [color (light $ light $ light $ dim blue) $ circleSolid 10, circLine 10]
|
||||
|
||||
|
||||
|
||||
goalPict cr = let r = _crRad cr in case _crState cr of
|
||||
CrSt {_goals = gls ,_crDamage = crDam }
|
||||
-- | crDam > _crHP cr -> color white $ circleSolid r
|
||||
| otherwise -> case head gls of
|
||||
[] -> sizeColEnemy r white
|
||||
(MoveToFor p i:_) -> dGoals $ sizeColEnemy r green
|
||||
(WaitFor x:_) -> dGoals $ sizeColEnemy r yellow
|
||||
(FireAt p:_) -> dGoals $ sizeColEnemy r red
|
||||
(Reload:_) -> dGoals $ sizeColEnemy r orange
|
||||
(PathTo p:_) -> dGoals $ sizeColEnemy r cyan
|
||||
(SubPathTo p i _:_) -> dGoals $ sizeColEnemy r blue
|
||||
(Search i:_) -> dGoals $ sizeColEnemy r black
|
||||
_ -> dGoals $ sizeColEnemy r magenta
|
||||
where dGoals p = pictures [p, rotate (0 - _crDir cr) $ scale 0.1 0.1 $ color white $ text $ show gls]
|
||||
_ -> sizeColEnemy r (light $ dim green)
|
||||
{-
|
||||
{- |
|
||||
The creature you control.
|
||||
ID 0.
|
||||
-}
|
||||
@@ -254,12 +214,12 @@ startCr = defaultCreature
|
||||
, _crUpdate = stateUpdate yourControl
|
||||
, _crRad = 10
|
||||
, _crMass = 10
|
||||
, _crHP = 1000000
|
||||
, _crHP = 1000
|
||||
, _crMaxHP = 1500
|
||||
, _crInv = startInventory
|
||||
, _crCorpse = onLayer CorpseLayer $ color (greyN 0.5) $ pictures [color (greyN 0.8) $ circleSolid 10, circLine 10]
|
||||
}
|
||||
{-
|
||||
{- |
|
||||
Items you start with.
|
||||
-}
|
||||
startInventory = IM.fromList (zip [0..20]
|
||||
@@ -287,31 +247,3 @@ startInventory = IM.fromList (zip [0..20]
|
||||
|
||||
smokeGenGun = effectGun "smoke" $ \_ -> spawnSmokeAtCursor
|
||||
|
||||
sizeEnemy col cr
|
||||
| pdam > 200 = color red $ circleSolid $ _crRad cr
|
||||
| pdam > 100 = color white $ circleSolid $ _crRad cr
|
||||
| mod pdam 2 == 1 = color white $ circleSolid $ _crRad cr
|
||||
| otherwise = pictures [color col $ circleSolid $ _crRad cr
|
||||
, circLine $ _crRad cr ]
|
||||
where
|
||||
pdam = sum $ concatMap (map _dmAmount) $ _crPastDamage $ _crState cr
|
||||
|
||||
sizeColEnemy r col = pictures [color col $ circleSolid r, circLine r]
|
||||
|
||||
basicCrPict :: Color -> Creature -> Picture
|
||||
basicCrPict col cr = pictures [ onLayer CrLayer $ bluntScale naked , drawEquipment cr]
|
||||
where
|
||||
cdir = _crDir cr
|
||||
naked | pdam > 200 = color red $ circleSolid $ _crRad cr
|
||||
| pdam > 100 = color white $ circleSolid $ _crRad cr
|
||||
| otherwise = pictures [color col' $ circleSolid $ _crRad cr, circLine $ _crRad cr]
|
||||
pastDams = _crPastDamage $ _crState cr
|
||||
pdam = sum $ concatMap (map _dmAmount) $ pastDams
|
||||
col' = light . light . light $ light col
|
||||
bluntDam :: Maybe Point2
|
||||
bluntDam = find isBluntDam (concat pastDams) >>= (\dm -> (-.-) <$> dm ^? dmFrom <*> dm ^? dmTo)
|
||||
bluntScale = case fmap argV bluntDam of
|
||||
Just a -> rotate (a + cdir) . scale 0.8 1.2 . rotate (negate $ cdir + a)
|
||||
_ -> id
|
||||
isBluntDam (Blunt {}) = True
|
||||
isBluntDam _ = False
|
||||
|
||||
Reference in New Issue
Block a user