This commit is contained in:
2025-12-26 15:43:21 +00:00
parent 3c07069adc
commit 3f7eeb871c
5 changed files with 44 additions and 61 deletions
-1
View File
@@ -19,7 +19,6 @@ data SensorType
data DamageSensor = DamSensor
{ _sensAmount :: Int
, _sensType :: SensorType
, _sensThreshold :: Int
}
data ProximitySensor = ProxSensor
+9 -4
View File
@@ -120,7 +120,7 @@ mcUseItem mc w = fromMaybe w $ do
mcDamSensorTriggerUpdate :: DamageSensor -> Machine -> World -> World
mcDamSensorTriggerUpdate se mc = fromMaybe id $ do
trid <- mc ^? mcMounts . ix OTTrigger
bval <- mcTriggerVal se
let bval = se ^. sensAmount > damageTypeThreshold (se ^. sensType)
return $ cWorld . lWorld . triggers . ix trid ||~ bval
mcProxSensorTriggerUpdate :: ProximitySensor -> Machine -> World -> World
@@ -129,8 +129,13 @@ mcProxSensorTriggerUpdate se mc = fromMaybe id $ do
bval <- se ^? proxToggle . _Just
return $ cWorld . lWorld . triggers . at trid ?~ bval
mcTriggerVal :: DamageSensor -> Maybe Bool
mcTriggerVal se = Just $ _sensAmount se > _sensThreshold se
damageTypeThreshold :: SensorType -> Int
damageTypeThreshold = \case
LaserSensor -> 1000
ElectricSensor -> 500
ThermalSensor -> 1000
PhysicalSensor -> 1000
mcPlaySound :: Machine -> World -> World
mcPlaySound mc w = fromMaybe w $ do
@@ -167,7 +172,7 @@ mcApplyDamage ds mc = case mc ^? mcType . _McDamSensor of
mcpointer = cWorld . lWorld . machines . ix (_mcID mc)
mcDamSensorUpdate :: DamageSensor -> Machine -> World -> World
mcDamSensorUpdate se = senseDamage (_sensThreshold se) (_sensType se)
mcDamSensorUpdate se = senseDamage (damageTypeThreshold (se ^. sensType)) (se ^. sensType)
mcProxSensorUpdate :: ProximitySensor -> Machine -> World -> World
mcProxSensorUpdate se mc = case se ^. proxSensorType of
+3 -19
View File
@@ -1,3 +1,4 @@
{-# LANGUAGE LambdaCase #-}
module Dodge.Placement.Instance.Sensor (
lightSensor,
damageSensor,
@@ -17,29 +18,12 @@ damageSensor dt wdth mtrid ps = pContID ps (PutLS $ lsPosCol (V3 0 0 30) 0.1) $
PutMachine
(reverse $ square wdth)
( defaultMachine
-- & mcColor .~ yellow
& mcMounts . at OTTrigger .~ mtrid
& mcMounts . at OTLightSource ?~ lsid
& mcType
.~ McDamSensor
( DamSensor
0
dt
(damageTypeThreshold dt)
)
.~ McDamSensor ( DamSensor 0 dt)
)
Nothing
damageTypeThreshold :: SensorType -> Int
damageTypeThreshold dt = case dt of
LaserSensor -> 1000
ElectricSensor -> 500
ThermalSensor -> 1000
PhysicalSensor -> 1000
lightSensor ::
Float ->
Maybe Int ->
PlacementSpot ->
Placement
lightSensor :: Float -> Maybe Int -> PlacementSpot -> Placement
lightSensor = damageSensor LaserSensor
+5 -10
View File
@@ -51,16 +51,11 @@ putTerminalFull f mc tm =
putTerminal :: Machine -> Terminal -> Placement
putTerminal = putTerminalFull (\_ _ _ -> Nothing)
tmMachine :: Machine
tmMachine = defaultMachine & mcType .~ McTerminal & mcHP .~ 100
putMessageTerminal :: Terminal -> Placement
putMessageTerminal =
putTerminal $
defaultMachine
& mcType .~ McTerminal
& mcHP .~ 100
putMessageTerminal = putTerminal tmMachine
putImmediateMessageTerminal :: Terminal -> Placement
putImmediateMessageTerminal =
putTerminalImediateAccess $
defaultMachine
& mcType .~ McTerminal
& mcHP .~ 100
putImmediateMessageTerminal = putTerminalImediateAccess tmMachine