载入中...
搜索中...
未找到
FloatingPointFixParticles.cpp
浏览该文件的文档.
2
4
5#include <cmath>
6
7namespace eve::particles {
8
10 if (!emitter || !std::isfinite(shiftX) || !std::isfinite(shiftY))
13 "particles.floatingOrigin: emitter and finite shift required"));
14 auto cfg = emitter->config();
15 if (cfg->simSpace != "world")
18 "particles.floatingOrigin: only world-space emitters can be shifted"));
19
20 auto sim = emitter->sim();
21 for (int i = 0; i < sim->alive; ++i) {
22 auto& particle = sim->particles[static_cast<std::size_t>(i)];
23 particle.x -= shiftX;
24 particle.y -= shiftY;
25 }
26 auto gpu = emitter->gpuSim();
27 if (gpu->residentActive) {
28 gpu->pendingWorldOffsetX -= shiftX;
29 gpu->pendingWorldOffsetY -= shiftY;
30 }
31 return Result<int>::success(sim->alive + gpu->estimatedAlive);
32}
33
34} // namespace eve::particles
std::unique_ptr< TrailEmitter > emitter
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result success(T value)
Construct a successful result owning value.
Definition Result.h:164
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
ECS emitter entity. Script configures components; ParticleSimSystem / ParticleRenderSystem drive per-...
Result< int > shiftWorldSpaceParticles(ParticleEmitter *emitter, float shiftX, float shiftY)
Shift live world-space particles after a floating-origin rebase.