59 lines
No EOL
1.6 KiB
Rust
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()
|
|
}
|
|
}
|
|
} |