1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-05-04 20:07:44 +00:00
kawari/src/world/ipc/actor_control.rs

71 lines
1.8 KiB
Rust
Raw Normal View History

use binrw::binrw;
use crate::common::{read_bool_from, write_bool_as};
use super::OnlineStatus;
// See https://github.com/awgil/ffxiv_reverse/blob/f35b6226c1478234ca2b7149f82d251cffca2f56/vnetlog/vnetlog/ServerIPC.cs#L266 for a REALLY useful list of known values
#[binrw]
#[derive(Debug, Eq, PartialEq, Clone)]
pub enum ActorControlCategory {
#[brw(magic = 0x26u16)]
ToggleInvisibility {
#[brw(pad_before = 2)]
#[br(map = read_bool_from::<u32>)]
#[bw(map = write_bool_as::<u32>)]
invisible: bool,
},
#[brw(magic = 0xC8u16)]
ZoneIn {
#[brw(pad_before = 2)]
warp_finish_anim: u32,
raise_anim: u32,
},
#[brw(magic = 0x260u16)]
SetCharaGearParamUI {
#[brw(pad_before = 2)]
unk1: u32,
unk2: u32,
},
#[brw(magic = 0x01F8u16)]
SetStatusIcon {
#[brw(pad_before = 2)]
icon: OnlineStatus,
},
2025-03-29 00:39:00 -04:00
#[brw(magic = 0x261u16)]
ToggleWireframeRendering(),
}
#[binrw]
#[derive(Debug, Clone)]
pub struct ActorControl {
#[brw(pad_after = 4)]
#[brw(pad_size_to = 20)] // take into account categories without params
pub category: ActorControlCategory,
}
impl Default for ActorControl {
fn default() -> Self {
Self {
category: ActorControlCategory::ToggleInvisibility { invisible: false },
}
}
}
// Has more padding than ActorControl?
#[binrw]
#[derive(Debug, Clone)]
pub struct ActorControlSelf {
#[brw(pad_after = 12)]
#[brw(pad_size_to = 20)] // take into account categories without params
pub category: ActorControlCategory,
}
impl Default for ActorControlSelf {
fn default() -> Self {
Self {
category: ActorControlCategory::ToggleInvisibility { invisible: false },
}
}
}