Introduce destructible switches
This commit is contained in:
@@ -47,7 +47,7 @@ data MachineType
|
||||
| McTurret {_mctTurret :: Turret}
|
||||
| McStorage {_mcsType :: AmmoType, _mcsAmount :: Int}
|
||||
| McDistributer {_mcdStorageMachine :: Maybe Int}
|
||||
| McInterrupter
|
||||
| McTrigger {_mcTriggerID :: Int}
|
||||
-- | McSynthesiser
|
||||
|
||||
instance ShortShow MachineType where
|
||||
@@ -59,7 +59,7 @@ instance ShortShow MachineType where
|
||||
McTurret {} -> "McTur"
|
||||
McStorage {} -> "McStor"
|
||||
McDistributer {} -> "McDist"
|
||||
McInterrupter {} -> "McInterrupter"
|
||||
McTrigger i -> "McTrigger " <> show i
|
||||
|
||||
data Turret = Turret
|
||||
{ _tuWeapon :: Int
|
||||
|
||||
@@ -24,6 +24,7 @@ destroyMcType mt mc w = case mt of
|
||||
McTurret tu -> fromMaybe w $ do
|
||||
itm <- w ^? cWorld . lWorld . items . ix (tu ^. tuWeapon)
|
||||
return $ copyItemToFloor (_mcPos mc) itm w
|
||||
McTrigger i -> w & cWorld . lWorld . triggers . ix i %~ not
|
||||
_ -> w
|
||||
|
||||
mcKillTerm :: Machine -> World -> World
|
||||
|
||||
@@ -23,7 +23,7 @@ drawMachine cw mc = case _mcType mc of
|
||||
McProxSensor {} -> drawBaseMachine 25 mc
|
||||
McStorage {} -> noPic $ colorSH (mcColor mc) storageShape
|
||||
McDistributer {} -> drawBaseMachine 25 mc
|
||||
McInterrupter {} -> drawBaseMachine 25 mc
|
||||
McTrigger {} -> drawBaseMachine 25 mc
|
||||
where
|
||||
lw = cw ^. lWorld
|
||||
gp = cw ^. cwGen . cwgParams . sensorCoding
|
||||
@@ -88,7 +88,7 @@ mcColor mc = case mc ^. mcType of
|
||||
McTurret {} -> blue
|
||||
McStorage {} -> orange
|
||||
McDistributer {} -> green
|
||||
McInterrupter {} -> red
|
||||
McTrigger {} -> red
|
||||
|
||||
|
||||
drawTurret :: LWorld -> Turret -> Machine -> SPic
|
||||
|
||||
@@ -39,7 +39,7 @@ mcTypeUpdate mc = \case
|
||||
McProxSensor se -> mcProxSensorTriggerUpdate se mc . mcProxSensorUpdate se mc
|
||||
McStorage{} -> id
|
||||
McDistributer{} -> id
|
||||
McInterrupter{} -> id
|
||||
McTrigger{} -> id
|
||||
|
||||
terminalScreenGlow :: Machine -> World -> World
|
||||
terminalScreenGlow mc w = fromMaybe w $ do
|
||||
@@ -157,7 +157,7 @@ mcBackgroundSound mc = case mc ^. mcType of
|
||||
McProxSensor{} -> Just (throbC4S,0.5)
|
||||
McStorage{} -> Nothing
|
||||
McDistributer{} -> Just (whirS,0.5)
|
||||
McInterrupter{} -> Just (throbC4S,0.5)
|
||||
McTrigger{} -> Just (throbC4S,0.5)
|
||||
|
||||
mcApplyDamage :: [Damage] -> Machine -> World -> World
|
||||
mcApplyDamage ds mc = case mc ^? mcType . _McDamSensor of
|
||||
|
||||
+21
-17
@@ -49,19 +49,19 @@ tutAnoTree = do
|
||||
foldMTRS
|
||||
[ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox
|
||||
, corDoor
|
||||
, return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
, tToBTree "sdr" . return . cleatOnward <$>
|
||||
(shuffleLinks =<< distributerRoom BulletAmmo 100000)
|
||||
, return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
--, tToBTree "sdr" . return . cleatOnward <$> slowDoorRoom
|
||||
-- , tToBTree "sr" . return . cleatOnward <$> tanksRoom [] []
|
||||
, return $ tToBTree "door" $ return $ cleatOnward door
|
||||
, return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
, tToBTree "sdr" . return . cleatOnward <$>
|
||||
(shuffleLinks =<< tanksPipesRoom)
|
||||
, return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
, return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
, return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
-- , tToBTree "sdr" . return . cleatOnward <$>
|
||||
-- (shuffleLinks =<< distributerRoom BulletAmmo 100000)
|
||||
-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
-- --, tToBTree "sdr" . return . cleatOnward <$> slowDoorRoom
|
||||
---- , tToBTree "sr" . return . cleatOnward <$> tanksRoom [] []
|
||||
-- , return $ tToBTree "door" $ return $ cleatOnward door
|
||||
-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
-- , tToBTree "sdr" . return . cleatOnward <$>
|
||||
-- (shuffleLinks =<< tanksPipesRoom)
|
||||
-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
, return $ tToBTree "cor" $ return $ cleatOnward corridor
|
||||
, return $ tToBTree "door" $ return $ cleatOnward door
|
||||
, tutHub
|
||||
@@ -256,6 +256,7 @@ tutHub = do
|
||||
(is, wbp) <- setTreeInts =<< critsRoom 1
|
||||
i <- nextLayoutInt
|
||||
j <- nextLayoutInt
|
||||
j1 <- nextLayoutInt
|
||||
k <- nextLayoutInt
|
||||
let a gw =
|
||||
analyserByNthLink
|
||||
@@ -267,9 +268,10 @@ tutHub = do
|
||||
. analyserByDoor (RequireEquipment (AMMOMAG DRUMMAG)) i
|
||||
. (rmInPmnt .:~ (0, a))
|
||||
. addDoorAtNthLinkToggleTerminal 1 ss j
|
||||
-- . addDoorAtNthLinkToggleInterrupt 2 ds j
|
||||
. addDoorAtNthLinkToggleInterrupt 2 ds j1
|
||||
=<< roomNgon 6 100
|
||||
bcor <- treeAttachDeep (return door) <$> blockedCorridor
|
||||
--bcor <- treeAttachDeep (return door) <$> return (return $ cleatOnward door)
|
||||
-- bcor <- treeAttachDeep (return door) <$> blockedCorridor
|
||||
r1 <- r burstRifle <&> rmPmnts .:~ itemshiftterminal
|
||||
r2 <- ammoroom (drumMag & itConsumables ?~ 90) -- <&> rmPmnts .:~ tutorialterminal
|
||||
--r2 <- r (tinMag & itConsumables ?~ 500)
|
||||
@@ -279,11 +281,13 @@ tutHub = do
|
||||
x
|
||||
[ treeFromPost [triggerDoorRoom i] r1
|
||||
, treeFromPost [triggerDoorRoom j] r2
|
||||
, (rmClusterStatus . csLinks . at OnwardCluster .~ Nothing)
|
||||
<$> treeAttachDeep wbp bcor
|
||||
, treeFromTrunk [triggerDoorRoom j1] wbp
|
||||
-- , (rmClusterStatus . csLinks . at OnwardCluster .~ Nothing)
|
||||
-- <$> treeAttachDeep wbp (return corridor)
|
||||
, treeFromPost [] (cleatOnward $ triggerDoorRoom k & rmInPmnt . ix 0 . _1 .~ 1)
|
||||
]
|
||||
where
|
||||
ds = ["DESTROY THIS TO OPEN THE DOOR"]
|
||||
ss =
|
||||
[ makeTermLine "---------------------------------------------"
|
||||
, makeTermLine "YOU CAN INTERACT WITH SOME TERMINALS DIRECTLY"
|
||||
|
||||
@@ -3,8 +3,10 @@ module Dodge.Room.Warning (
|
||||
warningRooms,
|
||||
addDoorToggleTerminal,
|
||||
addDoorAtNthLinkToggleTerminal,
|
||||
addDoorAtNthLinkToggleInterrupt,
|
||||
) where
|
||||
|
||||
import Dodge.Default
|
||||
import Color
|
||||
import Control.Monad
|
||||
import qualified Data.Map.Strict as M
|
||||
@@ -13,7 +15,6 @@ import qualified Data.Set as S
|
||||
import Dodge.Cleat
|
||||
import Dodge.Data.BlBl
|
||||
import Dodge.Data.GenWorld
|
||||
import Dodge.Default.Terminal
|
||||
import Dodge.Placement.Instance
|
||||
import Dodge.PlacementSpot
|
||||
import Dodge.Room.Door
|
||||
@@ -37,10 +38,34 @@ warningRooms str n = do
|
||||
addDoorToggleTerminal :: [TerminalLine] -> Int -> Room -> Room
|
||||
addDoorToggleTerminal = addDoorAtNthLinkToggleTerminal 0
|
||||
|
||||
addDoorAtNthLinkToggleInterrupt :: Int -> [String] -> Int -> Room -> Room
|
||||
addDoorAtNthLinkToggleInterrupt j x i =
|
||||
(rmName .++~ "doorInterrupt-")
|
||||
. (rmPmnts .:~ outplace)
|
||||
where
|
||||
outplace =
|
||||
extTrigLitPos
|
||||
(atNthLnkOutShiftBy j (\(p, a) -> ((p +.+ rotateV a (V2 18.5 (-2.5)), a), S.singleton UsedPosLow)))
|
||||
( Just . set plSpot (rprShift (moveToSideNthOutLink (S.singleton UsedPosLow) j))
|
||||
. putInterrupt
|
||||
)
|
||||
& plExternalID
|
||||
?~ i
|
||||
putInterrupt trpl = putTerminal
|
||||
(defaultMachine & mcType .~ McTrigger (fromJust $ _plMID trpl)
|
||||
& mcHP .~ 100)
|
||||
(simpleTermMessage x)
|
||||
-- lineOutputTerminal xs --(makeColorTermLine red "WARNING" : makeTermPara str)
|
||||
-- & tmToggles
|
||||
-- .~ M.fromList
|
||||
-- [("DOOR", TerminalToggle (fromJust $ _plMID trpl) (BlConst True))
|
||||
-- ,("DOAR", TerminalToggle (fromJust $ _plMID trpl) (BlConst True))
|
||||
-- ,("TEST", TerminalToggle (fromJust $ _plMID trpl) (BlConst True))]
|
||||
|
||||
|
||||
addDoorAtNthLinkToggleTerminal :: Int -> [TerminalLine] -> Int -> Room -> Room
|
||||
addDoorAtNthLinkToggleTerminal j xs i =
|
||||
(rmName .++~ "doorToggle-")
|
||||
-- . (rmOutPmnt . at i ?~ outplace)
|
||||
. (rmPmnts .:~ outplace)
|
||||
where
|
||||
outplace =
|
||||
|
||||
Reference in New Issue
Block a user