mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-21 17:45:25 -04:00
4dbe90b9a2
* This is particularly useful to let emitters create lot of particles first then continue at a slower rate
238 lines
11 KiB
C++
238 lines
11 KiB
C++
/**
|
|
|
|
GDevelop - Particle System Extension
|
|
Copyright (c) 2010-2016 Florian Rival (Florian.Rival@gmail.com)
|
|
This project is released under the MIT License.
|
|
*/
|
|
#include "GDCore/Extensions/PlatformExtension.h"
|
|
#include "GDCore/Tools/Localization.h"
|
|
#include "ParticleEmitterObject.h"
|
|
|
|
void DeclareParticleSystemExtension(gd::PlatformExtension& extension);
|
|
|
|
/**
|
|
* Constructor of an extension declares everything the extension contains:
|
|
* objects, actions, conditions and expressions.
|
|
*/
|
|
class ParticleSystemJsExtension : public gd::PlatformExtension {
|
|
public:
|
|
/**
|
|
* Constructor of an extension declares everything the extension contains:
|
|
* objects, actions, conditions and expressions.
|
|
*/
|
|
ParticleSystemJsExtension() {
|
|
DeclareParticleSystemExtension(*this);
|
|
|
|
GetObjectMetadata("ParticleSystem::ParticleEmitter")
|
|
.SetIncludeFile("Extensions/ParticleSystem/particleemitterobject.js")
|
|
.AddIncludeFile(
|
|
"Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js")
|
|
.AddIncludeFile(
|
|
"Extensions/ParticleSystem/pixi-particles-pixi-renderer.min.js");
|
|
|
|
auto& actions = GetAllActionsForObject("ParticleSystem::ParticleEmitter");
|
|
auto& conditions =
|
|
GetAllConditionsForObject("ParticleSystem::ParticleEmitter");
|
|
auto& expressions =
|
|
GetAllExpressionsForObject("ParticleSystem::ParticleEmitter");
|
|
auto& strExpressions =
|
|
GetAllStrExpressionsForObject("ParticleSystem::ParticleEmitter");
|
|
|
|
actions["ParticleSystem::EmitterForceMin"]
|
|
.SetFunctionName("setEmitterForceMin")
|
|
.SetGetter("getEmitterForceMin");
|
|
actions["ParticleSystem::EmitterForceMax"]
|
|
.SetFunctionName("setEmitterForceMax")
|
|
.SetGetter("getEmitterForceMax");
|
|
actions["ParticleSystem::EmitterAngle"]
|
|
.SetFunctionName("setAngle")
|
|
.SetGetter("getAngle");
|
|
conditions["ParticleSystem::EmitterAngle"].SetFunctionName("getAngle");
|
|
actions["ParticleSystem::EmitterAngleA"]
|
|
.SetFunctionName("setEmitterAngleA")
|
|
.SetGetter("getEmitterAngleA");
|
|
conditions["ParticleSystem::EmitterAngleA"].SetFunctionName(
|
|
"getEmitterAngleA");
|
|
actions["ParticleSystem::EmitterAngleB"]
|
|
.SetFunctionName("setEmitterAngleB")
|
|
.SetGetter("getEmitterAngleB");
|
|
conditions["ParticleSystem::EmitterAngleB"].SetFunctionName(
|
|
"getEmitterAngleB");
|
|
actions["ParticleSystem::ConeSprayAngle"]
|
|
.SetFunctionName("setConeSprayAngle")
|
|
.SetGetter("getConeSprayAngle");
|
|
conditions["ParticleSystem::ConeSprayAngle"].SetFunctionName(
|
|
"getConeSprayAngle");
|
|
actions["ParticleSystem::ZoneRadius"]
|
|
.SetFunctionName("setZoneRadius")
|
|
.SetGetter("getZoneRadius");
|
|
conditions["ParticleSystem::ZoneRadius"].SetFunctionName("getZoneRadius");
|
|
actions["ParticleSystem::ParticleLifeTimeMin"]
|
|
.SetFunctionName("setParticleLifeTimeMin")
|
|
.SetGetter("getParticleLifeTimeMin");
|
|
conditions["ParticleSystem::ParticleLifeTimeMin"].SetFunctionName(
|
|
"getParticleLifeTimeMin");
|
|
actions["ParticleSystem::ParticleLifeTimeMax"]
|
|
.SetFunctionName("setParticleLifeTimeMax")
|
|
.SetGetter("getParticleLifeTimeMax");
|
|
conditions["ParticleSystem::ParticleLifeTimeMax"].SetFunctionName(
|
|
"getParticleLifeTimeMax");
|
|
actions["ParticleSystem::ParticleGravityX"]
|
|
.SetFunctionName("setParticleGravityX")
|
|
.SetGetter("getParticleGravityX");
|
|
conditions["ParticleSystem::ParticleGravityX"].SetFunctionName(
|
|
"getParticleGravityX");
|
|
actions["ParticleSystem::ParticleGravityY"]
|
|
.SetFunctionName("setParticleGravityY")
|
|
.SetGetter("getParticleGravityY");
|
|
conditions["ParticleSystem::ParticleGravityY"].SetFunctionName(
|
|
"getParticleGravityY");
|
|
actions["ParticleSystem::ParticleGravityAngle"]
|
|
.SetFunctionName("setParticleGravityAngle")
|
|
.SetGetter("getParticleGravityAngle");
|
|
conditions["ParticleSystem::ParticleGravityAngle"].SetFunctionName(
|
|
"getParticleGravityAngle");
|
|
actions["ParticleSystem::ParticleGravityLength"]
|
|
.SetFunctionName("setParticleGravityLength")
|
|
.SetGetter("getParticleGravityLength");
|
|
conditions["ParticleSystem::ParticleGravityLength"].SetFunctionName(
|
|
"getParticleGravityLength");
|
|
|
|
actions["ParticleSystem::ParticleColor1"].SetFunctionName(
|
|
"setParticleColor1");
|
|
actions["ParticleSystem::ParticleColor2"].SetFunctionName(
|
|
"setParticleColor2");
|
|
actions["ParticleSystem::ParticleRed1"]
|
|
.SetFunctionName("setParticleRed1")
|
|
.SetGetter("getParticleRed1");
|
|
conditions["ParticleSystem::ParticleRed1"].SetFunctionName(
|
|
"getParticleRed1");
|
|
actions["ParticleSystem::ParticleRed2"]
|
|
.SetFunctionName("setParticleRed2")
|
|
.SetGetter("getParticleRed2");
|
|
conditions["ParticleSystem::ParticleRed2"].SetFunctionName(
|
|
"getParticleRed2");
|
|
actions["ParticleSystem::ParticleBlue1"]
|
|
.SetFunctionName("setParticleBlue1")
|
|
.SetGetter("getParticleBlue1");
|
|
conditions["ParticleSystem::ParticleBlue1"].SetFunctionName(
|
|
"getParticleBlue1");
|
|
actions["ParticleSystem::ParticleBlue2"]
|
|
.SetFunctionName("setParticleBlue2")
|
|
.SetGetter("getParticleBlue2");
|
|
conditions["ParticleSystem::ParticleBlue2"].SetFunctionName(
|
|
"getParticleBlue2");
|
|
actions["ParticleSystem::ParticleGreen1"]
|
|
.SetFunctionName("setParticleGreen1")
|
|
.SetGetter("getParticleGreen1");
|
|
conditions["ParticleSystem::ParticleGreen1"].SetFunctionName(
|
|
"getParticleGreen1");
|
|
actions["ParticleSystem::ParticleGreen2"]
|
|
.SetFunctionName("setParticleGreen2")
|
|
.SetGetter("getParticleGreen2");
|
|
conditions["ParticleSystem::ParticleGreen2"].SetFunctionName(
|
|
"getParticleGreen2");
|
|
actions["ParticleSystem::ParticleSize1"]
|
|
.SetFunctionName("setParticleSize1")
|
|
.SetGetter("getParticleSize1");
|
|
conditions["ParticleSystem::ParticleSize1"].SetFunctionName(
|
|
"getParticleSize1");
|
|
actions["ParticleSystem::ParticleSize2"]
|
|
.SetFunctionName("setParticleSize2")
|
|
.SetGetter("getParticleSize2");
|
|
conditions["ParticleSystem::ParticleSize2"].SetFunctionName(
|
|
"getParticleSize2");
|
|
actions["ParticleSystem::ParticleAlpha1"]
|
|
.SetFunctionName("setParticleAlpha1")
|
|
.SetGetter("getParticleAlpha1");
|
|
conditions["ParticleSystem::ParticleAlpha1"].SetFunctionName(
|
|
"getParticleAlpha1");
|
|
actions["ParticleSystem::ParticleAlpha2"]
|
|
.SetFunctionName("setParticleAlpha2")
|
|
.SetGetter("getParticleAlpha2");
|
|
conditions["ParticleSystem::ParticleAlpha2"].SetFunctionName(
|
|
"getParticleAlpha2");
|
|
conditions["ParticleSystem::NoMoreParticles"].SetFunctionName(
|
|
"noMoreParticles");
|
|
|
|
actions["ParticleSystem::RecreateParticleSystem"].SetFunctionName(
|
|
"recreateParticleSystem");
|
|
actions["ParticleSystem::SetTank"].SetFunctionName("setTank").SetGetter(
|
|
"getTank");
|
|
actions["ParticleSystem::Tank"].SetFunctionName("setTank").SetGetter(
|
|
"getTank");
|
|
actions["ParticleSystem::StartEmission"].SetFunctionName("startEmission");
|
|
actions["ParticleSystem::StopEmission"].SetFunctionName("stopEmission");
|
|
conditions["ParticleSystem::Tank"].SetFunctionName("getTank");
|
|
actions["ParticleSystem::SetFlow"].SetFunctionName("setFlow").SetGetter(
|
|
"getFlow");
|
|
actions["ParticleSystem::Flow"].SetFunctionName("setFlow").SetGetter(
|
|
"getFlow");
|
|
conditions["ParticleSystem::Flow"].SetFunctionName("getFlow");
|
|
actions["ParticleSystem::SetTextureFromResource"]
|
|
.AddCodeOnlyParameter("currentScene", "")
|
|
.SetFunctionName("setTexture")
|
|
.SetGetter("getTexture");
|
|
actions["ParticleSystem::Texture"]
|
|
.AddCodeOnlyParameter("currentScene", "")
|
|
.SetFunctionName("setTexture")
|
|
.SetGetter("getTexture");
|
|
conditions["ParticleSystem::Texture"].SetFunctionName("getTexture");
|
|
actions["ParticleSystem::JumpEmitterForwardInTime"].SetFunctionName(
|
|
"jumpEmitterForwardInTime");
|
|
|
|
strExpressions["Texture"].SetFunctionName("getTexture");
|
|
expressions["CurrentParticleCount"].SetFunctionName("getParticleCount");
|
|
expressions["NbParticles"].SetFunctionName("getParticleCount");
|
|
expressions["RendererParam1"].SetFunctionName("getRendererParam1");
|
|
expressions["RendererParam2"].SetFunctionName("getRendererParam2");
|
|
expressions["Tank"].SetFunctionName("getTank");
|
|
expressions["Flow"].SetFunctionName("getFlow");
|
|
expressions["EmitterForceMin"].SetFunctionName("getEmitterForceMin");
|
|
expressions["EmitterForceMax"].SetFunctionName("getEmitterForceMax");
|
|
expressions["EmitterAngle"].SetFunctionName("getAngle");
|
|
expressions["EmitterAngleA"].SetFunctionName("getEmitterAngleA");
|
|
expressions["EmitterAngleB"].SetFunctionName("getEmitterAngleB");
|
|
expressions["ConeSprayAngle"].SetFunctionName("getConeSprayAngle");
|
|
expressions["ZoneRadius"].SetFunctionName("getZoneRadius");
|
|
expressions["ParticleGravityX"].SetFunctionName("getParticleGravityX");
|
|
expressions["ParticleGravityY"].SetFunctionName("getParticleGravityY");
|
|
expressions["ParticleGravityAngle"].SetFunctionName(
|
|
"getParticleGravityAngle");
|
|
expressions["ParticleGravityLength"].SetFunctionName(
|
|
"getParticleGravityLength");
|
|
expressions["ParticleLifeTimeMin"].SetFunctionName(
|
|
"getParticleLifeTimeMin");
|
|
expressions["ParticleLifeTimeMax"].SetFunctionName(
|
|
"getParticleLifeTimeMax");
|
|
expressions["ParticleRed1"].SetFunctionName("getParticleRed1");
|
|
expressions["ParticleRed2"].SetFunctionName("getParticleRed2");
|
|
expressions["ParticleBlue1"].SetFunctionName("getParticleBlue1");
|
|
expressions["ParticleBlue2"].SetFunctionName("getParticleBlue2");
|
|
expressions["ParticleGreen1"].SetFunctionName("getParticleGreen1");
|
|
expressions["ParticleGreen2"].SetFunctionName("getParticleGreen2");
|
|
expressions["ParticleAlpha1"].SetFunctionName("getParticleAlpha1");
|
|
expressions["ParticleAlpha2"].SetFunctionName("getParticleAlpha2");
|
|
expressions["ParticleSize1"].SetFunctionName("getParticleSize1");
|
|
expressions["ParticleSize2"].SetFunctionName("getParticleSize2");
|
|
|
|
StripUnimplementedInstructionsAndExpressions();
|
|
|
|
GD_COMPLETE_EXTENSION_COMPILATION_INFORMATION();
|
|
};
|
|
};
|
|
|
|
#if defined(EMSCRIPTEN)
|
|
extern "C" gd::PlatformExtension* CreateGDJSParticleSystemExtension() {
|
|
return new ParticleSystemJsExtension;
|
|
}
|
|
#else
|
|
/**
|
|
* Used by GDevelop to create the extension class
|
|
* -- Do not need to be modified. --
|
|
*/
|
|
extern "C" gd::PlatformExtension* GD_EXTENSION_API CreateGDJSExtension() {
|
|
return new ParticleSystemJsExtension;
|
|
}
|
|
#endif
|