From 14acd2ee6a210795eb683644bb8a0ebef9e877cf Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 7 Jun 2022 09:57:19 +0100 Subject: [PATCH] Move analyser functions to data --- src/Dodge/Data.hs | 12 ++++++++++-- src/Dodge/Default.hs | 7 +++++++ src/Dodge/Placement/Instance/Analyser.hs | 17 +++++++++++++---- src/Dodge/Placement/Instance/Terminal.hs | 2 +- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/Dodge/Data.hs b/src/Dodge/Data.hs index 18617e330..78f84256d 100644 --- a/src/Dodge/Data.hs +++ b/src/Dodge/Data.hs @@ -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 diff --git a/src/Dodge/Default.hs b/src/Dodge/Default.hs index 744bbcdbb..b743ebbd4 100644 --- a/src/Dodge/Default.hs +++ b/src/Dodge/Default.hs @@ -333,3 +333,10 @@ defaultTLS = TLS upHammer :: HammerType upHammer = HasHammer HammerUp +defaultProximitySensor :: Sensor +defaultProximitySensor = ProximitySensor + { _proxStatus = NotClose + , _proxDist = 40 + , _proxRequirement = HasBottom + , _sensToggle = False + } diff --git a/src/Dodge/Placement/Instance/Analyser.hs b/src/Dodge/Placement/Instance/Analyser.hs index 34c24c79b..37bca4146 100644 --- a/src/Dodge/Placement/Instance/Analyser.hs +++ b/src/Dodge/Placement/Instance/Analyser.hs @@ -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 diff --git a/src/Dodge/Placement/Instance/Terminal.hs b/src/Dodge/Placement/Instance/Terminal.hs index 6bb122564..3df041c69 100644 --- a/src/Dodge/Placement/Instance/Terminal.hs +++ b/src/Dodge/Placement/Instance/Terminal.hs @@ -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