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