diff demos/shooter/scripts/scene.py @ 476:78a1eb57c074

Changed the way instances get deleted from the scene. Instances now get removed at the end of the frame as opposed to after their explosion action is complete. The old way was causing the odd segfault because the instance was being removed before FIFE was finished with it.
author prock@33b003aa-7bff-0310-803a-e67f0ece8222
date Thu, 22 Apr 2010 01:18:44 +0000
parents afde89c1d50b
children 6b33d80b468b
line wrap: on
line diff
--- a/demos/shooter/scripts/scene.py	Wed Apr 21 18:20:13 2010 +0000
+++ b/demos/shooter/scripts/scene.py	Thu Apr 22 01:18:44 2010 +0000
@@ -52,6 +52,7 @@
 		
 		self._player = None
 		self._projectiles = list()
+		self._objectstodelete = list()
 		
 		self._maxnodes = 128
 		self._xscale = 0
@@ -172,6 +173,9 @@
 	def endLevel(self):
 		self._world.endLevel()
 		
+	def queueObjectForRemoval(self, obj):
+		self._objectstodelete.append(obj)
+		
 	def removeAllProjectiles(self):
 		projtodelete = list()
 		for p in self._projectiles:
@@ -219,6 +223,8 @@
 		for node in self._nodes:
 			if obj in node.spaceobjects:
 				node.spaceobjects.remove(obj)
+				self._layer.deleteInstance(obj.instance)
+				obj.instance = None
 				return
 	
 	def attachCamera(self, cam):
@@ -318,6 +324,13 @@
 			if p in self._projectiles:
 				p.destroy()
 				self._projectiles.remove(p)
+		
+		for obj in self._objectstodelete:
+			self.removeObjectFromScene(obj)
+			self._layer.deleteInstance(obj.instance)
+			obj.instance = None
+			
+		self._objectstodelete = list()
 
 				
 	def _getPlayer(self):