use crate::app_state::overworld::OverworldEntity;
use crate::core::animation::components::SpriteAnimationClip;
use crate::core::basic_components::{Direction, Facing, Speed};
use crate::core::character_asset::CharacterAnimator;
use bevy::prelude::*;
#[derive(Component)]
pub(crate) struct PlayerControlled;
#[derive(Clone, Component)]
#[component(storage = "SparseSet")]
pub(crate) struct StateIdle;
#[derive(Clone, Component)]
#[component(storage = "SparseSet")]
pub(crate) struct StateWalking;
#[derive(Clone, Component)]
#[component(storage = "SparseSet")]
pub(crate) struct StateRunning;
#[derive(Bundle)]
pub(crate) struct CharacterBundle {
pub overworld_entity: OverworldEntity,
pub facing: Facing,
pub speed: Speed,
pub sprite: Sprite,
pub anim_clip: SpriteAnimationClip,
pub animator: CharacterAnimator,
pub transform: Transform,
pub global_transform: GlobalTransform,
}
impl CharacterBundle {
pub fn new(
spawn_pos: Vec2,
facing: Direction,
speed: f32,
anim_clip: SpriteAnimationClip,
animator: CharacterAnimator,
) -> Self {
Self {
overworld_entity: OverworldEntity(),
facing: Facing { value: facing },
speed: Speed { value: speed },
sprite: Sprite::default(),
anim_clip,
animator,
transform: Transform::from_translation(spawn_pos.extend(0.0)),
global_transform: GlobalTransform::default(),
}
}
}