diff --git a/game/Cargo.toml b/game/Cargo.toml index 6bc0386..b4caebe 100644 --- a/game/Cargo.toml +++ b/game/Cargo.toml @@ -16,8 +16,8 @@ serde_json = "1.0.64" thiserror = "1.0" chrono = "0.4" rust-embed = "6.2.0" -raylib = { version = "3.5", git = "https://github.com/ewpratten/raylib-rs", rev = "2399e17d7bf299f34c8e618a9ab140b274639cfb", features = [ - "with_serde" +raylib = { version = "3.5", git = "https://github.com/ewpratten/raylib-rs", rev = "2ae949cb3488dd1bb052ece71d61021c8dd6e910", features = [ + "serde" ] } puffin = "0.9" puffin_http = "0.6" diff --git a/game/src/character/mod.rs b/game/src/character/mod.rs index 2535864..cd893f7 100644 --- a/game/src/character/mod.rs +++ b/game/src/character/mod.rs @@ -5,12 +5,15 @@ use raylib::math::Vector2; #[derive(Debug, Clone)] pub struct MainCharacter { pub position: Vector2, + pub size: Vector2, } impl MainCharacter { - pub fn new(position: Vector2) -> Self { - Self { position } + Self { + position, + size: Vector2::new(60.0, 80.0), + } } pub fn apply_force(&mut self, force: Vector2) { diff --git a/game/src/character/render.rs b/game/src/character/render.rs index bf29cf8..5b7d241 100644 --- a/game/src/character/render.rs +++ b/game/src/character/render.rs @@ -1,3 +1,5 @@ +use std::ops::{Div, Sub}; + use raylib::prelude::*; use crate::utilities::non_ref_raylib::HackedRaylibHandle; @@ -9,5 +11,5 @@ pub fn render_character_in_camera_space( player: &MainCharacter, ) { - raylib.draw_rectangle_v(player.position, Vector2::new(10.0, 20.0), Color::WHITE); + raylib.draw_rectangle_v(player.position.sub(player.size.div(2.0)), player.size, Color::WHITE); } diff --git a/game/src/scenes/ingame_scene/mod.rs b/game/src/scenes/ingame_scene/mod.rs index 934785b..33d8810 100644 --- a/game/src/scenes/ingame_scene/mod.rs +++ b/game/src/scenes/ingame_scene/mod.rs @@ -1,7 +1,11 @@ use dirty_fsm::{Action, ActionFlag}; use raylib::prelude::*; -use crate::{character::MainCharacter, context::GameContext, utilities::render_layer::{FrameUpdate, ScreenSpaceRender, WorldSpaceRender}}; +use crate::{ + character::MainCharacter, + context::GameContext, + utilities::render_layer::{FrameUpdate, ScreenSpaceRender, WorldSpaceRender}, +}; use super::{Scenes, ScreenError}; use tracing::{debug, trace}; @@ -13,7 +17,7 @@ mod world; #[derive(Debug)] pub struct InGameScreen { camera: Camera2D, - player: MainCharacter + player: MainCharacter, } impl InGameScreen { @@ -26,7 +30,7 @@ impl InGameScreen { rotation: 0.0, zoom: 1.0, }, - player: MainCharacter::new(Vector2::zero()), + player: MainCharacter::new(Vector2::new(0.0, -45.0)), } } } diff --git a/game/src/scenes/ingame_scene/update.rs b/game/src/scenes/ingame_scene/update.rs index 278da4b..7432112 100644 --- a/game/src/scenes/ingame_scene/update.rs +++ b/game/src/scenes/ingame_scene/update.rs @@ -8,7 +8,11 @@ use raylib::prelude::*; impl FrameUpdate for InGameScreen { fn update(&mut self, raylib: &HackedRaylibHandle, delta_seconds: &Duration) { // Set the camera's offset based on screen size - self.camera.offset = raylib.get_screen_size().div(2.0); + self.camera.offset = raylib.get_screen_size().div(Vector2::new(2.0, 1.25)); + self.camera.target = Vector2::new( + self.player.position.x, + self.camera.target.y, + ); // Check the only possible keyboard inputs let is_jump = raylib.is_key_down(KeyboardKey::KEY_SPACE); diff --git a/game/src/scenes/ingame_scene/world.rs b/game/src/scenes/ingame_scene/world.rs index 84b8c85..01dcbc9 100644 --- a/game/src/scenes/ingame_scene/world.rs +++ b/game/src/scenes/ingame_scene/world.rs @@ -1,3 +1,5 @@ +use std::ops::Mul; + use super::InGameScreen; use crate::{ character::render::render_character_in_camera_space, @@ -9,5 +11,17 @@ impl WorldSpaceRender for InGameScreen { fn render_world_space(&self, raylib: &mut RaylibMode2D<'_, HackedRaylibHandle>) { // Render the player render_character_in_camera_space(raylib, &self.player); + + // Render the floor as a line + let screen_world_zero = raylib.get_screen_to_world2D(Vector2::zero(), self.camera); + let screen_world_size = raylib.get_screen_to_world2D(raylib.get_screen_size().mul(2.0), self.camera); + + raylib.draw_rectangle( + screen_world_zero.x as i32, + 0, + screen_world_size.x as i32, + 5, + Color::WHITE, + ); } }