Files
loop/src/Dodge/Machine/Destroy.hs
T

28 lines
761 B
Haskell

module Dodge.Machine.Destroy where
import Dodge.Wall.Delete
import Dodge.Data
import Dodge.WorldEvent.Explosion
import LensHelp
import Data.Maybe
import qualified Data.IntMap.Strict as IM
destroyMachine :: Machine -> World -> World
destroyMachine mc = (machines %~ IM.delete (_mcID mc))
. deleteWallIDs (_mcWallIDs mc)
. makeExplosionAt (_mcPos mc)
. mcKillTerm mc
. mcKillBut mc
mcKillTerm :: Machine -> World -> World
mcKillTerm mc w = fromMaybe w $ do
tmid <- mc ^? mcMounts . ix ObTerminal
tm <- w ^? terminals . ix tmid
return $ w
& _tmDeathEffect tm tm
mcKillBut :: Machine -> World -> World
mcKillBut mc w = fromMaybe w $ do
btid <- mc ^? mcMounts . ix ObButton
return $ w & buttons . at btid .~ Nothing