Successfully push proximity sensor parameters into data

This commit is contained in:
2022-06-07 10:34:59 +01:00
parent 14acd2ee6a
commit 5117fb2a1a
5 changed files with 42 additions and 39 deletions
+22 -25
View File
@@ -1,13 +1,11 @@
module Dodge.Placement.Instance.Analyser
( analyser
, testYouHave
, testYourHealth
) where
--import Dodge.LevelGen.Data
--import Dodge.PlacementSpot
import Dodge.Data
import Dodge.Base.You
--import Dodge.Default
import Dodge.Default
import Dodge.Terminal
--import Dodge.Tree
--import Dodge.RoomLink
@@ -41,31 +39,28 @@ import Data.Maybe
--import System.Random
analyser
:: (Machine -> World -> World)
:: ProximityRequirement
-> PlacementSpot
-> PlacementSpot
-> Placement
analyser upf pslight psmc = extTrigLitPos pslight $ \tp ->
Just $ plSpot .~ psmc $ putTerminal' aquamarine tparams (termupdate tp)
analyser proxreq pslight psmc = extTrigLitPos pslight $ \tp ->
Just $ plSpot .~ psmc $ putTerminal'' themachine tparams (linksensortotrigger tp)
where
tparams = basicTerminal & tmScrollCommands .:~ sensorCommand
termupdate tp _ mc = upf mc . (triggers . ix (fromJust $ _plMID tp) .~ const (_sensToggle $ _mcSensor mc))
linksensortotrigger tp _ mc
= (triggers . ix (fromJust $ _plMID tp) .~ const (_sensToggle $ _mcSensor mc))
themachine = defaultMachine & mcColor .~ aquamarine
& mcUpdate .~ mcProximitySensorUpdate
& mcDraw .~ terminalSPic
& mcHP .~ 100
& mcSensor .~ defaultProximitySensor {_proxRequirement = proxreq}
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
mcProximitySensorUpdate :: Machine -> World -> World
mcProximitySensorUpdate mc w = case
(_proxStatus sens
, _sensToggle sens
, t w
, dist (_crPos ycr) (_mcPos mc) < 40) of
, mcProxTest mc w
, dist (_crPos ycr) (_mcPos mc) < _proxDist sens) of
(_,True,_,_) -> w
(_,False,True,True) -> w
& machines . ix (_mcID mc) . mcSensor . sensToggle .~ True
@@ -80,8 +75,10 @@ analyserTest t mc w = case
ycr = you w
sens = _mcSensor mc
testYouHave :: CombineType -> Machine -> World -> World
testYouHave ct = analyserTest (any (\itm -> _itType itm == ct) . _crInv . you )
testYourHealth :: Int -> Machine -> World -> World
testYourHealth hp = analyserTest (\w -> _crHP (you w) >= hp)
mcProxTest :: Machine -> World -> Bool
mcProxTest mc w = case mc ^? mcSensor . proxRequirement of
Just (RequireHealth x) -> _crHP cr >= x
Just (RequireEquipment ct) -> any (\itm -> _itType itm == ct) (_crInv cr)
_ -> False
where
cr = you w