annotate mamba/widgets/level.py @ 331:0c25bca380de

Support for loading level from string.
author Simon Cross <hodgestar@gmail.com>
date Fri, 16 Sep 2011 21:04:42 +0200
parents a061dd62127c
children 170d4a43c00e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
f76c3f033772 Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 from pygame.rect import Rect
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
2 from pygame.locals import MOUSEBUTTONDOWN, MOUSEBUTTONUP, MOUSEMOTION
21
f76c3f033772 Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents: 21
diff changeset
4 from mamba.widgets.base import Widget
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
5 from mamba.constants import TILE_SIZE
21
f76c3f033772 Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
6
f76c3f033772 Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
7
120
6b1cdbdd34ca Rename LevelWidget
Neil Muller <drnlmuller@gmail.com>
parents: 119
diff changeset
8 class EditLevelWidget(Widget):
21
f76c3f033772 Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
9 def __init__(self, level, offset=(0, 0)):
50
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
10 self.level = level
21
f76c3f033772 Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
11 level_rect = Rect(offset, level.get_size())
264
2c9cc902928f Right-click to erase in the level editor.
Jeremy Thurgood <firxen@gmail.com>
parents: 173
diff changeset
12 self.main_tool = None
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
13 self.tool = None
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
14 self.drawing = False
120
6b1cdbdd34ca Rename LevelWidget
Neil Muller <drnlmuller@gmail.com>
parents: 119
diff changeset
15 super(EditLevelWidget, self).__init__(level_rect)
21
f76c3f033772 Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
16
24
30d4f3e62bcf Refactor widgets *again*, add container to Habitat
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
17 def draw(self, surface):
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 81
diff changeset
18 self.level.draw(surface)
21
f76c3f033772 Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
19
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
20 def set_tool(self, new_tool):
264
2c9cc902928f Right-click to erase in the level editor.
Jeremy Thurgood <firxen@gmail.com>
parents: 173
diff changeset
21 self.main_tool = new_tool
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
22 self.tool = new_tool
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
23
24
30d4f3e62bcf Refactor widgets *again*, add container to Habitat
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
24 def event(self, event):
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
25 if event.type == MOUSEBUTTONDOWN:
264
2c9cc902928f Right-click to erase in the level editor.
Jeremy Thurgood <firxen@gmail.com>
parents: 173
diff changeset
26 if event.button == 1: # Left button
2c9cc902928f Right-click to erase in the level editor.
Jeremy Thurgood <firxen@gmail.com>
parents: 173
diff changeset
27 self.tool = self.main_tool
2c9cc902928f Right-click to erase in the level editor.
Jeremy Thurgood <firxen@gmail.com>
parents: 173
diff changeset
28 else:
2c9cc902928f Right-click to erase in the level editor.
Jeremy Thurgood <firxen@gmail.com>
parents: 173
diff changeset
29 self.tool = '.'
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
30 self.drawing = True
272
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 264
diff changeset
31 if self.tool:
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 264
diff changeset
32 self.update_tile(event.pos)
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
33 elif event.type == MOUSEBUTTONUP:
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
34 self.drawing = False
272
a061dd62127c Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents: 264
diff changeset
35 elif event.type == MOUSEMOTION and self.drawing and self.tool:
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
36 # FIXME: Need to consider leaving and re-entering the widget
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
37 self.update_tile(event.pos)
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
38
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
39 def update_tile(self, pixel_pos):
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
40 """Update the tile at the current mouse position"""
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
41 # We convert our current position into a tile position
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
42 # and replace the tile with the current tool
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
43 tile_pos = (pixel_pos[0] / TILE_SIZE[0],
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
44 pixel_pos[1] / TILE_SIZE[1])
173
71911af9d42d Refactor drawing code. Correct tile variants when painting
Neil Muller <drnlmuller@gmail.com>
parents: 172
diff changeset
45 old_tile = self.level.get_tile(tile_pos)
172
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
46 if self.tool == '.' and old_tile is None:
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
47 return
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
48 elif old_tile is not None and old_tile.tile_char == self.tool:
dabf13abb3fd Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents: 120
diff changeset
49 return
173
71911af9d42d Refactor drawing code. Correct tile variants when painting
Neil Muller <drnlmuller@gmail.com>
parents: 172
diff changeset
50 self.level.replace_tile(tile_pos, self.tool)