Mercurial > mamba
annotate mamba/habitats/editor.py @ 276:9c57025781e7
Warn on enter filename results
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Thu, 15 Sep 2011 17:57:28 +0200 |
parents | 51bec5e6191e |
children | 82aa91664e27 |
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 |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
4 from pygame.locals import SWSURFACE, KEYDOWN, K_1, K_2 |
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 |
120 | 7 from mamba.widgets.level import EditLevelWidget |
174 | 8 from mamba.widgets.text import TextWidget, TextButton |
94
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
9 from mamba.widgets.imagebutton import ImageButtonWidget |
276
9c57025781e7
Warn on enter filename results
Neil Muller <drnlmuller@gmail.com>
parents:
275
diff
changeset
|
10 from mamba.widgets.messagebox import MessageBox |
229 | 11 from mamba.widgets.entrybox import EntryBox |
272
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
12 from mamba.widgets.listbox import ListBox |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
240
diff
changeset
|
13 from mamba.widgets.toollist import ToolListWidget |
275
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
14 from mamba.level import Level, Tileset, TILE_MAP, THING_MAP |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
15 from mamba.data import check_level_exists, list_levels, list_tilesets |
270
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
16 from mamba.constants import (SCREEN, EDIT_SCREEN, NAME, ESCAPE_KEYS, |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
17 RESERVED_NAMES) |
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
|
18 |
270
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
19 MAX_TOOLS = 6 |
240
f0c14d9abd84
Hack in multi-page toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
237
diff
changeset
|
20 |
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
|
21 |
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
|
22 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
|
23 def __init__(self, level_name): |
94
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
24 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
|
25 self.level = Level(level_name) |
172
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
26 self.edit_widget = EditLevelWidget(self.level) |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
27 self.container.add(self.edit_widget) |
64
fbb5cc655b47
More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents:
52
diff
changeset
|
28 self.container.add_callback(KEYDOWN, self.keydown_event) |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
29 self.mode = 'Tile' |
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_enter(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 |
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
34 pygame.display.quit() |
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
35 pygame.display.init() |
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
36 pygame.display.set_mode(EDIT_SCREEN, SWSURFACE) |
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
37 pygame.display.set_caption('%s Level editor' % NAME) |
64
fbb5cc655b47
More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents:
52
diff
changeset
|
38 super(EditorHabitat, self).on_enter() |
94
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
39 self.setup_toolbar() |
52
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
40 |
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
41 def on_exit(self): |
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
42 # 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
|
43 # This is a horrible hack |
64
fbb5cc655b47
More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents:
52
diff
changeset
|
44 super(EditorHabitat, self).on_exit() |
52
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
45 pygame.display.quit() |
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
46 pygame.display.init() |
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
47 pygame.display.set_mode(SCREEN, SWSURFACE) |
d09f63429b80
Add screen size fiddling to editor habitat
Neil Muller <drnlmuller@gmail.com>
parents:
42
diff
changeset
|
48 pygame.display.set_caption(NAME) |
64
fbb5cc655b47
More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents:
52
diff
changeset
|
49 |
fbb5cc655b47
More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents:
52
diff
changeset
|
50 def keydown_event(self, ev, widget): |
fbb5cc655b47
More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents:
52
diff
changeset
|
51 if ev.key in ESCAPE_KEYS: |
fbb5cc655b47
More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents:
52
diff
changeset
|
52 from mamba.habitats.mainmenu import MainMenu |
fbb5cc655b47
More screen size fiddling hackery
Neil Muller <drnlmuller@gmail.com>
parents:
52
diff
changeset
|
53 NewHabitatEvent.post(MainMenu()) |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
54 elif ev.key == K_1: |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
55 # Activate floor button |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
56 self.floor_button.forced_click() |
94
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
57 |
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
58 def setup_toolbar(self): |
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
59 """Draw the editor toolbar""" |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
60 button_height = 5 |
94
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
61 button_left = 820 |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
62 button_padding = 2 |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
63 |
229 | 64 filename = TextButton( |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
65 (button_left, button_height), |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
66 'File: %s' % self.level.level_name, color='white') |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
67 filename.add_callback('clicked', self.do_edit, |
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
68 'Specify filename', self.level.level_name, self.check_file) |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
69 self.container.add(filename) |
229 | 70 button_height += filename.rect.height + button_padding |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
71 levelname = TextButton((button_left, button_height), |
170 | 72 'Level: %s' % self.level.name, color='white') |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
73 levelname.add_callback('clicked', self.do_edit, |
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
74 'Edit Level Title', self.level.name, self.update_name) |
94
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
75 self.container.add(levelname) |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
76 button_height += levelname.rect.height + button_padding |
94
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
77 |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
78 tilesetname = TextButton((button_left, button_height), |
94
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
79 'Tileset: %s' % self.level.tileset.name, color='white') |
275
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
80 tilesetname.add_callback('clicked', self.list_tilesets) |
94
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
81 self.container.add(tilesetname) |
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
82 button_height += tilesetname.surface.get_height() + button_padding |
172
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
83 # TODO: Add Image widget for the current tool |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
84 self.current_tool = TextWidget((button_left, button_height), |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
85 'Tool: Floor', color='white') |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
86 self.container.add(self.current_tool) |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
87 button_height += self.current_tool.surface.get_height() |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
88 button_height += button_padding |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
89 self.floor_button = ImageButtonWidget( |
94
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
90 (button_left, button_height), self.level.tileset.floor, |
aba653f8383e
Start adding editor toolbar
Neil Muller <drnlmuller@gmail.com>
parents:
64
diff
changeset
|
91 'Floor', color='white') |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
92 self.container.add(self.floor_button) |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
93 self.floor_button.add_callback('clicked', self.change_tool, |
172
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
94 '.', 'Floor') |
175
b498f76a455f
Set initial tool correctly
Neil Muller <drnlmuller@gmail.com>
parents:
174
diff
changeset
|
95 self.edit_widget.set_tool('.') |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
96 button_height += (self.floor_button.surface.get_height() |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
97 + button_padding) |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
98 if self.mode == 'Tile': |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
99 tile_map = TILE_MAP |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
100 change_mode_text = 'Switch to Things' |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
101 elif self.mode == 'Thing': |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
102 tile_map = THING_MAP |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
103 change_mode_text = 'Switch to Tiles' |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
240
diff
changeset
|
104 tool_list = [] |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
240
diff
changeset
|
105 for tile_char in sorted(tile_map): |
113
c5d6d0ba3b2b
Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents:
103
diff
changeset
|
106 try: |
c5d6d0ba3b2b
Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents:
103
diff
changeset
|
107 tile = self.level.tileset[tile_char] |
c5d6d0ba3b2b
Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents:
103
diff
changeset
|
108 except pygame.error: |
c5d6d0ba3b2b
Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents:
103
diff
changeset
|
109 # Ignore stuff we can't load for now |
c5d6d0ba3b2b
Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents:
103
diff
changeset
|
110 continue |
c5d6d0ba3b2b
Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents:
103
diff
changeset
|
111 if tile is None: |
c5d6d0ba3b2b
Fill in more toolbar stuff
Neil Muller <drnlmuller@gmail.com>
parents:
103
diff
changeset
|
112 continue |
170 | 113 if tile.name: |
114 text = tile.name | |
115 else: | |
116 text = 'Tile' | |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
240
diff
changeset
|
117 tile_button = ImageButtonWidget((0, 0), tile.image, text, |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
240
diff
changeset
|
118 color='white') |
172
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
119 tile_button.add_callback('clicked', self.change_tool, |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
120 tile_char, text) |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
240
diff
changeset
|
121 tool_list.append(tile_button) |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
122 self.tool_widget = ToolListWidget((button_left, button_height), |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
123 tool_list, MAX_TOOLS, start_key=K_2) |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
124 self.container.add(self.tool_widget) |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
125 button_height += self.tool_widget.rect.height + 2 |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
126 |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
127 mode_button = TextButton((button_left, button_height), |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
128 change_mode_text) |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
129 mode_button.add_callback('clicked', self.change_toolbar) |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
130 self.container.add(mode_button) |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
131 button_height += mode_button.surface.get_height() + button_padding |
237
9498b259c248
compress layout a tad more
Neil Muller <drnlmuller@gmail.com>
parents:
236
diff
changeset
|
132 button_height += 2 |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
133 |
270
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
134 new = TextButton((button_left, button_height), "New") |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
135 new.add_callback('clicked', self.new) |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
136 self.container.add(new) |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
137 load = TextButton((button_left + 60, button_height), "Load") |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
138 load.add_callback('clicked', self.load) |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
139 self.container.add(load) |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
140 |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
141 save = TextButton((button_left + 120, button_height), "Save") |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
142 save.add_callback('clicked', self.save) |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
143 self.container.add(save) |
172
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
144 |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
145 def change_tool(self, ev, widget, new_tool, text): |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
146 self.edit_widget.set_tool(new_tool) |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
147 self.current_tool.text = 'Tool: %s' % text |
dabf13abb3fd
Add basic drawing to level editor
Neil Muller <drnlmuller@gmail.com>
parents:
170
diff
changeset
|
148 self.current_tool.prepare() |
174 | 149 |
150 def save(self, ev, widget): | |
270
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
151 if self.level.level_name in RESERVED_NAMES: |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
152 print "Can't save over reserved name" |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
153 return |
272
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
154 if not self.level: |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
155 print "Need a level name" |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
156 return |
174 | 157 self.level.save_level() |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
158 |
270
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
159 def new(self, ev, widget): |
272
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
160 self.load_level(ev, widget, 'blank') |
270
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
161 |
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
162 def load(self, ev, widget): |
272
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
163 levels = list_levels() |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
164 load_list = [] |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
165 for level_name in levels: |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
166 if level_name in RESERVED_NAMES: |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
167 continue |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
168 load_button = TextButton((0, 0), level_name) |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
169 load_button.add_callback('clicked', self.load_level, level_name) |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
170 load_list.append(load_button) |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
171 load_dialog = ListBox((200, 200), 'Select Level', load_list) |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
172 self.container.add(load_dialog) |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
173 load_dialog.grab_focus() |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
174 |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
175 def load_level(self, ev, widget, level_name): |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
176 self.container.remove(self.edit_widget) |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
177 self.level = Level(level_name) |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
178 if level_name in RESERVED_NAMES: |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
179 self.level.level_name = '' # Special case for new level |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
180 self.edit_widget = EditLevelWidget(self.level) |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
181 self.container.add(self.edit_widget) |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
182 self.clear_toolbar() |
a061dd62127c
Hook up load and new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
270
diff
changeset
|
183 self.setup_toolbar() |
270
3c95ba7408f1
Add protected level name list. Add load & new buttons
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
184 |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
185 def change_toolbar(self, ev, widget): |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
186 if self.mode == 'Tile': |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
187 self.mode = 'Thing' |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
188 elif self.mode == 'Thing': |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
189 self.mode = 'Tile' |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
190 self.clear_toolbar() |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
191 self.setup_toolbar() |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
192 |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
193 def clear_toolbar(self): |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
194 """Remove every non-edit widget from the container""" |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
195 for widget in self.container.children[:]: |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
196 if widget is not self.edit_widget: |
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
175
diff
changeset
|
197 self.container.remove(widget) |
229 | 198 |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
199 def do_edit(self, ev, widget, message, init_value, callback): |
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
200 editbox = EntryBox((200, 200), message, init_value, callback) |
229 | 201 self.container.add(editbox) |
202 editbox.grab_focus() | |
203 | |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
204 def update_name(self, new_name): |
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
205 self.level.name = new_name |
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
206 self.clear_toolbar() |
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
207 self.setup_toolbar() |
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
208 return True |
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
209 |
275
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
210 def list_tilesets(self, ev, widget): |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
211 tilesets = list_tilesets() |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
212 load_list = [] |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
213 for name in tilesets: |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
214 if name == 'common': |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
215 continue |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
216 load_button = TextButton((0, 0), name) |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
217 load_button.add_callback('clicked', self.change_tileset, name) |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
218 load_list.append(load_button) |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
219 load_dialog = ListBox((200, 200), 'Select Level', load_list) |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
220 self.container.add(load_dialog) |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
221 load_dialog.grab_focus() |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
222 |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
223 def change_tileset(self, ev, widget, new_name): |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
224 self.level.tileset = Tileset(new_name) |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
225 self.level.update_tiles_ascii() |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
226 self.level.restart() |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
227 self.clear_toolbar() |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
228 self.setup_toolbar() |
51bec5e6191e
Rework selecting tilesets
Neil Muller <drnlmuller@gmail.com>
parents:
272
diff
changeset
|
229 return True |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
230 |
229 | 231 def check_file(self, new_name): |
276
9c57025781e7
Warn on enter filename results
Neil Muller <drnlmuller@gmail.com>
parents:
275
diff
changeset
|
232 messagebox = None |
229 | 233 if new_name == self.level.level_name: |
234 return True # No-op change | |
276
9c57025781e7
Warn on enter filename results
Neil Muller <drnlmuller@gmail.com>
parents:
275
diff
changeset
|
235 if not new_name: |
9c57025781e7
Warn on enter filename results
Neil Muller <drnlmuller@gmail.com>
parents:
275
diff
changeset
|
236 messagebox = MessageBox((300, 300), 'Please enter a name') |
229 | 237 if check_level_exists(new_name): |
276
9c57025781e7
Warn on enter filename results
Neil Muller <drnlmuller@gmail.com>
parents:
275
diff
changeset
|
238 messagebox = MessageBox((300, 300), 'Name already in use') |
9c57025781e7
Warn on enter filename results
Neil Muller <drnlmuller@gmail.com>
parents:
275
diff
changeset
|
239 if messagebox: |
9c57025781e7
Warn on enter filename results
Neil Muller <drnlmuller@gmail.com>
parents:
275
diff
changeset
|
240 self.container.add(messagebox) |
9c57025781e7
Warn on enter filename results
Neil Muller <drnlmuller@gmail.com>
parents:
275
diff
changeset
|
241 messagebox.grab_focus() |
229 | 242 return False |
243 self.level.level_name = new_name | |
244 self.clear_toolbar() | |
245 self.setup_toolbar() | |
236
09247e08aeda
Refactor edit calling code. Tweak toolbar layout
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
246 return True |