use wgpu::{TextureView, Buffer, BindGroup}; use std::sync::Arc; use rapier3d::dynamics::{RigidBody, RigidBodyHandle}; use rapier3d::geometry::ColliderHandle; use rapier3d::geometry::Collider as r3dCollider; use std::time::{Duration, Instant}; // a component is any type that is 'static, sized, send and sync #[derive(Clone, Copy, Debug, PartialEq)] pub struct LoopState { pub delta_time: Duration, pub start_time: Instant, pub step_size: f32, } #[derive(Clone, Copy, Debug, PartialEq)] pub struct Position { pub x: f32, pub y: f32, pub z: f32, pub rot: cgmath::Quaternion, } #[derive(Clone, Copy, Debug, PartialEq)] pub struct Color { pub r: f32, pub g: f32, pub b: f32, pub a: f32, } #[derive(Clone, Copy, Debug, PartialEq)] pub struct Velocity { pub dx: f32, pub dy: f32, pub rs: f32, } #[derive(Clone, Default, PartialEq, Eq, Hash, Copy, Debug)] pub struct RangeCopy { pub start: Idx, pub end: Idx, } #[derive(Clone, Debug)] pub struct DirectionalLight { pub color: wgpu::Color, pub fov: f32, pub depth: RangeCopy, pub target_view: Arc, } #[derive(Clone, Debug)] pub struct Mesh { pub index_buffer: Arc, pub index_count: usize, pub vertex_buffer: Arc, pub uniform_buffer: Arc, pub bind_group: Arc, } #[derive(Clone, Debug)] pub struct Physics { pub rigid_body: RigidBody, pub rigid_body_handle: Option, } #[derive(Clone)] pub struct Collider { pub collider: r3dCollider, pub collider_handle: Option, }