Merge branch 'main' into 'recadrage-camera'
# Conflicts: # src/render.rs
This commit is contained in:
commit
e1fdcd4405
|
@ -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
18
rustfmt.toml
Normal 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
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
18
src/map.rs
18
src/map.rs
|
@ -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.
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Reference in a new issue