mirror of
https://github.com/Noratrieb/game-wip-dontplay.git
synced 2026-01-17 04:45:02 +01:00
Add a surface/underground divide
This commit is contained in:
parent
6f1c351b5f
commit
bb25d62561
4 changed files with 16 additions and 7 deletions
BIN
res/tiles.png
BIN
res/tiles.png
Binary file not shown.
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.4 KiB |
|
|
@ -86,7 +86,7 @@ impl App {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn do_rendering(&mut self) {
|
fn do_rendering(&mut self) {
|
||||||
self.rw.clear(Color::BLACK);
|
self.rw.clear(Color::rgb(55, 221, 231));
|
||||||
self.game.draw_world(&mut self.rw, &self.res);
|
self.game.draw_world(&mut self.rw, &self.res);
|
||||||
self.sf_egui
|
self.sf_egui
|
||||||
.do_frame(|ctx| {
|
.do_frame(|ctx| {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use crate::{
|
||||||
graphics::{ScreenPos, ScreenPosScalar, NATIVE_RESOLUTION},
|
graphics::{ScreenPos, ScreenPosScalar, NATIVE_RESOLUTION},
|
||||||
math::{wp_to_tp, WorldPos, WorldPosScalar},
|
math::{wp_to_tp, WorldPos, WorldPosScalar},
|
||||||
res::Res,
|
res::Res,
|
||||||
world::{TilePos, World},
|
world::{Tile, TilePos, World},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct GameState {
|
pub struct GameState {
|
||||||
|
|
@ -16,7 +16,10 @@ impl GameState {
|
||||||
let mut s = Sprite::with_texture(&res.tile_atlas);
|
let mut s = Sprite::with_texture(&res.tile_atlas);
|
||||||
for_each_tile_on_screen(self.camera_offset, |tp, sp| {
|
for_each_tile_on_screen(self.camera_offset, |tp, sp| {
|
||||||
let tile = self.world.tile_at_mut(tp);
|
let tile = self.world.tile_at_mut(tp);
|
||||||
s.set_texture_rect(Rect::new(tile.id as i32 * 32, 0, 32, 32));
|
if tile.id == Tile::AIR {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
s.set_texture_rect(Rect::new((tile.id - 1) as i32 * 32, 0, 32, 32));
|
||||||
s.set_position(sp.to_sf_vec());
|
s.set_position(sp.to_sf_vec());
|
||||||
rw.draw(&s);
|
rw.draw(&s);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
12
src/world.rs
12
src/world.rs
|
|
@ -28,7 +28,7 @@ impl World {
|
||||||
/// Loads or generates the containing chunk if necessary.
|
/// Loads or generates the containing chunk if necessary.
|
||||||
pub fn tile_at_mut(&mut self, pos: TilePos) -> &mut Tile {
|
pub fn tile_at_mut(&mut self, pos: TilePos) -> &mut Tile {
|
||||||
let (chk, local) = pos.to_chunk_and_local();
|
let (chk, local) = pos.to_chunk_and_local();
|
||||||
let chk = self.chunks.entry(chk).or_insert_with(Chunk::new_rand);
|
let chk = self.chunks.entry(chk).or_insert_with(|| Chunk::gen(chk));
|
||||||
chk.at_mut(local)
|
chk.at_mut(local)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -107,11 +107,13 @@ pub struct Chunk {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Chunk {
|
impl Chunk {
|
||||||
pub fn new_rand() -> Self {
|
pub fn gen(pos: ChunkPos) -> Self {
|
||||||
let mut rng = thread_rng();
|
let mut rng = thread_rng();
|
||||||
let mut tiles = [Tile { id: 0 }; CHUNK_N_TILES];
|
let mut tiles = [Tile { id: 0 }; CHUNK_N_TILES];
|
||||||
|
if pos.y > 40 {
|
||||||
for b in &mut tiles {
|
for b in &mut tiles {
|
||||||
b.id = rng.gen_range(0..8);
|
b.id = rng.gen_range(1..5);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Self { tiles }
|
Self { tiles }
|
||||||
}
|
}
|
||||||
|
|
@ -127,3 +129,7 @@ type TileId = u16;
|
||||||
pub struct Tile {
|
pub struct Tile {
|
||||||
pub id: TileId,
|
pub id: TileId,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Tile {
|
||||||
|
pub const AIR: TileId = 0;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue