enemy spawner refactoring
This commit is contained in:
parent
8dfa066715
commit
be60a4346e
|
|
@ -68,7 +68,7 @@ pub struct Enemy {
|
|||
impl Enemy {
|
||||
fn init(&mut self) {
|
||||
self.attack_damage = 100.0;
|
||||
self.attack_speed = 0.3;
|
||||
self.attack_speed = 0.2;
|
||||
}
|
||||
|
||||
fn round(&self, a: f32) -> i32 {
|
||||
|
|
|
|||
|
|
@ -40,48 +40,113 @@ impl EnemySpawn {
|
|||
pub fn new() -> Self {
|
||||
return EnemySpawn::default();
|
||||
}
|
||||
pub fn spawn_enemy(&self, graph: &mut Graph, resource_manager: &ResourceManager) {
|
||||
// TODO: add with_build
|
||||
let mut enemy = Enemy::default();
|
||||
enemy.x = 0.0;
|
||||
enemy.y = -4.0;
|
||||
let x = enemy.x;
|
||||
let y = enemy.y;
|
||||
let mut material = Material::standard_2d();
|
||||
|
||||
fn attack_anmation(&self, resource_manager: &ResourceManager) -> SpriteSheetAnimation<fyrox::asset::Resource<Texture>> {
|
||||
let idle = resource_manager.request::<Texture>(
|
||||
"assets/data/characters/skeleton/Skeleton_Warrior/Attack_3.png".to_owned(),
|
||||
);
|
||||
let mut idle_animation = SpriteSheetAnimation::new_from_image_parameters(ImageParameters {
|
||||
width: 512,
|
||||
height: 128,
|
||||
frame_width: 128,
|
||||
frame_height: 128,
|
||||
first_frame: 0,
|
||||
last_frame: 6,
|
||||
column_major: false,
|
||||
});
|
||||
idle_animation.set_texture(Some(idle));
|
||||
idle_animation.set_looping(true);
|
||||
idle_animation.set_speed(10.);
|
||||
idle_animation.play();
|
||||
return idle_animation;
|
||||
}
|
||||
|
||||
fn run_anmation(&self, resource_manager: &ResourceManager) -> SpriteSheetAnimation<fyrox::asset::Resource<Texture>> {
|
||||
let idle = resource_manager.request::<Texture>(
|
||||
"assets/data/characters/skeleton/Skeleton_Warrior/Run.png".to_owned(),
|
||||
);
|
||||
let mut idle_animation = SpriteSheetAnimation::new_from_image_parameters(ImageParameters {
|
||||
width: 1024,
|
||||
height: 128,
|
||||
frame_width: 128,
|
||||
frame_height: 128,
|
||||
first_frame: 0,
|
||||
last_frame: 8,
|
||||
column_major: false,
|
||||
});
|
||||
idle_animation.set_texture(Some(idle));
|
||||
idle_animation.set_looping(true);
|
||||
idle_animation.set_speed(10.);
|
||||
idle_animation.play();
|
||||
return idle_animation;
|
||||
}
|
||||
|
||||
fn die_anmation(&self, resource_manager: &ResourceManager) -> SpriteSheetAnimation<fyrox::asset::Resource<Texture>> {
|
||||
let idle = resource_manager.request::<Texture>(
|
||||
"assets/data/characters/skeleton/Skeleton_Warrior/Dead.png".to_owned(),
|
||||
);
|
||||
let mut idle_animation = SpriteSheetAnimation::new_from_image_parameters(ImageParameters {
|
||||
width: 512,
|
||||
height: 128,
|
||||
frame_width: 128,
|
||||
frame_height: 128,
|
||||
first_frame: 0,
|
||||
last_frame: 4,
|
||||
column_major: false,
|
||||
});
|
||||
idle_animation.set_texture(Some(idle));
|
||||
idle_animation.set_looping(false);
|
||||
idle_animation.set_speed(10.);
|
||||
idle_animation.play();
|
||||
return idle_animation;
|
||||
}
|
||||
|
||||
fn idle_anmation(&self, resource_manager: &ResourceManager) -> SpriteSheetAnimation<fyrox::asset::Resource<Texture>> {
|
||||
let idle = resource_manager.request::<Texture>(
|
||||
"assets/data/characters/skeleton/Skeleton_Warrior/Idle.png".to_owned(),
|
||||
);
|
||||
let mut idle_animation = SpriteSheetAnimation::new_from_image_parameters(ImageParameters {
|
||||
width: 896,
|
||||
height: 128,
|
||||
frame_width: 118,
|
||||
frame_width: 128,
|
||||
frame_height: 128,
|
||||
first_frame: 1,
|
||||
last_frame: 5,
|
||||
first_frame: 0,
|
||||
last_frame: 7,
|
||||
column_major: false,
|
||||
});
|
||||
idle_animation.set_texture(Some(idle.clone()));
|
||||
idle_animation.set_texture(Some(idle));
|
||||
idle_animation.set_looping(true);
|
||||
idle_animation.set_speed(10.);
|
||||
idle_animation.play();
|
||||
return idle_animation;
|
||||
}
|
||||
|
||||
pub fn spawn_enemy(&self, graph: &mut Graph, resource_manager: &ResourceManager, x: f32) {
|
||||
// TODO: add with_build
|
||||
let mut enemy = Enemy::default();
|
||||
enemy.x = x;
|
||||
enemy.y = -3.0;
|
||||
let x = enemy.x;
|
||||
let y = enemy.y;
|
||||
let mut material = Material::standard_2d();
|
||||
enemy.animations = vec![
|
||||
idle_animation.clone(),
|
||||
idle_animation.clone(),
|
||||
idle_animation.clone(),
|
||||
idle_animation,
|
||||
self.idle_anmation(resource_manager),
|
||||
self.run_anmation(resource_manager),
|
||||
self.attack_anmation(resource_manager),
|
||||
self.die_anmation(resource_manager),
|
||||
];
|
||||
material
|
||||
.set_property(
|
||||
&ImmutableString::new("diffuseTexture"),
|
||||
PropertyValue::Sampler {
|
||||
value: Some(idle.clone()),
|
||||
value: None,
|
||||
fallback: SamplerFallback::Normal,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
let shape = ColliderShape::Capsule(CapsuleShape {
|
||||
begin: Vector2::new(0.0, -0.2),
|
||||
end: Vector2::new(0.0, 0.1),
|
||||
begin: Vector2::new(0.0, 0.4),
|
||||
end: Vector2::new(0.0, 0.0),
|
||||
radius: 0.3,
|
||||
});
|
||||
let rb_transform = TransformBuilder::new()
|
||||
|
|
@ -110,10 +175,10 @@ impl EnemySpawn {
|
|||
.with_local_transform(rb_transform)
|
||||
.with_script(Script::new(enemy)),
|
||||
)
|
||||
.with_mass(1.0)
|
||||
.with_mass(10.0)
|
||||
// Turn off gravity for tile
|
||||
.with_gravity_scale(1.)
|
||||
.with_lin_damping(2.0)
|
||||
.with_lin_damping(0.0)
|
||||
// Set tile to be static and not rotate
|
||||
.with_rotation_locked(true)
|
||||
.with_body_type(RigidBodyType::Dynamic)
|
||||
|
|
@ -123,7 +188,7 @@ impl EnemySpawn {
|
|||
impl ScriptTrait for EnemySpawn {
|
||||
fn on_init(&mut self, context: &mut ScriptContext) {
|
||||
let resource_manager: &ResourceManager = &context.resource_manager;
|
||||
self.spawn_enemy(&mut context.scene.graph, resource_manager);
|
||||
self.spawn_enemy(&mut context.scene.graph, resource_manager, 0.0);
|
||||
// self.enemy.on_init(context);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -110,6 +110,6 @@ impl Plugin for Game {
|
|||
let graph: &mut Graph = &mut context.scenes[self.scene].graph;
|
||||
let resource_manager: &ResourceManager = &context.resource_manager;
|
||||
build_map(graph, resource_manager);
|
||||
EnemySpawn::new().spawn_enemy(graph, resource_manager);
|
||||
EnemySpawn::new().spawn_enemy(graph, resource_manager, 0.0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue