Files
loop/src/Dodge/Machine/Destroy.hs
T
2022-07-28 18:57:53 +01:00

38 lines
1.1 KiB
Haskell

module Dodge.Machine.Destroy where
import Dodge.FloorItem
import Data.Maybe
import Dodge.Data.World
import Dodge.Wall.Delete
import Dodge.WorldEffect
import Dodge.WorldEvent.Explosion
import qualified IntMapHelp as IM
import LensHelp
destroyMachine :: Machine -> World -> World
destroyMachine mc =
(cWorld . machines %~ IM.delete (_mcID mc))
. deleteWallIDs (_mcWallIDs mc)
. makeExplosionAt (_mcPos mc)
. mcKillTerm mc
. mcKillBut mc
. destroyMcType (mc ^. mcType) mc
destroyMcType :: MachineType -> Machine -> World -> World
destroyMcType mt mc = case mt of
McTurret tu -> copyItemToFloor (_mcPos mc) (_tuWeapon tu)
_ -> id
mcKillTerm :: Machine -> World -> World
mcKillTerm mc w = fromMaybe w $ do
tmid <- mc ^? mcMounts . ix ObTerminal
tm <- w ^? cWorld . terminals . ix tmid
return $
w
& doTmWdWd (_tmDeathEffect tm) tm
mcKillBut :: Machine -> World -> World
mcKillBut mc w = fromMaybe w $ do
btid <- mc ^? mcMounts . ix ObButton
return $ w & cWorld . buttons . at btid .~ Nothing