Mercurial > fife-parpg
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