use std::{hash::Hash, time::Duration}; use animation::AnimBundle; use bevy::{ecs::system::SystemId, prelude::*, sprite::MaterialMesh2dBundle, utils::HashMap}; use bevy_rapier2d::prelude::*; use crate::{AppState, METER}; use super::{scene::PlayerCoords, set::IngameSet}; mod animation; #[derive(Component)] struct Player { move_cooldown: Timer, } impl Default for Player { fn default() -> Self { Self { move_cooldown: Timer::from_seconds(0.01, TimerMode::Repeating), } } } #[derive(Resource)] pub struct PlayerSpawnOneshot(pub SystemId); impl FromWorld for PlayerSpawnOneshot { fn from_world(world: &mut World) -> Self { Self(world.register_system(add_player)) } } pub(super) fn player_plugin(app: &mut App) { app.add_systems(Update, (move_player,)) .init_resource::(); } #[derive(Component, Hash, PartialEq, Eq, Default)] enum PlayerAnimations { #[default] Idle, Walk, } fn debug_player_pos(query: Query<&Transform, With>) { let trans = query.single(); dbg!(trans); } fn move_player( kb_input: Res>, mut query: Query<( &mut Velocity, &Transform, &mut Player, &mut KinematicCharacterController, )>, mut camera_query: Query<&mut Transform, (With, Without)>, time: Res