Esempio n. 1
0
class Enemy(DirtySprite, TargetABC):
    def __init__(self, scene, position: Vector, player: 'Player'):
        super().__init__(scene.groups["interact"])
        self.image = image.load(path.join(path.dirname(__file__), "enemy.png"))
        self.rect = self.image.get_rect()
        self.rect.center = tuple(position)
        self._position = position
        self.direction = Vector(0, 1).rotate(random.randint(0, 359))
        self.dirty = 1
        self.scene = scene
        self.speed = 30
        self.reach = 20
        self.sense_limit = 200
        self.player = player

    @property
    def position(self):
        return self._position

    def interact(self, player: 'Player'):
        logging.getLogger(type(self).__name__).debug("Enemy killed.")
        self.kill()

    def update(self, time_delta):
        direction_to_player = self.player.position - self.position
        distance_to_player = direction_to_player.length
        if distance_to_player < self.reach:
            pass
        elif distance_to_player < self.sense_limit:
            self._position += direction_to_player.scale(self.speed *
                                                        time_delta)
        else:
            self.direction = self.direction.rotate(random.randint(-2, 2))
            self._position += self.direction.scale(self.speed * time_delta *
                                                   .5)
        self.rect.center = tuple(self.position)
        self.dirty = 1
Esempio n. 2
0
 def on_update(self, update_event, signal):
     delta = Vector(self.controller.horizontal, self.controller.vertical)
     self.position += delta.scale(self.speed) * update_event.time_delta
Esempio n. 3
0
 def on_update(self, update_event, signal):
     delta = Vector(self.controller.horizontal, self.controller.vertical)
     self.position += delta.scale(self.speed) * update_event.time_delta