Merge branch 'main' into 'recadrage-camera'

# Conflicts:
#   src/render.rs
This commit is contained in:
CoCo_Sol 2023-06-02 07:00:59 +00:00
commit e1fdcd4405
6 changed files with 94 additions and 18 deletions

View file

@ -1,13 +1,66 @@
stages: stages:
- checks - checks
- build
cargo-test: cargo-test:
image: rust:latest
stage: checks
before_script:
- apt-get update && apt-get install libasound2-dev libudev-dev -y
script:
- cargo test --workspace
rules:
- exists:
- Cargo.toml
cargo-clippy:
image: rust:latest image: rust:latest
stage: checks stage: checks
before_script: before_script:
- apt-get update && apt-get install libasound2-dev libudev-dev -y - apt-get update && apt-get install libasound2-dev libudev-dev -y
- rustup component add clippy - rustup component add clippy
script: script:
- rustc --version && cargo --version
- cargo clippy --workspace - cargo clippy --workspace
- cargo test --workspace rules:
- exists:
- Cargo.toml
cargo-fmt:
image: rust:latest
stage: checks
before_script:
- rustup install nightly --profile minimal
- rustup component add rustfmt --toolchain nightly
script:
- cargo +nightly fmt --check
rules:
- exists:
- Cargo.toml
development-image:
image: docker:latest
stage: build
services:
- docker:dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
exists:
- Dockerfile
production-image:
image: docker:latest
stage: build
services:
- docker:dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:latest
- docker push $CI_REGISTRY_IMAGE:latest
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
exists:
- Dockerfile

18
rustfmt.toml Normal file
View file

@ -0,0 +1,18 @@
use_try_shorthand = true
use_field_init_shorthand = true
version = "Two"
error_on_line_overflow = true
error_on_unformatted = true
format_code_in_doc_comments = true
format_macro_bodies = true
format_macro_matchers = true
format_strings = true
imports_granularity = "Module"
group_imports = "StdExternalCrate"
normalize_doc_attributes = true
normalize_comments = true
wrap_comments = true

View file

@ -25,7 +25,7 @@ pub struct Position {
impl Position { impl Position {
/// Peret de recuper la position, sous form d'un transform, d'un objet sur la carte du jeu. /// 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 { pub fn to_world(&self) -> Transform {
let offset_x = self.y % 2; let offset_x = self.y % 2;
let new_x = (offset_x as f32).mul_add(0.5, self.x as f32); 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.) Transform::from_xyz(new_x, self.y as f32 * 0.42, self.y as f32 * -1.)
@ -33,7 +33,8 @@ impl Position {
} }
slotmap::new_key_type! { slotmap::new_key_type! {
/// Peut être utiliser pour identifier n'importe quel objet appartenant a un joueur (le joueur compris). /// Peut être utiliser pour identifier n'importe quel objet appartenant a
/// un joueur (le joueur compris).
#[derive(Component)] #[derive(Component)]
pub struct PlayerId; pub struct PlayerId;
} }

View file

@ -8,7 +8,7 @@
#![deny(clippy::all)] #![deny(clippy::all)]
#![deny(warnings)] #![deny(warnings)]
use bevy::{prelude::App, DefaultPlugins}; use bevy::prelude::*;
use border_wars::render::RenderPlugin; use border_wars::render::RenderPlugin;
fn main() { fn main() {

View file

@ -1,15 +1,17 @@
//! Contiens tous ce qui est relatif à la carte du jeu. //! Contiens tous ce qui est relatif à la carte du jeu.
use crate::Position;
use bevy::prelude::{Commands, Component}; use bevy::prelude::{Commands, Component};
use rand::Rng; use rand::Rng;
use crate::Position;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Component)]
/// Une case sur la carte du jeu. /// Une case sur la carte du jeu.
pub enum Tile { pub enum Tile {
/// Un chateau. /// Un chateau.
/// ///
/// C'est la base du joueur qui doit defendre. Le but des autres joueurs est de la détruire pour gagner la partie. /// C'est la base du joueur qui doit defendre. Le but des autres joueurs est
/// de la détruire pour gagner la partie.
Castle, Castle,
/// De l'herbe. /// De l'herbe.
@ -31,24 +33,28 @@ pub enum Tile {
/// Une ferme. /// Une ferme.
/// ///
/// Permet de produire du bois. /// Permet de produire du bois.
/// Le nombre de bois généré peut être amélioré à l'aide d'un [Tile::Upgrader]. /// Le nombre de bois généré peut être amélioré à l'aide d'un
/// [Tile::Upgrader].
Lumberjack, Lumberjack,
/// Une mine. /// Une mine.
/// ///
/// Permet de produire de la pierre. /// Permet de produire de la pierre.
/// Le nombre de pierre généré peut être amélioré à l'aide d'un [Tile::Upgrader]. /// Le nombre de pierre généré peut être amélioré à l'aide d'un
/// [Tile::Upgrader].
Mine, Mine,
/// Une ferme. /// Une ferme.
/// ///
/// Permet de produire de la nourriture. /// Permet de produire de la nourriture.
/// Le nombre de nourriture généré peut être amélioré à l'aide d'un [Tile::Upgrader]. /// Le nombre de nourriture généré peut être amélioré à l'aide d'un
/// [Tile::Upgrader].
Farm, Farm,
/// Un avant poste. /// Un avant poste.
/// ///
/// Permet de déplacer les troupes plus rapidement en les faisant aller d'un avant poste a l'autre comme un portail de téléportation. /// Permet de déplacer les troupes plus rapidement en les faisant aller d'un
/// avant poste a l'autre comme un portail de téléportation.
Outpost, Outpost,
/// Un caserne. /// Un caserne.

View file

@ -23,24 +23,22 @@ fn setup_camera(mut commands: Commands) {
} }
/// Permet de rendre le tile et de les actualiser. /// Permet de rendre le tile et de les actualiser.
fn render_tile( fn render_tiles(
all_tiles: Query<(Entity, &Tile, &Position), Changed<Tile>>, tiles: Query<(Entity, &Tile, &Position), Changed<Tile>>,
mut commands: Commands, mut commands: Commands,
asset_server: Res<AssetServer>, asset_server: Res<AssetServer>,
) { ) {
for (tile_entity, tile_type, tile_pos) in all_tiles.iter() { for (tile_entity, tile_type, tile_pos) in tiles.iter() {
commands.entity(tile_entity).insert(SpriteBundle { commands.entity(tile_entity).insert(SpriteBundle {
texture: asset_server.load(get_tile_path(tile_type)), texture: asset_server.load(get_tile_path(tile_type)),
transform: tile_pos transform: tile_pos.to_world().with_scale(Vec3::splat(1.0 / 185.0)),
.to_map_position()
.with_scale(Vec3::splat(1.0 / 185.0)),
..default() ..default()
}); });
} }
} }
/// Recuper le chemin d'acces d'une case. /// Recuper le chemin d'acces d'une case.
pub const fn get_tile_path(tile: &Tile) -> &str { const fn get_tile_path(tile: &Tile) -> &str {
match *tile { match *tile {
Tile::Castle => "tiles/castle.png", Tile::Castle => "tiles/castle.png",
Tile::Wall => "tiles/wall.png", Tile::Wall => "tiles/wall.png",