Cleanup terminal display
This commit is contained in:
@@ -101,7 +101,7 @@ addButtonSlowDoor x h rm = do
|
||||
themessage =
|
||||
["WARNING:"
|
||||
,"LARGE BIOMASS DETECTED"
|
||||
] ++ replicate 5 ""
|
||||
]
|
||||
openDoorBound = rectNSEW (h + 5) (h - 5) (-x/2) (3*x/2)
|
||||
belowH y = (sndV2 . fst) y < h - 40
|
||||
aboveH y = (sndV2 . fst) y > h + 40
|
||||
|
||||
@@ -3,6 +3,7 @@ module Dodge.Room.SensorDoor where
|
||||
import Dodge.LevelGen.Data
|
||||
import Dodge.PlacementSpot
|
||||
import Dodge.Placement.Instance.Terminal
|
||||
import Dodge.Terminal
|
||||
import Dodge.Data
|
||||
import Dodge.Tree
|
||||
--import Dodge.RoomLink
|
||||
@@ -30,7 +31,6 @@ import Dodge.RandomHelp
|
||||
|
||||
import qualified Data.Set as S
|
||||
import Data.Maybe
|
||||
import Data.Char
|
||||
--import Data.Tree
|
||||
import Control.Monad.State
|
||||
import System.Random
|
||||
@@ -83,20 +83,9 @@ sensInsideDoor senseType outplid rm = rm
|
||||
thinHighBar 0 (V2 20 (-1)) (V2 20 (-100))
|
||||
<> thinHighBar 0 (V2 0 (-100)) (V2 20 (-100))
|
||||
<> barPP 1.5 (V3 20 (-1) 0) (V3 20 (-1) 80))
|
||||
, putTerminal (genTermMessage messagef)
|
||||
, putTerminal (const $ defaultTermParams & addInputLine [damageCodeCommand,quitCommand]
|
||||
[helpCommand,commandsCommand]
|
||||
)
|
||||
& plSpot .~ rprBoolShift isUnusedLnk (shiftInBy 10)
|
||||
]
|
||||
& rmOutPmnt .~ [OutPlacement (sensAboveDoor senseType 10 (atFstLnkOutShiftInward 100)) outplid]
|
||||
where
|
||||
mtoup = map toUpper
|
||||
horline = "-----------------"
|
||||
messagef gp =
|
||||
let Just (pc,ds) = gp ^? sensorCoding . ix senseType
|
||||
in [horline
|
||||
,"SENSOR ATTRIBUTES"
|
||||
,horline
|
||||
,mtoup $ show senseType
|
||||
,"COLOR:"++ mtoup (show pc)
|
||||
,"SHAPE:"++ mtoup (reverse . drop 10 . reverse $ show ds)
|
||||
,horline
|
||||
]
|
||||
|
||||
+22
-18
@@ -53,26 +53,30 @@ addWarningTerminal outplid = (rmName .++~ "warningTerm-")
|
||||
where
|
||||
outplace = extTrigLitPos
|
||||
(atFstLnkOutShiftBy (\(p,a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a)))
|
||||
(Just . set plSpot (rprShift fps) . putTerminal . termMessages)
|
||||
--termspot = atFstLnkOutShiftBy (\(p,a) -> (p +.+ rotateV a (V2 18.5 (-2.5)), a))
|
||||
fps rp rm = case rp ^? rpLinkStatus . rplsChildNum of
|
||||
Just 0 ->
|
||||
let rppos = _rpPos rp
|
||||
rpdir = _rpDir rp
|
||||
inpos = rppos +.+ rotateV rpdir (V2 0 (-12.5))
|
||||
rtpos = inpos +.+ rotateV rpdir (V2 30 0)
|
||||
ltpos = inpos +.+ rotateV rpdir (V2 (-30) 0)
|
||||
in if any (isJust . intersectSegPolyFirst inpos ltpos) (_rmPolys rm)
|
||||
-- the above test may not work properly if the room polys are
|
||||
-- complicated, it should really use created walls...
|
||||
then Just (rtpos, rpdir)
|
||||
else Just (ltpos, rpdir)
|
||||
_ -> Nothing
|
||||
termMessages trid = ops trid (genTermMessage $ const ["OPEN DOOR?"])
|
||||
ops trid f gw w = f gw w & termFutureLines ++.~ [ TerminalLineInput 0
|
||||
(Just . set plSpot (rprShift moveToSideFirstOutLink) . putTerminal . termMessages)
|
||||
termMessages trid _ = defaultTermParams & addInputLine
|
||||
[unlockCommand trid,quitCommand]
|
||||
[helpCommand,infoCommand theinfo,commandsCommand]
|
||||
]
|
||||
--termMessages trid = ops trid (genTermMessage $ const ["OPEN DOOR?"])
|
||||
--ops trid f gw w = f gw w & termFutureLines ++.~ [ TerminalLineInput 0
|
||||
-- [unlockCommand trid,quitCommand,damageCodeCommand]
|
||||
-- [helpCommand,infoCommand theinfo,commandsCommand]
|
||||
-- ]
|
||||
unlockCommand trid = singleCommand "OPEN" ["YES","Y"] "OPEN THE CONNECTED DOOR." (toggledoor trid)
|
||||
toggledoor trid w' = w' & triggers . ix (fromJust $ _plMID trid) .~ const True
|
||||
theinfo = "DOOR CONTROLABLE WITH THE \"OPEN\" COMMAND. THIS TERMINAL CANNOT CLOSE THE DOOR."
|
||||
|
||||
moveToSideFirstOutLink :: RoomPos -> Room -> Maybe (Point2,Float)
|
||||
moveToSideFirstOutLink rp rm = case rp ^? rpLinkStatus . rplsChildNum of
|
||||
Just 0 ->
|
||||
let rppos = _rpPos rp
|
||||
rpdir = _rpDir rp
|
||||
inpos = rppos +.+ rotateV rpdir (V2 0 (-12.5))
|
||||
rtpos = inpos +.+ rotateV rpdir (V2 30 0)
|
||||
ltpos = inpos +.+ rotateV rpdir (V2 (-30) 0)
|
||||
in if any (isJust . intersectSegPolyFirst inpos ltpos) (_rmPolys rm)
|
||||
-- the above test may not work properly if the room polys are
|
||||
-- complicated, it should really use created walls...
|
||||
then Just (rtpos, rpdir)
|
||||
else Just (ltpos, rpdir)
|
||||
_ -> Nothing
|
||||
|
||||
Reference in New Issue
Block a user