Client/Server Feature Split (#63)

This commit is contained in:
PROMETHIA-27
2025-09-26 21:59:08 -04:00
committed by GitHub
parent 7f6c00b5d6
commit 2f5d154d26
30 changed files with 674 additions and 271 deletions

View File

@@ -1,15 +1,10 @@
use bevy::ecs::{
bundle::Bundle,
event::Event,
resource::Resource,
system::{Commands, EntityCommands},
world::{EntityWorldMut, World},
};
use lightyear::prelude::Disconnected;
#[derive(Default, Resource)]
pub struct IsServer;
pub trait CommandExt {
fn trigger_server(&mut self, event: impl Event) -> &mut Self;
}
@@ -18,7 +13,7 @@ impl<'w, 's> CommandExt for Commands<'w, 's> {
fn trigger_server(&mut self, event: impl Event) -> &mut Self {
self.queue(|world: &mut World| {
let mut query_state = world.query::<&Disconnected>();
if world.contains_resource::<IsServer>() || !query_state.query(world).is_empty() {
if cfg!(feature = "server") || !query_state.query(world).is_empty() {
world.trigger(event);
}
});
@@ -27,23 +22,14 @@ impl<'w, 's> CommandExt for Commands<'w, 's> {
}
pub trait EntityCommandExt {
fn insert_server(&mut self, bundle: impl Bundle) -> &mut Self;
fn trigger_server(&mut self, event: impl Event) -> &mut Self;
}
impl<'w> EntityCommandExt for EntityCommands<'w> {
fn insert_server(&mut self, bundle: impl Bundle) -> &mut Self {
self.queue(|mut entity: EntityWorldMut| {
if entity.world().contains_resource::<IsServer>() {
entity.insert(bundle);
}
})
}
fn trigger_server(&mut self, event: impl Event) -> &mut Self {
self.queue(|mut entity: EntityWorldMut| {
if entity.world().contains_resource::<IsServer>() {
let mut query_state = entity.world_scope(|world| world.query::<&Disconnected>());
if cfg!(feature = "server") || !query_state.query(entity.world()).is_empty() {
entity.trigger(event);
}
})

View File

@@ -1,4 +1,3 @@
use crate::utils::commands::IsServer;
use bevy::{ecs::system::SystemParam, prelude::*};
use lightyear::prelude::{AppTriggerExt, Channel, NetworkDirection, RemoteTrigger, TriggerSender};
use serde::{Deserialize, Serialize};
@@ -6,12 +5,11 @@ use serde::{Deserialize, Serialize};
#[derive(SystemParam)]
pub struct ServerMultiTriggerSender<'w, 's, M: Event + Clone> {
senders: Query<'w, 's, &'static mut TriggerSender<M>>,
is_server: Option<Res<'w, IsServer>>,
}
impl<'w, 's, M: Event + Clone> ServerMultiTriggerSender<'w, 's, M> {
pub fn server_trigger_targets<C: Channel>(&mut self, trigger: M, target: &[Entity]) {
if self.is_server.is_none() {
if cfg!(not(feature = "server")) {
return;
}