Introduce destructible switches

This commit is contained in:
2025-12-26 15:10:37 +00:00
parent 29394e86a3
commit 3c07069adc
7 changed files with 142 additions and 111 deletions
+2 -2
View File
@@ -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
+1
View File
@@ -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
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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"
+27 -2
View File
@@ -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 =