Merge branch 'main' into 'recadrage-camera'
# Conflicts: # src/render.rs
This commit is contained in:
commit
e1fdcd4405
|
@ -1,13 +1,66 @@
|
|||
stages:
|
||||
- checks
|
||||
- build
|
||||
|
||||
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
|
||||
stage: checks
|
||||
before_script:
|
||||
- apt-get update && apt-get install libasound2-dev libudev-dev -y
|
||||
- rustup component add clippy
|
||||
script:
|
||||
- rustc --version && cargo --version
|
||||
- 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 {
|
||||
/// 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 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.)
|
||||
|
@ -33,7 +33,8 @@ impl Position {
|
|||
}
|
||||
|
||||
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)]
|
||||
pub struct PlayerId;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#![deny(clippy::all)]
|
||||
#![deny(warnings)]
|
||||
|
||||
use bevy::{prelude::App, DefaultPlugins};
|
||||
use bevy::prelude::*;
|
||||
use border_wars::render::RenderPlugin;
|
||||
|
||||
fn main() {
|
||||
|
|
18
src/map.rs
18
src/map.rs
|
@ -1,15 +1,17 @@
|
|||
//! Contiens tous ce qui est relatif à la carte du jeu.
|
||||
|
||||
use crate::Position;
|
||||
use bevy::prelude::{Commands, Component};
|
||||
use rand::Rng;
|
||||
|
||||
use crate::Position;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Component)]
|
||||
/// Une case sur la carte du jeu.
|
||||
pub enum Tile {
|
||||
/// 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,
|
||||
|
||||
/// De l'herbe.
|
||||
|
@ -31,24 +33,28 @@ pub enum Tile {
|
|||
/// Une ferme.
|
||||
///
|
||||
/// 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,
|
||||
|
||||
/// Une mine.
|
||||
///
|
||||
/// 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,
|
||||
|
||||
/// Une ferme.
|
||||
///
|
||||
/// 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,
|
||||
|
||||
/// 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,
|
||||
|
||||
/// Un caserne.
|
||||
|
|
|
@ -23,24 +23,22 @@ fn setup_camera(mut commands: Commands) {
|
|||
}
|
||||
|
||||
/// Permet de rendre le tile et de les actualiser.
|
||||
fn render_tile(
|
||||
all_tiles: Query<(Entity, &Tile, &Position), Changed<Tile>>,
|
||||
fn render_tiles(
|
||||
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() {
|
||||
for (tile_entity, tile_type, tile_pos) in tiles.iter() {
|
||||
commands.entity(tile_entity).insert(SpriteBundle {
|
||||
texture: asset_server.load(get_tile_path(tile_type)),
|
||||
transform: tile_pos
|
||||
.to_map_position()
|
||||
.with_scale(Vec3::splat(1.0 / 185.0)),
|
||||
transform: tile_pos.to_world().with_scale(Vec3::splat(1.0 / 185.0)),
|
||||
..default()
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// 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 {
|
||||
Tile::Castle => "tiles/castle.png",
|
||||
Tile::Wall => "tiles/wall.png",
|
||||
|
|
Loading…
Reference in a new issue