Successfully push proximity sensor parameters into data
This commit is contained in:
+3
-3
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user