Move analyser functions to data

This commit is contained in:
2022-06-07 09:57:19 +01:00
parent d42538e3c0
commit 14acd2ee6a
4 changed files with 31 additions and 7 deletions
+10 -2
View File
@@ -985,11 +985,18 @@ data Sensor = NoSensor
{ _sensToggle :: Bool
, _sensAmount :: Int
}
| SensorCloseToggle
{ _sensCloseToggle :: CloseToggle
| ProximitySensor
{ _proxStatus :: CloseToggle
, _proxDist :: Float
, _proxRequirement :: ProximityRequirement
, _sensToggle :: Bool
}
deriving (Eq,Ord)
data ProximityRequirement
= HasHealth {_proxReqMinHealth :: Int}
| HasEquipment {_proxReqEquipment :: CombineType}
| HasBottom
deriving (Eq,Ord,Show)
data CloseToggle = NotClose | IsClose
deriving (Eq,Ord)
data MachineType
@@ -1603,6 +1610,7 @@ makeLenses ''ItemValue
makeLenses ''Equipment
makeLenses ''ScreenLayer
makeLenses ''Sensor
makeLenses ''ProximityRequirement
makeLenses ''Beam
makeLenses ''BeamType
makeLenses ''WorldBeams
+7
View File
@@ -333,3 +333,10 @@ defaultTLS = TLS
upHammer :: HammerType
upHammer = HasHammer HammerUp
defaultProximitySensor :: Sensor
defaultProximitySensor = ProximitySensor
{ _proxStatus = NotClose
, _proxDist = 40
, _proxRequirement = HasBottom
, _sensToggle = False
}
+13 -4
View File
@@ -51,9 +51,18 @@ analyser upf pslight psmc = extTrigLitPos pslight $ \tp ->
tparams = basicTerminal & tmScrollCommands .:~ sensorCommand
termupdate tp _ mc = upf mc . (triggers . ix (fromJust $ _plMID tp) .~ const (_sensToggle $ _mcSensor mc))
mcProxTest :: Machine -> World -> Bool
mcProxTest mc w = case mc ^? mcSensor . proxRequirement of
Just (HasHealth x) | distreq -> _crHP cr >= x
Just (HasEquipment ct) | distreq -> any (\itm -> _itType itm == ct) (_crInv cr)
_ -> False
where
cr = you w
distreq = maybe False (dist (_crPos cr) (_mcPos mc) < ) (mc ^? mcSensor . proxDist)
analyserTest :: (World -> Bool) -> Machine -> World -> World
analyserTest t mc w = case
(_sensCloseToggle sens
(_proxStatus sens
, _sensToggle sens
, t w
, dist (_crPos ycr) (_mcPos mc) < 40) of
@@ -61,10 +70,10 @@ analyserTest t mc w = case
(_,False,True,True) -> w
& machines . ix (_mcID mc) . mcSensor . sensToggle .~ True
& playsound dedaS
& machines . ix (_mcID mc) . mcSensor . sensCloseToggle .~ IsClose
& machines . ix (_mcID mc) . mcSensor . proxStatus .~ IsClose
(NotClose,_,False,True) -> w & playsound dedumS
& machines . ix (_mcID mc) . mcSensor . sensCloseToggle .~ IsClose
(_,_,_,False) -> w & machines . ix (_mcID mc) . mcSensor . sensCloseToggle .~ NotClose
& machines . ix (_mcID mc) . mcSensor . proxStatus .~ IsClose
(_,_,_,False) -> w & machines . ix (_mcID mc) . mcSensor . proxStatus .~ NotClose
_ -> w
where
playsound sid = soundContinue (MachineAltSound (_mcID mc)) (_mcPos mc) sid Nothing
+1 -1
View File
@@ -60,7 +60,7 @@ putTerminal'
putTerminal' col = putTerminal'' (defaultMachine & mcColor .~ col)
{ _mcDraw = noPic . terminalShape
, _mcHP = 100
, _mcSensor = SensorCloseToggle NotClose False
, _mcSensor = defaultProximitySensor
}
putTerminal :: Color -> Terminal -> Placement