annotate mamba/habitats/editor.py @ 113:c5d6d0ba3b2b

Fill in more toolbar stuff
author Neil Muller <drnlmuller@gmail.com>
date Sun, 11 Sep 2011 20:26:51 +0200
parents 45397addd80d
children 6b1cdbdd34ca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
1 """Habitat for editing levels."""
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
2
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
3 import pygame.display
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
4 from pygame.locals import SWSURFACE, KEYDOWN
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
5
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
6 from mamba.engine import Habitat, NewHabitatEvent
42
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
7 from mamba.widgets.level import LevelWidget
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
8 from mamba.widgets.text import TextWidget
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
9 from mamba.widgets.imagebutton import ImageButtonWidget
113
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
10 from mamba.level import Level, TILE_MAP
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
11 from mamba.constants import SCREEN, EDIT_SCREEN, NAME, ESCAPE_KEYS
42
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
12
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
13
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
14 class EditorHabitat(Habitat):
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
15 def __init__(self, level_name):
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
16 super(EditorHabitat, self).__init__(EDIT_SCREEN)
42
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
17 self.level = Level(level_name)
8521c142cd43 Add habitat for editor and reshuffle when options are checked to before initializing the display window.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
18 self.container.add(LevelWidget(self.level))
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
19 self.container.add_callback(KEYDOWN, self.keydown_event)
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
20
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
21 def on_enter(self):
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
22 # We need to juggle the display to the correct size
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
23 # This is a horrible hack
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
24 pygame.display.quit()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
25 pygame.display.init()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
26 pygame.display.set_mode(EDIT_SCREEN, SWSURFACE)
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
27 pygame.display.set_caption('%s Level editor' % NAME)
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
28 super(EditorHabitat, self).on_enter()
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
29 self.setup_toolbar()
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
30
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
31 def on_exit(self):
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
32 # We need to juggle the display to the correct size
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
33 # This is a horrible hack
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
34 super(EditorHabitat, self).on_exit()
52
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
35 pygame.display.quit()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
36 pygame.display.init()
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
37 pygame.display.set_mode(SCREEN, SWSURFACE)
d09f63429b80 Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents: 42
diff changeset
38 pygame.display.set_caption(NAME)
64
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
39
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
40 def keydown_event(self, ev, widget):
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
41 if ev.key in ESCAPE_KEYS:
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
42 from mamba.habitats.mainmenu import MainMenu
fbb5cc655b47 More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents: 52
diff changeset
43 NewHabitatEvent.post(MainMenu())
94
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
44
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
45 def setup_toolbar(self):
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
46 """Draw the editor toolbar"""
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
47 button_height = 20
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
48 button_left = 820
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
49 button_padding = 10
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
50 levelname = TextWidget(
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
51 (button_left, button_height),
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
52 'Level: %s' % 'Placeholder', color='white')
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
53 self.container.add(levelname)
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
54 button_height += levelname.surface.get_height() + button_padding
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
55
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
56 tilesetname = TextWidget(
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
57 (button_left, button_height),
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
58 'Tileset: %s' % self.level.tileset.name, color='white')
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
59 self.container.add(tilesetname)
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
60 button_height += tilesetname.surface.get_height() + button_padding
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
61 floor_button = ImageButtonWidget(
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
62 (button_left, button_height), self.level.tileset.floor,
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
63 'Floor', color='white')
aba653f8383e Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 64
diff changeset
64 self.container.add(floor_button)
113
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
65 button_height += floor_button.surface.get_height() + button_padding
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
66 for tile_char in TILE_MAP:
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
67 try:
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
68 tile = self.level.tileset[tile_char]
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
69 except pygame.error:
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
70 # Ignore stuff we can't load for now
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
71 continue
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
72 if tile is None:
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
73 continue
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
74 tile_button = ImageButtonWidget(
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
75 (button_left, button_height), tile.image,
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
76 'Tile', color='white')
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
77 self.container.add(tile_button)
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
78 button_height += \
c5d6d0ba3b2b Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents: 103
diff changeset
79 tile_button.surface.get_height() + button_padding