mod emitter;
pub mod error;
pub mod field;
mod gpu;
pub mod input;
mod interactions;
pub mod lifecycle;
pub mod rules;
pub mod shader_utils;
mod simulation;
mod spawn;
mod spatial;
pub mod sub_emitter;
pub mod textures;
pub mod time;
mod uniforms;
pub mod visuals;
pub mod selection;
pub use bytemuck;
pub use emitter::Emitter;
pub use error::{GpuError, SimulationError, TextureError};
pub use field::{FieldConfig, FieldRegistry, FieldType};
pub use glam::{Vec2, Vec3, Vec4};
pub use gpu::GlyphRenderer;
pub use gpu::VolumeConfig;
pub use gpu::VolumeRenderState;
pub use gpu::{FieldSystemGpu, create_particle_field_bind_group_layout};
pub use interactions::InteractionMatrix;
pub use lifecycle::Lifecycle;
pub use rdpe_derive::{MultiParticle, Particle, ParticleType};
pub use rules::{AgentState, CustomRuleBuilder, Falloff, Rule, Transition};
pub use simulation::Simulation;
pub use spawn::SpawnContext;
pub use sub_emitter::{SpawnTrigger, SubEmitter};
pub use textures::{AddressMode, FilterMode, TextureConfig, TextureRegistry};
pub use uniforms::{CustomUniforms, UniformValue, UpdateContext};
pub use visuals::{BlendMode, ColorMapping, ConfigDiff, GlyphColorMode, GlyphConfig, GlyphMode, HotSwapChange, Palette, ParticleShape, VertexEffect, VisualConfig, WireframeMesh};
pub use gpu::{AdjacencyGpu, SpatialGpu, SpatialGridViz};
pub use spatial::{AdjacencyConfig, SpatialConfig};
pub trait ParticleTrait: Clone + Send + Sync {
type Gpu: Copy + Clone + bytemuck::Pod + bytemuck::Zeroable + Send + Sync;
const WGSL_STRUCT: &'static str;
const COLOR_FIELD: Option<&'static str>;
const COLOR_OFFSET: Option<u32>;
const ALIVE_OFFSET: u32;
const SCALE_OFFSET: u32;
const EXTRA_WGSL: &'static str = "";
fn to_gpu(&self) -> Self::Gpu;
fn from_gpu(gpu: &Self::Gpu) -> Self;
fn inspect_fields(&self) -> Vec<(&'static str, String)>;
#[cfg(feature = "egui")]
fn render_editable_fields(&mut self, ui: &mut egui::Ui) -> bool;
}
pub mod prelude {
pub use crate::emitter::Emitter;
pub use crate::field::{FieldConfig, FieldRegistry, FieldType};
pub use crate::gpu::VolumeConfig;
pub use crate::input::{Input, KeyCode, MouseButton};
pub use crate::interactions::InteractionMatrix;
pub use crate::lifecycle::Lifecycle;
pub use crate::rules::{AgentState, CustomRuleBuilder, Falloff, Rule, Transition};
pub use crate::simulation::Simulation;
pub use crate::spawn::SpawnContext;
pub use crate::sub_emitter::{SpawnTrigger, SubEmitter};
pub use crate::textures::{AddressMode, FilterMode, TextureConfig, TextureRegistry};
pub use crate::time::Time;
pub use crate::uniforms::{CustomUniforms, UpdateContext};
pub use crate::visuals::{BlendMode, ColorMapping, ConfigDiff, HotSwapChange, Palette, ParticleShape, VertexEffect, VisualConfig, WireframeMesh};
pub use crate::ParticleTrait;
pub use crate::{Vec2, Vec3, Vec4};
pub use rdpe_derive::{MultiParticle, Particle, ParticleType};
#[cfg(feature = "egui")]
pub use crate::selection::{selected_particle, selected_particle_data};
#[cfg(feature = "egui")]
pub use egui;
}