This commit is contained in:
CoCo_Sol 2024-02-21 19:02:22 +01:00
parent 34557956e4
commit 9d392e3b08
9 changed files with 77 additions and 0 deletions

7
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,7 @@
{
"cSpell.words": [
"despawn",
"Despawns",
"Perlin"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

View file

@ -1,11 +1,24 @@
//! The main entry point of the game.
use bevy::prelude::*;
use border_wars::map::generation::{MapGenerationPlugin, StartMapGeneration};
use border_wars::map::renderer::RendererPlugin;
use border_wars::scenes::ScenesPlugin;
use border_wars::CurrentScene;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(ScenesPlugin)
.add_plugins(MapGenerationPlugin)
.add_plugins(RendererPlugin)
.add_systems(OnEnter(CurrentScene::Game), gen_map)
.run();
}
fn gen_map(mut event: EventWriter<StartMapGeneration>) {
event.send(StartMapGeneration {
seed: 5667,
radius: 5,
})
}

Binary file not shown.

View file

@ -2,6 +2,7 @@
pub mod generation;
pub mod hex;
pub mod renderer;
use bevy::prelude::*;

View file

@ -0,0 +1,56 @@
//! All functions related to the rendering of the map.
use bevy::prelude::*;
use super::Tile;
use crate::map::TilePosition;
/// A plugin to render the map.
pub struct RendererPlugin;
impl Plugin for RendererPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Startup, setup_camera).add_systems(
Update,
render_map.run_if(in_state(crate::CurrentScene::Game)),
);
}
}
/// Sets up the camera.
fn setup_camera(mut commands: Commands) {
commands.spawn(Camera2dBundle::default());
}
impl Tile {
/// Returns the texture handle of the tile.
pub fn get_texture(&self, asset_server: &AssetServer) -> Handle<Image> {
match self {
Tile::Grass => asset_server.load("tiles/grass.png"),
Tile::Forest => asset_server.load("tiles/forest.png"),
Tile::Hill => asset_server.load("tiles/hill.png"),
}
}
}
/// Renders the map.
fn render_map(
query: Query<(Entity, &TilePosition, &Tile), Changed<Tile>>,
mut commands: Commands,
asset_server: Res<AssetServer>,
) {
for (entity, position, tile) in query.iter() {
let pixel_position_ratio = position.to_pixel_coordinates();
let pixel_position = (50. * pixel_position_ratio.x, pixel_position_ratio.y * 30.);
commands.entity(entity).insert(SpriteBundle {
transform: Transform::from_translation(Vec3 {
x: pixel_position.0,
y: pixel_position.1,
z: 0.,
}),
texture: tile.get_texture(&*asset_server),
..default()
});
}
}