Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 def notifyDepleted(self):
   e = Event(self._entity._world._time, Event.RESEARCH_DEPLETED)
   e.entity = self._entity
   self._entity._em.handleEvent(e)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
 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)
Ejemplo n.º 11
0
 def throwEntityCreatedEvent(self, entity):
   """Signals that entity has been created."""
   event = Event(self._time, Event.ENTITY_ADDED)
   event.entity = entity
   self._em.handleEvent(event)