save
All checks were successful
Rust Checks / checks (push) Successful in 3m53s

This commit is contained in:
CoCo_Sol 2024-04-07 17:10:23 +02:00
parent 106cabe951
commit c808a1e7a5
8 changed files with 54 additions and 5 deletions

View file

@ -43,4 +43,7 @@ pub struct Player {
/// The color of the player.
pub color: (u8, u8, u8),
/// The resources of the player.
pub resources: crate::resources::Resources,
}

View file

@ -6,6 +6,7 @@ use std::ops::{
use bevy::prelude::*;
use paste::paste;
use serde::{Deserialize, Serialize};
/// Represents a number that can be used in calculations for hexagonal grids.
pub trait Number:
@ -99,7 +100,7 @@ number_impl! {
/// Represents a position in a hexagonal grid.
/// We use the axial coordinate system explained in this
/// [documentation](https://www.redblobgames.com/grids/hexagons/#coordinates).
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Component)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Component, Serialize, Deserialize)]
pub struct HexPosition<T: Number>(pub T, pub T);
/// All possible directions in a hexagonal grid.

View file

@ -7,6 +7,7 @@ pub mod renderer;
pub mod selected_tile;
use bevy::prelude::*;
use serde::{Deserialize, Serialize};
use self::hex::*;
@ -14,7 +15,7 @@ use self::hex::*;
pub type TilePosition = HexPosition<i32>;
/// The tile of the map.
#[derive(Component, Debug)]
#[derive(Component, Debug, Clone, Serialize, Deserialize)]
pub enum Tile {
/// The breeding tile.
Breeding,

View file

@ -1,11 +1,12 @@
//! All code related to the ownership of the tiles.
use bevy::prelude::*;
use serde::{Deserialize, Serialize};
use crate::Player;
/// The owner of a tile.
#[derive(Component, Clone)]
#[derive(Component, Clone, Serialize, Deserialize)]
pub struct Owner(pub Player);
/// The plugin to render the ownership of the tiles.

View file

@ -6,11 +6,13 @@ use serde::{Deserialize, Serialize};
use self::check_connection::CheckConnectionPlugin;
use self::connection::ConnectionPlugin;
use self::reconnection::ReconnectionPlugin;
use crate::map::generation::StartMapGeneration;
use crate::CurrentScene;
pub mod check_connection;
pub mod connection;
pub mod reconnection;
/// The plugin for the networking.
pub struct NetworkingPlugin;
@ -21,6 +23,7 @@ impl Plugin for NetworkingPlugin {
.add_plugins(ConnectionPlugin)
.add_systems(Update, handle_start_game)
.add_network_event::<StartGame>()
.add_plugins(ReconnectionPlugin)
.add_plugins(CheckConnectionPlugin);
}
}

View file

@ -0,0 +1,36 @@
//! All program related to reconnection logic.
use bevnet::NetworkAppExt;
use bevy::prelude::*;
use serde::{Deserialize, Serialize};
use crate::map::ownership::Owner;
use crate::map::{Tile, TilePosition};
use crate::Player;
/// The plugin for the reconnection.
pub struct ReconnectionPlugin;
impl Plugin for ReconnectionPlugin {
fn build(&self, app: &mut App) {
app.add_network_event::<ReconnectionRequest>()
.add_network_event::<ReconnectionResponse>();
}
}
/// The event to request the reconnection.
#[derive(Event, Serialize, Deserialize)]
pub struct ReconnectionRequest;
/// The event to response to the reconnection.
#[derive(Event, Serialize, Deserialize)]
pub struct ReconnectionResponse {
/// All the players in the game.
pub players: Vec<Player>,
/// The map of the game.
pub map: Vec<(Option<Owner>, Tile, TilePosition)>,
/// The current player.
pub current_player: Player,
}

View file

@ -1,6 +1,7 @@
//! All program related to the resources of the game.
use bevy::prelude::*;
use serde::{Deserialize, Serialize};
/// The plugin that manage the resources.
pub struct ResourcesPlugin;
@ -14,7 +15,7 @@ impl Plugin for ResourcesPlugin {
}
/// The resources of the game.
#[derive(Resource, Default)]
#[derive(Resource, Default, Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Resources {
/// The stone resource.
pub stone: u32,
@ -28,7 +29,7 @@ pub struct Resources {
impl Resources {
/// Returns the initial resources of the game.
const fn initial() -> Self {
pub const fn initial() -> Self {
Self {
stone: 100,
wood: 100,

View file

@ -6,6 +6,7 @@ use bevy_egui::{egui, EguiContexts};
use crate::networking::connection::RequestJoin;
use crate::networking::PlayerRank;
use crate::resources::Resources;
use crate::{CurrentScene, Player};
/// The plugin for the menu.
@ -59,6 +60,7 @@ fn menu_ui(
rank: PlayerRank::Player,
uuid,
color: rand::random::<(u8, u8, u8)>(),
resources: Resources::initial(),
}),
));
}
@ -73,6 +75,7 @@ fn menu_ui(
rank: PlayerRank::Admin,
uuid,
color: rand::random::<(u8, u8, u8)>(),
resources: Resources::initial(),
});
}
});