Conversation
- Add ParticleEmitter drawable with physics, emission, velocity, visual, and rotation properties - Add ParticleEmitterOperator source operator - Register ParticleEmitter in LibraryService - Add localization strings for all particle emitter properties (en/ja)
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 033e2441ae
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
This PR adds a comprehensive particle emitter system to Beutl, including CPU-based particle simulation with checkpoint caching for efficient timeline scrubbing, configurable emitter shapes, physics simulation (gravity, air resistance, turbulence), and visual customization. The implementation follows established codebase patterns for Drawables and Operators, with full English and Japanese localization.
Changes:
- Added particle system core classes (ParticleEmitter, ParticleSimulator, ParticleRenderNode, Particle struct, EmitterShape enum)
- Integrated particle emitter as a source operator with property exposure
- Added comprehensive localization for all particle emitter properties in English and Japanese
Reviewed changes
Copilot reviewed 9 out of 10 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| ParticleEmitter.cs | Drawable class with 30+ properties for particle configuration grouped into Emitter, Emission, Velocity, Physics, Visual, Rotation, and Over Life categories |
| ParticleSimulator.cs | CPU-based simulator with fixed timestep (60 FPS), checkpoint caching every 0.5s, and support for multiple emitter shapes |
| ParticleRenderNode.cs | Rendering node that caches particle drawable to render target and draws all particles with transforms, opacity, and color modulation |
| Particle.cs | Struct containing particle state (position, velocity, rotation, size, color, opacity, lifetime) |
| EmitterShape.cs | Enum defining Point, Line, Circle, and Box emitter shapes |
| ParticleEmitterOperator.cs | Operator exposing all particle emitter properties with appropriate default values |
| LibraryRegistrar.cs | Registration of particle emitter in library service |
| Strings.resx, Strings.ja.resx, Strings.Designer.cs | Localization resources for all particle emitter properties |
Files not reviewed (1)
- src/Beutl.Language/Strings.Designer.cs: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Fix RNG desynchronization: replace AdvanceRng with CountingRandom that stores RNG call count in checkpoints for exact state restoration - Bound checkpoint cache growth with MaxCheckpoints=120 to prevent unbounded memory usage on long timelines - Fix particle bounds calculation to use conservative square bounding box that accounts for rotation
|
No TODO comments were found. |
Minimum allowed line rate is |
Description
Adds a particle emitter system to Beutl, including a
ParticleEmitterdrawable with configurable emitter shape, emission rate, lifetime, velocity, physics (gravity, air resistance, turbulence), visual properties (size, color, opacity), and rotation. Also includesParticleSimulatorfor CPU-based simulation,ParticleRenderNodefor rendering, andParticleEmitterOperatorfor integration as a source operator. All properties are localized in English and Japanese.Breaking changes
None.
Fixed issues