def notifyHarvesting(self): if self._harvesting: eventType = Event.ENTITY_HARVEST_START else: eventType = Event.ENTITY_HARVEST_STOP e = Event(self._entity._world._time, eventType) e.entity = self._entity e.target = self.target self._entity._em.handleEvent(e)
def execute(self): # Stop the unit from moving vC = self.entity.getComponent(VelocityComponent) if vC != None: vC.v = Vector2(0, 0) # Set up state for reloading sC = self.entity.getComponent(ShootingComponent) sC.reloadTimeLeft = sC.reloadDuration sC.shootTimeLeft = sC.shootDuration # Change facing fC = self.entity.getComponent(FacingComponent) if fC != None and self.target != None: spC = self.entity.getComponent(PositionComponent) tpC = self.target.getComponent(PositionComponent) if spC.p.x - tpC.p.x > 0: fC.facingLeft = True else: fC.facingLeft = False # Event handling event = Event(self.entity._world._time, Event.ENTITY_ATTACKING) event.source = self.entity event.target = self.target self.entity._em.handleEvent(event) # Hitting the target if self.target != None: toHit = Rand.r.random() if toHit < sC.hitChance: hC = self.target.getComponent(HPComponent) if hC != None: hC.hp = hC.hp - sC.damage
def execute(self): e = Event(self.entity._world._time, Event.ENTITY_RESEARCH_DUMPED) e.entity = self.entity e.amount = self.rhC.load self.entity._em.handleEvent(e) self.rhC.load = 0 self.rhC.base = None
def notifyVelocityChanged(self, oldV): """Does not check whether velocity has in fact changed.""" if self._v == Vector2(0, 0): eventType = Event.ENTITY_STOPPED else: eventType = Event.ENTITY_MOVING e = Event(self._entity._world._time, eventType) e.entity = self._entity e.oldVelocity = oldV e.newVelocity = self._v self._entity._em.handleEvent(e)
def removeEntity(self, entity): self._entities.remove(entity) for _, system in self._systems.items(): if system.applicable(entity): system.removeEntity(entity) event = Event(self._time, Event.ENTITY_REMOVED) event.entity = entity entity._em.handleEvent(event) self._em.handleEvent(event)
def notifyDepleted(self): e = Event(self._entity._world._time, Event.RESEARCH_DEPLETED) e.entity = self._entity self._entity._em.handleEvent(e)
def notifyPositionChanged(self, oldP): e = Event(self._entity._world._time, Event.ENTITY_MOVED) e.entity = self._entity e.oldPosition = oldP e.newPosition = self._p self._entity._em.handleEvent(e)
def notifyDeath(self): print(str(self._entity) + " died!") e = Event(self._entity._world._time, Event.ENTITY_DIED) e.entity = self._entity self._entity._em.handleEvent(e)
def notifyFacingChanged(self): e = Event(self._entity._world._time, Event.ENTITY_FACING_UPDATED) e.entity = self._entity e.facingLeft = self._facingLeft self._entity._em.handleEvent(e)
def initialise(self): # Register event types Event.registerEventType("ENTITY_ADDED") Event.registerEventType("ENTITY_REMOVED") Event.registerEventType("ENTITY_MOVING") Event.registerEventType("ENTITY_STOPPED") Event.registerEventType("ENTITY_MOVED") Event.registerEventType("ENTITY_FACING_UPDATED") Event.registerEventType("ENTITY_ATTACKING") Event.registerEventType("ENTITY_DIED") Event.registerEventType("RESEARCH_DEPLETED") Event.registerEventType("ENTITY_HARVEST_START") Event.registerEventType("ENTITY_HARVEST_STOP") Event.registerEventType("ENTITY_RESEARCH_DUMPED") # Load stuff ResourceManager.loadAnimations("planet5521/data/animations.xml") EntityFactory.getSingleton().readFile("planet5521/data/entities.xml") EntityViewFactory.readFile("planet5521/data/views.xml") self._world = Planet5521World(200, 80) self._gameView = Planet5521GameView(0, 0, 1280, 720, self._world) self._gameView.name = "Game View" self._world._em.registerListener(Event.ENTITY_ADDED, self._gameView.entityCreated) # Entity destruction is handled at the entity EventManager level # Make environment self._world.produce("Sky", (0, 0)) self._world.produce("Ground", (0, self._world.height - 10)) self._world.produce("Ground Surface", (0, self._world.height - 10)) for _ in range(0): e = self._world.produce("Cloud", Vector2(Rand.r.random()*self._world.width, Rand.r.random()*(self._world.height - 20))) e.getComponent(VelocityComponent).v.x = Rand.r.random() # Make some units insectFaction = self._world.factions["Insects"] for _ in range(15): #for _ in range(0): insectFaction.produce("Insect Warrior", Vector2(10 + Rand.r.random()*20, self._world.height - 10-1.4)) for _ in range(15): #for _ in range(0): insectFaction.produce("Insect Warrior", Vector2(170 + Rand.r.random()*20, self._world.height - 10-1.4)) terrans = self._world.factions["Terrans"] for _ in range(15): #for _ in range(0): entity = terrans.produce("Terran Grunt", Vector2(80 + (Rand.r.random())*10, self._world.height - 10-1)) entity.getComponent(FacingComponent).facingLeft = Rand.r.random() < 0.5 for _ in range(15): #for _ in range(0): entity = terrans.produce("Terran Grunt", Vector2(110 + (Rand.r.random())*10, self._world.height - 10-1)) entity.getComponent(FacingComponent).facingLeft = Rand.r.random() < 0.5 for _ in range(15): #for _ in range(0): entity = terrans.produce("Terran Engineer", Vector2(90 + (Rand.r.random())*20, self._world.height - 10-1)) entity.getComponent(FacingComponent).facingLeft = Rand.r.random() < 0.5 #insectFaction.produce("Insect Warrior", Vector2(100, self._world.height - 10-1.4)) terrans.produce("Terran Barracks", Vector2(100,self._world.height - 10)) # Controllers self._gameView.addListener(TestGroundTroopController(self._world, self._gameView)) selectionController = SelectedUnitsController(self._world, self._gameView) self._gameView.addListener(selectionController) self._gameView.addListener(SelectionController(self._world, self._gameView, terrans, selectionController)) self._gameView.addListener(CameraController(self._world, self._gameView)) # Close by interactions #terrans.produce("Terran Grunt", Vector2(80, self._world.height - 10-1)) #terrans.produce("Terran Grunt", Vector2(80.5, self._world.height - 10-1)) #entity = terrans.produce("Terran Engineer", Vector2(81, self._world.height - 10-1)) #insectFaction.produce("Insect Warrior", Vector2(65, self._world.height - 10-1.4)) # Dropship is going to have something different. #dp = self._world.produce("Dropship", Vector2(10, 10)) #self._gameView.addListener(DropshipController(dp)) self._humanView.getPane().addChild(self._gameView) # Make humanview visible self._pm.processList.append(ViewUpdateProcess(self._gameView)) self._pm.processList.append(WorldUpdateProcess(self._world)) self._pm.processList.append(EntityFadeAndRemovalProcess(self._world, self._gameView)) self._pm.processList.append(HumanViewProcess(self._humanView)) #self._pm.processList.append(CinematicCamProcess(self._gameView.camera)) # TODO: This should perhaps be in Planet5521GameView? # TODO: And instead of changing the position, it should change view's dy self.bdP = BuildingDestructionProcess(self._world, self._gameView) self._pm.processList.append(self.bdP) self._world._em.registerListener(Event.ENTITY_DIED, self.entityDied) # For checking window resize events Input.addListener(self)
def throwEntityCreatedEvent(self, entity): """Signals that entity has been created.""" event = Event(self._time, Event.ENTITY_ADDED) event.entity = entity self._em.handleEvent(event)