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 { _sensToggle :: Bool
, _sensAmount :: Int , _sensAmount :: Int
} }
| SensorCloseToggle | ProximitySensor
{ _sensCloseToggle :: CloseToggle { _proxStatus :: CloseToggle
, _proxDist :: Float
, _proxRequirement :: ProximityRequirement
, _sensToggle :: Bool , _sensToggle :: Bool
} }
deriving (Eq,Ord) deriving (Eq,Ord)
data ProximityRequirement
= HasHealth {_proxReqMinHealth :: Int}
| HasEquipment {_proxReqEquipment :: CombineType}
| HasBottom
deriving (Eq,Ord,Show)
data CloseToggle = NotClose | IsClose data CloseToggle = NotClose | IsClose
deriving (Eq,Ord) deriving (Eq,Ord)
data MachineType data MachineType
@@ -1603,6 +1610,7 @@ makeLenses ''ItemValue
makeLenses ''Equipment makeLenses ''Equipment
makeLenses ''ScreenLayer makeLenses ''ScreenLayer
makeLenses ''Sensor makeLenses ''Sensor
makeLenses ''ProximityRequirement
makeLenses ''Beam makeLenses ''Beam
makeLenses ''BeamType makeLenses ''BeamType
makeLenses ''WorldBeams makeLenses ''WorldBeams
+7
View File
@@ -333,3 +333,10 @@ defaultTLS = TLS
upHammer :: HammerType upHammer :: HammerType
upHammer = HasHammer HammerUp 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 tparams = basicTerminal & tmScrollCommands .:~ sensorCommand
termupdate tp _ mc = upf mc . (triggers . ix (fromJust $ _plMID tp) .~ const (_sensToggle $ _mcSensor mc)) 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 :: (World -> Bool) -> Machine -> World -> World
analyserTest t mc w = case analyserTest t mc w = case
(_sensCloseToggle sens (_proxStatus sens
, _sensToggle sens , _sensToggle sens
, t w , t w
, dist (_crPos ycr) (_mcPos mc) < 40) of , dist (_crPos ycr) (_mcPos mc) < 40) of
@@ -61,10 +70,10 @@ analyserTest t mc w = case
(_,False,True,True) -> w (_,False,True,True) -> w
& machines . ix (_mcID mc) . mcSensor . sensToggle .~ True & machines . ix (_mcID mc) . mcSensor . sensToggle .~ True
& playsound dedaS & playsound dedaS
& machines . ix (_mcID mc) . mcSensor . sensCloseToggle .~ IsClose & machines . ix (_mcID mc) . mcSensor . proxStatus .~ IsClose
(NotClose,_,False,True) -> w & playsound dedumS (NotClose,_,False,True) -> w & playsound dedumS
& machines . ix (_mcID mc) . mcSensor . sensCloseToggle .~ IsClose & machines . ix (_mcID mc) . mcSensor . proxStatus .~ IsClose
(_,_,_,False) -> w & machines . ix (_mcID mc) . mcSensor . sensCloseToggle .~ NotClose (_,_,_,False) -> w & machines . ix (_mcID mc) . mcSensor . proxStatus .~ NotClose
_ -> w _ -> w
where where
playsound sid = soundContinue (MachineAltSound (_mcID mc)) (_mcPos mc) sid Nothing 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) putTerminal' col = putTerminal'' (defaultMachine & mcColor .~ col)
{ _mcDraw = noPic . terminalShape { _mcDraw = noPic . terminalShape
, _mcHP = 100 , _mcHP = 100
, _mcSensor = SensorCloseToggle NotClose False , _mcSensor = defaultProximitySensor
} }
putTerminal :: Color -> Terminal -> Placement putTerminal :: Color -> Terminal -> Placement