use freecs::Entity;
use nalgebra_glm::Vec3;
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, enum2schema::Schema)]
pub struct Beam {
pub start: Vec3,
pub end: Vec3,
pub color: Vec3,
pub intensity: f32,
pub alpha: f32,
pub width: f32,
pub strands: u32,
pub flicker: f32,
pub flicker_speed: f32,
pub age: f32,
}
impl Default for Beam {
fn default() -> Self {
Self {
start: Vec3::zeros(),
end: Vec3::new(0.0, 1.0, 0.0),
color: Vec3::new(2.0, 2.0, 2.0),
intensity: 3.0,
alpha: 1.0,
width: 0.12,
strands: 5,
flicker: 0.0,
flicker_speed: 30.0,
age: 0.0,
}
}
}
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, enum2schema::Schema)]
pub struct LightningBolt {
pub start: Vec3,
pub end: Vec3,
pub color: Vec3,
pub intensity: f32,
pub alpha: f32,
pub segments: u32,
pub jaggedness: f32,
pub branch_count: u32,
pub branch_spread: f32,
pub regen_interval: f32,
pub timer: f32,
pub seed: u32,
}
impl Default for LightningBolt {
fn default() -> Self {
Self {
start: Vec3::zeros(),
end: Vec3::new(0.0, 4.0, 0.0),
color: Vec3::new(1.4, 1.7, 3.0),
intensity: 4.0,
alpha: 1.0,
segments: 18,
jaggedness: 0.45,
branch_count: 4,
branch_spread: 0.8,
regen_interval: 0.06,
timer: 0.0,
seed: 1,
}
}
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize, enum2schema::Schema)]
pub struct Trail {
pub center: Vec3,
pub radius: f32,
pub axis: Vec3,
pub speed: f32,
pub color: Vec3,
pub intensity: f32,
pub alpha: f32,
pub max_points: u32,
pub points: Vec<Vec3>,
pub age: f32,
}
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, enum2schema::Schema)]
pub struct VfxAnimator {
pub age: f32,
pub lifetime: f32,
pub despawn_on_end: bool,
pub start_scale: Vec3,
pub end_scale: Vec3,
pub spin_axis: Vec3,
pub spin_speed: f32,
pub peak_color: Vec3,
pub emissive_strength: f32,
pub base_alpha: f32,
pub fade_alpha: bool,
pub pulse_amplitude: f32,
pub pulse_frequency: f32,
pub orbit_center: Vec3,
pub orbit_radius: f32,
pub orbit_axis: Vec3,
pub orbit_speed: f32,
}
impl Default for VfxAnimator {
fn default() -> Self {
Self {
age: 0.0,
lifetime: 0.0,
despawn_on_end: false,
start_scale: Vec3::new(1.0, 1.0, 1.0),
end_scale: Vec3::new(1.0, 1.0, 1.0),
spin_axis: Vec3::new(0.0, 1.0, 0.0),
spin_speed: 0.0,
peak_color: Vec3::new(1.0, 1.0, 1.0),
emissive_strength: 3.0,
base_alpha: 1.0,
fade_alpha: false,
pulse_amplitude: 0.0,
pulse_frequency: 0.0,
orbit_center: Vec3::new(0.0, 0.0, 0.0),
orbit_radius: 0.0,
orbit_axis: Vec3::new(0.0, 1.0, 0.0),
orbit_speed: 0.0,
}
}
}
#[derive(Debug, Clone, Default)]
pub struct VfxHandle {
pub entities: Vec<Entity>,
}