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
+3 -3
View File
@@ -993,9 +993,9 @@ data Sensor = NoSensor
} }
deriving (Eq,Ord) deriving (Eq,Ord)
data ProximityRequirement data ProximityRequirement
= HasHealth {_proxReqMinHealth :: Int} = RequireHealth {_proxReqMinHealth :: Int}
| HasEquipment {_proxReqEquipment :: CombineType} | RequireEquipment {_proxReqEquipment :: CombineType}
| HasBottom | RequireImpossible
deriving (Eq,Ord,Show) deriving (Eq,Ord,Show)
data CloseToggle = NotClose | IsClose data CloseToggle = NotClose | IsClose
deriving (Eq,Ord) deriving (Eq,Ord)
+1 -1
View File
@@ -337,6 +337,6 @@ defaultProximitySensor :: Sensor
defaultProximitySensor = ProximitySensor defaultProximitySensor = ProximitySensor
{ _proxStatus = NotClose { _proxStatus = NotClose
, _proxDist = 40 , _proxDist = 40
, _proxRequirement = HasBottom , _proxRequirement = RequireImpossible
, _sensToggle = False , _sensToggle = False
} }
+22 -25
View File
@@ -1,13 +1,11 @@
module Dodge.Placement.Instance.Analyser module Dodge.Placement.Instance.Analyser
( analyser ( analyser
, testYouHave
, testYourHealth
) where ) where
--import Dodge.LevelGen.Data --import Dodge.LevelGen.Data
--import Dodge.PlacementSpot --import Dodge.PlacementSpot
import Dodge.Data import Dodge.Data
import Dodge.Base.You import Dodge.Base.You
--import Dodge.Default import Dodge.Default
import Dodge.Terminal import Dodge.Terminal
--import Dodge.Tree --import Dodge.Tree
--import Dodge.RoomLink --import Dodge.RoomLink
@@ -41,31 +39,28 @@ import Data.Maybe
--import System.Random --import System.Random
analyser analyser
:: (Machine -> World -> World) :: ProximityRequirement
-> PlacementSpot -> PlacementSpot
-> PlacementSpot -> PlacementSpot
-> Placement -> Placement
analyser upf pslight psmc = extTrigLitPos pslight $ \tp -> analyser proxreq pslight psmc = extTrigLitPos pslight $ \tp ->
Just $ plSpot .~ psmc $ putTerminal' aquamarine tparams (termupdate tp) Just $ plSpot .~ psmc $ putTerminal'' themachine tparams (linksensortotrigger tp)
where where
tparams = basicTerminal & tmScrollCommands .:~ sensorCommand 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 mcProximitySensorUpdate :: Machine -> World -> World
mcProxTest mc w = case mc ^? mcSensor . proxRequirement of mcProximitySensorUpdate mc w = case
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
(_proxStatus sens (_proxStatus sens
, _sensToggle sens , _sensToggle sens
, t w , mcProxTest mc w
, dist (_crPos ycr) (_mcPos mc) < 40) of , dist (_crPos ycr) (_mcPos mc) < _proxDist sens) of
(_,True,_,_) -> w (_,True,_,_) -> w
(_,False,True,True) -> w (_,False,True,True) -> w
& machines . ix (_mcID mc) . mcSensor . sensToggle .~ True & machines . ix (_mcID mc) . mcSensor . sensToggle .~ True
@@ -80,8 +75,10 @@ analyserTest t mc w = case
ycr = you w ycr = you w
sens = _mcSensor mc sens = _mcSensor mc
testYouHave :: CombineType -> Machine -> World -> World mcProxTest :: Machine -> World -> Bool
testYouHave ct = analyserTest (any (\itm -> _itType itm == ct) . _crInv . you ) mcProxTest mc w = case mc ^? mcSensor . proxRequirement of
Just (RequireHealth x) -> _crHP cr >= x
testYourHealth :: Int -> Machine -> World -> World Just (RequireEquipment ct) -> any (\itm -> _itType itm == ct) (_crInv cr)
testYourHealth hp = analyserTest (\w -> _crHP (you w) >= hp) _ -> False
where
cr = you w
+11 -2
View File
@@ -2,9 +2,11 @@
module Dodge.Placement.Instance.Terminal module Dodge.Placement.Instance.Terminal
( putTerminal ( putTerminal
, putTerminal' , putTerminal'
, putTerminal''
, simpleTermMessage , simpleTermMessage
, topFlushStrings , topFlushStrings
, terminalColor , terminalColor
, terminalSPic
) where ) where
import Dodge.Data import Dodge.Data
import Dodge.LevelGen.Data import Dodge.LevelGen.Data
@@ -18,6 +20,7 @@ import Geometry
import ShapePicture import ShapePicture
import LensHelp import LensHelp
import Shape import Shape
import ShapePicture
--import Sound.Data --import Sound.Data
import Data.Maybe import Data.Maybe
@@ -30,7 +33,7 @@ putTerminal''
putTerminal'' mc tm mcf = ps0PushPS (PutTerminal tm) putTerminal'' mc tm mcf = ps0PushPS (PutTerminal tm)
$ \tmpl -> Just $ ps0PushPS (PutButton termButton) $ \tmpl -> Just $ ps0PushPS (PutButton termButton)
$ \btpl -> Just $ pt0 (PutMachine (reverse $ square 10) $ \btpl -> Just $ pt0 (PutMachine (reverse $ square 10)
(mc & mcUpdate .~ machineAddSound fridgeHumS (mcf (fromJust $ _plMID btpl)) (mc & mcUpdate %~ (\fmu mc' -> (mcf (fromJust $ _plMID btpl) mc' . fmu mc'))
& mcDeath %~ (\fd mc' -> mcKillTerm mc' . (buttons . at (fromJust (_plMID btpl)) .~ Nothing) . fd mc') & mcDeath %~ (\fd mc' -> mcKillTerm mc' . (buttons . at (fromJust (_plMID btpl)) .~ Nothing) . fd mc')
) ) ) )
$ \mcpl -> Just $ sps0 $ PutWorldUpdate $ const (setids tmpl btpl mcpl) $ \mcpl -> Just $ sps0 $ PutWorldUpdate $ const (setids tmpl btpl mcpl)
@@ -45,6 +48,8 @@ putTerminal'' mc tm mcf = ps0PushPS (PutTerminal tm)
btid = fromJust (_plMID btpl) btid = fromJust (_plMID btpl)
mcid = fromJust (_plMID mcpl) mcid = fromJust (_plMID mcpl)
-- machineAddSound fridgeHumS
mcKillTerm :: Machine -> World -> World mcKillTerm :: Machine -> World -> World
mcKillTerm mc w = fromMaybe w $ do mcKillTerm mc w = fromMaybe w $ do
tmid <- _mcTermMID mc tmid <- _mcTermMID mc
@@ -67,7 +72,7 @@ putTerminal :: Color -> Terminal -> Placement
putTerminal col f = putTerminal'' (mc & mcColor .~ col) f (\_ -> basicMachineUpdate $ const id) putTerminal col f = putTerminal'' (mc & mcColor .~ col) f (\_ -> basicMachineUpdate $ const id)
where where
mc = defaultMachine mc = defaultMachine
{ _mcDraw = noPic . terminalShape { _mcDraw = terminalSPic
, _mcHP = 100 , _mcHP = 100
, _mcDeath = makeExplosionAt . _mcPos , _mcDeath = makeExplosionAt . _mcPos
} }
@@ -89,6 +94,10 @@ termButton = Button
terminalColor :: Color terminalColor :: Color
terminalColor = dark magenta terminalColor = dark magenta
terminalSPic :: Machine -> SPic
--terminalShape _ = upperPrismPoly 15 $ square 10
terminalSPic = noPic . terminalShape
terminalShape :: Machine -> Shape terminalShape :: Machine -> Shape
--terminalShape _ = upperPrismPoly 15 $ square 10 --terminalShape _ = upperPrismPoly 15 $ square 10
terminalShape mc = colorSH col (prismPoly terminalShape mc = colorSH col (prismPoly
+5 -8
View File
@@ -84,23 +84,20 @@ keyCardRoomRunPast keyid rmid = do
,TreeSubLabelling "keyCardRoomRunPast" Nothing) ,TreeSubLabelling "keyCardRoomRunPast" Nothing)
keyCardAnalyserByDoor :: Int -> Int -> Room -> Room keyCardAnalyserByDoor :: Int -> Int -> Room -> Room
keyCardAnalyserByDoor keyid = analyserByDoor keyCardAnalyserByDoor keyid = analyserByDoor (RequireEquipment (KEYCARD keyid))
(machineAddSound fridgeHumS $ testYouHave (KEYCARD keyid))
healthAnalyserByDoor :: Int -> Room -> Room healthAnalyserByDoor :: Int -> Room -> Room
healthAnalyserByDoor = analyserByDoor healthAnalyserByDoor = analyserByDoor (RequireHealth 1100)
(machineAddSound fridgeHumS $ testYourHealth 1100)
analyserByDoor :: (Machine -> World -> World) -> Int -> Room -> Room analyserByDoor :: ProximityRequirement -> Int -> Room -> Room
analyserByDoor mcf outplid rm = rm analyserByDoor proxreq outplid rm = rm
& rmPmnts .++~ & rmPmnts .++~
[ psPt atFstLnkOut $ PutShape $ colorSH yellow [ psPt atFstLnkOut $ PutShape $ colorSH yellow
$ barPP 1.5 (V3 20 (-1) 0) (V3 20 (-1) 80) $ barPP 1.5 (V3 20 (-1) 0) (V3 20 (-1) 80)
] ]
& rmOutPmnt .~ & rmOutPmnt .~
[OutPlacement [OutPlacement
(analyser (analyser proxreq
mcf
(atFstLnkOutShiftBy (\(p,a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a))) (atFstLnkOutShiftBy (\(p,a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a)))
(atFstLnkOutShiftBy sensorshift) (atFstLnkOutShiftBy sensorshift)
) )