diff --git a/common/src/msg/ecs_packet.rs b/common/src/msg/ecs_packet.rs index 28964041ab..4dd487de70 100644 --- a/common/src/msg/ecs_packet.rs +++ b/common/src/msg/ecs_packet.rs @@ -3,19 +3,25 @@ use serde_derive::{Deserialize, Serialize}; use std::marker::PhantomData; use sum_type::sum_type; +// TODO: remove me +#[derive(Clone, Debug, Serialize, Deserialize)] +pub enum MustHaveMoreThanOneVariant {} + // Automatically derive From for EcsResPacket // for each variant EcsResPacket::T(T). sum_type! { #[derive(Clone, Debug, Serialize, Deserialize)] pub enum EcsResPacket { - Time(state::Time), + //Time(state::Time), + MustHaveMoreThanOneVariant(MustHaveMoreThanOneVariant), TimeOfDay(state::TimeOfDay), } } impl sync::ResPacket for EcsResPacket { fn apply(self, world: &specs::World) { match self { - EcsResPacket::Time(time) => sync::handle_res_update(time, world), + //EcsResPacket::Time(time) => sync::handle_res_update(time, world), + EcsResPacket::MustHaveMoreThanOneVariant(_) => unimplemented!(), EcsResPacket::TimeOfDay(time_of_day) => sync::handle_res_update(time_of_day, world), } } @@ -35,7 +41,7 @@ sum_type! { MountState(comp::MountState), Mounting(comp::Mounting), Mass(comp::Mass), - Projectile(comp::Projectile), + //Projectile(comp::Projectile), Gravity(comp::Gravity), Sticky(comp::Sticky), } @@ -55,7 +61,7 @@ sum_type! { MountState(PhantomData), Mounting(PhantomData), Mass(PhantomData), - Projectile(PhantomData), + //Projectile(PhantomData), Gravity(PhantomData), Sticky(PhantomData), } @@ -74,7 +80,7 @@ impl sync::CompPacket for EcsCompPacket { EcsCompPacket::MountState(comp) => sync::handle_insert(comp, entity, world), EcsCompPacket::Mounting(comp) => sync::handle_insert(comp, entity, world), EcsCompPacket::Mass(comp) => sync::handle_insert(comp, entity, world), - EcsCompPacket::Projectile(comp) => sync::handle_insert(comp, entity, world), + //EcsCompPacket::Projectile(comp) => sync::handle_insert(comp, entity, world), EcsCompPacket::Gravity(comp) => sync::handle_insert(comp, entity, world), EcsCompPacket::Sticky(comp) => sync::handle_insert(comp, entity, world), } @@ -91,7 +97,7 @@ impl sync::CompPacket for EcsCompPacket { EcsCompPacket::MountState(comp) => sync::handle_modify(comp, entity, world), EcsCompPacket::Mounting(comp) => sync::handle_modify(comp, entity, world), EcsCompPacket::Mass(comp) => sync::handle_modify(comp, entity, world), - EcsCompPacket::Projectile(comp) => sync::handle_modify(comp, entity, world), + //EcsCompPacket::Projectile(comp) => sync::handle_modify(comp, entity, world), EcsCompPacket::Gravity(comp) => sync::handle_modify(comp, entity, world), EcsCompPacket::Sticky(comp) => sync::handle_modify(comp, entity, world), } @@ -110,7 +116,7 @@ impl sync::CompPacket for EcsCompPacket { EcsCompPhantom::MountState(_) => sync::handle_remove::(entity, world), EcsCompPhantom::Mounting(_) => sync::handle_remove::(entity, world), EcsCompPhantom::Mass(_) => sync::handle_remove::(entity, world), - EcsCompPhantom::Projectile(_) => sync::handle_remove::(entity, world), + //EcsCompPhantom::Projectile(_) => sync::handle_remove::(entity, world), EcsCompPhantom::Gravity(_) => sync::handle_remove::(entity, world), EcsCompPhantom::Sticky(_) => sync::handle_remove::(entity, world), } diff --git a/common/src/state.rs b/common/src/state.rs index a2120e60c6..af8ac3841b 100644 --- a/common/src/state.rs +++ b/common/src/state.rs @@ -119,7 +119,6 @@ impl State { ecs.register::(); ecs.register::(); ecs.register::(); - ecs.register::(); // Register components send from clients -> server ecs.register::(); @@ -143,9 +142,9 @@ impl State { ecs.register::(); ecs.register::(); ecs.register::(); - ecs.register::(); ecs.register::(); ecs.register::(); + ecs.register::(); // Register synced resources used by the ECS. ecs.add_resource(TimeOfDay(0.0)); @@ -156,6 +155,7 @@ impl State { ecs.add_resource(TerrainGrid::new().unwrap()); ecs.add_resource(BlockChange::default()); ecs.add_resource(TerrainChanges::default()); + // TODO: only register on the server ecs.add_resource(EventBus::::default()); ecs.add_resource(EventBus::::default()); ecs.add_resource(EventBus::::default()); diff --git a/common/src/sync/packet.rs b/common/src/sync/packet.rs index f12d409960..08c1d339e8 100644 --- a/common/src/sync/packet.rs +++ b/common/src/sync/packet.rs @@ -112,17 +112,6 @@ impl SyncPackage

{ .join() .map(|(uid, _, _)| (*uid).into()) .collect(); - // TODO: handle modified uid? - //created_entities.append(&mut (uids, filter, uid_tracker.inserted()).join().map(|(uid, _, _)| uid).collect()); - // let deleted_entities = (uids.maybe(), filter, uid_tracker.removed()) - // .join() - // Why doesn't this panic?? - // .map(|(uid, _, _)| Into::::into(*uid.unwrap())) - // .collect::>(); - //let len = deleted_entities.len(); - //if len > 0 { - // println!("deleted {} in sync message", len); - // } Self { comp_updates: Vec::new(), diff --git a/common/src/sys/phys.rs b/common/src/sys/phys.rs index d0a9f133a9..4b1b89d62b 100644 --- a/common/src/sys/phys.rs +++ b/common/src/sys/phys.rs @@ -342,13 +342,14 @@ impl<'a> System<'a> for Sys { } // Apply pushback - for (pos, scale, mass, vel, _, _, physics) in ( + for (pos, scale, mass, vel, _, _, _, physics) in ( &positions, scales.maybe(), masses.maybe(), &mut velocities, &bodies, !&mountings, + !&stickies, // Can't push stickies around &mut physics_states, ) .join() diff --git a/server/src/sys/sentinel.rs b/server/src/sys/sentinel.rs index 381f567ea7..bb59f42edf 100644 --- a/server/src/sys/sentinel.rs +++ b/server/src/sys/sentinel.rs @@ -1,8 +1,8 @@ use super::SysTimer; use common::{ comp::{ - Body, CanBuild, Gravity, Item, LightEmitter, Mass, MountState, Mounting, Player, - Projectile, Scale, Stats, Sticky, + Body, CanBuild, Gravity, Item, LightEmitter, Mass, MountState, Mounting, Player, Scale, + Stats, Sticky, }, msg::{EcsCompPacket, EcsResPacket}, state::TimeOfDay, @@ -16,7 +16,6 @@ use shred_derive::SystemData; use specs::{ Entity as EcsEntity, Join, ReadExpect, ReadStorage, System, World, Write, WriteExpect, }; -use std::ops::Deref; use vek::*; /// Always watching @@ -54,7 +53,7 @@ pub struct TrackedComps<'a> { pub mass: ReadStorage<'a, Mass>, pub sticky: ReadStorage<'a, Sticky>, pub gravity: ReadStorage<'a, Gravity>, - pub projectile: ReadStorage<'a, Projectile>, + //pub projectile: ReadStorage<'a, Projectile>, } impl<'a> TrackedComps<'a> { pub fn create_entity_package(&self, entity: EcsEntity) -> EntityPackage { @@ -113,10 +112,10 @@ impl<'a> TrackedComps<'a> { .get(entity) .copied() .map(|c| packets.push(c.into())); - self.projectile - .get(entity) - .cloned() - .map(|c| packets.push(c.into())); + //self.projectile + // .get(entity) + // .cloned() + // .map(|c| packets.push(c.into())); EntityPackage(uid, packets) } @@ -136,7 +135,7 @@ pub struct ReadTrackers<'a> { pub mass: ReadExpect<'a, UpdateTracker>, pub sticky: ReadExpect<'a, UpdateTracker>, pub gravity: ReadExpect<'a, UpdateTracker>, - pub projectile: ReadExpect<'a, UpdateTracker>, + //pub projectile: ReadExpect<'a, UpdateTracker>, } impl<'a> ReadTrackers<'a> { pub fn create_sync_package( @@ -146,34 +145,29 @@ impl<'a> ReadTrackers<'a> { deleted_entities: Vec, ) -> SyncPackage { SyncPackage::new(&comps.uid, &self.uid, filter, deleted_entities) - .with_component(&comps.uid, self.body.deref(), &comps.body, filter) - .with_component(&comps.uid, self.player.deref(), &comps.player, filter) - .with_component(&comps.uid, self.stats.deref(), &comps.stats, filter) - .with_component(&comps.uid, self.can_build.deref(), &comps.can_build, filter) + .with_component(&comps.uid, &*self.body, &comps.body, filter) + .with_component(&comps.uid, &*self.player, &comps.player, filter) + .with_component(&comps.uid, &*self.stats, &comps.stats, filter) + .with_component(&comps.uid, &*self.can_build, &comps.can_build, filter) .with_component( &comps.uid, - self.light_emitter.deref(), + &*self.light_emitter, &comps.light_emitter, filter, ) - .with_component(&comps.uid, self.item.deref(), &comps.item, filter) - .with_component(&comps.uid, self.scale.deref(), &comps.scale, filter) - .with_component(&comps.uid, self.mounting.deref(), &comps.mounting, filter) - .with_component( - &comps.uid, - self.mount_state.deref(), - &comps.mount_state, - filter, - ) - .with_component(&comps.uid, self.mass.deref(), &comps.mass, filter) - .with_component(&comps.uid, self.sticky.deref(), &comps.sticky, filter) - .with_component(&comps.uid, self.gravity.deref(), &comps.gravity, filter) - .with_component( - &comps.uid, - self.projectile.deref(), - &comps.projectile, - filter, - ) + .with_component(&comps.uid, &*self.item, &comps.item, filter) + .with_component(&comps.uid, &*self.scale, &comps.scale, filter) + .with_component(&comps.uid, &*self.mounting, &comps.mounting, filter) + .with_component(&comps.uid, &*self.mount_state, &comps.mount_state, filter) + .with_component(&comps.uid, &*self.mass, &comps.mass, filter) + .with_component(&comps.uid, &*self.sticky, &comps.sticky, filter) + .with_component(&comps.uid, &*self.gravity, &comps.gravity, filter) + //.with_component( + // &comps.uid, + // self.projectile.deref(), + // &comps.projectile, + // filter, + //) } } @@ -192,7 +186,7 @@ pub struct WriteTrackers<'a> { mass: WriteExpect<'a, UpdateTracker>, sticky: WriteExpect<'a, UpdateTracker>, gravity: WriteExpect<'a, UpdateTracker>, - projectile: WriteExpect<'a, UpdateTracker>, + //projectile: WriteExpect<'a, UpdateTracker>, } fn record_changes(comps: &TrackedComps, trackers: &mut WriteTrackers) { @@ -210,7 +204,7 @@ fn record_changes(comps: &TrackedComps, trackers: &mut WriteTrackers) { trackers.mass.record_changes(&comps.mass); trackers.sticky.record_changes(&comps.sticky); trackers.gravity.record_changes(&comps.gravity); - trackers.projectile.record_changes(&comps.projectile); + //trackers.projectile.record_changes(&comps.projectile); } pub fn register_trackers(world: &mut World) { @@ -227,7 +221,7 @@ pub fn register_trackers(world: &mut World) { world.register_tracker::(); world.register_tracker::(); world.register_tracker::(); - world.register_tracker::(); + //world.register_tracker::(); } #[derive(SystemData)] @@ -236,11 +230,11 @@ pub struct TrackedResources<'a> { } impl<'a> TrackedResources<'a> { pub fn create_res_sync_package(&self) -> ResSyncPackage { - ResSyncPackage::new().with_res(self.time_of_day.deref()) + ResSyncPackage::new().with_res(&*self.time_of_day) } /// Create state package with resources included pub fn state_package(&self) -> StatePackage { - StatePackage::new().with_res(self.time_of_day.deref()) + StatePackage::new().with_res(&*self.time_of_day) } } diff --git a/server/src/sys/subscription.rs b/server/src/sys/subscription.rs index a37d4057b7..ef6cc59659 100644 --- a/server/src/sys/subscription.rs +++ b/server/src/sys/subscription.rs @@ -102,7 +102,7 @@ impl<'a> System<'a> for Sys { .reduce_or() { // Update current chunk - subscription.fuzzy_chunk = dbg!(Vec2::::from(pos.0)) + subscription.fuzzy_chunk = Vec2::::from(pos.0) .map2(TerrainChunkSize::RECT_SIZE, |e, sz| e as i32 / sz as i32); // Use the largest side length as our chunk size let chunk_size = TerrainChunkSize::RECT_SIZE.reduce_max() as f32; @@ -173,7 +173,6 @@ impl<'a> System<'a> for Sys { // Send client intial info about the entities in this region if it was not // already within the set of subscribed regions if subscription.regions.insert(key.clone()) { - let mut counter = 0; if let Some(region) = region_map.get(key) { for (uid, pos, vel, ori, character_state, _, entity) in ( &uids, @@ -187,7 +186,6 @@ impl<'a> System<'a> for Sys { .join() .filter(|(_, _, _, _, _, _, e)| *e != client_entity) { - counter += 1; // Send message to create entity and tracked components client.notify(ServerMsg::CreateEntity( tracked_comps.create_entity_package(entity),