annotate pyntnclick/scenewidgets.py @ 826:3a00c9337731 pyntnclick

Add centre parameter to InteractText
author Neil Muller <neil@dip.sun.ac.za>
date Tue, 29 Jan 2013 13:33:00 +0200
parents 9f542ef6e498
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 """Interactive elements within a Scene."""
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
2
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
4 from pygame import Rect
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5 from pygame.color import Color
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
6 from pygame.colordict import THECOLORS
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
7 from pygame.surface import Surface
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
8
551
38fb04728ac5 Rearrange import.
Jeremy Thurgood <firxen@gmail.com>
parents: 548
diff changeset
9 from pyntnclick.state import Thing
824
9f542ef6e498 Reorganise code
Neil Muller <neil@dip.sun.ac.za>
parents: 820
diff changeset
10 from pyntnclick.utils import convert_color, render_text
649
e59b119bb0f9 Evict the last BoomLabel.
Jeremy Thurgood <firxen@gmail.com>
parents: 625
diff changeset
11 from pyntnclick.widgets.text import LabelWidget
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
12
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
13
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
14 class Interact(object):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
15
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
16 def __init__(self, image, rect, interact_rect):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
17 self.image = image
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
18 self.rect = rect
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
19 self.interact_rect = interact_rect
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
20
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
21 def set_thing(self, thing):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
22 pass
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
23
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
24 def draw(self, surface):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
25 if self.image is not None:
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
26 surface.blit(self.image, self.rect, None)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
27
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
28 def animate(self):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
29 return False
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
30
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
31
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
32 class InteractNoImage(Interact):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
33
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
34 def __init__(self, x, y, w, h):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
35 super(InteractNoImage, self).__init__(None, None, Rect(x, y, w, h))
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
36
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
37
819
80ff3c9187bc Rename InteractText to InteractDebugText to better reflect it's aim
Neil Muller <neil@dip.sun.ac.za>
parents: 818
diff changeset
38 class InteractDebugText(Interact):
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
39 """Display box with text to interact with -- mostly for debugging."""
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
40
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
41 def __init__(self, x, y, text, bg_color=None):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
42 if bg_color is None:
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
43 bg_color = (127, 127, 127)
649
e59b119bb0f9 Evict the last BoomLabel.
Jeremy Thurgood <firxen@gmail.com>
parents: 625
diff changeset
44 label = LabelWidget((0, 0), text)
e59b119bb0f9 Evict the last BoomLabel.
Jeremy Thurgood <firxen@gmail.com>
parents: 625
diff changeset
45 # label.set_margin(5)
e59b119bb0f9 Evict the last BoomLabel.
Jeremy Thurgood <firxen@gmail.com>
parents: 625
diff changeset
46 # label.border_width = 1
e59b119bb0f9 Evict the last BoomLabel.
Jeremy Thurgood <firxen@gmail.com>
parents: 625
diff changeset
47 # label.border_color = (0, 0, 0)
e59b119bb0f9 Evict the last BoomLabel.
Jeremy Thurgood <firxen@gmail.com>
parents: 625
diff changeset
48 # label.bg_color = bg_color
e59b119bb0f9 Evict the last BoomLabel.
Jeremy Thurgood <firxen@gmail.com>
parents: 625
diff changeset
49 # label.fg_color = (0, 0, 0)
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
50 image = Surface(label.size)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
51 rect = Rect((x, y), label.size)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
52 label.draw_all(image)
819
80ff3c9187bc Rename InteractText to InteractDebugText to better reflect it's aim
Neil Muller <neil@dip.sun.ac.za>
parents: 818
diff changeset
53 super(InteractDebugText, self).__init__(image, rect, rect)
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
54
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
55
820
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
56 class InteractText(Interact):
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
57 """Display a text string on a transparent background.
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
58
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
59 Used so we can easily include translatable strings in the scenes"""
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
60
826
3a00c9337731 Add centre parameter to InteractText
Neil Muller <neil@dip.sun.ac.za>
parents: 824
diff changeset
61 def __init__(self, x, y, w, h, text, color, max_font_size, font=None,
3a00c9337731 Add centre parameter to InteractText
Neil Muller <neil@dip.sun.ac.za>
parents: 824
diff changeset
62 centre=True):
820
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
63 self._text = text
824
9f542ef6e498 Reorganise code
Neil Muller <neil@dip.sun.ac.za>
parents: 820
diff changeset
64 self._color = convert_color(color)
820
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
65 self._max_font_size = max_font_size
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
66 self._font = font
826
3a00c9337731 Add centre parameter to InteractText
Neil Muller <neil@dip.sun.ac.za>
parents: 824
diff changeset
67 self._centre = centre
820
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
68 rect = Rect((x, y), (w, h))
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
69 super(InteractText, self).__init__(None, rect, rect)
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
70
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
71 def set_thing(self, thing):
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
72 font_size = self._max_font_size
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
73 if not self._font:
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
74 # Pull the default font out of constants
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
75 self._font = thing.gd.constants.font
824
9f542ef6e498 Reorganise code
Neil Muller <neil@dip.sun.ac.za>
parents: 820
diff changeset
76 bg_color = Color(0, 0, 0, 0) # transparent background
9f542ef6e498 Reorganise code
Neil Muller <neil@dip.sun.ac.za>
parents: 820
diff changeset
77 self.image = render_text(self._text, self._font, font_size,
826
3a00c9337731 Add centre parameter to InteractText
Neil Muller <neil@dip.sun.ac.za>
parents: 824
diff changeset
78 self._color, bg_color, thing.resource, self.rect.size,
3a00c9337731 Add centre parameter to InteractText
Neil Muller <neil@dip.sun.ac.za>
parents: 824
diff changeset
79 self._centre)
820
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
80
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
81
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
82 class InteractRectUnion(Interact):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
83
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
84 def __init__(self, rect_list):
818
8b4a0aad8aeb Remove unneeded rect union code
Neil Muller <neil@dip.sun.ac.za>
parents: 764
diff changeset
85 super(InteractRectUnion, self).__init__(None, None, None)
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
86 rect_list = [Rect(x) for x in rect_list]
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
87 self.interact_rect = rect_list
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
88
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
89
820
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
90 class InteractUnion(Interact):
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
91 """An interact made out of other interacts"""
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
92
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
93 def __init__(self, interact_list):
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
94 super(InteractUnion, self).__init__(None, None, None)
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
95 self._interact_list = interact_list
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
96
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
97 def set_thing(self, thing):
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
98 interact_list = []
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
99 for sub_interact in self._interact_list:
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
100 sub_interact.set_thing(thing)
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
101 sub_rect = sub_interact.interact_rect
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
102 if hasattr(sub_rect, 'collidepoint'):
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
103 interact_list.append(sub_interact.interact_rect)
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
104 else:
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
105 interact_list.extend(sub_interact.interact_rect)
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
106 self.interact_rect = interact_list
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
107
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
108 def draw(self, surface):
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
109 for sub_interact in self._interact_list:
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
110 sub_interact.draw(surface)
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
111
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
112 def animate(self):
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
113 for sub_interact in self._interact_list:
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
114 sub_interact.animate()
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
115
e42d19c2237b Add InteractText and InteractUnion
Neil Muller <neil@dip.sun.ac.za>
parents: 819
diff changeset
116
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
117 class InteractImage(Interact):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
118
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
119 def __init__(self, x, y, image_name):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
120 super(InteractImage, self).__init__(None, None, None)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
121 self._pos = (x, y)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
122 self._image_name = image_name
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
123
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
124 def set_thing(self, thing):
763
afe7b1cb16c0 Interacts should get their images through the game's resource module
Stefano Rivera <stefano@rivera.za.net>
parents: 760
diff changeset
125 self.image = thing.resource.get_image(thing.folder, self._image_name)
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
126 self.rect = Rect(self._pos, self.image.get_size())
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
127 self.interact_rect = self.rect
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
128
763
afe7b1cb16c0 Interacts should get their images through the game's resource module
Stefano Rivera <stefano@rivera.za.net>
parents: 760
diff changeset
129 def __repr__(self):
afe7b1cb16c0 Interacts should get their images through the game's resource module
Stefano Rivera <stefano@rivera.za.net>
parents: 760
diff changeset
130 return '<InteractImage: %s>' % self._image_name
afe7b1cb16c0 Interacts should get their images through the game's resource module
Stefano Rivera <stefano@rivera.za.net>
parents: 760
diff changeset
131
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
132
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
133 class InteractImageRect(InteractImage):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
134 def __init__(self, x, y, image_name, r_x, r_y, r_w, r_h):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
135 super(InteractImageRect, self).__init__(x, y, image_name)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
136 self._r_pos = (r_x, r_y)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
137 self._r_size = (r_w, r_h)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
138
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
139 def set_thing(self, thing):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
140 super(InteractImageRect, self).set_thing(thing)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
141 self.interact_rect = Rect(self._r_pos, self._r_size)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
142
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
143
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
144 class InteractAnimated(Interact):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
145 """Interactive with an animation rather than an image"""
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
146
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
147 # anim_seq - sequence of image names
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
148 # delay - number of frames to wait between changing images
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
149
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
150 def __init__(self, x, y, anim_seq, delay):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
151 self._pos = (x, y)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
152 self._anim_pos = 0
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
153 self._names = anim_seq
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
154 self._frame_count = 0
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
155 self._anim_seq = None
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
156 self._delay = delay
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
157
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
158 def set_thing(self, thing):
763
afe7b1cb16c0 Interacts should get their images through the game's resource module
Stefano Rivera <stefano@rivera.za.net>
parents: 760
diff changeset
159 self._anim_seq = [thing.resource.get_image(thing.folder, x)
afe7b1cb16c0 Interacts should get their images through the game's resource module
Stefano Rivera <stefano@rivera.za.net>
parents: 760
diff changeset
160 for x in self._names]
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
161 self.image = self._anim_seq[0]
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
162 self.rect = Rect(self._pos, self.image.get_size())
760
f288e5ec0a75 Convert FIXME about animation image size equivalence into an assertion
Stefano Rivera <stefano@rivera.za.net>
parents: 739
diff changeset
163 for image in self._anim_seq:
f288e5ec0a75 Convert FIXME about animation image size equivalence into an assertion
Stefano Rivera <stefano@rivera.za.net>
parents: 739
diff changeset
164 assert image.get_size() == self.rect.size
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
165 self.interact_rect = self.rect
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
166
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
167 def animate(self):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
168 if self._anim_seq:
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
169 self._frame_count += 1
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
170 if self._frame_count > self._delay:
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
171 self._frame_count = 0
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
172 self._anim_pos += 1
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
173 if self._anim_pos >= len(self._anim_seq):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
174 self._anim_pos = 0
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
175 self.image = self._anim_seq[self._anim_pos]
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
176 # queue redraw
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
177 return True
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
178 return False
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
179
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
180
764
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
181 class TakeableThing(Thing):
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
182 "Thing that can be taken."
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
183
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
184 INITIAL_DATA = {
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
185 'taken': False,
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
186 }
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
187
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
188 ITEM = None
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
189
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
190 def __init__(self):
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
191 # In case a subclass replaces INITIAL_DATA and breaks 'taken'.
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
192 assert self.INITIAL_DATA['taken'] in (True, False)
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
193 super(TakeableThing, self).__init__()
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
194
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
195 def should_add(self):
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
196 return not self.get_data('taken')
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
197
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
198 def take(self):
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
199 self.set_data('taken', True)
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
200 self.game.add_inventory_item(self.ITEM)
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
201 self.scene.remove_thing(self)
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
202
a8510f4e2ea1 Conditionally add things based on state.
Jeremy Thurgood <firxen@gmail.com>
parents: 763
diff changeset
203
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
204 class GenericDescThing(Thing):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
205 "Thing with an InteractiveUnionRect and a description"
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
206
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
207 INITIAL = "description"
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
208
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
209 def __init__(self, prefix, number, description, areas):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
210 super(GenericDescThing, self).__init__()
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
211 self.description = description
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
212 self.name = '%s.%s' % (prefix, number)
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
213 self.interacts = {
533
42742a62f9c3 More pep8 cleanups
Neil Muller <neil@dip.sun.ac.za>
parents: 525
diff changeset
214 'description': InteractRectUnion(areas)
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
215 }
578
356795038b87 Remove a couple of uses os DEBUG.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 576
diff changeset
216 # Individual colors to make debugging easier
356795038b87 Remove a couple of uses os DEBUG.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 576
diff changeset
217 self._interact_hilight_color = Color(THECOLORS.keys()[number])
525
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
218
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
219 def get_description(self):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
220 return self.description
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
221
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
222 def is_interactive(self, tool=None):
821b322e903b Separate "scene widgets" from "game-specific widgets".
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
223 return False