162 lines
5.4 KiB
Haskell
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 ""
|
|
]
|