diff clients/rio_de_hola/scripts/agents/cloud.py @ 98:214e3eb81eb2

better structure for techdemo scripts + svn:ignore fixes
author jasoka@33b003aa-7bff-0310-803a-e67f0ece8222
date Mon, 21 Jul 2008 13:46:15 +0000
parents clients/rio_de_hola/scripts/cloud.py@4a0efb7baf70
children ae3b8139c7c7
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clients/rio_de_hola/scripts/agents/cloud.py	Mon Jul 21 13:46:15 2008 +0000
@@ -0,0 +1,49 @@
+from agent import Agent
+import settings as TDS
+import fife
+import random
+
+_STATE_NONE, _STATE_FLOATING, _STATE_DISAPPEAR, _STATE_APPEAR = 0, 1, 2, 3
+
+class Cloud(Agent):
+	def __init__(self, model, agentName, layer, uniqInMap=False):
+		super(Cloud, self).__init__(model, agentName, layer, uniqInMap)
+		self.state = _STATE_NONE
+		
+	def isOutOfBounds(self, c):
+		return (c.x < 0) or (c.x > 100) or (c.y < 0) or (c.y > 100)
+
+	def onInstanceActionFinished(self, instance, action):
+		if self.state == _STATE_APPEAR:
+			self.move()
+		elif self.state == _STATE_FLOATING:
+			c = self.agent.getLocationRef().getExactLayerCoordinatesRef()
+			c.x += self.x_dir
+			c.y += self.y_dir
+			if self.isOutOfBounds(c):
+				self.disappear()
+			else:
+				self.move()
+		elif self.state == _STATE_DISAPPEAR:
+			self.agent.getLocationRef().setExactLayerCoordinates(self.initialCoords)
+			self.appear()
+
+	def start(self, x_dir, y_dir):
+		self.x_dir = x_dir
+		self.y_dir = y_dir
+		self.loc = self.agent.getLocation()
+		self.initialCoords = self.agent.getLocation().getExactLayerCoordinates()
+		self.appear()
+	
+	def appear(self):
+		self.state = _STATE_APPEAR
+		self.agent.act('appear', self.loc, False)
+	
+	def disappear(self):
+		self.state = _STATE_DISAPPEAR
+		self.agent.act('disappear', self.loc, False)
+	
+	def move(self):
+		self.state = _STATE_FLOATING
+		self.agent.act('default', self.loc, False)
+	
\ No newline at end of file