X-Git-Url: https://git.ctpug.org.za/?p=naja.git;a=blobdiff_plain;f=naja%2Fscenes%2Fintroduction.py;h=ddaab48d284096320093ae20983f94705d509658;hp=a8e001fdf47bf2d17ca298304e82436ce15d898b;hb=1dd7a53e5f3442d78e1db6d8142445f8185c817b;hpb=3e9c783ef3e6a7ad83233270f513dcdbb22009df diff --git a/naja/scenes/introduction.py b/naja/scenes/introduction.py index a8e001f..ddaab48 100644 --- a/naja/scenes/introduction.py +++ b/naja/scenes/introduction.py @@ -5,7 +5,8 @@ Load and save scenes. import pygame.locals as pgl import pygame -from naja.constants import KEYS, SCREEN +from naja import constants +from naja.constants import KEYS, SCREEN, PALETTE from naja.events import SceneChangeEvent, LoadGameEvent from naja.gamestate import GameState from naja.scenes.scene import Scene @@ -26,6 +27,8 @@ class IntroductionScene(Scene): (0, 0), "screens/splash.png") self.add(background) + self.intro = 0 + selector = SelectorWidget() self.add(selector) @@ -48,7 +51,7 @@ class IntroductionScene(Scene): intro = TextWidget( (x_offset, y_offset), 'Introductory Level', colour='white', centre=True) - intro.add_callback('click', self.introduction_level) + intro.add_callback('click', self.introduction_to_screen_1) selector.add(intro) y_offset += 2*y_diff @@ -65,23 +68,93 @@ class IntroductionScene(Scene): LoadGameEvent.post(state=GameState.new(deck='introduction')) SceneChangeEvent.post(GameScene) - def introduction_to_screen_1(self, event): + def make_game_surface(self): self.container.widgets = [] state = resources.get_json('tutorial/tutorial_screen_1.json') dummy_game = DummyGameScene(state) game_surface = pygame.surface.Surface(SCREEN) dummy_game.render(game_surface) self.add(PreRenderedImageBox((0, 0), game_surface)) + return game_surface + + def introduction_to_screen_1(self, event): + game_surface = self.make_game_surface() + self.intro = 1 self.add(TextBoxWidget( - (10, 50), '\n'.join([ - "You are a robot, frantically trying to set the correct " - "bits to gain points for reasons that are unlikely ever " - "to become clear.", + (24, 72), '\n'.join([ + "These are your robot's status bits. On the left we have " + "the Most Signiticant Bit (MSB, currently set), then Red, " + "Green (set) and Blue (set) key bits, and finally the four " + "bits which control movement options, of which only left is " + "set. You can only move in directions which are set. \n" + "Enter to continue.", ]), fontsize=32, - colour='white', padding=1, border=1, - bg_colour='black', border_colour='black', - box_width=740, view_port=(780, 540))) + colour=PALETTE.GREEN, padding=12, border=8, + bg_colour=PALETTE.BLACK, border_colour=PALETTE.GREEN, + box_width=400, view_port=(500, 800))) + + pygame.draw.rect(game_surface, PALETTE.GREEN, (0, 0, 480, 60), 8) + + def introduction_to_screen_2(self, event): + game_surface = self.make_game_surface() + self.intro = 2 + + self.add(TextBoxWidget( + (24, 172), '\n'.join([ + "These are your health and score. On the left we have four " + "health bits. The robot has taken one damage, so only three " + "are lit. The stars are points you have scored. Once you have " + "all of them you win the game! Total health and required " + "points vary according to the game. \n" + "Enter to continue.", + ]), fontsize=32, + colour=PALETTE.GREEN, padding=12, border=8, + bg_colour=PALETTE.BLACK, border_colour=PALETTE.GREEN, + box_width=400, view_port=(500, 800))) + + pygame.draw.rect(game_surface, PALETTE.GREEN, (0, 540, 480, 60), 8) + + def introduction_to_screen_3(self, event): + game_surface = self.make_game_surface() + self.intro = 3 + + self.add(TextBoxWidget( + (24, 132), '\n'.join([ + "This text box describes the current game mode. The game is " + "divided into movements and actions, and each mode has " + "different options, shown here.\n" + "During movement, you can examine the entire board, but you " + "can only move to hi-lighted tiles (including the one you are " + "on. Actions come next... \n" + "Enter to continue.", + ]), fontsize=32, + colour=PALETTE.GREEN, padding=12, border=8, + bg_colour=PALETTE.BLACK, border_colour=PALETTE.GREEN, + box_width=400, view_port=(500, 800))) + + pygame.draw.rect(game_surface, PALETTE.GREEN, (488, 416, 304, 132), 8) + + def introduction_to_screen_4(self, event): + game_surface = self.make_game_surface() + self.intro = 4 + + self.add(TextBoxWidget( + (24, 72), '\n'.join([ + "This text box shows actions available on the tile. " + "Some actions have requirements and are only selectable if " + "you have the correct bits set (unavailable actions are " + "greyed out). Actions usually change the bits set on " + "your robot. This is often not beneficial.\n" + "Some actions have additional effects if the MSB is " + "set.\n" + "Enter to continue.", + ]), fontsize=32, + colour=PALETTE.GREEN, padding=12, border=8, + bg_colour=PALETTE.BLACK, border_colour=PALETTE.GREEN, + box_width=400, view_port=(500, 800))) + + pygame.draw.rect(game_surface, PALETTE.GREEN, (488, 52, 304, 240), 8) def handle_scene_event(self, ev): @@ -89,3 +162,14 @@ class IntroductionScene(Scene): from naja.scenes.menu import MenuScene SceneChangeEvent.post(MenuScene) return + if ev.type == pgl.KEYDOWN and ev.key in KEYS.SELECT: + if 0 < self.intro < 5: + if self.intro == 1: + self.introduction_to_screen_2(ev) + elif self.intro == 2: + self.introduction_to_screen_3(ev) + elif self.intro == 3: + self.introduction_to_screen_4(ev) + else: + self.introduction_level(ev) + return