use crate::core::resources::Resources;
use ggez::graphics::{DrawParam, Image};
pub trait ZombieTrait {
fn get_initial_health(&self) -> i32;
fn get_speed(&self) -> f32;
fn get_attack_damage(&self) -> i32;
fn get_attack_interval(&self) -> u64;
fn get_walk_frame_count(&self) -> usize {
22
}
fn get_attack_frame_count(&self) -> usize {
21
}
fn get_die_frame_count(&self) -> usize {
10
}
fn get_walk_image<'a>(&self, resources: &'a Resources, frame: usize) -> &'a Image {
let walk_frame_count = resources.zombies_walk1_images.len();
if walk_frame_count > 0 {
&resources.zombies_walk1_images[frame % walk_frame_count]
} else {
&resources.zombies_walk1_images[0]
}
}
fn get_attack_image<'a>(&self, resources: &'a Resources, frame: usize) -> &'a Image {
let attack_frame_count = resources.zombie_attack_images.len();
if attack_frame_count > 0 {
&resources.zombie_attack_images[frame % attack_frame_count]
} else {
&resources.zombie_attack_images[0]
}
}
fn get_die_image<'a>(&self, resources: &'a Resources, frame: usize) -> &'a Image {
let die_frame_count = resources.zombie_die_images.len();
if die_frame_count > 0 && frame < die_frame_count {
&resources.zombie_die_images[frame]
} else if !resources.zombie_die_images.is_empty() {
&resources.zombie_die_images[resources.zombie_die_images.len() - 1]
} else {
&resources.zombies_walk1_images[0]
}
}
fn update_special(&mut self, _dt: u64) {
}
fn get_draw_params(&self) -> DrawParam {
DrawParam::default().scale([0.8, 0.8])
}
fn has_special_ability(&self) -> bool {
false
}
fn handle_damage(&mut self, _damage: i32) -> bool {
false
}
fn transform_health(&self) -> Option<i32> {
None
}
}