mirror of https://github.com/axmolengine/axmol.git
parent
038fca48e1
commit
610711a164
|
@ -767,21 +767,21 @@ void ParticleSystem::addParticles(int count, int animationIndex, int animationCe
|
||||||
|
|
||||||
switch (shape.type)
|
switch (shape.type)
|
||||||
{
|
{
|
||||||
case EmissionShapeType::POINT:
|
case ParticleSystem::EmissionShapeType::POINT:
|
||||||
{
|
{
|
||||||
_particleData.posx[i] = _sourcePosition.x + shape.x;
|
_particleData.posx[i] = _sourcePosition.x + shape.x;
|
||||||
_particleData.posy[i] = _sourcePosition.y + shape.y;
|
_particleData.posy[i] = _sourcePosition.y + shape.y;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EmissionShapeType::RECT:
|
case ParticleSystem::EmissionShapeType::RECT:
|
||||||
{
|
{
|
||||||
_particleData.posx[i] = _sourcePosition.x + shape.x + shape.innerWidth / 2 * _rng.rangef();
|
_particleData.posx[i] = _sourcePosition.x + shape.x + shape.innerWidth / 2 * _rng.rangef();
|
||||||
_particleData.posy[i] = _sourcePosition.y + shape.y + shape.innerHeight / 2 * _rng.rangef();
|
_particleData.posy[i] = _sourcePosition.y + shape.y + shape.innerHeight / 2 * _rng.rangef();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EmissionShapeType::RECTTORUS:
|
case ParticleSystem::EmissionShapeType::RECTTORUS:
|
||||||
{
|
{
|
||||||
float width = (shape.outerWidth - shape.innerWidth) * _rng.float01() + shape.innerWidth;
|
float width = (shape.outerWidth - shape.innerWidth) * _rng.float01() + shape.innerWidth;
|
||||||
float height = (shape.outerHeight - shape.innerHeight) * _rng.float01() + shape.innerHeight;
|
float height = (shape.outerHeight - shape.innerHeight) * _rng.float01() + shape.innerHeight;
|
||||||
|
@ -793,7 +793,7 @@ void ParticleSystem::addParticles(int count, int animationIndex, int animationCe
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EmissionShapeType::CIRCLE:
|
case ParticleSystem::EmissionShapeType::CIRCLE:
|
||||||
{
|
{
|
||||||
auto val = _rng.float01() * shape.innerRadius / shape.innerRadius;
|
auto val = _rng.float01() * shape.innerRadius / shape.innerRadius;
|
||||||
val = powf(val, 1 / shape.edgeBias);
|
val = powf(val, 1 / shape.edgeBias);
|
||||||
|
@ -804,7 +804,7 @@ void ParticleSystem::addParticles(int count, int animationIndex, int animationCe
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EmissionShapeType::TORUS:
|
case ParticleSystem::EmissionShapeType::TORUS:
|
||||||
{
|
{
|
||||||
auto val = _rng.float01() * shape.outerRadius / shape.outerRadius;
|
auto val = _rng.float01() * shape.outerRadius / shape.outerRadius;
|
||||||
val = powf(val, 1 / shape.edgeBias);
|
val = powf(val, 1 / shape.edgeBias);
|
||||||
|
@ -815,7 +815,7 @@ void ParticleSystem::addParticles(int count, int animationIndex, int animationCe
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EmissionShapeType::TEXTURE_ALPHA_MASK:
|
case ParticleSystem::EmissionShapeType::TEXTURE_ALPHA_MASK:
|
||||||
{
|
{
|
||||||
auto& mask = ParticleEmissionMaskCache::getInstance()->getEmissionMask(shape.fourccId);
|
auto& mask = ParticleEmissionMaskCache::getInstance()->getEmissionMask(shape.fourccId);
|
||||||
|
|
||||||
|
@ -1151,15 +1151,15 @@ void ParticleSystem::setEmissionShape(unsigned short index, EmissionShape shape)
|
||||||
iter->second = shape;
|
iter->second = shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmissionShape ParticleSystem::createMaskShape(std::string_view maskId,
|
ParticleSystem::EmissionShape ParticleSystem::createMaskShape(std::string_view maskId,
|
||||||
Vec2 pos,
|
Vec2 pos,
|
||||||
Vec2 overrideSize,
|
Vec2 overrideSize,
|
||||||
Vec2 scale,
|
Vec2 scale,
|
||||||
float angle)
|
float angle)
|
||||||
{
|
{
|
||||||
EmissionShape shape{};
|
ParticleSystem::EmissionShape shape{};
|
||||||
|
|
||||||
shape.type = EmissionShapeType::TEXTURE_ALPHA_MASK;
|
shape.type = ParticleSystem::EmissionShapeType::TEXTURE_ALPHA_MASK;
|
||||||
|
|
||||||
shape.fourccId = utils::fourccValue(maskId);
|
shape.fourccId = utils::fourccValue(maskId);
|
||||||
|
|
||||||
|
@ -1177,11 +1177,11 @@ EmissionShape ParticleSystem::createMaskShape(std::string_view maskId,
|
||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmissionShape ParticleSystem::createPointShape(Vec2 pos)
|
ParticleSystem::EmissionShape ParticleSystem::createPointShape(Vec2 pos)
|
||||||
{
|
{
|
||||||
EmissionShape shape{};
|
ParticleSystem::EmissionShape shape{};
|
||||||
|
|
||||||
shape.type = EmissionShapeType::POINT;
|
shape.type = ParticleSystem::EmissionShapeType::POINT;
|
||||||
|
|
||||||
shape.x = pos.x;
|
shape.x = pos.x;
|
||||||
shape.y = pos.y;
|
shape.y = pos.y;
|
||||||
|
@ -1189,11 +1189,11 @@ EmissionShape ParticleSystem::createPointShape(Vec2 pos)
|
||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmissionShape ParticleSystem::createRectShape(Vec2 pos, Size size)
|
ParticleSystem::EmissionShape ParticleSystem::createRectShape(Vec2 pos, Size size)
|
||||||
{
|
{
|
||||||
EmissionShape shape{};
|
ParticleSystem::EmissionShape shape{};
|
||||||
|
|
||||||
shape.type = EmissionShapeType::RECT;
|
shape.type = ParticleSystem::EmissionShapeType::RECT;
|
||||||
|
|
||||||
shape.x = pos.x;
|
shape.x = pos.x;
|
||||||
shape.y = pos.y;
|
shape.y = pos.y;
|
||||||
|
@ -1204,11 +1204,11 @@ EmissionShape ParticleSystem::createRectShape(Vec2 pos, Size size)
|
||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmissionShape ParticleSystem::createRectTorusShape(Vec2 pos, Size innerSize, Size outerSize)
|
ParticleSystem::EmissionShape ParticleSystem::createRectTorusShape(Vec2 pos, Size innerSize, Size outerSize)
|
||||||
{
|
{
|
||||||
EmissionShape shape{};
|
ParticleSystem::EmissionShape shape{};
|
||||||
|
|
||||||
shape.type = EmissionShapeType::RECTTORUS;
|
shape.type = ParticleSystem::EmissionShapeType::RECTTORUS;
|
||||||
|
|
||||||
shape.x = pos.x;
|
shape.x = pos.x;
|
||||||
shape.y = pos.y;
|
shape.y = pos.y;
|
||||||
|
@ -1222,11 +1222,11 @@ EmissionShape ParticleSystem::createRectTorusShape(Vec2 pos, Size innerSize, Siz
|
||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmissionShape ParticleSystem::createCircleShape(Vec2 pos, float radius, float edgeBias)
|
ParticleSystem::EmissionShape ParticleSystem::createCircleShape(Vec2 pos, float radius, float edgeBias)
|
||||||
{
|
{
|
||||||
EmissionShape shape{};
|
ParticleSystem::EmissionShape shape{};
|
||||||
|
|
||||||
shape.type = EmissionShapeType::CIRCLE;
|
shape.type = ParticleSystem::EmissionShapeType::CIRCLE;
|
||||||
|
|
||||||
shape.x = pos.x;
|
shape.x = pos.x;
|
||||||
shape.y = pos.y;
|
shape.y = pos.y;
|
||||||
|
@ -1241,11 +1241,15 @@ EmissionShape ParticleSystem::createCircleShape(Vec2 pos, float radius, float ed
|
||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmissionShape ParticleSystem::createConeShape(Vec2 pos, float radius, float offset, float angle, float edgeBias)
|
ParticleSystem::EmissionShape ParticleSystem::createConeShape(Vec2 pos,
|
||||||
|
float radius,
|
||||||
|
float offset,
|
||||||
|
float angle,
|
||||||
|
float edgeBias)
|
||||||
{
|
{
|
||||||
EmissionShape shape{};
|
ParticleSystem::EmissionShape shape{};
|
||||||
|
|
||||||
shape.type = EmissionShapeType::CIRCLE;
|
shape.type = ParticleSystem::EmissionShapeType::CIRCLE;
|
||||||
|
|
||||||
shape.x = pos.x;
|
shape.x = pos.x;
|
||||||
shape.y = pos.y;
|
shape.y = pos.y;
|
||||||
|
@ -1260,11 +1264,14 @@ EmissionShape ParticleSystem::createConeShape(Vec2 pos, float radius, float offs
|
||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmissionShape ParticleSystem::createTorusShape(Vec2 pos, float innerRadius, float outerRadius, float edgeBias)
|
ParticleSystem::EmissionShape ParticleSystem::createTorusShape(Vec2 pos,
|
||||||
|
float innerRadius,
|
||||||
|
float outerRadius,
|
||||||
|
float edgeBias)
|
||||||
{
|
{
|
||||||
EmissionShape shape{};
|
ParticleSystem::EmissionShape shape{};
|
||||||
|
|
||||||
shape.type = EmissionShapeType::TORUS;
|
shape.type = ParticleSystem::EmissionShapeType::TORUS;
|
||||||
|
|
||||||
shape.x = pos.x;
|
shape.x = pos.x;
|
||||||
shape.y = pos.y;
|
shape.y = pos.y;
|
||||||
|
@ -1280,16 +1287,16 @@ EmissionShape ParticleSystem::createTorusShape(Vec2 pos, float innerRadius, floa
|
||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmissionShape ParticleSystem::createConeTorusShape(Vec2 pos,
|
ParticleSystem::EmissionShape ParticleSystem::createConeTorusShape(Vec2 pos,
|
||||||
float innerRadius,
|
float innerRadius,
|
||||||
float outerRadius,
|
float outerRadius,
|
||||||
float offset,
|
float offset,
|
||||||
float angle,
|
float angle,
|
||||||
float edgeBias)
|
float edgeBias)
|
||||||
{
|
{
|
||||||
EmissionShape shape{};
|
ParticleSystem::EmissionShape shape{};
|
||||||
|
|
||||||
shape.type = EmissionShapeType::TORUS;
|
shape.type = ParticleSystem::EmissionShapeType::TORUS;
|
||||||
|
|
||||||
shape.x = pos.x;
|
shape.x = pos.x;
|
||||||
shape.y = pos.y;
|
shape.y = pos.y;
|
||||||
|
|
|
@ -38,62 +38,25 @@ THE SOFTWARE.
|
||||||
|
|
||||||
NS_CC_BEGIN
|
NS_CC_BEGIN
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup _2d
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
class ParticleBatchNode;
|
class ParticleBatchNode;
|
||||||
|
|
||||||
|
/** @struct sParticle
|
||||||
|
Structure that contains the values of each particle.
|
||||||
|
*/
|
||||||
|
|
||||||
struct particle_point
|
struct particle_point
|
||||||
{
|
{
|
||||||
float x;
|
float x;
|
||||||
float y;
|
float y;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
enum class EmissionShapeType;
|
||||||
* Particle emission shapes.
|
struct EmissionShape;
|
||||||
* Current supported shapes are Point, Rectangle, RectangularTorus, Circle, Torus, Cone, Cone Torus, Texture alpha
|
|
||||||
* emission mask
|
|
||||||
* @since adxe-1.0.0b8
|
|
||||||
*/
|
|
||||||
enum class EmissionShapeType
|
|
||||||
{
|
|
||||||
// Emission shape of type point
|
|
||||||
POINT,
|
|
||||||
// Emission shape of type rectangle
|
|
||||||
RECT,
|
|
||||||
// Emission shape of type rectangular torus
|
|
||||||
RECTTORUS,
|
|
||||||
// Emission shape of type circle or cone
|
|
||||||
CIRCLE,
|
|
||||||
// Emission shape of type torus or cone torus
|
|
||||||
TORUS,
|
|
||||||
// Emission shape of type texture alpha mask
|
|
||||||
TEXTURE_ALPHA_MASK
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Particle emission shapes.
|
|
||||||
* Current supported shapes are Point, Rectangle, RectangularTorus, Circle, Torus, Cone, Cone Torus, Texture alpha
|
|
||||||
* emission mask
|
|
||||||
* @since adxe-1.0.0b8
|
|
||||||
*/
|
|
||||||
struct EmissionShape
|
|
||||||
{
|
|
||||||
EmissionShapeType type;
|
|
||||||
|
|
||||||
float x;
|
|
||||||
float y;
|
|
||||||
|
|
||||||
float innerWidth;
|
|
||||||
float innerHeight;
|
|
||||||
float outerWidth;
|
|
||||||
float outerHeight;
|
|
||||||
|
|
||||||
float innerRadius;
|
|
||||||
float outerRadius;
|
|
||||||
float coneOffset;
|
|
||||||
float coneAngle;
|
|
||||||
float edgeBias;
|
|
||||||
|
|
||||||
uint32_t fourccId;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Particle emission mask descriptor.
|
* Particle emission mask descriptor.
|
||||||
|
@ -414,6 +377,53 @@ public:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Particle emission shapes.
|
||||||
|
* Current supported shapes are Point, Rectangle, RectangularTorus, Circle, Torus, Cone, Cone Torus, Texture alpha emission mask
|
||||||
|
* @since adxe-1.0.0b8
|
||||||
|
*/
|
||||||
|
enum class EmissionShapeType
|
||||||
|
{
|
||||||
|
// Emission shape of type point
|
||||||
|
POINT,
|
||||||
|
// Emission shape of type rectangle
|
||||||
|
RECT,
|
||||||
|
// Emission shape of type rectangular torus
|
||||||
|
RECTTORUS,
|
||||||
|
// Emission shape of type circle or cone
|
||||||
|
CIRCLE,
|
||||||
|
// Emission shape of type torus or cone torus
|
||||||
|
TORUS,
|
||||||
|
// Emission shape of type texture alpha mask
|
||||||
|
TEXTURE_ALPHA_MASK
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Particle emission shapes.
|
||||||
|
* Current supported shapes are Point, Rectangle, RectangularTorus, Circle, Torus, Cone, Cone Torus, Texture alpha emission mask
|
||||||
|
* @since adxe-1.0.0b8
|
||||||
|
*/
|
||||||
|
struct EmissionShape
|
||||||
|
{
|
||||||
|
ParticleSystem::EmissionShapeType type;
|
||||||
|
|
||||||
|
float x;
|
||||||
|
float y;
|
||||||
|
|
||||||
|
float innerWidth;
|
||||||
|
float innerHeight;
|
||||||
|
float outerWidth;
|
||||||
|
float outerHeight;
|
||||||
|
|
||||||
|
float innerRadius;
|
||||||
|
float outerRadius;
|
||||||
|
float coneOffset;
|
||||||
|
float coneAngle;
|
||||||
|
float edgeBias;
|
||||||
|
|
||||||
|
uint32_t fourccId;
|
||||||
|
};
|
||||||
|
|
||||||
//* @enum
|
//* @enum
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -1256,7 +1266,7 @@ public:
|
||||||
* @param scale Scale of the emission mask, the size will be multiplied by the specified scale.
|
* @param scale Scale of the emission mask, the size will be multiplied by the specified scale.
|
||||||
* @param angle Angle of the sampled points to be rotated in degrees.
|
* @param angle Angle of the sampled points to be rotated in degrees.
|
||||||
*/
|
*/
|
||||||
static EmissionShape createMaskShape(std::string_view maskId,
|
static ParticleSystem::EmissionShape createMaskShape(std::string_view maskId,
|
||||||
Vec2 pos = Vec2::ZERO,
|
Vec2 pos = Vec2::ZERO,
|
||||||
Vec2 overrideSize = Vec2::ZERO,
|
Vec2 overrideSize = Vec2::ZERO,
|
||||||
Vec2 scale = Vec2::ONE,
|
Vec2 scale = Vec2::ONE,
|
||||||
|
@ -1265,20 +1275,20 @@ public:
|
||||||
/** Adds an emission shape of type point to the system.
|
/** Adds an emission shape of type point to the system.
|
||||||
* @param pos Position of the emission shape in local space.
|
* @param pos Position of the emission shape in local space.
|
||||||
*/
|
*/
|
||||||
static EmissionShape createPointShape(Vec2 pos);
|
static ParticleSystem::EmissionShape createPointShape(Vec2 pos);
|
||||||
|
|
||||||
/** Adds an emission shape of type Rectangle to the system.
|
/** Adds an emission shape of type Rectangle to the system.
|
||||||
* @param pos Position of the emission shape in local space.
|
* @param pos Position of the emission shape in local space.
|
||||||
* @param size Size of the rectangle.
|
* @param size Size of the rectangle.
|
||||||
*/
|
*/
|
||||||
static EmissionShape createRectShape(Vec2 pos, Size size);
|
static ParticleSystem::EmissionShape createRectShape(Vec2 pos, Size size);
|
||||||
|
|
||||||
/** Adds an emission shape of type Rectangular Torus to the system.
|
/** Adds an emission shape of type Rectangular Torus to the system.
|
||||||
* @param pos Position of the emission shape in local space.
|
* @param pos Position of the emission shape in local space.
|
||||||
* @param innerSize Inner size offset of the rectangle.
|
* @param innerSize Inner size offset of the rectangle.
|
||||||
* @param outerSize Outer size of the rectangle.
|
* @param outerSize Outer size of the rectangle.
|
||||||
*/
|
*/
|
||||||
static EmissionShape createRectTorusShape(Vec2 pos, Size innerSize, Size outerSize);
|
static ParticleSystem::EmissionShape createRectTorusShape(Vec2 pos, Size innerSize, Size outerSize);
|
||||||
|
|
||||||
/** Adds an emission shape of type Circle to the system.
|
/** Adds an emission shape of type Circle to the system.
|
||||||
*
|
*
|
||||||
|
@ -1291,7 +1301,7 @@ public:
|
||||||
* will bias towards the center of the circle more often the closer the value is to 0.0; If the value is exactly 1.0
|
* will bias towards the center of the circle more often the closer the value is to 0.0; If the value is exactly 1.0
|
||||||
* then there will be no bias behaviour.
|
* then there will be no bias behaviour.
|
||||||
*/
|
*/
|
||||||
static EmissionShape createCircleShape(Vec2 pos, float radius, float edgeBias = 1.0F);
|
static ParticleSystem::EmissionShape createCircleShape(Vec2 pos, float radius, float edgeBias = 1.0F);
|
||||||
|
|
||||||
/** Adds an emission shape of type Cone to the system.
|
/** Adds an emission shape of type Cone to the system.
|
||||||
*
|
*
|
||||||
|
@ -1306,7 +1316,7 @@ public:
|
||||||
* will bias towards the center of the circle more often the closer the value is to 0.0; If the value is exactly 1.0
|
* will bias towards the center of the circle more often the closer the value is to 0.0; If the value is exactly 1.0
|
||||||
* then there will be no bias behaviour.
|
* then there will be no bias behaviour.
|
||||||
*/
|
*/
|
||||||
static EmissionShape createConeShape(Vec2 pos,
|
static ParticleSystem::EmissionShape createConeShape(Vec2 pos,
|
||||||
float radius,
|
float radius,
|
||||||
float offset,
|
float offset,
|
||||||
float angle,
|
float angle,
|
||||||
|
@ -1324,7 +1334,7 @@ public:
|
||||||
* will bias towards the center of the torus more often the closer the value is to 0.0; If the value is exactly 1.0
|
* will bias towards the center of the torus more often the closer the value is to 0.0; If the value is exactly 1.0
|
||||||
* then there will be no bias behaviour.
|
* then there will be no bias behaviour.
|
||||||
*/
|
*/
|
||||||
static EmissionShape createTorusShape(Vec2 pos,
|
static ParticleSystem::EmissionShape createTorusShape(Vec2 pos,
|
||||||
float innerRadius,
|
float innerRadius,
|
||||||
float outerRadius,
|
float outerRadius,
|
||||||
float edgeBias = 1.0F);
|
float edgeBias = 1.0F);
|
||||||
|
@ -1343,7 +1353,7 @@ public:
|
||||||
* will bias towards the center of the torus more often the closer the value is to 0.0; If the value is exactly 1.0
|
* will bias towards the center of the torus more often the closer the value is to 0.0; If the value is exactly 1.0
|
||||||
* then there will be no bias behaviour.
|
* then there will be no bias behaviour.
|
||||||
*/
|
*/
|
||||||
static EmissionShape createConeTorusShape(Vec2 pos,
|
static ParticleSystem::EmissionShape createConeTorusShape(Vec2 pos,
|
||||||
float innerRadius,
|
float innerRadius,
|
||||||
float outerRadius,
|
float outerRadius,
|
||||||
float offset,
|
float offset,
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue