cleanup
This commit is contained in:
@@ -32,6 +32,7 @@ use bevy_trenchbroom::prelude::*;
|
||||
use control::controller::CharacterControllerPlugin;
|
||||
use loading_assets::AudioAssets;
|
||||
use utils::billboards;
|
||||
use utils::sprite_3d_animation;
|
||||
use utils::squish_animation;
|
||||
|
||||
#[derive(Resource, Reflect, Debug)]
|
||||
@@ -112,6 +113,7 @@ fn main() {
|
||||
app.add_plugins(backpack::plugin);
|
||||
app.add_plugins(loading_assets::LoadingPlugin);
|
||||
app.add_plugins(loading_map::plugin);
|
||||
app.add_plugins(sprite_3d_animation::plugin);
|
||||
|
||||
app.init_state::<GameState>();
|
||||
|
||||
|
||||
@@ -8,13 +8,14 @@ use crate::{
|
||||
player::{Player, PlayerRig},
|
||||
sounds::PlaySound,
|
||||
tb_entities::EnemySpawn,
|
||||
utils::sprite_3d_animation::AnimationTimer,
|
||||
};
|
||||
use avian3d::prelude::{
|
||||
Collider, CollisionLayers, CollisionStarted, LayerMask, PhysicsLayer, Sensor,
|
||||
};
|
||||
use bevy::{pbr::NotShadowCaster, prelude::*};
|
||||
use bevy_polyline::prelude::*;
|
||||
use bevy_sprite3d::{Sprite3d, Sprite3dBuilder, Sprite3dParams};
|
||||
use bevy_sprite3d::{Sprite3dBuilder, Sprite3dParams};
|
||||
use std::f32::consts::PI;
|
||||
|
||||
#[derive(Component)]
|
||||
@@ -36,16 +37,11 @@ struct ShotAssets {
|
||||
layout: Handle<TextureAtlasLayout>,
|
||||
}
|
||||
|
||||
//TODO: give its own plugin
|
||||
#[derive(Component, Deref, DerefMut)]
|
||||
struct AnimationTimer(Timer);
|
||||
|
||||
pub fn plugin(app: &mut App) {
|
||||
app.add_systems(OnEnter(GameState::Playing), setup);
|
||||
app.add_systems(
|
||||
Update,
|
||||
(update, shot_collision, enemy_hit, timeout, animate_sprite)
|
||||
.run_if(in_state(GameState::Playing)),
|
||||
(update, shot_collision, enemy_hit, timeout).run_if(in_state(GameState::Playing)),
|
||||
);
|
||||
app.add_observer(on_trigger_state);
|
||||
}
|
||||
@@ -155,26 +151,6 @@ fn enemy_hit(
|
||||
}
|
||||
}
|
||||
|
||||
fn animate_sprite(
|
||||
mut commands: Commands,
|
||||
time: Res<Time>,
|
||||
mut query: Query<(Entity, &mut AnimationTimer, &mut Sprite3d)>,
|
||||
) {
|
||||
for (e, mut timer, mut sprite_3d) in query.iter_mut() {
|
||||
timer.tick(time.delta());
|
||||
if timer.just_finished() {
|
||||
let length = sprite_3d.texture_atlas_keys.as_ref().unwrap().len();
|
||||
let atlas = sprite_3d.texture_atlas.as_mut().unwrap();
|
||||
|
||||
if atlas.index < length - 1 {
|
||||
atlas.index = atlas.index.saturating_add(1) % length;
|
||||
} else {
|
||||
commands.entity(e).despawn_recursive();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn shot_collision(
|
||||
mut commands: Commands,
|
||||
mut collision_event_reader: EventReader<CollisionStarted>,
|
||||
@@ -219,7 +195,7 @@ fn shot_collision(
|
||||
Billboard,
|
||||
Transform::from_translation(shot_pos),
|
||||
NotShadowCaster,
|
||||
AnimationTimer(Timer::from_seconds(0.01, TimerMode::Repeating)),
|
||||
AnimationTimer::new(Timer::from_seconds(0.01, TimerMode::Repeating)),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
pub mod billboards;
|
||||
pub mod sprite_3d_animation;
|
||||
pub mod squish_animation;
|
||||
|
||||
36
src/utils/sprite_3d_animation.rs
Normal file
36
src/utils/sprite_3d_animation.rs
Normal file
@@ -0,0 +1,36 @@
|
||||
use bevy::prelude::*;
|
||||
use bevy_sprite3d::Sprite3d;
|
||||
|
||||
#[derive(Component, Reflect, Deref, DerefMut)]
|
||||
#[reflect(Component)]
|
||||
pub struct AnimationTimer(Timer);
|
||||
|
||||
impl AnimationTimer {
|
||||
pub fn new(t: Timer) -> Self {
|
||||
Self(t)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn plugin(app: &mut App) {
|
||||
app.add_systems(Update, animate_sprite);
|
||||
}
|
||||
|
||||
fn animate_sprite(
|
||||
mut commands: Commands,
|
||||
time: Res<Time>,
|
||||
mut query: Query<(Entity, &mut AnimationTimer, &mut Sprite3d)>,
|
||||
) {
|
||||
for (e, mut timer, mut sprite_3d) in query.iter_mut() {
|
||||
timer.tick(time.delta());
|
||||
if timer.just_finished() {
|
||||
let length = sprite_3d.texture_atlas_keys.as_ref().unwrap().len();
|
||||
let atlas = sprite_3d.texture_atlas.as_mut().unwrap();
|
||||
|
||||
if atlas.index < length - 1 {
|
||||
atlas.index = atlas.index.saturating_add(1) % length;
|
||||
} else {
|
||||
commands.entity(e).despawn_recursive();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user