diff --git a/Units/hound.py b/Units/hound.py new file mode 100644 index 0000000..b3c73ab --- /dev/null +++ b/Units/hound.py @@ -0,0 +1,62 @@ +import tkinter as tk +import os +import glob +import time +import random + +from Effects.animated_gif import AnimatedGif +from Effects.order_click import OrderClick + +class Unit: + def __init__(self, engine, position=(0,0)): + self.engine = engine + self.position = position + self.target = position + self.destination = position + gifs = glob.glob("assets/Hound/**/*.gif", recursive=True) + self.animation = {os.path.basename(gif): AnimatedGif(gif) for gif in gifs} + self.state = "Walk" + self.speed = .025 # This is now the delay between updates in seconds + self.partial_move = 0 + self.direction = 2 + self.visited = [self.position] + self.starting_position = (position) + self.already_tried = [] + + def move(self, target): + pass + + + def ai(self): + screen_x, screen_y = self.engine.iso_transform(*self.position) + if self.position != self.target: + self.direction = self.engine.get_direction(self.position,self.destination) + if self.partial_move<1: + screen_x_dest, screen_y_dest = self.engine.iso_transform(*self.destination) + self.partial_move += self.speed + screen_x += (screen_x_dest - screen_x) * self.partial_move + screen_y += (screen_y_dest - screen_y) * self.partial_move + else: + screen_x, screen_y = self.engine.iso_transform(*self.destination) + neighbors_list = self.engine.find_neighbors(self.destination) # Get the neighbors of the destination cell + # Remove any neighbors that are not walkable + neighbors_list = [cell for cell in neighbors_list if self.engine.battlefield[cell[1]][cell[0]].walkable] + # Update position and visited list + self.position = self.destination + self.destination = None + self.visited.append(self.position) + self.destination = self.engine.get_closest_neighbor(neighbors_list,self.target) + self.partial_move = 0 + else: + self.visited = [self.target] + self.position = self.target + self.starting_position = self.target + self.destination = self.target + self.state = "Idle" + self.partial_move = 1 + gif = self.animation.get(f'{self.state}_dir{self.direction}.gif') + return gif, screen_x, screen_y + + def move_to(self, target): + self.target = target + self.state = "Walk" diff --git a/Units/knight.py b/Units/knight.py index a45491d..90f68b6 100644 --- a/Units/knight.py +++ b/Units/knight.py @@ -7,7 +7,7 @@ import random from Effects.animated_gif import AnimatedGif from Effects.order_click import OrderClick -class Knight: +class Unit: def __init__(self, engine, position=(0,0)): self.engine = engine self.position = position diff --git a/Units/zombie.py b/Units/zombie.py new file mode 100644 index 0000000..ca223af --- /dev/null +++ b/Units/zombie.py @@ -0,0 +1,63 @@ +import tkinter as tk +import os +import glob +import time +import random + +from Effects.animated_gif import AnimatedGif +from Effects.order_click import OrderClick + +class Unit: + def __init__(self, engine, position=(0,0)): + self.engine = engine + self.position = position + self.target = position + self.script_name = os.path.basename(__file__).split('.')[0] + self.destination = position + gifs = glob.glob("assets/Zombie/**/*.gif", recursive=True) + self.animation = {os.path.basename(gif): AnimatedGif(gif) for gif in gifs} + self.state = "Walk" + self.speed = .05 # This is now the delay between updates in seconds + self.partial_move = 0 + self.direction = 2 + self.visited = [self.position] + self.starting_position = (position) + self.already_tried = [] + + def move(self, target): + pass + + + def ai(self): + screen_x, screen_y = self.engine.iso_transform(*self.position) + if self.position != self.target: + self.direction = self.engine.get_direction(self.position,self.destination) + if self.partial_move<1: + screen_x_dest, screen_y_dest = self.engine.iso_transform(*self.destination) + self.partial_move += self.speed + screen_x += (screen_x_dest - screen_x) * self.partial_move + screen_y += (screen_y_dest - screen_y) * self.partial_move + else: + screen_x, screen_y = self.engine.iso_transform(*self.destination) + neighbors_list = self.engine.find_neighbors(self.destination) # Get the neighbors of the destination cell + # Remove any neighbors that are not walkable + neighbors_list = [cell for cell in neighbors_list if self.engine.battlefield[cell[1]][cell[0]].walkable] + # Update position and visited list + self.position = self.destination + self.destination = None + self.visited.append(self.position) + self.destination = self.engine.get_closest_neighbor(neighbors_list,self.target) + self.partial_move = 0 + else: + self.visited = [self.target] + self.position = self.target + self.starting_position = self.target + self.destination = self.target + self.state = "Idle" + self.partial_move = 1 + gif = self.animation.get(f'{self.state}_dir{self.direction}.gif') + return gif, screen_x, screen_y + + def move_to(self, target): + self.target = target + self.state = "Walk" diff --git a/assets/Hound/Idle/Idle_dir1.gif b/assets/Hound/Idle/Idle_dir1.gif new file mode 100644 index 0000000..26e8b8c Binary files /dev/null and b/assets/Hound/Idle/Idle_dir1.gif differ diff --git a/assets/Hound/Idle/Idle_dir2.gif b/assets/Hound/Idle/Idle_dir2.gif new file mode 100644 index 0000000..4cf14dc Binary files /dev/null and b/assets/Hound/Idle/Idle_dir2.gif differ diff --git a/assets/Hound/Idle/Idle_dir3.gif b/assets/Hound/Idle/Idle_dir3.gif new file mode 100644 index 0000000..e4cefce Binary files /dev/null and b/assets/Hound/Idle/Idle_dir3.gif differ diff --git a/assets/Hound/Idle/Idle_dir4.gif b/assets/Hound/Idle/Idle_dir4.gif new file mode 100644 index 0000000..d6c4393 Binary files /dev/null and b/assets/Hound/Idle/Idle_dir4.gif differ diff --git a/assets/Hound/Idle/Idle_dir5.gif b/assets/Hound/Idle/Idle_dir5.gif new file mode 100644 index 0000000..5f14d5a Binary files /dev/null and b/assets/Hound/Idle/Idle_dir5.gif differ diff --git a/assets/Hound/Idle/Idle_dir6.gif b/assets/Hound/Idle/Idle_dir6.gif new file mode 100644 index 0000000..e3bb50d Binary files /dev/null and b/assets/Hound/Idle/Idle_dir6.gif differ diff --git a/assets/Hound/Idle/Idle_dir7.gif b/assets/Hound/Idle/Idle_dir7.gif new file mode 100644 index 0000000..8eb4038 Binary files /dev/null and b/assets/Hound/Idle/Idle_dir7.gif differ diff --git a/assets/Hound/Idle/Idle_dir8.gif b/assets/Hound/Idle/Idle_dir8.gif new file mode 100644 index 0000000..372cd53 Binary files /dev/null and b/assets/Hound/Idle/Idle_dir8.gif differ diff --git a/assets/Hound/Walk/Walk_dir1.gif b/assets/Hound/Walk/Walk_dir1.gif new file mode 100644 index 0000000..12423fd Binary files /dev/null and b/assets/Hound/Walk/Walk_dir1.gif differ diff --git a/assets/Hound/Walk/Walk_dir2.gif b/assets/Hound/Walk/Walk_dir2.gif new file mode 100644 index 0000000..8836798 Binary files /dev/null and b/assets/Hound/Walk/Walk_dir2.gif differ diff --git a/assets/Hound/Walk/Walk_dir3.gif b/assets/Hound/Walk/Walk_dir3.gif new file mode 100644 index 0000000..88b183c Binary files /dev/null and b/assets/Hound/Walk/Walk_dir3.gif differ diff --git a/assets/Hound/Walk/Walk_dir4.gif b/assets/Hound/Walk/Walk_dir4.gif new file mode 100644 index 0000000..436f811 Binary files /dev/null and b/assets/Hound/Walk/Walk_dir4.gif differ diff --git a/assets/Hound/Walk/Walk_dir5.gif b/assets/Hound/Walk/Walk_dir5.gif new file mode 100644 index 0000000..9788ea3 Binary files /dev/null and b/assets/Hound/Walk/Walk_dir5.gif differ diff --git a/assets/Hound/Walk/Walk_dir6.gif b/assets/Hound/Walk/Walk_dir6.gif new file mode 100644 index 0000000..daa881f Binary files /dev/null and b/assets/Hound/Walk/Walk_dir6.gif differ diff --git a/assets/Hound/Walk/Walk_dir7.gif b/assets/Hound/Walk/Walk_dir7.gif new file mode 100644 index 0000000..e29678f Binary files /dev/null and b/assets/Hound/Walk/Walk_dir7.gif differ diff --git a/assets/Hound/Walk/Walk_dir8.gif b/assets/Hound/Walk/Walk_dir8.gif new file mode 100644 index 0000000..20067c4 Binary files /dev/null and b/assets/Hound/Walk/Walk_dir8.gif differ diff --git a/assets/Zombie/Idle/Idle_dir1.gif b/assets/Zombie/Idle/Idle_dir1.gif new file mode 100644 index 0000000..74ccabc Binary files /dev/null and b/assets/Zombie/Idle/Idle_dir1.gif differ diff --git a/assets/Zombie/Idle/Idle_dir2.gif b/assets/Zombie/Idle/Idle_dir2.gif new file mode 100644 index 0000000..134e258 Binary files /dev/null and b/assets/Zombie/Idle/Idle_dir2.gif differ diff --git a/assets/Zombie/Idle/Idle_dir3.gif b/assets/Zombie/Idle/Idle_dir3.gif new file mode 100644 index 0000000..65bcf23 Binary files /dev/null and b/assets/Zombie/Idle/Idle_dir3.gif differ diff --git a/assets/Zombie/Idle/Idle_dir4.gif b/assets/Zombie/Idle/Idle_dir4.gif new file mode 100644 index 0000000..fd120c3 Binary files /dev/null and b/assets/Zombie/Idle/Idle_dir4.gif differ diff --git a/assets/Zombie/Idle/Idle_dir5.gif b/assets/Zombie/Idle/Idle_dir5.gif new file mode 100644 index 0000000..ddc8025 Binary files /dev/null and b/assets/Zombie/Idle/Idle_dir5.gif differ diff --git a/assets/Zombie/Idle/Idle_dir6.gif b/assets/Zombie/Idle/Idle_dir6.gif new file mode 100644 index 0000000..7403841 Binary files /dev/null and b/assets/Zombie/Idle/Idle_dir6.gif differ diff --git a/assets/Zombie/Idle/Idle_dir7.gif b/assets/Zombie/Idle/Idle_dir7.gif new file mode 100644 index 0000000..52ab435 Binary files /dev/null and b/assets/Zombie/Idle/Idle_dir7.gif differ diff --git a/assets/Zombie/Idle/Idle_dir8.gif b/assets/Zombie/Idle/Idle_dir8.gif new file mode 100644 index 0000000..d719780 Binary files /dev/null and b/assets/Zombie/Idle/Idle_dir8.gif differ diff --git a/assets/Zombie/Walk/Walk_dir1.gif b/assets/Zombie/Walk/Walk_dir1.gif new file mode 100644 index 0000000..35f2325 Binary files /dev/null and b/assets/Zombie/Walk/Walk_dir1.gif differ diff --git a/assets/Zombie/Walk/Walk_dir2.gif b/assets/Zombie/Walk/Walk_dir2.gif new file mode 100644 index 0000000..8fa318d Binary files /dev/null and b/assets/Zombie/Walk/Walk_dir2.gif differ diff --git a/assets/Zombie/Walk/Walk_dir3.gif b/assets/Zombie/Walk/Walk_dir3.gif new file mode 100644 index 0000000..7dc3713 Binary files /dev/null and b/assets/Zombie/Walk/Walk_dir3.gif differ diff --git a/assets/Zombie/Walk/Walk_dir4.gif b/assets/Zombie/Walk/Walk_dir4.gif new file mode 100644 index 0000000..1b3157b Binary files /dev/null and b/assets/Zombie/Walk/Walk_dir4.gif differ diff --git a/assets/Zombie/Walk/Walk_dir5.gif b/assets/Zombie/Walk/Walk_dir5.gif new file mode 100644 index 0000000..468fc07 Binary files /dev/null and b/assets/Zombie/Walk/Walk_dir5.gif differ diff --git a/assets/Zombie/Walk/Walk_dir6.gif b/assets/Zombie/Walk/Walk_dir6.gif new file mode 100644 index 0000000..8286197 Binary files /dev/null and b/assets/Zombie/Walk/Walk_dir6.gif differ diff --git a/assets/Zombie/Walk/Walk_dir7.gif b/assets/Zombie/Walk/Walk_dir7.gif new file mode 100644 index 0000000..c82793b Binary files /dev/null and b/assets/Zombie/Walk/Walk_dir7.gif differ diff --git a/assets/Zombie/Walk/Walk_dir8.gif b/assets/Zombie/Walk/Walk_dir8.gif new file mode 100644 index 0000000..6972cfe Binary files /dev/null and b/assets/Zombie/Walk/Walk_dir8.gif differ diff --git a/main.py b/main.py index 3fa6f13..0a0b824 100644 --- a/main.py +++ b/main.py @@ -4,11 +4,15 @@ import glob import os import json -from Units.knight import Knight +import Units + from Effects.order_click import OrderClick from tkinter import Menu from collections import deque +import Units.hound +import Units.zombie + @@ -18,8 +22,8 @@ class IsometricGame: self.height = height self.view_offset_x = 800 self.view_offset_y = 0 - self.cell_width = 132 - self.cell_height = 66 + self.cell_width = 134 + self.cell_height = 68 self.cell_selected = (0, 0) self.last_trigger_time = 0 @@ -49,7 +53,7 @@ class IsometricGame: self.canvas.bind('', self.calculate_coordinates) - self.knight = Knight(self, (1,1)) + self.knight = Units.zombie.Unit(self, position=(1, 1)) self.draw_battlefield() def calculate_coordinates(self, event):