Move analyser functions to data
This commit is contained in:
+10
-2
@@ -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
|
||||
|
||||
@@ -333,3 +333,10 @@ defaultTLS = TLS
|
||||
upHammer :: HammerType
|
||||
upHammer = HasHammer HammerUp
|
||||
|
||||
defaultProximitySensor :: Sensor
|
||||
defaultProximitySensor = ProximitySensor
|
||||
{ _proxStatus = NotClose
|
||||
, _proxDist = 40
|
||||
, _proxRequirement = HasBottom
|
||||
, _sensToggle = False
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user