import random from Entities.entity import Entity class Marine(Entity): target_cell = (8,7) movement = 0 view = 3 def update(self): self.move() super().update() def set_visibility(self): # Set visibility based on the distance to the cursor distance = self.graphics.get_distance((self.x, self.y), self.engine.cursor_pos) if distance < self.view: self.graphics.set_opacity(self.frame, 1.0) else: self.graphics.set_opacity(self.frame, 0.5) def select_unit(self): self.selected = True # Play a random voice response when selected sound_file = f"marine/tmawht0{random.randint(0, 3)}.wav" print(f"Playing sound: {sound_file}") self.graphics.play_sound(sound_file) def move(self): self.iso_x, self.iso_y = self.graphics.iso_transform(self.x, self.y) self.position = (self.x, self.y) if self.target_cell != (self.x, self.y) and self.selected: target_iso_x, target_iso_y = self.graphics.iso_transform(self.target_cell[0], self.target_cell[1]) self.graphics.draw_square(target_iso_x, target_iso_y, color=(255, 0, 0, 255), margin=6) if self.position != self.target_cell: if self.position == self.next_cell: self.next_cell = self.graphics.get_next_cell(self.next_cell, self.target_cell) self.engine.entities_positions[self.next_cell] = self if self.engine.entities_positions.get(self.target_cell) is not None: if self.engine.entities_positions.get(self.target_cell) != self: self.target_cell = self.graphics.find_neighbors(self.target_cell)[0] or self.position return # Set walking animation and direction self.action = "walk" self.direction = self.graphics.get_direction((self.x, self.y), self.next_cell) self.moving = True # Calculate target coordinates target_x, target_y = self.graphics.iso_transform(self.next_cell[0], self.next_cell[1]) # Increment movement counter self.movement += 0.1 # Calculate how far we've moved (0.0 to 1.0) move_progress = min(self.movement, 1.0) # Calculate new position based on progress between cells self.iso_x = self.iso_x + (target_x - self.iso_x) * move_progress self.iso_y = self.iso_y + (target_y - self.iso_y) * move_progress if self.movement >= 1.0: # Reset movement and set to idle self.movement = 0 self.x, self.y = self.next_cell self.iso_x, self.iso_y = self.graphics.iso_transform(self.x, self.y) else: self.action = "idle" def set_target_cell(self, target_cell): self.target_cell = target_cell self.graphics.play_sound(f"marine/tmayes0{random.randint(0, 3)}.wav")