Bound player
This commit is contained in:
@@ -0,0 +1,25 @@
|
|||||||
|
use bevy::prelude::*;
|
||||||
|
|
||||||
|
use crate::{collision::Collider, player::Player};
|
||||||
|
|
||||||
|
fn constrain_player(
|
||||||
|
mut player: Single<(&Collider, &mut Transform), With<Player>>,
|
||||||
|
camera: Single<&Camera, With<Camera2d>>,
|
||||||
|
) {
|
||||||
|
let viewport = camera
|
||||||
|
.logical_viewport_size()
|
||||||
|
.unwrap_or(Vec2::new(1920.0, 1080.0));
|
||||||
|
let half_width = player.0.size.x / 2.0;
|
||||||
|
let border = viewport.x / 2.0 - half_width;
|
||||||
|
|
||||||
|
// Restrict player position
|
||||||
|
player.1.translation.x = player.1.translation.x.clamp(-border, border);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct BoundsPlugin;
|
||||||
|
|
||||||
|
impl Plugin for BoundsPlugin {
|
||||||
|
fn build(&self, app: &mut App) {
|
||||||
|
app.add_systems(Update, constrain_player);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
use bevy::{prelude::*, window::PresentMode};
|
use bevy::{prelude::*, window::PresentMode};
|
||||||
|
|
||||||
use crate::background::BackgroundPlugin;
|
use crate::background::BackgroundPlugin;
|
||||||
|
use crate::bounds::BoundsPlugin;
|
||||||
use crate::camera::CameraPlugin;
|
use crate::camera::CameraPlugin;
|
||||||
use crate::collision::CollisionPlugin;
|
use crate::collision::CollisionPlugin;
|
||||||
use crate::obstacle::ObstaclePlugin;
|
use crate::obstacle::ObstaclePlugin;
|
||||||
use crate::player::PlayerPlugin;
|
use crate::player::PlayerPlugin;
|
||||||
|
|
||||||
mod background;
|
mod background;
|
||||||
|
mod bounds;
|
||||||
mod camera;
|
mod camera;
|
||||||
mod collision;
|
mod collision;
|
||||||
mod obstacle;
|
mod obstacle;
|
||||||
@@ -28,5 +30,6 @@ fn main() {
|
|||||||
.add_plugins(CameraPlugin) // Camera
|
.add_plugins(CameraPlugin) // Camera
|
||||||
.add_plugins(CollisionPlugin) // Collisions
|
.add_plugins(CollisionPlugin) // Collisions
|
||||||
.add_plugins(ObstaclePlugin)
|
.add_plugins(ObstaclePlugin)
|
||||||
|
.add_plugins(BoundsPlugin)
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user