28 lines
761 B
Haskell
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
|