diff mamba/habitats/editor.py @ 343:5bf35267ddc0

Hook up sprite deletion. Framework work for sprite editing & adding
author Neil Muller <drnlmuller@gmail.com>
date Fri, 16 Sep 2011 22:24:39 +0200
parents 170d4a43c00e
children 62a2a659c69b
line wrap: on
line diff
--- a/mamba/habitats/editor.py	Fri Sep 16 22:02:38 2011 +0200
+++ b/mamba/habitats/editor.py	Fri Sep 16 22:24:39 2011 +0200
@@ -1,7 +1,7 @@
 """Habitat for editing levels."""
 
 import pygame.display
-from pygame.locals import SWSURFACE, KEYDOWN, K_1, K_2
+from pygame.locals import SWSURFACE, KEYDOWN, K_1, K_2, MOUSEBUTTONDOWN
 
 from mamba.engine import Habitat, NewHabitatEvent
 from mamba.widgets.level import EditLevelWidget
@@ -29,6 +29,7 @@
         self.edit_widget = EditLevelWidget(self.level)
         self.container.add(self.edit_widget)
         self.container.add_callback(KEYDOWN, self.keydown_event)
+        self.container.add_callback(MOUSEBUTTONDOWN, self.mouse_event)
         self.mode = 'Tiles'
         self.sprite_mode = 'Add'
 
@@ -359,6 +360,31 @@
     def sprite_tool(self, ev, widget, sprite_mode):
         """Handle sprite stuff"""
         self.sprite_mode = sprite_mode
+        self.level.update_tiles_ascii()  # commit any changes
         self.clear_toolbar()
         self.setup_toolbar()
         return True
+
+    def mouse_event(self, ev, widget):
+        """Handle mouse clicks when we are in sprite mode"""
+        if self.mode != 'Sprites':
+            return False
+        if self.container.paused:
+            return False
+        tile_pos = self.edit_widget.convert_pos(ev.pos)
+        sprite = self.level.get_sprite_at(tile_pos)
+        if self.sprite_mode == 'Delete' and sprite:
+            self.level.remove_sprite(sprite)
+        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)
+        else:
+            return True  # Don't refresh the level if we're doing nothing
+        self.level.restart()
+        # edit sprite can pause the container, so unpause here
+        self.container.paused = False
+        return True
+
+    def edit_sprite(self, tile_pos, sprite_line):
+        pass