annotate skaapsteker/cutscene.py @ 134:4713a2a3b0be

Initial cutscene screen
author Stefano Rivera <stefano@rivera.za.net>
date Tue, 05 Apr 2011 00:06:07 +0200
parents
children 1e9599e48d7b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
2 from __future__ import division
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
3
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
4 import pygame
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
5 from pygame.locals import K_ESCAPE, K_q, KEYDOWN
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
6
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
7 from . import data
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
8 from .engine import ChangeScene, Scene
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
9 from .widgets.text import Text, unindent_text
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
10
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
11 class CutScene(Scene):
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
12 def __init__(self, game_state, text, background):
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
13 super(CutScene, self).__init__(game_state)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
14 self._game_state = game_state
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
15 self.text = text
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
16 self.text_widget = Text(text, pygame.Rect(20, 20, 800-40, 600-40),
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
17 size=24)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
18 self.background = data.load_image('backgrounds/' + background)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
19 self.start_time = pygame.time.get_ticks()
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
20 self.run_time = 60000 # ms
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
21
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
22 def draw(self, surface, engine):
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
23 viewport = surface.get_clip()
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
24
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
25 # Scoll background back and forth:
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
26 max_pos = self.background.get_rect().width - viewport.width
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
27 bottom = self.background.get_rect().height - viewport.height
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
28 pos = ((pygame.time.get_ticks() - self.start_time)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
29 % (self.run_time * 2)) * max_pos // (self.run_time)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
30 if pos > max_pos:
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
31 pos = (2 * max_pos) - pos
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
32 surface.blit(self.background, viewport.topleft,
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
33 pygame.Rect((pos, bottom), viewport.size))
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
34
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
35 self.text_widget.draw(surface)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
36 super(CutScene, self).draw(surface, engine)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
37
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
38 def dispatch(self, ev):
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
39 if ev.type is KEYDOWN:
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
40 if ev.key in(K_q, K_ESCAPE):
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
41 # Avoid circular import...
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
42 from .menuscene import MenuScene
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
43 ChangeScene.post(MenuScene(self._game_state))
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
44 super(CutScene, self).dispatch(ev)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
45
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
46
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
47 def opening_cutscene(game_state):
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
48 text = u"""
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
49 Many moons ago, an evil nine-tailed kitsune, a fearsome fox god, ruled the
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
50 land.
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
51
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
52 It had many powers — the ability to shape shift, turn invisible, control
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
53 the elements. Its powers came from its majestic tails and the kitsune
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
54 guarded them ferociously. If any fox attained eight tails, it would battle
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
55 the kitsune for domination of the celestial world. To prevent this, the
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
56 kitsune stole the tails of all the foxes it encountered.
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
57
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
58 The evil kitsune challenged every fox to a haiku contest. But the
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
59 competition was not fair, and the kitsune cheated every time. When it
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
60 defeated the poor fox, it stole its tail and threw it to the four winds.
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
61
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
62 The kitsune stole your tail. Now it’s time to get it back.
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
63 """
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
64 text = unindent_text(text)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
65 return CutScene(game_state, text, 'background_01_back.png')