Fix knight movement behavior

This commit is contained in:
enne2
2024-02-16 20:58:22 +01:00
parent 91dca9c094
commit 105e48c23b
3 changed files with 20 additions and 11 deletions
Binary file not shown.
+4
View File
@@ -52,11 +52,15 @@ class Knight:
return gif, screen_x, screen_y
def move_to(self, target):
if self.target == target and self.state == "Walk":
return
self.speed = .05
self.target = target
self.state = "Walk"
def run_to(self, target):
if self.target == target and self.state == "Run":
return
self.speed = .15
self.target = target
self.state = "Run"
+16 -11
View File
@@ -44,7 +44,8 @@ class IsometricGame:
self.menu = Menu(self.canvas, tearoff=0)
self.window.bind('<KeyRelease>', self.on_key_press)
self.canvas.bind('<Button-1>', self.on_canvas_click)
self.canvas.bind('<Button-3>', self.on_canvas_rclick)
self.canvas.bind('<Button-3>', self.on_canvas_right_click)
self.canvas.bind('<Double-Button-3>', self.on_canvas_double_right_click)
self.canvas.bind('<Motion>', self.calculate_coordinates)
@@ -237,8 +238,21 @@ class IsometricGame:
self.battlefield[cell_y][cell_x].walkable ^= True
self.draw_battlefield()
self.draw_units()
def on_canvas_right_click(self, event):
# calculate the clicked cell's coordinates
cell_x, cell_y = self.inv_iso_transform(event.x, event.y)
self.effects.append(OrderClick(self.iso_transform(cell_x, cell_y),color="lightblue"))
if 0 <= cell_x < self.width and 0 <= cell_y < self.height:
self.knight.move_to((cell_x, cell_y))
def on_canvas_double_right_click(self, event):
# calculate the clicked cell's coordinates
cell_x, cell_y = self.inv_iso_transform(event.x, event.y)
self.effects.append(OrderClick(self.iso_transform(cell_x, cell_y),color="darkblue"))
if 0 <= cell_x < self.width and 0 <= cell_y < self.height:
self.knight.run_to((cell_x, cell_y))
def set_tile(self, name, pos):
# Handle option 1 selection
@@ -249,15 +263,6 @@ class IsometricGame:
self.battlefield[cell_y][cell_x].tile = self.tiles[name]
self.draw_battlefield()
def on_canvas_rclick(self, event):
# calculate the clicked cell's coordinates
cell_x, cell_y = self.inv_iso_transform(event.x, event.y)
self.effects.append(OrderClick(self.iso_transform(cell_x, cell_y),color="lightblue"))
if self.knight.target == (cell_x, cell_y):
return
if 0 <= cell_x < self.width and 0 <= cell_y < self.height:
self.knight.run_to((cell_x, cell_y))
def run(self):
self.draw_battlefield()