Don't use distinct event system for handling sprite interactions

This commit is contained in:
Joshua Barretto 2024-01-21 18:10:42 +00:00
parent 4cbec5d93c
commit ad8965fdd7
8 changed files with 28 additions and 33 deletions

View File

@ -20,7 +20,7 @@ use common::{
comp::{ comp::{
self, self,
chat::KillSource, chat::KillSource,
controller::{BlockInteraction, CraftEvent}, controller::CraftEvent,
dialogue::Subject, dialogue::Subject,
group, group,
inventory::item::{modular, tool, ItemKind}, inventory::item::{modular, tool, ItemKind},
@ -1420,10 +1420,9 @@ impl Client {
} }
pub fn toggle_sprite_light(&mut self, pos: VolumePos, enable: bool) { pub fn toggle_sprite_light(&mut self, pos: VolumePos, enable: bool) {
self.send_msg(ClientGeneral::ControlEvent(ControlEvent::BlockInteraction( self.send_msg(ClientGeneral::ControlEvent(
pos, ControlEvent::ToggleSpriteLight(pos, enable),
BlockInteraction::ToggleLight(enable), ));
)));
} }
pub fn remove_buff(&mut self, buff_id: BuffKind) { pub fn remove_buff(&mut self, buff_id: BuffKind) {

View File

@ -134,11 +134,6 @@ pub enum UtteranceKind {
* sounds */ * sounds */
} }
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum BlockInteraction {
ToggleLight(bool),
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum ControlEvent { pub enum ControlEvent {
//ToggleLantern, //ToggleLantern,
@ -164,7 +159,7 @@ pub enum ControlEvent {
new_ability: ability::AuxiliaryAbility, new_ability: ability::AuxiliaryAbility,
}, },
ActivatePortal(Uid), ActivatePortal(Uid),
BlockInteraction(VolumePos, BlockInteraction), ToggleSpriteLight(VolumePos, bool),
} }
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] #[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]

View File

@ -4,7 +4,6 @@ use crate::{
comp::{ comp::{
self, self,
agent::Sound, agent::Sound,
controller::BlockInteraction,
dialogue::Subject, dialogue::Subject,
invite::{InviteKind, InviteResponse}, invite::{InviteKind, InviteResponse},
misc::PortalData, misc::PortalData,
@ -339,10 +338,10 @@ pub enum ServerEvent {
entity: EcsEntity, entity: EcsEntity,
portal: EcsEntity, portal: EcsEntity,
}, },
BlockInteraction { ToggleSpriteLight {
entity: EcsEntity, entity: EcsEntity,
pos: VolumePos, pos: VolumePos,
interaction: BlockInteraction, enable: bool,
}, },
} }

View File

@ -157,6 +157,7 @@ pub enum SpriteInteractKind {
Collectible, Collectible,
Unlock, Unlock,
Fallback, Fallback,
ToggleLight(bool),
} }
impl From<SpriteKind> for Option<SpriteInteractKind> { impl From<SpriteKind> for Option<SpriteInteractKind> {
@ -233,6 +234,11 @@ impl SpriteInteractKind {
Duration::from_secs_f32(1.0), Duration::from_secs_f32(1.0),
Duration::from_secs_f32(0.3), Duration::from_secs_f32(0.3),
), ),
Self::ToggleLight(_) => (
Duration::from_secs_f32(0.1),
Duration::from_secs_f32(0.2),
Duration::from_secs_f32(0.1),
),
} }
} }
} }

View File

@ -1,6 +1,6 @@
use super::{sprite, SpriteKind}; use super::{sprite, SpriteKind};
use crate::{ use crate::{
comp::{controller::BlockInteraction, fluid_dynamics::LiquidKind, tool::ToolKind}, comp::{fluid_dynamics::LiquidKind, tool::ToolKind},
consts::FRIC_GROUND, consts::FRIC_GROUND,
lottery::LootSpec, lottery::LootSpec,
make_case_elim, rtsim, make_case_elim, rtsim,
@ -634,12 +634,9 @@ impl Block {
} }
} }
pub fn apply_interaction(&self, interaction: BlockInteraction) -> Option<Self> { /// Apply a light toggle to this block, if possible
match interaction { pub fn with_toggle_light(self, enable: bool) -> Option<Self> {
BlockInteraction::ToggleLight(enable) => {
self.with_attr(sprite::LightDisabled(!enable)).ok() self.with_attr(sprite::LightDisabled(!enable)).ok()
},
}
} }
#[inline] #[inline]

View File

@ -140,11 +140,11 @@ impl<'a> System<'a> for Sys {
server_emitter.emit(ServerEvent::StartTeleporting { entity, portal }); server_emitter.emit(ServerEvent::StartTeleporting { entity, portal });
} }
}, },
ControlEvent::BlockInteraction(pos, interaction) => { ControlEvent::ToggleSpriteLight(pos, enable) => {
server_emitter.emit(ServerEvent::BlockInteraction { server_emitter.emit(ServerEvent::ToggleSpriteLight {
entity, entity,
pos, pos,
interaction, enable,
}); });
}, },
} }

View File

@ -6,7 +6,6 @@ use common::{
comp::{ comp::{
self, self,
agent::{AgentEvent, Sound, SoundKind}, agent::{AgentEvent, Sound, SoundKind},
controller::BlockInteraction,
dialogue::Subject, dialogue::Subject,
inventory::slot::EquipSlot, inventory::slot::EquipSlot,
item::{flatten_counted_items, MaterialStatManifest}, item::{flatten_counted_items, MaterialStatManifest},
@ -471,11 +470,11 @@ pub fn handle_tame_pet(server: &mut Server, pet_entity: EcsEntity, owner_entity:
tame_pet(server.state.ecs(), pet_entity, owner_entity); tame_pet(server.state.ecs(), pet_entity, owner_entity);
} }
pub fn handle_block_interaction( pub fn handle_toggle_sprite_light(
server: &mut Server, server: &mut Server,
entity: EcsEntity, entity: EcsEntity,
pos: VolumePos, pos: VolumePos,
interaction: BlockInteraction, enable: bool,
) { ) {
let state = server.state_mut(); let state = server.state_mut();
// TODO: Implement toggling lights on volume entities // TODO: Implement toggling lights on volume entities
@ -488,7 +487,7 @@ pub fn handle_block_interaction(
.terrain() .terrain()
.get(pos.pos) .get(pos.pos)
.ok() .ok()
.and_then(|block| block.apply_interaction(interaction)) .and_then(|block| block.with_toggle_light(enable))
{ {
state.set_block(pos.pos, new_block); state.set_block(pos.pos, new_block);
} }

View File

@ -25,8 +25,8 @@ use entity_manipulation::{
use group_manip::handle_group; use group_manip::handle_group;
use information::handle_site_info; use information::handle_site_info;
use interaction::{ use interaction::{
handle_block_interaction, handle_create_sprite, handle_lantern, handle_mine_block, handle_create_sprite, handle_lantern, handle_mine_block, handle_mount, handle_npc_interaction,
handle_mount, handle_npc_interaction, handle_set_pet_stay, handle_sound, handle_unmount, handle_set_pet_stay, handle_sound, handle_toggle_sprite_light, handle_unmount,
}; };
use inventory_manip::handle_inventory; use inventory_manip::handle_inventory;
use invite::{handle_invite, handle_invite_response}; use invite::{handle_invite, handle_invite_response};
@ -305,11 +305,11 @@ impl Server {
ServerEvent::StartTeleporting { entity, portal } => { ServerEvent::StartTeleporting { entity, portal } => {
handle_start_teleporting(self, entity, portal) handle_start_teleporting(self, entity, portal)
}, },
ServerEvent::BlockInteraction { ServerEvent::ToggleSpriteLight {
entity, entity,
pos, pos,
interaction, enable,
} => handle_block_interaction(self, entity, pos, interaction), } => handle_toggle_sprite_light(self, entity, pos, enable),
} }
} }