Mercurial > mamba
diff mamba/habitats/editor.py @ 508:6c61d5862310
Massive speical sprite editor rewrite
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sun, 18 Sep 2011 00:11:30 +0200 |
parents | 72976997bdd9 |
children | 0ccdcc970ae2 |
line wrap: on
line diff
--- a/mamba/habitats/editor.py Sun Sep 18 00:04:42 2011 +0200 +++ b/mamba/habitats/editor.py Sun Sep 18 00:11:30 2011 +0200 @@ -9,6 +9,7 @@ import urllib2 from mamba.engine import Habitat, NewHabitatEvent +from mamba.sprites import find_special_sprites from mamba.widgets.level import EditLevelWidget from mamba.widgets.text import TextWidget, TextButton from mamba.widgets.imagebutton import ImageButtonWidget @@ -20,7 +21,7 @@ from mamba.widgets.editlevel import EditLevelBox from mamba.level import Level, Tileset, TILE_MAP, THING_MAP, InvalidMapError from mamba.data import (check_level_exists, get_level_list, load_file, - load_image) + load_image, load_tile_image) from mamba.constants import (SCREEN, EDIT_SCREEN, NAME, ESCAPE_KEYS, RESERVED_NAMES, WINDOW_ICON, LEVEL_SERVER) @@ -41,6 +42,7 @@ self.container.add_callback(MOUSEBUTTONDOWN, self.mouse_event) self.mode = 'Tiles' self.sprite_mode = 'Add' + self.sprite_cls = None def on_enter(self): # We need to juggle the display to the correct size @@ -139,10 +141,19 @@ tile_char, text) tool_list.append(tile_button) if self.mode == "Sprites": - for name in ['Add', 'Edit', 'Delete']: + for cls_name, sprite_cls in find_special_sprites(): + image = load_tile_image(sprite_cls.image_name, + self.level.tileset.name) + name = sprite_cls.name + tile_button = ImageButtonWidget((0, 0), image, name, + color='white') + tile_button.add_callback('clicked', self.sprite_tool, + 'Add', cls_name, sprite_cls) + tool_list.append(tile_button) + for name in ['Edit', 'Delete']: tile_button = TextButton((0, 0), '%s Sprite' % name) tile_button.add_callback('clicked', self.sprite_tool, - name) + name, None, None) tool_list.append(tile_button) self.tool_widget = ToolListWidget((button_left, button_height), tool_list, MAX_TOOLS, start_key=K_2) @@ -362,9 +373,11 @@ self.level.level_name = new_name return None - def sprite_tool(self, ev, widget, sprite_mode): + def sprite_tool(self, ev, widget, sprite_mode, cls_name, sprite_cls): """Handle sprite stuff""" self.sprite_mode = sprite_mode + self.sprite_cls_name = cls_name + self.sprite_cls = sprite_cls self.level.update_tiles_ascii() # commit any changes self.clear_toolbar() self.setup_toolbar() @@ -377,18 +390,19 @@ if self.container.paused: return False tile_pos = self.edit_widget.convert_pos(ev.pos) - sprite = self.level.get_sprite_at(tile_pos) + sprite, sprite_ascii = self.level.get_sprite_at(tile_pos) if self.sprite_mode == 'Delete' and sprite: - self.level.remove_sprite(sprite) + self.level.remove_sprite(sprite_ascii) self.level.restart() elif self.sprite_mode == 'Edit' and sprite: self.edit_sprite(tile_pos, sprite) elif self.sprite_mode == 'Add' and sprite is None: - self.edit_sprite(tile_pos, sprite) + self.edit_sprite(tile_pos, + (self.sprite_cls_name, self.sprite_cls, None, [])) return True - def edit_sprite(self, tile_pos, sprite): - sprite_editor = EditSpriteBox((200, 100), tile_pos, sprite, + def edit_sprite(self, tile_pos, sprite_info): + sprite_editor = EditSpriteBox((200, 100), tile_pos, sprite_info, post_callback=self.commit_line) self.display_dialog(sprite_editor)