forked from ObolSquad/trigger-rs
Reviewed-on: ObolSquad/trigger-rs#5 Co-authored-by: traffic95 <traffic95@xeondev.com> Co-committed-by: traffic95 <traffic95@xeondev.com>
124 lines
4.1 KiB
Rust
124 lines
4.1 KiB
Rust
use bevy_ecs::event::Event;
|
|
use trigger_encoding::Decodeable;
|
|
use trigger_logic::scene::Transform;
|
|
use trigger_protocol::{
|
|
ClientCmdID, EnterSectionCsReq, InteractWithUnitCsReq, RunEventGraphCsReq,
|
|
SavePosInMainCityCsReq, SwitchRoleCsReq, util::ProtocolUnit,
|
|
};
|
|
|
|
use super::ecs::NapEcs;
|
|
|
|
pub trait ProtocolEventHandler {
|
|
fn push_protocol_event(&mut self, request_id: u32, protocol_unit: ProtocolUnit);
|
|
}
|
|
|
|
#[derive(Event, Debug)]
|
|
pub struct PlayerMoveEvent {
|
|
pub request_id: u32,
|
|
pub position: Transform,
|
|
pub section_id: u32,
|
|
}
|
|
|
|
#[derive(Event, Debug)]
|
|
pub struct InteractWithUnitEvent {
|
|
pub request_id: u32,
|
|
pub interact_id: i32,
|
|
pub trigger_type: i32,
|
|
pub npc_tag_id: i32,
|
|
}
|
|
|
|
#[derive(Event, Debug)]
|
|
pub struct RunEventGraphEvent {
|
|
pub request_id: u32,
|
|
pub event_graph_uid: u32,
|
|
#[expect(dead_code)]
|
|
pub section_id: u32,
|
|
pub owner_id: u32,
|
|
pub owner_type: i32,
|
|
pub tag: u32,
|
|
}
|
|
|
|
#[derive(Event, Debug)]
|
|
pub struct EnterSectionEvent {
|
|
pub request_id: u32,
|
|
pub section_id: u32,
|
|
pub transform_id: String,
|
|
}
|
|
|
|
#[derive(Event, Debug)]
|
|
pub struct SwitchRoleEvent {
|
|
pub player_avatar_id: u32,
|
|
pub control_avatar_id: u32,
|
|
}
|
|
|
|
impl ProtocolEventHandler for NapEcs {
|
|
fn push_protocol_event(&mut self, request_id: u32, protocol_unit: ProtocolUnit) {
|
|
match protocol_unit.cmd_id {
|
|
SavePosInMainCityCsReq::CMD_ID => {
|
|
if let Ok(cmd) =
|
|
SavePosInMainCityCsReq::decode(&mut ::std::io::Cursor::new(&protocol_unit.blob))
|
|
{
|
|
self.0.world_mut().send_event(PlayerMoveEvent {
|
|
request_id,
|
|
section_id: cmd.section_id,
|
|
position: cmd
|
|
.position
|
|
.map(|t| Transform {
|
|
position: t.position.into(),
|
|
rotation: t.rotation.into(),
|
|
})
|
|
.unwrap_or_default(),
|
|
});
|
|
}
|
|
}
|
|
InteractWithUnitCsReq::CMD_ID => {
|
|
if let Ok(cmd) =
|
|
InteractWithUnitCsReq::decode(&mut ::std::io::Cursor::new(&protocol_unit.blob))
|
|
{
|
|
self.0.world_mut().send_event(InteractWithUnitEvent {
|
|
request_id,
|
|
interact_id: cmd.interact_id,
|
|
npc_tag_id: cmd.npc_tag_id,
|
|
trigger_type: cmd.r#type,
|
|
});
|
|
}
|
|
}
|
|
RunEventGraphCsReq::CMD_ID => {
|
|
if let Ok(cmd) =
|
|
RunEventGraphCsReq::decode(&mut ::std::io::Cursor::new(&protocol_unit.blob))
|
|
{
|
|
self.0.world_mut().send_event(RunEventGraphEvent {
|
|
request_id,
|
|
event_graph_uid: cmd.event_graph_uid,
|
|
owner_type: cmd.owner_type,
|
|
owner_id: cmd.owner_id,
|
|
section_id: cmd.section_id,
|
|
tag: cmd.tag,
|
|
});
|
|
}
|
|
}
|
|
EnterSectionCsReq::CMD_ID => {
|
|
if let Ok(cmd) =
|
|
EnterSectionCsReq::decode(&mut ::std::io::Cursor::new(&protocol_unit.blob))
|
|
{
|
|
self.0.world_mut().send_event(EnterSectionEvent {
|
|
request_id,
|
|
section_id: cmd.section_id,
|
|
transform_id: cmd.transform_id,
|
|
});
|
|
}
|
|
}
|
|
SwitchRoleCsReq::CMD_ID => {
|
|
if let Ok(cmd) =
|
|
SwitchRoleCsReq::decode(&mut ::std::io::Cursor::new(&protocol_unit.blob))
|
|
{
|
|
self.0.world_mut().send_event(SwitchRoleEvent {
|
|
player_avatar_id: cmd.player_avatar_id,
|
|
control_avatar_id: cmd.control_avatar_id,
|
|
});
|
|
}
|
|
}
|
|
_ => (),
|
|
}
|
|
}
|
|
}
|