particles.py

Particle System - Optimized Version

class ParticleType

Description

No documentation

Attributes
FIRE: Any = 'fire'
WATER: Any = 'water'
SMOKE: Any = 'smoke'
DUST: Any = 'dust'
SPARK: Any = 'spark'
SNOW: Any = 'snow'
SAND: Any = 'sand'
EXHAUST: Any = 'exhaust'
STARFIELD: Any = 'starfield'
EXPLOSION: Any = 'explosion'
ENERGY: Any = 'energy'
PLASMA: Any = 'plasma'
CUSTOM: Any = 'custom'
Methods

No methods defined.

class ExitPoint

Description

No documentation

Attributes
TOP: Any = 'top'
BOTTOM: Any = 'bottom'
LEFT: Any = 'left'
RIGHT: Any = 'right'
CENTER: Any = 'center'
CIRCULAR: Any = 'circular'
Methods

No methods defined.

class PhysicsType

Description

No documentation

Attributes
TOPDOWN: Any = 'topdown'
PLATFORMER: Any = 'platformer'
SPACESHOOTER: Any = 'spaceshooter'
Methods

No methods defined.

class ParticleConfig

Description

No documentation

Attributes
color_start: Tuple[int, int, int] = (255, 255, 255)
color_end: Tuple[int, int, int] = (255, 255, 255)
size_start: float = 4.0
size_end: float = 4.0
lifetime: float = 1.0
speed: float = 100.0
gravity: float = 98.0
damping: float = 0.98
fade_out: bool = True
grow: bool = False
spread: float = 45.0
Methods

No methods defined.

class ParticleSystem

Description

Particle System

Attributes
PARTICLE_CONFIGS: Dict[ParticleType, ParticleConfig] = {ParticleType.FIRE: ParticleConfig(color_start=(255, 100, 0), color_end=(255, 255, 0), size_start=8.0, size_end=2.0, lifetime=1.5, speed=150.0, gravity=-100.0, spread=60.0, fade_out=True, grow=False), ParticleType.WATER: ParticleConfig(color_start=(0, 100, 255), color_end=(0, 200, 255), size_start=6.0, size_end=4.0, lifetime=2.0, speed=80.0, gravity=300.0, spread=30.0, damping=0.9, fade_out=True), ParticleType.SMOKE: ParticleConfig(color_start=(100, 100, 100), color_end=(50, 50, 50), size_start=4.0, size_end=12.0, lifetime=3.0, speed=60.0, gravity=-50.0, spread=120.0, fade_out=True, grow=True), ParticleType.DUST: ParticleConfig(color_start=(200, 200, 150), color_end=(150, 150, 100), size_start=3.0, size_end=1.0, lifetime=1.0, speed=40.0, gravity=50.0, spread=180.0, fade_out=True), ParticleType.SPARK: ParticleConfig(color_start=(255, 255, 200), color_end=(255, 100, 0), size_start=2.0, size_end=1.0, lifetime=0.5, speed=200.0, gravity=200.0, spread=15.0, fade_out=True), ParticleType.SNOW: ParticleConfig(color_start=(250, 250, 255), color_end=(225, 225, 235), size_start=3.0, size_end=1.0, lifetime=1.0, speed=50.0, gravity=100.0, spread=180.0, fade_out=True), ParticleType.SAND: ParticleConfig(color_start=(230, 230, 0), color_end=(255, 255, 0), size_start=1.0, size_end=1.0, lifetime=5.0, speed=200.0, gravity=100.0, spread=180.0, fade_out=True), ParticleType.EXHAUST: ParticleConfig(color_start=(0, 100, 255), color_end=(255, 50, 0), size_start=4.0, size_end=1.0, lifetime=0.3, speed=100.0, gravity=0.0, spread=30.0, fade_out=True, grow=False), ParticleType.EXPLOSION: ParticleConfig(color_start=(255, 200, 0), color_end=(255, 50, 0), size_start=10.0, size_end=2.0, lifetime=1.0, speed=300.0, gravity=0.0, spread=360.0, fade_out=True, grow=False), ParticleType.ENERGY: ParticleConfig(color_start=(0, 255, 255), color_end=(0, 100, 255), size_start=6.0, size_end=2.0, lifetime=1.2, speed=150.0, gravity=0.0, spread=90.0, fade_out=True, grow=False), ParticleType.PLASMA: ParticleConfig(color_start=(255, 0, 255), color_end=(100, 0, 255), size_start=5.0, size_end=1.0, lifetime=0.8, speed=250.0, gravity=0.0, spread=45.0, fade_out=True, grow=False)}
Methods
def __init__(self: Any, max_particles: int) -> Any
No documentation
def get_particles_names(self: Any, sort_name: bool = False, capitalize: bool = False) -> List[str]
Get list of all registered particle names
def get_physics_names(self: Any, sort_name: bool = False, capitalize: bool = False) -> List[str]
Get a list of physics names
def update_max_particles(self: Any, value: int) -> Any
Callback for the renderer update max_particles.
Preserves active particles during resize.
def _init_arrays(self: Any) -> Any
Initialize optimized NumPy arrays using current max_particles
def register_custom_particle(self: Any, name: str, config: ParticleConfig) -> bool
Register a custom particle type for user-defined effects

Args:
   name (str): Unique name for the custom particle type
   config (ParticleConfig): Configuration for the custom particle
   
Returns:
   bool: True if registration was successful
   
Raises:
   ValueError: If particle name is already registered
def get_custom_particle(self: Any, name: str) -> Optional[ParticleConfig]
Get configuration for a custom particle

Args:
   name (str): Name of the custom particle type
   
Returns:
   Optional[ParticleConfig]: The particle configuration or None if not found
def list_custom_particles(self: Any) -> List[str]
Get list of all registered custom particle names

Returns:
   List[str]: List of custom particle names
def get_render_data(self: Any) -> Dict[str, Any]
Get particle data for rendering with caching
def _resolve_particle_config(self: Any, particle_type: Union[ParticleType, str], custom_config: Optional[ParticleConfig]) -> Optional[ParticleConfig]
Resolve particle configuration from various sources

Args:
   particle_type: The particle type identifier
   custom_config: Optional custom configuration
   
Returns:
   ParticleConfig or None if not found
def _get_exit_offset(self: Any, exit_point: ExitPoint) -> float
Get offset distance for exit points
def _get_exit_position(self: Any, x: float, y: float, exit_point: ExitPoint, offset: float) -> Tuple[float, float]
Calculate initial position based on exit point
def _get_initial_velocity(self: Any, exit_point: ExitPoint, speed: float, spread: float, base_angle: float) -> Tuple[float, float]
Calculate initial velocity vector with spread
def emit(self: Any, x: float, y: float, particle_type: Union[ParticleType, str], count: int = 1, exit_point: ExitPoint = ExitPoint.CENTER, physics_type: PhysicsType = PhysicsType.TOPDOWN, spread: Optional[float] = None, angle: float = 0.0, custom_config: Optional[ParticleConfig] = None) -> Any
Emit particles with optimizations

Parameters:
   x: The x position of the emitter (int or float)
   y: The y position of the emitter (int or float)
   particle_type: The particle type identifier
   count: The number of particles to emit (default: 1)
   exit_point: The exit point of the particle (default: ExitPoint.CENTER)
   physics_type: The physics type of the particle (default: PhysicsType.TOPDOWN)
   spread: The spread of the particle (default: None) is in degrees
   angle: The angle of the particle (default: 0.0)
   custom_config: Optional custom configuration
def _setup_particle_properties(self: Any, idx: int, config: ParticleConfig, physics_type: PhysicsType) -> Any
Setup particle properties optimized for different physics types
def update(self: Any, dt: float, camera_position: Any = None) -> Any
Update particles with vectorized operations
def _update_properties(self: Any, indices: np.ndarray) -> Any
Update particle properties using vectorized operations - FIXED COLOR BUG
def clear(self: Any) -> Any
Clear all particles
def get_stats(self: Any) -> Dict[str, Any]
Get comprehensive system statistics

Returns:
   Dict with system statistics
Back to Graphics Module