Mercurial > skaapsteker
annotate skaapsteker/cutscene.py @ 365:a43f571e8f5b
Dim cutscene background
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 09 Apr 2011 14:39:18 +0200 |
parents | 62b98bea56bf |
children | 8631e38afc24 |
rev | line source |
---|---|
134 | 1 # -*- coding: utf-8 -*- |
2 from __future__ import division | |
3 | |
4 import pygame | |
365
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
5 from pygame.locals import K_ESCAPE, K_q, KEYDOWN, SRCALPHA |
134 | 6 |
365
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
7 from . import constants |
134 | 8 from . import data |
9 from .engine import ChangeScene, Scene | |
247
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
10 from .widgets.text import Text, ButtonSet, TextButton, unindent_text |
134 | 11 |
12 class CutScene(Scene): | |
262 | 13 def __init__(self, game_state, soundsystem, text, background, music=None): |
14 super(CutScene, self).__init__(game_state, soundsystem) | |
134 | 15 self.background = data.load_image('backgrounds/' + background) |
365
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
16 fill = pygame.Surface(self.background.get_size(), flags=SRCALPHA) |
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
17 fill.fill((255, 255, 255, 128)) |
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
18 self.background.convert_alpha(fill) |
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
19 self.background.blit(fill, (0, 0)) |
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
20 self.background.convert_alpha() |
134 | 21 self.start_time = pygame.time.get_ticks() |
22 self.run_time = 60000 # ms | |
247
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
23 |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
183
diff
changeset
|
24 self._background_music = None |
262 | 25 self._background_music = music |
134 | 26 |
365
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
27 text_widget = Text(text, pygame.Rect(20, 20, |
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
28 constants.SCREEN[0] - 40, |
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
29 constants.SCREEN[1] - 40), |
247
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
30 size=24, shadow='gray', wrap=True) |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
31 self.widgets.append(text_widget) |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
32 |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
33 button_set = ButtonSet() |
365
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
34 # TODO: Dynamic position |
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
35 button_set.append(TextButton("Continue", (20, constants.SCREEN[1] - 68), |
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
36 size=24, color='red')) |
247
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
37 button_set.callbacks.append(self.done) |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
38 self.widgets.append(button_set) |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
39 |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
40 def done(self, selected=None, data=None): |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
41 # Avoid circular import... |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
42 from .menuscene import MenuScene |
277
62b98bea56bf
More level and scene change fixes.
Jeremy Thurgood <firxen@gmail.com>
parents:
262
diff
changeset
|
43 ChangeScene.post((MenuScene,)) |
247
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
44 |
134 | 45 def draw(self, surface, engine): |
46 viewport = surface.get_clip() | |
47 | |
48 # Scoll background back and forth: | |
49 max_pos = self.background.get_rect().width - viewport.width | |
50 bottom = self.background.get_rect().height - viewport.height | |
51 pos = ((pygame.time.get_ticks() - self.start_time) | |
52 % (self.run_time * 2)) * max_pos // (self.run_time) | |
53 if pos > max_pos: | |
54 pos = (2 * max_pos) - pos | |
55 surface.blit(self.background, viewport.topleft, | |
56 pygame.Rect((pos, bottom), viewport.size)) | |
57 | |
58 super(CutScene, self).draw(surface, engine) | |
59 | |
60 def dispatch(self, ev): | |
61 if ev.type is KEYDOWN: | |
62 if ev.key in(K_q, K_ESCAPE): | |
247
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
63 self.done() |
134 | 64 super(CutScene, self).dispatch(ev) |
65 | |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
183
diff
changeset
|
66 def enter(self): |
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
183
diff
changeset
|
67 if self._background_music: |
262 | 68 self._soundsystem.play_background_music(self._background_music) |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
183
diff
changeset
|
69 |
134 | 70 |
262 | 71 def opening_cutscene(game_state, soundsystem): |
134 | 72 text = u""" |
73 Many moons ago, an evil nine-tailed kitsune, a fearsome fox god, ruled the | |
74 land. | |
75 | |
76 It had many powers — the ability to shape shift, turn invisible, control | |
77 the elements. Its powers came from its majestic tails and the kitsune | |
78 guarded them ferociously. If any fox attained eight tails, it would battle | |
79 the kitsune for domination of the celestial world. To prevent this, the | |
80 kitsune stole the tails of all the foxes it encountered. | |
81 | |
82 The evil kitsune challenged every fox to a haiku contest. But the | |
83 competition was not fair, and the kitsune cheated every time. When it | |
84 defeated the poor fox, it stole its tail and threw it to the four winds. | |
85 | |
86 The kitsune stole your tail. Now it’s time to get it back. | |
87 """ | |
88 text = unindent_text(text) | |
262 | 89 return CutScene(game_state, soundsystem, text, 'background_01_back.png') |