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 "" ]