pub type Vector3 = (f32, f32, f32);
pub type Quaternion = (f32, f32, f32, f32);
pub type Matrix4 = [[f32; 4]; 4];
#[derive(Copy, Clone, Serialize, Deserialize, PartialEq)]
pub struct Vertex {
pub position: [f32; 3],
pub normal: [f32; 3],
pub texture: [f32; 2],
}
implement_vertex!(Vertex, position, normal, texture);
#[derive(Builder, Copy, Clone, Serialize, Deserialize, PartialEq)]
#[builder(default)]
pub struct Transform {
pub pos: Vector3,
pub rot: Quaternion,
pub scale: Vector3,
pub active: bool,
pub cull: bool,
}
impl Default for Transform {
fn default() -> Self {
Transform {
pos: (0f32, 0f32, 0f32),
rot: (0f32, 0f32, 0f32, 0f32),
scale: (1f32, 1f32, 1f32),
active: true,
cull: true,
}
}
}
unsafe impl Send for Transform {}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub enum PhysicsType {
Static,
Dynamic,
None,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug, Default)]
pub struct DefaultTag;
#[derive(Builder, Clone, Serialize, Deserialize, PartialEq)]
#[builder(default)]
pub struct RenderItem<T: Default> {
pub vertices: Vec<Vertex>,
pub material: Material,
pub instance_transforms: Vec<Transform>,
pub active: bool,
pub physics_type: PhysicsType,
#[builder(setter(into))]
pub name: String,
pub tag: T,
}
impl<T: Default> Default for RenderItem<T> {
fn default() -> Self {
RenderItem {
vertices: Default::default(),
material: Default::default(),
instance_transforms: Default::default(),
active: true,
physics_type: PhysicsType::None,
name: "ri".into(),
tag: Default::default(),
}
}
}
unsafe impl<T: Default> Send for RenderItem<T> {}
#[derive(Builder, Clone, Serialize, Deserialize, PartialEq)]
#[builder(default)]
pub struct Material {
#[builder(setter(into))]
pub shader_name: String,
pub texture_name: Option<String>,
pub normal_texture_name: Option<String>,
}
impl Default for Material {
fn default() -> Self {
Material {
shader_name: "dist".into(),
texture_name: None,
normal_texture_name: None,
}
}
}
#[derive(Builder, Clone, Serialize, Deserialize, PartialEq)]
#[builder(default)]
pub struct TextItem {
#[builder(setter(into))]
pub text: String,
pub color: (f32, f32, f32, f32),
pub pos: Vector3,
pub scale: Vector3,
pub active: bool,
#[builder(setter(into))]
pub name: String,
}
impl Default for TextItem {
fn default() -> Self {
TextItem {
text: Default::default(),
color: (0f32, 0f32, 0f32, 1f32),
pos: (0f32, 0f32, 0f32),
scale: (1f32, 1f32, 1f32),
active: true,
name: "ti".into(),
}
}
}
unsafe impl Send for TextItem {}
#[derive(Builder, Copy, Clone, Serialize, Deserialize, PartialEq)]
#[builder(default)]
pub struct Camera {
pub pos: Vector3,
pub euler_rot: Vector3,
}
impl Default for Camera {
fn default() -> Self {
Camera {
pos: (0f32, 0f32, 0f32),
euler_rot: (0f32, 0f32, 0f32),
}
}
}
#[derive(Copy, Clone, Serialize, Deserialize, PartialEq)]
pub struct ShaderIn {
pub world_position: Vector3,
pub world_rotation: Quaternion,
pub world_scale: Vector3,
}
implement_vertex!(ShaderIn, world_position, world_rotation, world_scale);