wicked-waifus-rs/game-server/src/logic/math/transform.rs

59 lines
No EOL
1.6 KiB
Rust

use shorekeeper_data::RawVectorData;
use shorekeeper_protocol::{Rotator, TransformData};
use super::Vector3f;
#[derive(Default, Clone, Debug)]
pub struct Transform {
pub position: Vector3f,
pub rotation: Vector3f,
}
impl Transform {
pub fn get_position_protobuf(&self) -> shorekeeper_protocol::Vector {
self.position.to_protobuf()
}
pub fn get_rotation_protobuf(&self) -> Rotator {
Rotator {
pitch: self.rotation.x,
yaw: self.rotation.y,
roll: self.rotation.z,
}
}
pub fn set_position_from_protobuf(&mut self, pos: &shorekeeper_protocol::Vector) {
self.position.x = pos.x;
self.position.y = pos.y;
self.position.z = pos.z;
}
pub fn set_rotation_from_protobuf(&mut self, rotator: &Rotator) {
self.rotation.x = rotator.pitch;
self.rotation.y = rotator.yaw;
self.rotation.z = rotator.roll;
}
pub fn load_from_save(data: TransformData) -> Self {
Self {
position: Vector3f::from_save(data.position.unwrap_or_default()),
rotation: Vector3f::from_save(data.rotation.unwrap_or_default()),
}
}
pub fn build_save_data(&self) -> TransformData {
TransformData {
position: Some(self.position.save_data()),
rotation: Some(self.rotation.save_data()),
}
}
}
impl From<&[RawVectorData]> for Transform {
fn from(transform: &[RawVectorData]) -> Self {
Self {
position: Vector3f::from(&transform[0]),
..Default::default()
}
}
}