use super::structure::{Circle, Rectangle, Vec3f};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct LightEmittingObjects {
pub light_emitting_object: Vec<LightEmittingObject>,
}
impl LightEmittingObjects {
pub fn objects(&self) -> &[LightEmittingObject] {
&self.light_emitting_object
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct LightEmittingObject {
#[serde(rename = "@partName")]
pub part_name: String,
pub position: Vec3f,
pub rotation: Vec3f,
pub rectangle: Option<Rectangle>,
pub circle: Option<Circle>,
}
impl LightEmittingObject {
pub fn part_name(&self) -> &str {
&self.part_name
}
pub fn position(&self) -> (f32, f32, f32) {
(self.position.x, self.position.y, self.position.z)
}
pub fn rotation(&self) -> (f32, f32, f32) {
(self.rotation.x, self.rotation.y, self.rotation.z)
}
pub fn rectangle(&self) -> Option<&Rectangle> {
self.rectangle.as_ref()
}
pub fn circle(&self) -> Option<&Circle> {
self.circle.as_ref()
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct LightEmittingObjectReference {
#[serde(rename = "@lightEmittingPartName")]
light_emitting_part_name: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct LightEmittingSurfaces {
light_emitting_surface: Vec<LightEmittingSurface>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct LightEmittingSurface {
#[serde(rename = "@partName")]
part_name: String,
light_emitting_object_reference: LightEmittingObjectReference,
face_assignments: FaceAssignments,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
struct FaceAssignments {
face_assignment: Option<Vec<FaceAssignment>>,
face_range_assignment: Option<Vec<FaceRangeAssignment>>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct FaceAssignment {
#[serde(rename = "@faceIndex")]
face_index: usize,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct FaceRangeAssignment {
#[serde(rename = "@faceIndexBegin")]
face_index_begin: usize,
#[serde(rename = "@faceIndexEnd")]
face_index_end: usize,
}