This commit is contained in:
Yohann D'ANELLO
2020-12-18 17:46:38 +01:00
parent e1918ab066
commit 0394c5d15d
5 changed files with 27 additions and 22 deletions

View File

@ -54,31 +54,32 @@ class Sunflower(FriendlyEntity):
"""
return [_("Flower power!!"), _("The sun is warm today")]
class Familiar(FightingEntity):
"""
A friendly familiar that helps the player defeat monsters.
"""
def __init__(self, maxhealth: int = 25,
def __init__(self, maxhealth: int = 25,
*args, **kwargs) -> None:
super().__init__(*args, **kwargs)
super().__init__(maxhealth=maxhealth, *args, **kwargs)
self.target = None
def act(self, p: Player, m : Map) :
def act(self, p: Player, m: Map) -> None:
"""
By default, the familiar tries to stay at distance at most 2 of the
player and if a monster comes in range 3, it focuses on the monster
and attacks it.
"""
if self.target == None:
if self.target is None:
self.target = p
if self.target == p:
for entity in m.entities:
if (self.y - entity.y) ** 2 + (self.x - entity.x) ** 2 <= 9 and \
if (self.y - entity.y) ** 2 + (self.x - entity.x) ** 2 <= 9 and\
isinstance(entity, Monster):
self.target = entity
entity.paths = dict() #Allows the paths to be calculated.
entity.paths = dict() # Allows the paths to be calculated.
break
# Familiars move according to a Dijkstra algorithm
# that targets their target.
# If they can not move and are already close to their target,
@ -90,9 +91,9 @@ class Familiar(FightingEntity):
if moved:
break
if self.distance_squared(self.target) <= 1 and \
not isinstance(self.target, Player):
not isinstance(self.target, Player):
self.map.logs.add_message(self.hit(self.target))
if self.target.dead :
if self.target.dead:
self.target.paths = None
self.target = None
break
@ -106,7 +107,8 @@ class Familiar(FightingEntity):
if move():
break
class Trumpet(Familiar) :
class Trumpet(Familiar):
"""
A class of familiars.
"""

View File

@ -60,13 +60,15 @@ class Monster(FightingEntity):
for move in moves:
if move():
break
def move(self, y: int, x:int) -> None:
def move(self, y: int, x: int) -> None:
"""
Overwrites the move function to recalculate paths.
"""
super().move(y, x)
self.recalculate_paths()
class Tiger(Monster):
"""
A tiger monster.

View File

@ -2,7 +2,6 @@
# SPDX-License-Identifier: GPL-3.0-or-later
from random import randint
from typing import Dict, Tuple
from ..interfaces import FightingEntity, InventoryHolder