diff --git a/triple-dungeon/main.py b/triple-dungeon/main.py index 93072a0..00415f3 100644 --- a/triple-dungeon/main.py +++ b/triple-dungeon/main.py @@ -8,6 +8,7 @@ import collections import math import random import time +from typing import Tuple, List import arcade from config import Config @@ -111,11 +112,25 @@ class Game(arcade.Window): arcade.draw_text(str((x, y)), x - 40, y + 50, arcade.color.WHITE, 15, font_name='Arial') arcade.draw_text(f"FPS: {self.fps.get_fps():3.0f}", self.view_left + 50, self.view_bottom + 30, arcade.color.WHITE, 16, font_name='Arial') + + # Draw paths for all mobs + for mob in self.enemy_list: + if mob.target is not None: + self.draw_path(mob.mob.get_path()) + self.fps.tick() except Exception: import traceback traceback.print_exc() + def draw_path(self, path: List[Tuple[int, int]]) -> None: + """ + Draws a line between positions in a list of tuple, also known as the path. + :param path: A list of tuple positions defining a path that can be traversed. + """ + print(path) + pass + def on_key_press(self, key, modifiers): """Called whenever a key is pressed. """ diff --git a/triple-dungeon/mobs.py b/triple-dungeon/mobs.py index 12c52e6..bf6366e 100644 --- a/triple-dungeon/mobs.py +++ b/triple-dungeon/mobs.py @@ -31,6 +31,15 @@ class Mob(arcade.Sprite): self.dungeon = dungeon self.target = None + def nearestPosition(self) -> Tuple[int, int]: + """ + Returns the nearest absolute dungeon tile the Mob is placed on. + + :return: A tuple containing the Mob's dungeon tile position. + """ + return (round(self.center_x / Config.TILE_SIZE) * Config.TILE_SIZE, + round(self.center_y / Config.TILE_SIZE) * Config.TILE_SIZE) + def tick(self) -> None: """ A on_update function, the Mob should decide it's next actions here. @@ -38,22 +47,17 @@ class Mob(arcade.Sprite): if Config.DEBUG: if self.target is not None: - x, y = self.target.position - self.draw_path(self.get_path( - (round(x / Config.TILE_SIZE) * Config.TILE_SIZE, round(y / Config.TILE_SIZE) * Config.TILE_SIZE) - )) - def draw_path(self, path: List[Tuple[int, int]]) -> None: - pass - - def get_path(self, end: Tuple[int, int]) -> List[Tuple[int, int]]: + def get_path(self, end: Tuple[int, int] = None) -> List[Tuple[int, int]]: """ Returns the path to get to the Mob's target in absolute integer positions. - :param matrix: - :param end: + :param end: A the endpoint tuple. Must be a valid position within the matrix. :return: """ + if end is None: + x, y = self.target.position + x, y = (round(x / Config.TILE_SIZE) * Config.TILE_SIZE, round(y / Config.TILE_SIZE) * Config.TILE_SIZE) class Player(Mob):