Files
loop/src/Dodge/Room/Tutorial.hs
T

162 lines
5.4 KiB
Haskell

module Dodge.Room.Tutorial where
import Dodge.Annotation.Data
import Dodge.Cleat
--import Control.Monad
--import qualified Data.Set as S
--import Dodge.Cleat
import Dodge.Data.GenWorld
import Dodge.Default.Terminal
import Dodge.Item.Ammo
import Dodge.Item.Held.Cane
--import Dodge.Item.Random
import Dodge.LevelGen.PlacementHelper
--import Dodge.LightSource
import Dodge.Placement.Instance
import Dodge.PlacementSpot
import Dodge.Room.Airlock
import Dodge.Room.Corridor
import Dodge.Room.Door
import Dodge.Room.LasTurret
import Dodge.Room.Link
import Dodge.Room.Ngon
--import Dodge.Room.Corridor
--import Dodge.Room.Door
--import Dodge.Room.Link
import Dodge.Room.Procedural
import Dodge.Room.RezBox
import Dodge.Room.RoadBlock
import Dodge.Room.Room
import Dodge.Room.Warning
--import Dodge.Room.RoadBlock
import Dodge.RoomLink
import Dodge.Terminal
import Dodge.Tree.Compose
--import Dodge.Tree
import Geometry
import LensHelp
--import Padding
import RandomHelp
import TreeHelp
--import Data.List (intersperse)
tutAnoTree :: Annotation
tutAnoTree =
OnwardList
-- [ AnTree $ return $ tToBTree "teststart" $ return $ cleatOnward corridor
-- , AnTree $ tutDrop
[ AnTree $ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox
, AnTree corDoor
, AnTree $ tutRooms
, AnTree $ tutDrop
, AnTree $ return $ tToBTree "cor" $ return $ cleatOnward corridor
---- , AnTree $ pickupTut
---- , AnTree $ weaponTut
]
tutDrop :: State LayoutVars (MetaTree Room String)
tutDrop = do
x <- shuffleLinks =<< roomNgon 6 100
i <- nextLayoutInt
let y = decontamRoom i
rm <- roomRectAutoLinks 40 100
return $
tToBTree "TutDrop" $
treePost
[x & rmPmnts .:~ t, y, cleatOnward rm]
where
t =
putMessageTerminal
terminalColor
(defaultTerminal & tmBootLines .~ ss <> tlSetStatus (TerminalPressTo "QUIT") <> tlDoEffect TmWdWdPowerDownTerminal)
& plSpot .~ rprBoolShift isUnusedLnk
(\(p, a) -> (p + 10 *.* unitVectorAtAngle (a - pi/2), a))
ss =
[ makeTermLine "USE [F] OR CLICK AND DRAG TO DROP ITEMS"
]
tutRooms :: State LayoutVars (MetaTree Room String)
tutRooms = do
i <- nextLayoutInt
j <- nextLayoutInt
x <-
shuffleLinks =<< analyserByDoor (RequireEquipment (AMMOMAG DRUMMAG)) i
<$> addDoorAtNthLinkToggleTerminal 1 ss j
<$> roomNgon 6 100
bcor <- blockedCorridor
r1 <- (r burstRifle) <&> rmPmnts .:~ t
r2 <- (r (drumMag & itConsumables ?~ 500))
return $
tToBTree "DoorTest" $
Node
x
[ treeFromPost [triggerDoorRoom i] r1
, treeFromPost [triggerDoorRoom j] r2
, bcor
]
where
ss =
[ makeTermLine "SOME TERMINALS CAN BE INTERACTED WITH DIRECTLY"
, makeTermLine " THESE WILL DISPLAY A PROMPT SYMBOL"
, makeTermLine " _____"
, makeTermLine " | | TYPE OR SCROLL TO ENTER COMMANDS"
, makeTermLine " | > |"
, makeTermLine " | | CLICK OR USE [RETURN] TO CONFIRM"
, makeTermLine " ^^^^^"
, makeTermLine ""
]
r x = roomRectAutoLinks 100 100 <&> rmPmnts .:~ sps (PS 50 0) (PutFlIt x)
t =
putMessageTerminal
terminalColor
(defaultTerminal & tmBootLines .~ ss' <> tlSetStatus (TerminalPressTo "QUIT") <> tlDoEffect TmWdWdPowerDownTerminal)
& plSpot .~ rprBoolShift isUnusedLnk
(\(p, a) -> (p + 10 *.* unitVectorAtAngle (a - pi/2), a))
ss' =
[ makeTermLine "HOLD [CAPS] AND SCROLL\\"
, makeTermLine " OR }~ TO REARRANGE INVENTORY ITEMS"
, makeTermLine " CLICK AND DRAG/"
, makeTermLine ""
, makeTermLine "AMMO MAGS ARE TYPICALLY LOADED BENEATH WEAPONS"
, makeTermLine " .-------."
, makeTermLine " BURSTRIFLE |DRUMMAG|"
, makeTermLine " <--------------'"
, makeTermLine ""
, makeTermLine "HOLD [RMB]\\"
, makeTermLine " AND TAP }~ TO FIRE LOADED WEAPONS"
, makeTermLine " TAP [LMB]/"
]
tutRezBox :: RandomGen g => State g Room
tutRezBox = do
ls <- rezColor
return $
roomRect 40 60 1 1
& rmPmnts
.~ [ sPS (V2 20 1) 0 $ PutLS ls
, Placement (PS 0 0) PutNothing Nothing $ \w _ -> Just $ putImmediateMessageTerminal
terminalColor
( defaultTerminal & tmBootLines .~ s w
<> tlSetStatus (TerminalPressTo "USE [WASD] TO MOVE")
<> tlDoEffect
(TmWdWdLeaveTerminal "USE [WASD] TO MOVE")
)
& plSpot .~ PS (V2 20 0) 0
]
& restrictInLinks (\(V2 _ h, _) -> h < 1)
& restrictOutLinks (\(V2 _ h, _) -> h > 59)
& rmName .~ "tutRezBox"
where
s w = tutorialMessage1 (w ^. cWorld . cwGen . cwgSeed)
tutorialMessage1 :: Int -> [TerminalLine]
tutorialMessage1 i =
[ makeTermLine $ "WELCOME TO ENVIRONMENT " ++ show i
, makeTermLine ""
]
<> tlSetStatus (TerminalPressTo "USE [SPACE] TO INTERACT")
<> [ makeTermLine "USE [SPACE] TO INTERACT"
, makeTermLine ""
]