rendu de la map + fonction pour calculer position
This commit is contained in:
parent
97874f768e
commit
cb30de307e
34
src/lib.rs
34
src/lib.rs
|
@ -8,7 +8,8 @@
|
|||
#![deny(clippy::all)]
|
||||
#![deny(warnings)]
|
||||
|
||||
use bevy::prelude::Component;
|
||||
use crate::map::Tile;
|
||||
use bevy::prelude::{Component, Transform};
|
||||
|
||||
pub mod map;
|
||||
pub mod render;
|
||||
|
@ -23,8 +24,39 @@ pub struct Position {
|
|||
pub y: u8,
|
||||
}
|
||||
|
||||
impl Position {
|
||||
/// Peret de recuper la position, sous form d'un transform, d'un objet sur la carte du jeu.
|
||||
pub fn to_map_position(&self) -> Transform {
|
||||
let offset_x = self.y % 2;
|
||||
|
||||
let new_x = (offset_x as f32).mul_add(0.5, self.x as f32);
|
||||
|
||||
Transform::from_xyz(new_x, self.y as f32 * 0.42, self.y as f32 * -1.)
|
||||
}
|
||||
}
|
||||
|
||||
slotmap::new_key_type! {
|
||||
/// Peut être utiliser pour identifier n'importe quel objet appartenant a un joueur (le joueur compris).
|
||||
#[derive(Component)]
|
||||
pub struct PlayerId;
|
||||
}
|
||||
|
||||
impl Tile {
|
||||
/// Recuper le chemin d'acces d'une case.
|
||||
pub const fn get_path(&self) -> &str {
|
||||
match *self {
|
||||
Self::Castle => "tiles/castle.png",
|
||||
Self::Wall => "tiles/wall.png",
|
||||
Self::Farm => "tiles/farm.png",
|
||||
Self::Grass => "tiles/grass.png",
|
||||
Self::Forest => "tiles/forest.png",
|
||||
Self::Hill => "tiles/hill.png",
|
||||
Self::Lumberjack => "tiles/lumberjack.png",
|
||||
Self::Mine => "tiles/mine.png",
|
||||
Self::Outpost => "tiles/outpost.png",
|
||||
Self::Barrack => "tiles/barrack.png",
|
||||
Self::Upgrader => "tiles/upgrader.png",
|
||||
Self::Tower => "tiles/tower.png",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
//! Permet de Rendre le jeu sur l'ecran.
|
||||
|
||||
use crate::{map::Tile, Position};
|
||||
use bevy::prelude::*;
|
||||
|
||||
/// Plugin permettant de rendre sur l'ecran le jeu.
|
||||
|
@ -7,11 +8,31 @@ pub struct RenderPlugin;
|
|||
|
||||
impl Plugin for RenderPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_startup_system(setup_camera);
|
||||
app.add_startup_system(setup_camera).add_system(render_tile);
|
||||
}
|
||||
}
|
||||
|
||||
/// Initialisation de la camera.
|
||||
fn setup_camera(mut commands: Commands) {
|
||||
commands.spawn(Camera2dBundle::default());
|
||||
commands.spawn(Camera2dBundle {
|
||||
transform: Transform::from_xyz(5., 0.5, 100.),
|
||||
..default()
|
||||
});
|
||||
}
|
||||
|
||||
/// Permet de rendre le tile et de les actualiser.
|
||||
fn render_tile(
|
||||
all_tiles: Query<(Entity, &Tile, &Position), Changed<Tile>>,
|
||||
mut commands: Commands,
|
||||
asset_server: Res<AssetServer>,
|
||||
) {
|
||||
for (tile_entity, tile_type, tile_pos) in all_tiles.iter() {
|
||||
commands.entity(tile_entity).insert(SpriteBundle {
|
||||
texture: asset_server.load(tile_type.get_path()),
|
||||
transform: tile_pos
|
||||
.to_map_position()
|
||||
.with_scale(Vec3::splat(1.0 / 185.0)),
|
||||
..default()
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue