mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Make sync_me based of PresenceKind rather than being an independent
field.
This commit is contained in:
parent
ecb27deeae
commit
aba0c23bc7
@ -13,23 +13,16 @@ pub struct Presence {
|
||||
/// updated!
|
||||
pub kind: PresenceKind,
|
||||
pub lossy_terrain_compression: bool,
|
||||
/// Controls whether this entity is synced to other clients.
|
||||
///
|
||||
/// Note, if it ends up being useful this could be generalized to an
|
||||
/// independent component that is required for any entity to be synced
|
||||
/// (as an independent component it could use NullStorage).
|
||||
pub sync_me: bool,
|
||||
}
|
||||
|
||||
impl Presence {
|
||||
pub fn new(view_distances: ViewDistances, kind: PresenceKind, sync_me: bool) -> Self {
|
||||
pub fn new(view_distances: ViewDistances, kind: PresenceKind) -> Self {
|
||||
let now = Instant::now();
|
||||
Self {
|
||||
terrain_view_distance: ViewDistance::new(view_distances.terrain, now),
|
||||
entity_view_distance: ViewDistance::new(view_distances.entity, now),
|
||||
kind,
|
||||
lossy_terrain_compression: false,
|
||||
sync_me,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -62,6 +55,18 @@ impl PresenceKind {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
/// Controls whether this entity is synced to other clients.
|
||||
///
|
||||
/// Note, if it ends up being useful this could be generalized to an
|
||||
/// independent component that is required for any entity to be synced
|
||||
/// (as an independent component it could use NullStorage).
|
||||
pub fn sync_me(&self) -> bool {
|
||||
match self {
|
||||
Self::Spectator | Self::LoadingCharacter(_) => false,
|
||||
Self::Character(_) | Self::Possessor => true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Debug, Clone, Copy)]
|
||||
|
@ -114,7 +114,7 @@ impl RegionMap {
|
||||
// Add any untracked entities
|
||||
for (pos, id) in (&pos, &entities, presence.maybe(), !&self.tracked_entities)
|
||||
.join()
|
||||
.filter(|(_, _, presence, _)| presence.map_or(true, |p| p.sync_me))
|
||||
.filter(|(_, _, presence, _)| presence.map_or(true, |p| p.kind.sync_me()))
|
||||
.map(|(pos, e, _, _)| (pos, e.id()))
|
||||
.collect::<Vec<_>>()
|
||||
{
|
||||
@ -143,7 +143,7 @@ impl RegionMap {
|
||||
)
|
||||
.join()
|
||||
{
|
||||
let should_sync = maybe_presence.map_or(true, |p| p.sync_me);
|
||||
let should_sync = maybe_presence.map_or(true, |p| p.kind.sync_me());
|
||||
match maybe_pos {
|
||||
// Switch regions for entities which need switching
|
||||
// TODO don't check every tick (use velocity) (and use id to stagger)
|
||||
|
@ -130,7 +130,7 @@ pub fn handle_exit_ingame(server: &mut Server, entity: EcsEntity, skip_persisten
|
||||
let (maybe_character, sync_me) = state
|
||||
.read_storage::<Presence>()
|
||||
.get(entity)
|
||||
.map(|p| (p.kind.character_id(), p.sync_me))
|
||||
.map(|p| (p.kind.character_id(), p.kind.sync_me()))
|
||||
.unzip();
|
||||
let maybe_rtsim = state.read_component_copied::<common::rtsim::RtSimEntity>(entity);
|
||||
state.mut_resource::<IdMaps>().remove_entity(
|
||||
@ -421,7 +421,6 @@ pub fn handle_possess(server: &mut Server, possessor_uid: Uid, possessee_uid: Ui
|
||||
// from overwriting original character info with stuff from the new character.
|
||||
kind: PresenceKind::Possessor,
|
||||
lossy_terrain_compression: presence.lossy_terrain_compression,
|
||||
sync_me: presence.sync_me,
|
||||
})
|
||||
} else {
|
||||
None
|
||||
|
@ -604,7 +604,6 @@ impl StateExt for State {
|
||||
entity: view_distance,
|
||||
},
|
||||
PresenceKind::Spectator,
|
||||
false,
|
||||
))
|
||||
}
|
||||
|
||||
@ -645,11 +644,7 @@ impl StateExt for State {
|
||||
|
||||
self.write_component_ignore_entity_dead(
|
||||
entity,
|
||||
Presence::new(
|
||||
view_distances,
|
||||
PresenceKind::LoadingCharacter(character_id),
|
||||
false,
|
||||
),
|
||||
Presence::new(view_distances, PresenceKind::LoadingCharacter(character_id)),
|
||||
);
|
||||
|
||||
// Tell the client its request was successful.
|
||||
@ -674,7 +669,7 @@ impl StateExt for State {
|
||||
|
||||
self.write_component_ignore_entity_dead(
|
||||
entity,
|
||||
Presence::new(view_distances, PresenceKind::Spectator, false),
|
||||
Presence::new(view_distances, PresenceKind::Spectator),
|
||||
);
|
||||
|
||||
// Tell the client its request was successful.
|
||||
@ -709,7 +704,6 @@ impl StateExt for State {
|
||||
self.ecs()
|
||||
.write_resource::<IdMaps>()
|
||||
.add_character(id, entity);
|
||||
presence.sync_me = true;
|
||||
Ok(())
|
||||
} else {
|
||||
Err("PresenceKind is not LoadingCharacter")
|
||||
@ -1199,7 +1193,7 @@ impl StateExt for State {
|
||||
let (maybe_character, sync_me) = self
|
||||
.read_storage::<Presence>()
|
||||
.get(entity)
|
||||
.map(|p| (p.kind.character_id(), p.sync_me))
|
||||
.map(|p| (p.kind.character_id(), p.kind.sync_me()))
|
||||
.unzip();
|
||||
let maybe_rtsim = self.read_component_copied::<RtSimEntity>(entity);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user