generated from tipragot/rust
Compare commits
No commits in common. "update-resources" and "main" have entirely different histories.
update-res
...
main
|
@ -43,7 +43,4 @@ pub struct Player {
|
|||
|
||||
/// The color of the player.
|
||||
pub color: (u8, u8, u8),
|
||||
|
||||
/// The resources of the player.
|
||||
pub resources: resources::Resources,
|
||||
}
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
//! All program related to the resources of the game.
|
||||
|
||||
use bevnet::{NetworkAppExt, Receive, SendTo};
|
||||
use bevy::prelude::*;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::Player;
|
||||
|
||||
/// The plugin that manage the resources.
|
||||
pub struct ResourcesPlugin;
|
||||
|
@ -13,16 +9,12 @@ impl Plugin for ResourcesPlugin {
|
|||
fn build(&self, app: &mut App) {
|
||||
app.add_event::<ResetResources>()
|
||||
.insert_resource(Resources::initial())
|
||||
.add_network_event::<UpdateResources>()
|
||||
.add_systems(
|
||||
Update,
|
||||
(handle_reset_resources, save_resources, update_resources),
|
||||
);
|
||||
.add_systems(Update, handle_reset_resources);
|
||||
}
|
||||
}
|
||||
|
||||
/// The resources of the game.
|
||||
#[derive(Resource, Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||
#[derive(Resource, Default)]
|
||||
pub struct Resources {
|
||||
/// The stone resource.
|
||||
pub stone: u32,
|
||||
|
@ -36,7 +28,7 @@ pub struct Resources {
|
|||
|
||||
impl Resources {
|
||||
/// Returns the initial resources of the game.
|
||||
pub const fn initial() -> Self {
|
||||
const fn initial() -> Self {
|
||||
Self {
|
||||
stone: 100,
|
||||
wood: 100,
|
||||
|
@ -58,42 +50,3 @@ fn handle_reset_resources(
|
|||
*resources = Resources::initial();
|
||||
}
|
||||
}
|
||||
|
||||
/// An event send to update the resources of a player.
|
||||
#[derive(Event, Serialize, Deserialize, Clone, Copy)]
|
||||
pub struct UpdateResources(pub Resources);
|
||||
|
||||
/// Save the resources of the game when you modify it.
|
||||
fn save_resources(
|
||||
mut update_resources_event: EventWriter<SendTo<UpdateResources>>,
|
||||
resources: Res<Resources>,
|
||||
players: Query<&Player>,
|
||||
) {
|
||||
if !resources.is_changed() {
|
||||
return;
|
||||
}
|
||||
|
||||
let event = UpdateResources(*resources);
|
||||
|
||||
for player in players.iter() {
|
||||
update_resources_event.send(SendTo(player.uuid, event));
|
||||
}
|
||||
}
|
||||
|
||||
/// Update the resources of all player.
|
||||
fn update_resources(
|
||||
mut update_resources_event: EventReader<Receive<UpdateResources>>,
|
||||
mut players: Query<&mut Player>,
|
||||
) {
|
||||
for event in update_resources_event.read() {
|
||||
let Some(mut player) = players.iter_mut().find(|player| player.uuid == event.0) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
player.resources = event.1.0;
|
||||
println!(
|
||||
"Update resources for player {:?} to {:?}",
|
||||
player.uuid, player.resources
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ 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.
|
||||
|
@ -60,7 +59,6 @@ fn menu_ui(
|
|||
rank: PlayerRank::Player,
|
||||
uuid,
|
||||
color: rand::random::<(u8, u8, u8)>(),
|
||||
resources: Resources::initial(),
|
||||
}),
|
||||
));
|
||||
}
|
||||
|
@ -75,7 +73,6 @@ fn menu_ui(
|
|||
rank: PlayerRank::Admin,
|
||||
uuid,
|
||||
color: rand::random::<(u8, u8, u8)>(),
|
||||
resources: Resources::initial(),
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue