mirror of
https://github.com/Noratrieb/game-wip-dontplay.git
synced 2026-01-17 04:45:02 +01:00
Move the player inside World
This commit is contained in:
parent
4fd826c218
commit
390a4d45d2
6 changed files with 54 additions and 46 deletions
58
src/app.rs
58
src/app.rs
|
|
@ -110,21 +110,22 @@ impl App {
|
||||||
} else {
|
} else {
|
||||||
3.0
|
3.0
|
||||||
};
|
};
|
||||||
self.game.player.hspeed = 0.;
|
self.game.world.player.hspeed = 0.;
|
||||||
if self.input.down(Key::A) {
|
if self.input.down(Key::A) {
|
||||||
self.game.player.hspeed = -spd;
|
self.game.world.player.hspeed = -spd;
|
||||||
}
|
}
|
||||||
if self.input.down(Key::D) {
|
if self.input.down(Key::D) {
|
||||||
self.game.player.hspeed = spd;
|
self.game.world.player.hspeed = spd;
|
||||||
}
|
}
|
||||||
if self.input.down(Key::W) && self.game.player.can_jump() {
|
if self.input.down(Key::W) && self.game.world.player.can_jump() {
|
||||||
self.game.player.vspeed = -10.0;
|
self.game.world.player.vspeed = -10.0;
|
||||||
self.game.player.jumps_left = 0;
|
self.game.world.player.jumps_left = 0;
|
||||||
}
|
}
|
||||||
self.game.player.down_intent = self.input.down(Key::S);
|
self.game.world.player.down_intent = self.input.down(Key::S);
|
||||||
let terminal_velocity = 60.0;
|
let terminal_velocity = 60.0;
|
||||||
self.game.player.vspeed = self
|
self.game.world.player.vspeed = self
|
||||||
.game
|
.game
|
||||||
|
.world
|
||||||
.player
|
.player
|
||||||
.vspeed
|
.vspeed
|
||||||
.clamp(-terminal_velocity, terminal_velocity);
|
.clamp(-terminal_velocity, terminal_velocity);
|
||||||
|
|
@ -149,37 +150,37 @@ impl App {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
imm_dbg!(on_screen_tile_ents.len());
|
imm_dbg!(on_screen_tile_ents.len());
|
||||||
self.game
|
self.game.world.player.col_en.move_y(
|
||||||
.player
|
self.game.world.player.vspeed,
|
||||||
.col_en
|
|player_en, off| {
|
||||||
.move_y(self.game.player.vspeed, |player_en, off| {
|
|
||||||
let mut col = false;
|
let mut col = false;
|
||||||
for en in &on_screen_tile_ents {
|
for en in &on_screen_tile_ents {
|
||||||
if player_en.would_collide(&en.col, off) {
|
if player_en.would_collide(&en.col, off) {
|
||||||
if en.platform {
|
if en.platform {
|
||||||
if self.game.player.vspeed < 0. {
|
if self.game.world.player.vspeed < 0. {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// If the player's feet are below the top of the platform,
|
// If the player's feet are below the top of the platform,
|
||||||
// collision shouldn't happen
|
// collision shouldn't happen
|
||||||
let player_feet = player_en.pos.y + player_en.bb.y;
|
let player_feet = player_en.pos.y + player_en.bb.y;
|
||||||
if player_feet > en.col.pos.y || self.game.player.down_intent {
|
if player_feet > en.col.pos.y || self.game.world.player.down_intent
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
col = true;
|
col = true;
|
||||||
if self.game.player.vspeed > 0. {
|
if self.game.world.player.vspeed > 0. {
|
||||||
self.game.player.jumps_left = 1;
|
self.game.world.player.jumps_left = 1;
|
||||||
}
|
}
|
||||||
self.game.player.vspeed = 0.;
|
self.game.world.player.vspeed = 0.;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
col
|
col
|
||||||
});
|
},
|
||||||
self.game
|
);
|
||||||
.player
|
self.game.world.player.col_en.move_x(
|
||||||
.col_en
|
self.game.world.player.hspeed,
|
||||||
.move_x(self.game.player.hspeed, |player_en, off| {
|
|player_en, off| {
|
||||||
let mut col = false;
|
let mut col = false;
|
||||||
for en in &on_screen_tile_ents {
|
for en in &on_screen_tile_ents {
|
||||||
if en.platform {
|
if en.platform {
|
||||||
|
|
@ -187,13 +188,14 @@ impl App {
|
||||||
}
|
}
|
||||||
if player_en.would_collide(&en.col, off) {
|
if player_en.would_collide(&en.col, off) {
|
||||||
col = true;
|
col = true;
|
||||||
self.game.player.hspeed = 0.;
|
self.game.world.player.hspeed = 0.;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
col
|
col
|
||||||
});
|
},
|
||||||
self.game.player.vspeed += self.game.gravity;
|
);
|
||||||
let (x, y, _w, _h) = self.game.player.col_en.en.xywh();
|
self.game.world.player.vspeed += self.game.gravity;
|
||||||
|
let (x, y, _w, _h) = self.game.world.player.col_en.en.xywh();
|
||||||
self.game.camera_offset.x = (x - rt_size.x as i32 / 2).try_into().unwrap_or(0);
|
self.game.camera_offset.x = (x - rt_size.x as i32 / 2).try_into().unwrap_or(0);
|
||||||
self.game.camera_offset.y = (y - rt_size.y as i32 / 2).try_into().unwrap_or(0);
|
self.game.camera_offset.y = (y - rt_size.y as i32 / 2).try_into().unwrap_or(0);
|
||||||
}
|
}
|
||||||
|
|
@ -219,8 +221,8 @@ impl App {
|
||||||
mouse_tpos.y / CHUNK_EXTENT as TilePosScalar
|
mouse_tpos.y / CHUNK_EXTENT as TilePosScalar
|
||||||
);
|
);
|
||||||
if self.debug.freecam && self.input.pressed(Key::P) {
|
if self.debug.freecam && self.input.pressed(Key::P) {
|
||||||
self.game.player.col_en.en.pos.x = wpos.x as i32;
|
self.game.world.player.col_en.en.pos.x = wpos.x as i32;
|
||||||
self.game.player.col_en.en.pos.y = wpos.y as i32;
|
self.game.world.player.col_en.en.pos.y = wpos.y as i32;
|
||||||
}
|
}
|
||||||
if self.input.lmb_down {
|
if self.input.lmb_down {
|
||||||
let t = self.game.world.tile_at_mut(mouse_tpos, &self.game.worldgen);
|
let t = self.game.world.tile_at_mut(mouse_tpos, &self.game.worldgen);
|
||||||
|
|
|
||||||
12
src/debug.rs
12
src/debug.rs
|
|
@ -53,21 +53,21 @@ fn debug_panel_ui(
|
||||||
} else {
|
} else {
|
||||||
ui.label(format!(
|
ui.label(format!(
|
||||||
"Player Depth: {}",
|
"Player Depth: {}",
|
||||||
LengthDisp(game.player.feet_y() as f32 - WorldPos::SURFACE as f32)
|
LengthDisp(game.world.player.feet_y() as f32 - WorldPos::SURFACE as f32)
|
||||||
));
|
));
|
||||||
ui.label(format!(
|
ui.label(format!(
|
||||||
"Player offset from center: {}",
|
"Player offset from center: {}",
|
||||||
LengthDisp(game.player.col_en.en.pos.x as f32 - WorldPos::CENTER as f32)
|
LengthDisp(game.world.player.col_en.en.pos.x as f32 - WorldPos::CENTER as f32)
|
||||||
));
|
));
|
||||||
ui.label(format!(
|
ui.label(format!(
|
||||||
"Hspeed: {} ({} km/h)",
|
"Hspeed: {} ({} km/h)",
|
||||||
game.player.hspeed,
|
game.world.player.hspeed,
|
||||||
px_per_frame_to_km_h(game.player.hspeed)
|
px_per_frame_to_km_h(game.world.player.hspeed)
|
||||||
));
|
));
|
||||||
ui.label(format!(
|
ui.label(format!(
|
||||||
"Vspeed: {} ({} km/h)",
|
"Vspeed: {} ({} km/h)",
|
||||||
game.player.vspeed,
|
game.world.player.vspeed,
|
||||||
px_per_frame_to_km_h(game.player.vspeed)
|
px_per_frame_to_km_h(game.world.player.vspeed)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
ui.label("Music volume");
|
ui.label("Music volume");
|
||||||
|
|
|
||||||
14
src/game.rs
14
src/game.rs
|
|
@ -1,5 +1,3 @@
|
||||||
mod player;
|
|
||||||
|
|
||||||
use derivative::Derivative;
|
use derivative::Derivative;
|
||||||
use egui_inspect::derive::Inspect;
|
use egui_inspect::derive::Inspect;
|
||||||
use sfml::{
|
use sfml::{
|
||||||
|
|
@ -16,14 +14,11 @@ use crate::{
|
||||||
worldgen::Worldgen,
|
worldgen::Worldgen,
|
||||||
};
|
};
|
||||||
|
|
||||||
use self::player::Player;
|
|
||||||
|
|
||||||
#[derive(Derivative, Inspect)]
|
#[derive(Derivative, Inspect)]
|
||||||
#[derivative(Debug)]
|
#[derivative(Debug)]
|
||||||
pub struct GameState {
|
pub struct GameState {
|
||||||
pub camera_offset: WorldPos,
|
pub camera_offset: WorldPos,
|
||||||
pub world: World,
|
pub world: World,
|
||||||
pub player: Player,
|
|
||||||
pub gravity: f32,
|
pub gravity: f32,
|
||||||
pub tile_to_place: TileId,
|
pub tile_to_place: TileId,
|
||||||
pub current_biome: Biome,
|
pub current_biome: Biome,
|
||||||
|
|
@ -79,7 +74,7 @@ impl GameState {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
pub fn draw_entities(&mut self, rw: &mut RenderTexture) {
|
pub fn draw_entities(&mut self, rw: &mut RenderTexture) {
|
||||||
let (x, y, w, h) = self.player.col_en.en.xywh();
|
let (x, y, w, h) = self.world.player.col_en.en.xywh();
|
||||||
let mut rect_sh = RectangleShape::new();
|
let mut rect_sh = RectangleShape::new();
|
||||||
rect_sh.set_position((
|
rect_sh.set_position((
|
||||||
(x - self.camera_offset.x as i32) as f32,
|
(x - self.camera_offset.x as i32) as f32,
|
||||||
|
|
@ -90,8 +85,8 @@ impl GameState {
|
||||||
rect_sh.set_size((2., 2.));
|
rect_sh.set_size((2., 2.));
|
||||||
rect_sh.set_fill_color(Color::RED);
|
rect_sh.set_fill_color(Color::RED);
|
||||||
rect_sh.set_position((
|
rect_sh.set_position((
|
||||||
(self.player.col_en.en.pos.x - self.camera_offset.x as i32) as f32,
|
(self.world.player.col_en.en.pos.x - self.camera_offset.x as i32) as f32,
|
||||||
(self.player.col_en.en.pos.y - self.camera_offset.y as i32) as f32,
|
(self.world.player.col_en.en.pos.y - self.camera_offset.y as i32) as f32,
|
||||||
));
|
));
|
||||||
rw.draw(&rect_sh);
|
rw.draw(&rect_sh);
|
||||||
}
|
}
|
||||||
|
|
@ -147,8 +142,7 @@ impl Default for GameState {
|
||||||
spawn_point.y -= 1104;
|
spawn_point.y -= 1104;
|
||||||
Self {
|
Self {
|
||||||
camera_offset: spawn_point,
|
camera_offset: spawn_point,
|
||||||
world: Default::default(),
|
world: World::new(spawn_point),
|
||||||
player: Player::new_at(spawn_point),
|
|
||||||
gravity: 0.55,
|
gravity: 0.55,
|
||||||
tile_to_place: 1,
|
tile_to_place: 1,
|
||||||
current_biome: Biome::Surface,
|
current_biome: Biome::Surface,
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ mod game;
|
||||||
mod graphics;
|
mod graphics;
|
||||||
mod input;
|
mod input;
|
||||||
mod math;
|
mod math;
|
||||||
|
mod player;
|
||||||
mod res;
|
mod res;
|
||||||
mod stringfmt;
|
mod stringfmt;
|
||||||
mod tiles;
|
mod tiles;
|
||||||
|
|
|
||||||
15
src/world.rs
15
src/world.rs
|
|
@ -1,7 +1,7 @@
|
||||||
use egui_inspect::derive::Inspect;
|
use egui_inspect::derive::Inspect;
|
||||||
use fnv::FnvHashMap;
|
use fnv::FnvHashMap;
|
||||||
|
|
||||||
use crate::worldgen::Worldgen;
|
use crate::{math::WorldPos, player::Player, worldgen::Worldgen};
|
||||||
|
|
||||||
pub type ChunkPosScalar = u16;
|
pub type ChunkPosScalar = u16;
|
||||||
|
|
||||||
|
|
@ -11,13 +11,24 @@ pub struct ChunkPos {
|
||||||
pub y: ChunkPosScalar,
|
pub y: ChunkPosScalar,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, Inspect)]
|
#[derive(Debug, Inspect)]
|
||||||
pub struct World {
|
pub struct World {
|
||||||
/// The currently loaded chunks
|
/// The currently loaded chunks
|
||||||
chunks: FnvHashMap<ChunkPos, Chunk>,
|
chunks: FnvHashMap<ChunkPos, Chunk>,
|
||||||
/// This is the number of ticks since the world has started.
|
/// This is the number of ticks since the world has started.
|
||||||
/// In other words, the age of the world.
|
/// In other words, the age of the world.
|
||||||
pub ticks: u64,
|
pub ticks: u64,
|
||||||
|
pub player: Player,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl World {
|
||||||
|
pub fn new(spawn_point: WorldPos) -> Self {
|
||||||
|
Self {
|
||||||
|
chunks: Default::default(),
|
||||||
|
ticks: Default::default(),
|
||||||
|
player: Player::new_at(spawn_point),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl World {
|
impl World {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue