Move analyser functions to data
This commit is contained in:
+10
-2
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user