Bruh
This commit is contained in:
69
src/player.rs
Normal file
69
src/player.rs
Normal file
@@ -0,0 +1,69 @@
|
||||
use bevy::prelude::*;
|
||||
use bevy_ecs_ldtk::prelude::*;
|
||||
use bevy_rapier2d::dynamics::Velocity;
|
||||
|
||||
use crate::{climbing::Climber, inventory::Inventory};
|
||||
use crate::{colliders::ColliderBundle, ground_detection::GroundDetection};
|
||||
|
||||
#[derive(Copy, Clone, Eq, PartialEq, Debug, Default, Component)]
|
||||
pub struct Player;
|
||||
|
||||
#[derive(Clone, Default, Bundle, LdtkEntity)]
|
||||
pub struct PlayerBundle {
|
||||
#[sprite_bundle("player.png")]
|
||||
pub sprite_bundle: SpriteBundle,
|
||||
#[from_entity_instance]
|
||||
pub collider_bundle: ColliderBundle,
|
||||
pub player: Player,
|
||||
#[worldly]
|
||||
pub worldly: Worldly,
|
||||
pub climber: Climber,
|
||||
pub ground_detection: GroundDetection,
|
||||
|
||||
// Build Items Component manually by using `impl From<&EntityInstance>`
|
||||
#[from_entity_instance]
|
||||
items: Inventory,
|
||||
|
||||
// The whole EntityInstance can be stored directly as an EntityInstance component
|
||||
#[from_entity_instance]
|
||||
entity_instance: EntityInstance,
|
||||
}
|
||||
|
||||
pub fn player_movement(
|
||||
input: Res<ButtonInput<KeyCode>>,
|
||||
mut query: Query<(&mut Velocity, &mut Climber, &GroundDetection), With<Player>>,
|
||||
) {
|
||||
for (mut velocity, mut climber, ground_detection) in &mut query {
|
||||
let right = if input.pressed(KeyCode::KeyD) { 1. } else { 0. };
|
||||
let left = if input.pressed(KeyCode::KeyA) { 1. } else { 0. };
|
||||
|
||||
velocity.linvel.x = (right - left) * 200.;
|
||||
|
||||
if climber.intersecting_climbables.is_empty() {
|
||||
climber.climbing = false;
|
||||
} else if input.just_pressed(KeyCode::KeyW) || input.just_pressed(KeyCode::KeyS) {
|
||||
climber.climbing = true;
|
||||
}
|
||||
|
||||
if climber.climbing {
|
||||
let up = if input.pressed(KeyCode::KeyW) { 1. } else { 0. };
|
||||
let down = if input.pressed(KeyCode::KeyS) { 1. } else { 0. };
|
||||
|
||||
velocity.linvel.y = (up - down) * 200.;
|
||||
}
|
||||
|
||||
if input.just_pressed(KeyCode::Space) && (ground_detection.on_ground || climber.climbing) {
|
||||
velocity.linvel.y = 500.;
|
||||
climber.climbing = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct PlayerPlugin;
|
||||
|
||||
impl Plugin for PlayerPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_systems(Update, player_movement)
|
||||
.register_ldtk_entity::<PlayerBundle>("Player");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user