use crate::{SsbhArray, SsbhString, Vector3, Vector4, Version};
use binrw::BinRead;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use ssbh_write::SsbhWrite;
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
#[derive(Debug, BinRead, SsbhWrite, PartialEq, Clone)]
#[br(import(major_version: u16, minor_version: u16))]
pub enum Hlpb {
#[br(pre_assert(major_version == 1 && minor_version == 1))]
V11 {
aim_constraints: SsbhArray<AimConstraint>,
orient_constraints: SsbhArray<OrientConstraint>,
constraint_indices: SsbhArray<u32>,
constraint_types: SsbhArray<ConstraintType>,
},
}
impl Version for Hlpb {
fn major_minor_version(&self) -> (u16, u16) {
match self {
Hlpb::V11 { .. } => (1, 1),
}
}
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
#[derive(Debug, BinRead, SsbhWrite, PartialEq, Clone)]
pub struct AimConstraint {
pub name: SsbhString,
pub aim_bone_name1: SsbhString,
pub aim_bone_name2: SsbhString,
pub aim_type1: SsbhString, pub aim_type2: SsbhString, pub target_bone_name1: SsbhString,
pub target_bone_name2: SsbhString,
pub unk1: u32, pub unk2: u32, pub aim: Vector3,
pub up: Vector3,
pub quat1: Vector4,
pub quat2: Vector4,
pub unk17: f32, pub unk18: f32, pub unk19: f32, pub unk20: f32, pub unk21: f32, pub unk22: f32, }
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
#[derive(Debug, BinRead, SsbhWrite, PartialEq, Clone)]
pub struct OrientConstraint {
pub name: SsbhString,
pub parent_bone_name1: SsbhString,
pub parent_bone_name2: SsbhString,
pub source_bone_name: SsbhString,
pub target_bone_name: SsbhString,
pub unk_type: u32,
pub constraint_axes: Vector3,
pub quat1: Vector4,
pub quat2: Vector4,
pub range_min: Vector3, pub range_max: Vector3, }
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
#[derive(Debug, BinRead, SsbhWrite, Clone, Copy, PartialEq, Eq)]
#[br(repr(u32))]
#[ssbhwrite(repr(u32))]
pub enum ConstraintType {
Aim = 0,
Orient = 1,
}