载入中...
搜索中...
未找到
ParticleEmitter.cpp
浏览该文件的文档.
69const char* gpuFeatureFallbackReason(const ParticleEmitter::Config& cfg, const ParticleEmitter::Draw& draw) {
100void quatRotateVec(float qx, float qy, float qz, float qw, float vx, float vy, float vz, float &ox,
200 const float speed = randRange(sim.rng, cfg.speedMin, cfg.speedMax) * cfg.resolvedParameterScale("speed");
303 projectToPlane(attach.ik3d->getX(attach.boneIndex) + ox, attach.ik3d->getY(attach.boneIndex) + oy,
340bool spawnParticleAt(ParticleEmitter::Config &cfg, ParticleEmitter::Sim &sim, float x, float y) {
377bool sampleSkinSpawn(ParticleEmitter::SkinSource &skinSrc, ParticleEmitter::Sim &sim, float &outX,
380 const int vi = skinSrc.candidates[static_cast<size_t>(randIndex(sim.rng, int(skinSrc.candidates.size())))];
918bool ParticleEmitter::isGpuFeatureSetSupported() { return gpuFeatureFallbackReason(*config(), *draw())[0] == '\0'; }
920std::string ParticleEmitter::getSimulationBackend() { return gpuSim()->residentActive ? "gpu" : "cpu"; }
925 if (const char* reason = gpuFeatureFallbackReason(*config(), *draw()); reason[0] != '\0') return reason;
946void ParticleEmitter::bindFloatParameter(const std::string& name, const std::string& target, float scale,
1053 se.inheritVelocity = inheritVelocity < 0.f ? 0.f : (inheritVelocity > 1.f ? 1.f : inheritVelocity);
1154void ParticleEmitter::setNormalTexture(graphics::Texture* texture) { draw()->normalTexture = texture; }
1257 case Resource::ReloadObservation::MtimePollingReloadFailed: return "mtime_polling_reload_failed";
Borrowed 2D signed-distance field consumed by particle collision.
Definition ParticleSdf.h:25
virtual ParticleSdfGradientStatus gradient(float x, float y, float &outNx, float &outNy) const =0
Approximate outward unit gradient at a world-space position.
virtual float sample(float x, float y) const =0
Sample signed distance at a world-space particle position.
Evaluated local (and optional world) pose for an AnimSkeleton. Script type: AnimPose.
Definition AnimPose.h:17
3D bone hierarchy + bind-pose local TRS for skeletal animation. Independent of ik::Skeleton3D (FABRIK...
Definition AnimSkeleton.h:16
CPU linear-blend skinning binding for one mesh against an AnimSkeleton.
Definition AnimSkin.h:47
float getSkinnedPositionX(int vertexIndex) const
Cached skinned position component (requires updateSkinnedPositions).
Definition AnimSkin.cpp:258
float getSkinnedPositionZ(int vertexIndex) const
Returns the skinned position z.
Definition AnimSkin.cpp:268
float getSkinnedPositionY(int vertexIndex) const
Returns the skinned position y.
Definition AnimSkin.cpp:263
Runtime Spine skeleton pose (local + world bone transforms, slot attachments). Script type: SpineSkel...
Definition SpineSkeleton.h:16
GPU texture created via Graphics::newTexture. Owns GPU resources through an opaque backend handle.
Definition Texture.h:18
Script-facing 2D skeleton + pose state (ik::skeleton2d + ik::ecs2d). Bone indices are stable after ea...
Definition Skeleton2D.h:14
Script-facing 3D skeleton + pose state (ik::skeleton3d + ik::ecs3d). Local angles are yaw/pitch in th...
Definition Skeleton3D.h:13
float sample(float t, float fallback) const
Sample at normalized t; fallback is returned when the curve is empty.
Definition ParticleCurve.h:116
ECS emitter entity. Script configures components; ParticleSimSystem / ParticleRenderSystem drive per-...
Definition ParticleEmitter.h:71
bool getAutoReload()
Definition ParticleEmitter.cpp:1245
void setPrewarm(float seconds)
Definition ParticleEmitter.cpp:857
void applyPreset(const std::string &name)
Named preset: "spark" / "smoke" / "fire". Unknown → no-op.
Definition ParticleEmitter.cpp:1166
std::string getSortMode()
Return the configured transparent ordering policy.
Definition ParticleEmitter.cpp:1024
void addSizeCurvePoint(float t, float v)
Definition ParticleEmitter.cpp:1135
void setMaxDeltaTime(float seconds)
Definition ParticleEmitter.cpp:1043
void setGpuSimulation(bool enable)
Definition ParticleEmitter.cpp:899
void setDistortionStrength(float strengthPixels)
Set the maximum scene-color refraction offset in screen pixels.
Definition ParticleEmitter.cpp:1032
void clearVelocityCurve()
Definition ParticleEmitter.cpp:877
void setFlipbook(int hframes, int vframes, float framesPerSecond=0.f, float randomStart=0.f)
Definition ParticleEmitter.cpp:1119
void addColorStop(float t, float r, float g, float b, float a)
Definition ParticleEmitter.cpp:1129
void setSkinBoneFilter(int skeletonBoneIndex, float minWeight=0.f)
Definition ParticleEmitter.cpp:1384
float getParticleHeight()
Definition ParticleEmitter.cpp:826
void setLimitVelocity(float maxSpeed)
Definition ParticleEmitter.cpp:873
void setWorldCollision(bool enabled)
Definition ParticleEmitter.cpp:980
graphics::Texture * getNormalTexture()
Return the configured particle normal map.
Definition ParticleEmitter.cpp:1155
void addVelocityCurvePoint(float t, float v)
Definition ParticleEmitter.cpp:879
void setFloatParameter(const std::string &name, float value)
Set a named gameplay/VFX float parameter without rebuilding the emitter.
Definition ParticleEmitter.cpp:931
void attachToSkeleton2D(eve::ik::Skeleton2D *skeleton, int boneId)
Definition ParticleEmitter.cpp:1303
void moveTo(float x, float y)
Definition ParticleEmitter.cpp:748
void attachToSkeleton3D(eve::ik::Skeleton3D *skeleton, int boneId)
Definition ParticleEmitter.cpp:1314
std::string getMotionVectorPolicy()
Return the normalized motion-vector policy.
Definition ParticleEmitter.cpp:991
float getFloatParameter(const std::string &name, float fallback=0.f)
Return a named float parameter, or fallback when absent.
Definition ParticleEmitter.cpp:935
void setSpread(float radians)
Definition ParticleEmitter.cpp:774
void clearSizeCurve()
Definition ParticleEmitter.cpp:1133
void setSpin(float minSpin, float maxSpin)
Definition ParticleEmitter.cpp:838
float getEmissionAreaY()
Definition ParticleEmitter.cpp:817
void setLayer(int layer)
Definition ParticleEmitter.cpp:1160
eve::IParticleSdfField * getSdfField()
Return the borrowed SDF field, or null. @ownership Borrowed. The emitter does not own the field; do n...
Definition ParticleEmitter.cpp:984
float getPrewarmSeconds()
Definition ParticleEmitter.cpp:861
void setTexture(graphics::Texture *texture)
Definition ParticleEmitter.cpp:1151
bool isGpuFeatureSetSupported()
Return whether the configured feature set can use resident GPU simulation.
Definition ParticleEmitter.cpp:918
std::string getSimulationBackend()
Return "gpu" for active resident simulation, otherwise "cpu".
Definition ParticleEmitter.cpp:920
bool hasSkinSource()
Definition ParticleEmitter.cpp:1416
void bindFloatParameter(const std::string &name, const std::string &target, float scale=1.f, float offset=0.f)
Bind a parameter to emission, speed, size, or playback scaling.
Definition ParticleEmitter.cpp:946
float getDistortionStrength()
Return the configured scene-color refraction offset in screen pixels.
Definition ParticleEmitter.cpp:1036
void setEmitterLifetime(float seconds)
Definition ParticleEmitter.cpp:768
void setPosition(float x, float y)
Definition ParticleEmitter.cpp:743
void setRenderMode(const std::string &mode, float stretchFactor=1.f)
Definition ParticleEmitter.cpp:1002
void attachToSpineBone(animation::SpineSkeleton *spine, int boneIndex)
Definition ParticleEmitter.cpp:1285
void setNormalTexture(graphics::Texture *texture)
Set an optional tangent-space normal map for lit particles.
Definition ParticleEmitter.cpp:1154
void setVisible(bool visible)
Definition ParticleEmitter.cpp:1163
static ParticleEmitter * createEmitter(int bufferSize=1000)
Definition ParticleEmitter.cpp:712
void setMaterialMode(const std::string &mode)
Select particle shading: "unlit", "lit", or scene-color "distortion".
Definition ParticleEmitter.cpp:1026
void setSkinBoneFilterByName(animation::AnimSkeleton *skeleton, const std::string &boneName, float minWeight=0.f)
Definition ParticleEmitter.cpp:1391
float getEmissionRate()
Definition ParticleEmitter.cpp:757
bool loadConfig(const std::string &path)
Definition ParticleEmitter.cpp:1238
bool getGpuSimulation()
Definition ParticleEmitter.cpp:914
void setCollisionBounds(bool enabled, float minX, float minY, float maxX, float maxY)
Definition ParticleEmitter.cpp:970
std::string getAttachKind()
"none" | "anim" | "spine" | "ik2d" | "ik3d"
Definition ParticleEmitter.cpp:1355
std::string getBlendMode()
Definition ParticleEmitter.cpp:1103
bool isSoftParticlesActive()
True when soft particles have both a resident renderer and scene depth.
Definition ParticleEmitter.cpp:1232
void setSkinPlane(const std::string &plane)
Definition ParticleEmitter.cpp:1400
void setSizes(float startScale, float endScale)
Definition ParticleEmitter.cpp:828
void setRenderAxis(float degrees)
Set the fixed screen-space orientation used by render mode "axis".
Definition ParticleEmitter.cpp:1018
float getParticleLifetimeMin()
Definition ParticleEmitter.cpp:765
graphics::Texture * getTexture()
Definition ParticleEmitter.cpp:1152
void setRadialAcceleration(float minA, float maxA)
Definition ParticleEmitter.cpp:793
float getParticleWidth()
Definition ParticleEmitter.cpp:825
bool isGpuSimulationActive()
Return true after this emitter has migrated to a resident GPU backend.
Definition ParticleEmitter.cpp:916
void setSpeed(float minSpeed, float maxSpeed)
Definition ParticleEmitter.cpp:779
void setBlendMode(const std::string &mode)
Definition ParticleEmitter.cpp:1090
void setDamping(float perSecond)
Definition ParticleEmitter.cpp:869
void addForceField(float x, float y, float radius, float strength, float falloff=1.f)
Definition ParticleEmitter.cpp:1059
void setSkinScale(float scale)
Definition ParticleEmitter.cpp:1404
void setCanvas(graphics::Canvas *canvas)
Definition ParticleEmitter.cpp:1157
int getAttachBone()
Definition ParticleEmitter.cpp:1353
void attachToBone(animation::AnimPose *pose, int boneIndex)
Definition ParticleEmitter.cpp:1262
void setOverflowMode(const std::string &mode)
Definition ParticleEmitter.cpp:1038
void setStartRotation(float minDeg, float maxDeg)
Definition ParticleEmitter.cpp:844
void setCamera(graphics::Camera2D *camera)
Definition ParticleEmitter.cpp:1158
float getResolvedParameterScale(const std::string &target)
Return the resolved non-negative multiplier for a supported target.
Definition ParticleEmitter.cpp:955
void setLinearAcceleration(float xmin, float ymin, float xmax, float ymax)
Definition ParticleEmitter.cpp:785
void emitFromSkin(int count)
Burst-emit count particles from the current skinned surface.
Definition ParticleEmitter.cpp:1418
std::string getGpuFallbackReason()
Explain CPU fallback; empty means GPU active, "pending_activation" means eligible.
Definition ParticleEmitter.cpp:922
void syncAttach()
Sync Config.x/y (and direction) from the attached bone. Also called by ParticleSimSystem.
Definition ParticleEmitter.cpp:1371
void setTangentialAcceleration(float minA, float maxA)
Definition ParticleEmitter.cpp:799
void setEmissionRate(float rate)
Definition ParticleEmitter.cpp:753
bool hasFloatParameter(const std::string &name)
Return whether a named float parameter exists.
Definition ParticleEmitter.cpp:940
bool applyConfig(const std::string &json)
Definition ParticleEmitter.cpp:1221
float getEmissionAreaX()
Definition ParticleEmitter.cpp:816
void setSkinSource(animation::AnimSkin *skin, animation::AnimPose *pose)
Definition ParticleEmitter.cpp:1375
void addRotationCurvePoint(float t, float v)
Definition ParticleEmitter.cpp:1139
void setSoftParticles(bool enabled, float particleDepth=0.5f, float fadeDistance=0.05f)
Fade resident particles where they intersect sampled scene depth.
Definition ParticleEmitter.cpp:1225
std::string getConfigReloadObservation() const
Return the explicit config reload observation state.
Definition ParticleEmitter.cpp:1248
void setCollision(const std::string &mode, float radius=0.f, float restitution=0.6f, float lifetimeLoss=0.f)
Definition ParticleEmitter.cpp:959
void clearRotationCurve()
Definition ParticleEmitter.cpp:1137
float getEmitterLifetime()
Definition ParticleEmitter.cpp:769
void addSubEmitter(ParticleEmitter *target, const std::string &trigger, float inheritVelocity=0.f)
Definition ParticleEmitter.cpp:1047
void setColorEnd(float r, float g, float b, float a=1.f)
Definition ParticleEmitter.cpp:1147
std::string getMaterialMode()
Return the normalized particle shading mode.
Definition ParticleEmitter.cpp:1030
void clearSubEmitters()
Definition ParticleEmitter.cpp:1057
void setEmissionArea(const std::string &type, float x, float y)
Definition ParticleEmitter.cpp:805
void setColorStart(float r, float g, float b, float a=1.f)
Definition ParticleEmitter.cpp:1143
void setNoise(float strength, float frequency=1.f, float speed=1.f)
Definition ParticleEmitter.cpp:892
void setSortMode(const std::string &mode)
Select stable per-emitter transparent ordering.
Definition ParticleEmitter.cpp:1020
void attachToSpineBoneByName(animation::SpineSkeleton *spine, const std::string &boneName)
Definition ParticleEmitter.cpp:1296
void clearColorGradient()
Definition ParticleEmitter.cpp:1127
float getParticleLifetimeMax()
Definition ParticleEmitter.cpp:766
void setFollowBoneRotation(bool enable)
Definition ParticleEmitter.cpp:1343
void setShader(graphics::Shader *shader)
Definition ParticleEmitter.cpp:1073
void setMotionVectorPolicy(const std::string &policy)
Set motion-vector policy: none, velocity, or spawn_delta.
Definition ParticleEmitter.cpp:986
void setDirection(float radians)
Definition ParticleEmitter.cpp:771
void setAutoReload(bool enable)
Definition ParticleEmitter.cpp:1244
void clearFloatParameterBindings()
Remove all parameter-to-runtime bindings.
Definition ParticleEmitter.cpp:953
std::string getConfigPath()
Definition ParticleEmitter.cpp:1246
void setSizeVariation(float variation)
Definition ParticleEmitter.cpp:833
void attachToBoneByName(animation::AnimPose *pose, animation::AnimSkeleton *skeleton, const std::string &boneName)
Definition ParticleEmitter.cpp:1273
void clearSkinSource()
Definition ParticleEmitter.cpp:1406
std::string getEmissionAreaType()
Definition ParticleEmitter.cpp:815
void setSimulationSpace(const std::string &space)
Definition ParticleEmitter.cpp:888
void setAttachOffset(float x, float y, float z)
Definition ParticleEmitter.cpp:1325
void setLights(bool enabled, float radius=120.f, float intensity=1.f, float r=1.f, float g=1.f, float b=1.f, int maxLights=4)
Definition ParticleEmitter.cpp:1076
bool isMotionVectorActive()
True when a graphics path is actually writing motion vectors.
Definition ParticleEmitter.cpp:996
void setRibbon(float width=1.f, float minSegmentLength=1.f)
Configure connected ribbon rendering and switch to ribbon mode.
Definition ParticleEmitter.cpp:1011
float getSizeVariation()
Definition ParticleEmitter.cpp:836
void setParticleLifetime(float minLife, float maxLife)
Definition ParticleEmitter.cpp:759
void clearForceFields()
Definition ParticleEmitter.cpp:1071
void addBurst(float time, int count)
Definition ParticleEmitter.cpp:850
void setAttachPlane(const std::string &plane)
Definition ParticleEmitter.cpp:1333
graphics::Shader * getShader()
Definition ParticleEmitter.cpp:1074
void setSdfField(eve::IParticleSdfField *field)
Bind a borrowed SDF field for particle collision sampling.
Definition ParticleEmitter.cpp:982
void setInheritVelocity(float fraction)
Definition ParticleEmitter.cpp:883
bool getLightsEnabled()
Definition ParticleEmitter.cpp:1088
void setAttachScale(float scale)
Definition ParticleEmitter.cpp:1338
void setGravity(float x, float y)
Definition ParticleEmitter.cpp:863
void setParticleSize(float width, float height)
Definition ParticleEmitter.cpp:819
Definition ParticleGraph.h:53
bool spawnParticle(ParticleEmitter::Config &cfg, ParticleEmitter::Sim &sim)
Spawn particle.
Definition ParticleEmitter.cpp:359
void setWorldCollisionResolver(WorldCollisionFn fn)
Sets the world collision resolver.
Definition ParticleEmitter.cpp:336
bool loadConfigFile(ParticleEmitter *emitter, const std::string &path, std::string *error)
Read path via Filesystem, apply, and bind Resource.path + modtime for hot reload. Returns false if fi...
Definition ParticleConfig.cpp:475
bool(*)(float x, float y, float radius, float &nx, float &ny) WorldCollisionFn
World collision query used by emitters with worldCollision enabled.
Definition ParticleEmitter.h:730
bool reloadConfigFile(ParticleEmitter *emitter, std::string *error)
Re-read Resource.path if set; updates modtime.
Definition ParticleConfig.cpp:508
void stepEmitterSim(ParticleEmitter::Config &cfg, ParticleEmitter::Sim &sim, float dt)
Step emitter sim.
Definition ParticleEmitter.cpp:415
bool applyConfigText(ParticleEmitter *emitter, const std::string &json, std::string *error)
Parse JSON text and apply.
Definition ParticleConfig.cpp:452
WorldCollisionFn getWorldCollisionResolver()
Returns the world collision resolver.
Definition ParticleEmitter.cpp:338
bool sampleSkinSpawn(ParticleEmitter::SkinSource &skinSrc, ParticleEmitter::Sim &sim, float &outX, float &outY)
Sample skin spawn.
Definition ParticleEmitter.cpp:377
void syncEmitterSources(ParticleEmitter::Config &cfg, ParticleEmitter::Sim &, ParticleEmitter::Attach &attach, ParticleEmitter::SkinSource &skinSrc)
Sync bone attach + refresh skin cache; call before stepEmitterSim when using Attach/SkinSource.
Definition ParticleEmitter.cpp:388
bool spawnParticleAt(ParticleEmitter::Config &cfg, ParticleEmitter::Sim &sim, float x, float y)
Spawn particle at.
Definition ParticleEmitter.cpp:340
@ Premultiplied
@ Additive
@ Alpha
@ Multiply
@ Opaque
glm::vec4 Color
Render-neutral RGBA color shared by graphics-facing modules.
Definition RenderTypes.h:8
@ Defined
Finite outward unit gradient written to the output components.
void transformPoint(float x, float y, float z, float &ox, float &oy, float &oz) const
Transform point.
Definition AnimMath.h:205
Optional bone attachment. When enabled, syncAttach() writes Config.x/y (and optionally direction) fro...
Definition ParticleEmitter.h:334
Timed burst emission (fired once while the emitter is active).
Definition ParticleEmitter.h:82
Radial attract/repel force fields (strength > 0 attract, < 0 repel).
Definition ParticleEmitter.h:219
ParameterBinding public API.
Definition ParticleEmitter.h:109
Script-linked sub-emitters (birth / death / collision triggers).
Definition ParticleEmitter.h:238
std::string trigger
Definition ParticleEmitter.h:240
float inheritVelocity
Definition ParticleEmitter.h:241
ParticleEmitter * target
Definition ParticleEmitter.h:239
float limitVelocity
Max speed; 0 = unlimited. Applied after forces each step.
Definition ParticleEmitter.h:147
float noiseStrength
Turbulence: random per-particle acceleration scaled by strength.
Definition ParticleEmitter.h:155
float resolvedParameterScale(const std::string &target) const
Resolved parameter scale.
Definition ParticleEmitter.h:118
float noiseFrequency
Definition ParticleEmitter.h:156
eve::IParticleSdfField * sdfField
Borrowed 2D SDF used as an additional collision solid. @ownership Borrowed. Cleared by the caller bef...
Definition ParticleEmitter.h:174
float emitterLife
Definition ParticleEmitter.h:95
std::string simSpace
"world" (default) or "local" (particles track the emitter).
Definition ParticleEmitter.h:153
bool collisionBoundsEnabled
Definition ParticleEmitter.h:163
std::vector< Burst > bursts
Definition ParticleEmitter.h:217
ParticleEmitter * entity
Definition ParticleEmitter.h:265
std::string overflowMode
Buffer-full strategy: "drop" (default) | "pause" | "warn".
Definition ParticleEmitter.h:200
float emissionRate
Definition ParticleEmitter.h:90
ParticleCurve velocityCurve
Optional speed multiplier curve over lifetime.
Definition ParticleEmitter.h:149
std::vector< ForceField > forceFields
Definition ParticleEmitter.h:226
float collisionRadius
Definition ParticleEmitter.h:160
float emissionRateOverDistance
Distance-based emission in particles per world unit (0 = disabled).
Definition ParticleEmitter.h:92
float inheritVelocity
Fraction [0,1] of the emitter's current velocity added to new particles.
Definition ParticleEmitter.h:151
float collisionLifetimeLoss
Definition ParticleEmitter.h:162
float collisionRestitution
Definition ParticleEmitter.h:161
bool looping
Restart the emitter timeline after emitterLife instead of stopping.
Definition ParticleEmitter.h:97
bool worldCollision
Query the engine-level world collision resolver each step.
Definition ParticleEmitter.h:169
std::string collisionMode
"none" | "kill" | "bounce" | "stop" on collision.
Definition ParticleEmitter.h:159
Bound config file for hot reload (empty path = unbound).
Definition ParticleEmitter.h:305
@ MtimePollingReloadFailed
@ MtimePollingReloaded
@ AutoReloadDisabled
@ MtimePollingUnchanged
int spawnQuota
Temporary automatic-spawn quota set by ParticleSimSystem (-1 = unlimited).
Definition ParticleEmitter.h:286
int spawnedThisFrame
Definition ParticleEmitter.h:287
std::vector< Particle > particles
Definition ParticleEmitter.h:269
float distanceEmitAccum
Definition ParticleEmitter.h:272
bool overflowWarned
Definition ParticleEmitter.h:280
int droppedSpawnsThisFrame
Definition ParticleEmitter.h:288
Optional skinned-mesh surface source. When enabled, newly spawned particles sample random (optionally...
Definition ParticleEmitter.h:359
std::vector< int > candidates
Vertex indices eligible for sampling (rebuilt when filter changes).
Definition ParticleEmitter.h:370
animation::AnimSkin * skin
Definition ParticleEmitter.h:360
animation::AnimPose * pose
Definition ParticleEmitter.h:361