diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 8cda30a1a4..0000000000 Binary files a/.DS_Store and /dev/null differ diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron index 76a819a277..4c90fe949f 100644 --- a/assets/voxygen/i18n/en.ron +++ b/assets/voxygen/i18n/en.ron @@ -192,7 +192,7 @@ Enjoy your stay in the World of Veloren."#, // Inventory - "hud.bag.inventory": "'s Inventory", + "hud.bag.inventory": "'s Inventory", "hud.bag.stats": "'s Stats", "hud.bag.exp": "Exp", // Settings diff --git a/client/src/lib.rs b/client/src/lib.rs index c6008fcc94..5912f15674 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -692,8 +692,7 @@ impl Client { self.state .ecs() .read_resource::>() - .emitter() - .emit(SfxEventItem::at_player_position(SfxEvent::Inventory(event))); + .emit_now(SfxEventItem::at_player_position(SfxEvent::Inventory(event))); }, ServerMsg::TerrainChunkUpdate { key, chunk } => { if let Ok(chunk) = chunk { diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs index ca4eee8547..c534ab701e 100644 --- a/common/src/comp/ability.rs +++ b/common/src/comp/ability.rs @@ -3,7 +3,7 @@ use crate::{ states::*, sys::character_behavior::JoinData, }; -use specs::{Component, FlaggedStorage, HashMapStorage}; +use specs::{Component, FlaggedStorage}; use specs_idvs::IDVStorage; use std::time::Duration; diff --git a/common/src/comp/inventory/item.rs b/common/src/comp/inventory/item.rs index 1a3898cf61..69d363aa48 100644 --- a/common/src/comp/inventory/item.rs +++ b/common/src/comp/inventory/item.rs @@ -10,7 +10,7 @@ use crate::{ use rand::seq::SliceRandom; use specs::{Component, FlaggedStorage}; use specs_idvs::IDVStorage; -use std::{fs::File, io::BufReader, time::Duration, vec::Vec}; +use std::{fs::File, io::BufReader, time::Duration}; #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum SwordKind { diff --git a/common/src/event.rs b/common/src/event.rs index 1fbadc8f69..39e8a63e23 100644 --- a/common/src/event.rs +++ b/common/src/event.rs @@ -144,7 +144,7 @@ impl EventBus { } } - pub fn emit(&self, event: E) { self.queue.lock().push_front(event); } + pub fn emit_now(&self, event: E) { self.queue.lock().push_back(event); } pub fn recv_all(&self) -> impl ExactSizeIterator { std::mem::replace(self.queue.lock().deref_mut(), VecDeque::new()).into_iter() @@ -157,7 +157,7 @@ pub struct Emitter<'a, E> { } impl<'a, E> Emitter<'a, E> { - pub fn emit(&mut self, event: E) { self.events.push_front(event); } + pub fn emit(&mut self, event: E) { self.events.push_back(event); } pub fn append(&mut self, other: &mut VecDeque) { self.events.append(other) } } diff --git a/common/src/msg/ecs_packet.rs b/common/src/msg/ecs_packet.rs index 31a80fa727..7c6c29aa38 100644 --- a/common/src/msg/ecs_packet.rs +++ b/common/src/msg/ecs_packet.rs @@ -21,9 +21,7 @@ sum_type! { Mass(comp::Mass), Gravity(comp::Gravity), Sticky(comp::Sticky), - CharacterAbility(comp::CharacterAbility), Loadout(comp::Loadout), - Attacking(comp::Attacking), CharacterState(comp::CharacterState), Pos(comp::Pos), Vel(comp::Vel), @@ -48,9 +46,7 @@ sum_type! { Mass(PhantomData), Gravity(PhantomData), Sticky(PhantomData), - CharacterAbility(PhantomData), Loadout(PhantomData), - Attacking(PhantomData), CharacterState(PhantomData), Pos(PhantomData), Vel(PhantomData), @@ -75,9 +71,7 @@ impl sync::CompPacket for EcsCompPacket { EcsCompPacket::Mass(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), - EcsCompPacket::CharacterAbility(comp) => sync::handle_insert(comp, entity, world), EcsCompPacket::Loadout(comp) => sync::handle_insert(comp, entity, world), - EcsCompPacket::Attacking(comp) => sync::handle_insert(comp, entity, world), EcsCompPacket::CharacterState(comp) => sync::handle_insert(comp, entity, world), EcsCompPacket::Pos(comp) => sync::handle_insert(comp, entity, world), EcsCompPacket::Vel(comp) => sync::handle_insert(comp, entity, world), @@ -100,9 +94,7 @@ impl sync::CompPacket for EcsCompPacket { EcsCompPacket::Mass(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), - EcsCompPacket::CharacterAbility(comp) => sync::handle_modify(comp, entity, world), EcsCompPacket::Loadout(comp) => sync::handle_modify(comp, entity, world), - EcsCompPacket::Attacking(comp) => sync::handle_modify(comp, entity, world), EcsCompPacket::CharacterState(comp) => sync::handle_modify(comp, entity, world), EcsCompPacket::Pos(comp) => sync::handle_modify(comp, entity, world), EcsCompPacket::Vel(comp) => sync::handle_modify(comp, entity, world), @@ -127,11 +119,7 @@ impl sync::CompPacket for EcsCompPacket { EcsCompPhantom::Mass(_) => sync::handle_remove::(entity, world), EcsCompPhantom::Gravity(_) => sync::handle_remove::(entity, world), EcsCompPhantom::Sticky(_) => sync::handle_remove::(entity, world), - EcsCompPhantom::CharacterAbility(_) => { - sync::handle_remove::(entity, world) - }, EcsCompPhantom::Loadout(_) => sync::handle_remove::(entity, world), - EcsCompPhantom::Attacking(_) => sync::handle_remove::(entity, world), EcsCompPhantom::CharacterState(_) => { sync::handle_remove::(entity, world) }, diff --git a/common/src/state.rs b/common/src/state.rs index 1c7466e8bc..ede5f6252d 100644 --- a/common/src/state.rs +++ b/common/src/state.rs @@ -107,7 +107,6 @@ impl State { ecs.register_sync_marker(); // Register server -> all clients synced components. ecs.register::(); - ecs.register::(); ecs.register::(); ecs.register::(); ecs.register::(); @@ -121,7 +120,6 @@ impl State { ecs.register::(); ecs.register::(); ecs.register::(); - ecs.register::(); // Register components send from clients -> server ecs.register::(); @@ -150,6 +148,7 @@ impl State { ecs.register::(); ecs.register::(); ecs.register::(); + ecs.register::(); // Register synced resources used by the ECS. ecs.insert(TimeOfDay(0.0)); diff --git a/common/src/sys/character_behavior.rs b/common/src/sys/character_behavior.rs index e82830066b..ebccef6258 100644 --- a/common/src/sys/character_behavior.rs +++ b/common/src/sys/character_behavior.rs @@ -129,6 +129,9 @@ impl<'a> System<'a> for Sys { mountings, ): Self::SystemData, ) { + let mut server_emitter = server_bus.emitter(); + let mut local_emitter = local_bus.emitter(); + let mut join_iter = ( &entities, &uids, @@ -191,8 +194,8 @@ impl<'a> System<'a> for Sys { *tuple.5 = state_update.ori; *tuple.6 = state_update.energy; *tuple.7 = state_update.loadout; - local_bus.emitter().append(&mut state_update.local_events); - server_bus.emitter().append(&mut state_update.server_events); + local_emitter.append(&mut state_update.local_events); + server_emitter.append(&mut state_update.server_events); } } } diff --git a/common/src/sys/combat.rs b/common/src/sys/combat.rs index e48272c36e..dab3766b5a 100644 --- a/common/src/sys/combat.rs +++ b/common/src/sys/combat.rs @@ -48,6 +48,7 @@ impl<'a> System<'a> for Sys { character_states, ): Self::SystemData, ) { + let mut server_emitter = server_bus.emitter(); // Attacks for (entity, uid, pos, ori, scale_maybe, _, _attacker_stats, attack) in ( &entities, @@ -81,7 +82,7 @@ impl<'a> System<'a> for Sys { { // 2D versions let pos2 = Vec2::from(pos.0); - let pos_b2: Vec2 = Vec2::from(pos_b.0); + let pos_b2 = Vec2::::from(pos_b.0); let ori2 = Vec2::from(ori.0); // Scales @@ -106,7 +107,7 @@ impl<'a> System<'a> for Sys { dmg = (dmg as f32 * (1.0 - BLOCK_EFFICIENCY)) as u32 } - server_bus.emitter().emit(ServerEvent::Damage { + server_emitter.emit(ServerEvent::Damage { uid: *uid_b, change: HealthChange { amount: -(dmg as i32), diff --git a/server/src/cmd.rs b/server/src/cmd.rs index 86fc5dc649..a53247706d 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -836,7 +836,7 @@ fn handle_explosion(server: &mut Server, entity: EcsEntity, args: String, action .state .ecs() .read_resource::>() - .emit(ServerEvent::Explosion { pos: pos.0, radius }), + .emit_now(ServerEvent::Explosion { pos: pos.0, radius }), None => server.notify_client( entity, ServerMsg::private(String::from("You have no position!")), diff --git a/server/src/sys/message.rs b/server/src/sys/message.rs index 156e13b860..f6d5e95435 100644 --- a/server/src/sys/message.rs +++ b/server/src/sys/message.rs @@ -45,7 +45,7 @@ impl<'a> System<'a> for Sys { &mut self, ( entities, - server_emitter, + server_event_bus, time, terrain, mut timer, @@ -68,6 +68,8 @@ impl<'a> System<'a> for Sys { let time = time.0; + let mut server_emitter = server_event_bus.emitter(); + let mut new_chat_msgs = Vec::new(); // Player list to send new players. diff --git a/server/src/sys/terrain.rs b/server/src/sys/terrain.rs index f47a4e7a08..efe6265b93 100644 --- a/server/src/sys/terrain.rs +++ b/server/src/sys/terrain.rs @@ -38,7 +38,7 @@ impl<'a> System<'a> for Sys { fn run( &mut self, ( - server_emitter, + server_event_bus, tick, mut timer, mut chunk_generator, @@ -51,6 +51,8 @@ impl<'a> System<'a> for Sys { ) { timer.start(); + let mut server_emitter = server_event_bus.emitter(); + // Fetch any generated `TerrainChunk`s and insert them into the terrain. // Also, send the chunk data to anybody that is close by. 'insert_terrain_chunks: while let Some((key, res)) = chunk_generator.recv_new_chunk() { diff --git a/voxygen/src/audio/sfx/event_mapper/movement/mod.rs b/voxygen/src/audio/sfx/event_mapper/movement/mod.rs index 084dc47ea2..3b597445f0 100644 --- a/voxygen/src/audio/sfx/event_mapper/movement/mod.rs +++ b/voxygen/src/audio/sfx/event_mapper/movement/mod.rs @@ -47,6 +47,9 @@ impl MovementEventMapper { const SFX_DIST_LIMIT_SQR: f32 = 20000.0; let ecs = state.ecs(); + let sfx_event_bus = ecs.read_resource::>(); + let mut sfx_emitter = sfx_event_bus.emitter(); + let player_position = ecs .read_storage::() .get(player_entity) @@ -86,13 +89,11 @@ impl MovementEventMapper { // Check for SFX config entry for this movement if Self::should_emit(state, triggers.get_key_value(&mapped_event)) { - ecs.read_resource::>() - .emitter() - .emit(SfxEventItem::new( - mapped_event, - Some(pos.0), - Some(Self::get_volume_for_body_type(body)), - )); + sfx_emitter.emit(SfxEventItem::new( + mapped_event, + Some(pos.0), + Some(Self::get_volume_for_body_type(body)), + )); // Set the new previous entity state state.event = mapped_event; diff --git a/voxygen/src/audio/sfx/event_mapper/progression.rs b/voxygen/src/audio/sfx/event_mapper/progression.rs index 7c05db0360..01ab1cc82c 100644 --- a/voxygen/src/audio/sfx/event_mapper/progression.rs +++ b/voxygen/src/audio/sfx/event_mapper/progression.rs @@ -53,8 +53,7 @@ impl ProgressionEventMapper { if sfx_trigger_item.is_some() { ecs.read_resource::>() - .emitter() - .emit(SfxEventItem::at_player_position(mapped_event)); + .emit_now(SfxEventItem::at_player_position(mapped_event)); } } diff --git a/voxygen/src/scene/mod.rs b/voxygen/src/scene/mod.rs index ae8bd95089..d9d28d6e0f 100644 --- a/voxygen/src/scene/mod.rs +++ b/voxygen/src/scene/mod.rs @@ -35,6 +35,10 @@ const LIGHT_DIST_RADIUS: f32 = 64.0; // The distance beyond which lights may not const SHADOW_DIST_RADIUS: f32 = 8.0; const SHADOW_MAX_DIST: f32 = 96.0; // The distance beyond which shadows may not be visible +/// Above this speed is considered running +/// Used for first person camera effects +const RUNNING_THRESHOLD: f32 = 0.7; + struct Skybox { model: Model, locals: Consts, @@ -191,7 +195,7 @@ impl Scene { let is_running = ecs .read_storage::() .get(scene_data.player_entity) - .map(|v| v.0.magnitude_squared() > 0.5); + .map(|v| v.0.magnitude_squared() > RUNNING_THRESHOLD.powi(2)); let on_ground = ecs .read_storage::()