diff --git a/common/src/sys/controller.rs b/common/src/sys/controller.rs index 4a0e033651..9b3718d849 100644 --- a/common/src/sys/controller.rs +++ b/common/src/sys/controller.rs @@ -1,5 +1,5 @@ use crate::{ - comp::{ControlEvent, Controller}, + comp::{CharacterState, ControlEvent, Controller}, event::{EventBus, LocalEvent, ServerEvent}, state::DeltaTime, sync::{Uid, UidAllocator}, @@ -22,15 +22,27 @@ impl<'a> System<'a> for Sys { Read<'a, EventBus>, Read<'a, DeltaTime>, WriteStorage<'a, Controller>, + WriteStorage<'a, CharacterState>, ReadStorage<'a, Uid>, ); fn run( &mut self, - (entities, uid_allocator, server_bus, _local_bus, _dt, mut controllers, uids): Self::SystemData, + ( + entities, + uid_allocator, + server_bus, + _local_bus, + _dt, + mut controllers, + mut character_states, + uids, + ): Self::SystemData, ) { let mut server_emitter = server_bus.emitter(); - for (entity, _uid, controller) in (&entities, &uids, &mut controllers).join() { + for (entity, _uid, controller, character_state) in + (&entities, &uids, &mut controllers, &mut character_states).join() + { let inputs = &mut controller.inputs; // Update `inputs.move_dir`. @@ -59,6 +71,7 @@ impl<'a> System<'a> for Sys { }, ControlEvent::Unmount => server_emitter.emit(ServerEvent::Unmount(entity)), ControlEvent::InventoryManip(manip) => { + *character_state = CharacterState::Idle; server_emitter.emit(ServerEvent::InventoryManip(entity, manip)) }, /*ControlEvent::Respawn => * server_emitter.emit(ServerEvent::Unmount(entity)), */ diff --git a/voxygen/src/scene/mod.rs b/voxygen/src/scene/mod.rs index 947fcb3ed3..ae8bd95089 100644 --- a/voxygen/src/scene/mod.rs +++ b/voxygen/src/scene/mod.rs @@ -126,6 +126,8 @@ impl Scene { /// Set the block position that the player is interacting with pub fn set_select_pos(&mut self, pos: Option>) { self.select_pos = pos; } + pub fn select_pos(&self) -> Option> { self.select_pos } + /// Handle an incoming user input event (e.g.: cursor moved, key pressed, /// window closed). /// diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index d50203726b..64571ae644 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -269,7 +269,8 @@ impl PlayState for SessionState { } else { self.inputs.secondary.set_state(state); - if let Some(select_pos) = select_pos { + // Check for select_block that is highlighted + if let Some(select_pos) = self.scene.select_pos() { client.collect_block(select_pos); } }