Compare commits
5 commits
b08f911599
...
750e6fbd95
Author | SHA1 | Date | |
---|---|---|---|
Yash Karandikar | 750e6fbd95 | ||
Yash Karandikar | deb18f852b | ||
Yash Karandikar | 798f2d491b | ||
Yash Karandikar | ca4a634704 | ||
Yash Karandikar | 5cbd542638 |
10
Cargo.lock
generated
10
Cargo.lock
generated
|
@ -196,6 +196,7 @@ version = "0.5.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c6b14f8ba7c373fdf7bd27547bb95f2849b2569bf02bbf3d19ca54e9d692de4f"
|
||||
dependencies = [
|
||||
"bevy_dylib",
|
||||
"bevy_internal",
|
||||
"syn",
|
||||
]
|
||||
|
@ -308,6 +309,15 @@ dependencies = [
|
|||
"parking_lot",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bevy_dylib"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "efa62c7c03470969539a07337bf8c5694c0b952678fd081d68b6331842134b85"
|
||||
dependencies = [
|
||||
"bevy_internal",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bevy_dynamic_plugin"
|
||||
version = "0.5.0"
|
||||
|
|
|
@ -5,5 +5,6 @@ edition = "2021"
|
|||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
bevy = "0.5"
|
||||
[dependencies.bevy]
|
||||
version = "0.5"
|
||||
features = ["dynamic"]
|
142
src/main.rs
142
src/main.rs
|
@ -1,18 +1,20 @@
|
|||
use bevy::{prelude::*, sprite::collide_aabb::Collision};
|
||||
use bevy::{
|
||||
prelude::*,
|
||||
render::{camera::Camera, render_graph::base::camera::CAMERA_2D},
|
||||
};
|
||||
|
||||
#[derive(Default)]
|
||||
#[derive(Default, Debug)]
|
||||
struct Player {
|
||||
entity: Option<Entity>,
|
||||
x: usize,
|
||||
y: usize
|
||||
x: isize,
|
||||
y: isize,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct GameState {
|
||||
player: Player,
|
||||
score: u32,
|
||||
camera_should_focus: Vec3,
|
||||
camera_is_focused: Vec3
|
||||
camera_focus: Vec3,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
@ -20,52 +22,116 @@ fn main() {
|
|||
.init_resource::<GameState>()
|
||||
.add_plugins(DefaultPlugins)
|
||||
.add_startup_system(setup.system())
|
||||
.add_system(movement.system())
|
||||
.add_system(focus_camera.system())
|
||||
.run();
|
||||
}
|
||||
|
||||
fn setup(mut commands: Commands, asset_server: Res<AssetServer>, mut state: ResMut<GameState>) {
|
||||
fn setup(
|
||||
mut commands: Commands,
|
||||
mut state: ResMut<GameState>,
|
||||
mut materials: ResMut<Assets<ColorMaterial>>,
|
||||
) {
|
||||
state.score = 0;
|
||||
// assuming that bounds are (900, 600)
|
||||
state.player.x = 450;
|
||||
state.player.y = 600;
|
||||
state.player.x = 0;
|
||||
state.player.y = -50;
|
||||
|
||||
// cameras
|
||||
commands.spawn_bundle(OrthographicCameraBundle::new_2d());
|
||||
commands.spawn_bundle(UiCameraBundle::default());
|
||||
|
||||
// create the player
|
||||
state.player.entity = Some(
|
||||
commands
|
||||
.spawn_bundle(SpriteBundle {
|
||||
material: materials.add(Color::GOLD.into()),
|
||||
transform: Transform::from_xyz(0.0, -50.0, 1.0),
|
||||
sprite: Sprite::new(Vec2::new(30.0, 30.0)),
|
||||
..Default::default()
|
||||
})
|
||||
.id(),
|
||||
);
|
||||
|
||||
// Add walls!
|
||||
let wall_thickness = 10.0;
|
||||
let bounds = Vec2::new(900.0, 600.0);
|
||||
|
||||
// left
|
||||
commands
|
||||
.spawn_bundle(SpriteBundle {
|
||||
transform: Transform::from_xyz(-bounds.x / 2.0, 0.0, 0.0),
|
||||
sprite: Sprite::new(Vec2::new(wall_thickness, bounds.y + wall_thickness)),
|
||||
..Default::default()
|
||||
})
|
||||
.insert(Collision::Left);
|
||||
commands.spawn_bundle(SpriteBundle {
|
||||
transform: Transform::from_xyz(-bounds.x / 2.0, 0.0, 0.0),
|
||||
sprite: Sprite::new(Vec2::new(wall_thickness, bounds.y + wall_thickness)),
|
||||
..Default::default()
|
||||
});
|
||||
// right
|
||||
commands
|
||||
.spawn_bundle(SpriteBundle {
|
||||
transform: Transform::from_xyz(bounds.x / 2.0, 0.0, 0.0),
|
||||
sprite: Sprite::new(Vec2::new(wall_thickness, bounds.y + wall_thickness)),
|
||||
..Default::default()
|
||||
})
|
||||
.insert(Collision::Right);
|
||||
commands.spawn_bundle(SpriteBundle {
|
||||
transform: Transform::from_xyz(bounds.x / 2.0, 0.0, 0.0),
|
||||
sprite: Sprite::new(Vec2::new(wall_thickness, bounds.y + wall_thickness)),
|
||||
..Default::default()
|
||||
});
|
||||
// bottom
|
||||
commands
|
||||
.spawn_bundle(SpriteBundle {
|
||||
transform: Transform::from_xyz(0.0, -bounds.y / 2.0, 0.0),
|
||||
sprite: Sprite::new(Vec2::new(bounds.x + wall_thickness, wall_thickness)),
|
||||
..Default::default()
|
||||
})
|
||||
.insert(Collision::Bottom);
|
||||
commands
|
||||
.spawn_bundle(SpriteBundle {
|
||||
transform: Transform::from_xyz(0.0, bounds.y / 2.0, 0.0),
|
||||
sprite: Sprite::new(Vec2::new(bounds.x + wall_thickness, wall_thickness)),
|
||||
..Default::default()
|
||||
})
|
||||
.insert(Collision::Top);
|
||||
}
|
||||
commands.spawn_bundle(SpriteBundle {
|
||||
transform: Transform::from_xyz(0.0, -bounds.y / 2.0, 0.0),
|
||||
sprite: Sprite::new(Vec2::new(bounds.x + wall_thickness, wall_thickness)),
|
||||
..Default::default()
|
||||
});
|
||||
commands.spawn_bundle(SpriteBundle {
|
||||
transform: Transform::from_xyz(0.0, bounds.y / 2.0, 0.0),
|
||||
sprite: Sprite::new(Vec2::new(bounds.x + wall_thickness, wall_thickness)),
|
||||
..Default::default()
|
||||
});
|
||||
}
|
||||
|
||||
fn movement(
|
||||
keyboard_input: Res<Input<KeyCode>>,
|
||||
mut query: Query<&mut Transform>,
|
||||
mut game: ResMut<GameState>,
|
||||
) {
|
||||
let mut moved = false;
|
||||
if keyboard_input.pressed(KeyCode::Left) {
|
||||
game.player.x -= 5;
|
||||
moved = true;
|
||||
}
|
||||
if keyboard_input.pressed(KeyCode::Right) {
|
||||
game.player.x += 5;
|
||||
moved = true;
|
||||
}
|
||||
if keyboard_input.pressed(KeyCode::Up) {
|
||||
game.player.y += 5;
|
||||
moved = true;
|
||||
}
|
||||
if keyboard_input.pressed(KeyCode::Down) {
|
||||
game.player.y -= 5;
|
||||
moved = true;
|
||||
}
|
||||
|
||||
// limit movement of player
|
||||
game.player.x = game.player.x.min(435).max(-435);
|
||||
game.player.y = game.player.y.min(285).max(-285);
|
||||
|
||||
if moved {
|
||||
if let Some(entity) = game.player.entity {
|
||||
*query.get_mut(entity).unwrap() = Transform {
|
||||
translation: Vec3::new(game.player.x as f32, game.player.y as f32, 0.0),
|
||||
..Default::default()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn focus_camera(
|
||||
mut game: ResMut<GameState>,
|
||||
mut transforms: QuerySet<(Query<(&mut Transform, &Camera)>, Query<&Transform>)>,
|
||||
) {
|
||||
if let Some(player_entity) = game.player.entity {
|
||||
if let Ok(player_transform) = transforms.q1().get(player_entity) {
|
||||
game.camera_focus = player_transform.translation;
|
||||
}
|
||||
}
|
||||
|
||||
for (mut transform, camera) in transforms.q0_mut().iter_mut() {
|
||||
if camera.name == Some(CAMERA_2D.to_string()) {
|
||||
*transform.translation = *game.camera_focus;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue