mirror of https://github.com/axmolengine/axmol.git
Macros and random functions are pain...
This commit is contained in:
parent
30003499bd
commit
4a0624a9ed
|
@ -667,7 +667,8 @@ void ParticleSystem::addParticles(int count, int animationCellIndex, int animati
|
||||||
{
|
{
|
||||||
for (int i = start; i < _particleCount; ++i)
|
for (int i = start; i < _particleCount; ++i)
|
||||||
{
|
{
|
||||||
_particleData.animCellIndex[i] = (int)abs(RANDOM_M11(&RANDSEED) * getTotalAnimationCells());
|
int rand0 = abs(RANDOM_M11(&RANDSEED) * getTotalAnimationCells());
|
||||||
|
_particleData.animCellIndex[i] = MIN(rand0, getTotalAnimationCells() - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -679,7 +680,7 @@ void ParticleSystem::addParticles(int count, int animationCellIndex, int animati
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (animationIndex == -1 && !_isAnimationMulti && _isLoopAnimated)
|
if (animationIndex == -1 && !_isAnimationMulti && !_animations.empty())
|
||||||
{
|
{
|
||||||
for (int i = start; i < _particleCount; ++i)
|
for (int i = start; i < _particleCount; ++i)
|
||||||
{
|
{
|
||||||
|
@ -690,11 +691,13 @@ void ParticleSystem::addParticles(int count, int animationCellIndex, int animati
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (animationIndex == -1 && _isAnimationMulti && _isLoopAnimated)
|
if (animationIndex == -1 && _isAnimationMulti && !_animations.empty())
|
||||||
{
|
{
|
||||||
for (int i = start; i < _particleCount; ++i)
|
for (int i = start; i < _particleCount; ++i)
|
||||||
{
|
{
|
||||||
_particleData.animIndex[i] = _randomAnimations[abs(RANDOM_M11(&RANDSEED) * _randomAnimations.size())];
|
int rand0 = abs(RANDOM_M11(&RANDSEED) * _randomAnimations.size());
|
||||||
|
int index = MIN(rand0, _randomAnimations.size() - 1);
|
||||||
|
_particleData.animIndex[i] = _randomAnimations[index];
|
||||||
auto descriptor = _animations.at(_particleData.animIndex[i]);
|
auto descriptor = _animations.at(_particleData.animIndex[i]);
|
||||||
_particleData.animTimeLength[i] =
|
_particleData.animTimeLength[i] =
|
||||||
descriptor.animationSpeed + descriptor.animationSpeedVariance * RANDOM_M11(&RANDSEED);
|
descriptor.animationSpeed + descriptor.animationSpeedVariance * RANDOM_M11(&RANDSEED);
|
||||||
|
@ -1054,17 +1057,17 @@ void ParticleSystem::update(float dt)
|
||||||
{
|
{
|
||||||
float percent = (_particleData.totalTimeToLive[i] - _particleData.timeToLive[i]) / _particleData.totalTimeToLive[i];
|
float percent = (_particleData.totalTimeToLive[i] - _particleData.timeToLive[i]) / _particleData.totalTimeToLive[i];
|
||||||
percent = _isLifeAnimationReversed ? 1.0F - percent : percent;
|
percent = _isLifeAnimationReversed ? 1.0F - percent : percent;
|
||||||
_particleData.animCellIndex[i] = (unsigned int)MIN((percent * getTotalAnimationCells()), getTotalAnimationCells() - 1);
|
_particleData.animCellIndex[i] = (unsigned short)MIN(percent * getTotalAnimationCells(), getTotalAnimationCells() - 1);
|
||||||
}
|
}
|
||||||
if (_isLifeAnimated && !_animations.empty())
|
if (_isLifeAnimated && !_animations.empty())
|
||||||
{
|
{
|
||||||
auto& anim = _animations.begin()->second;
|
auto& anim = _animations.at(_particleData.animIndex[i]);
|
||||||
|
|
||||||
float percent =
|
float percent =
|
||||||
(_particleData.totalTimeToLive[i] - _particleData.timeToLive[i]) / _particleData.totalTimeToLive[i];
|
(_particleData.totalTimeToLive[i] - _particleData.timeToLive[i]) / _particleData.totalTimeToLive[i];
|
||||||
|
|
||||||
percent = (!!_isLifeAnimationReversed != !!anim.reverseIndices) ? 1.0F - percent : percent;
|
percent = (!!_isLifeAnimationReversed != !!anim.reverseIndices) ? 1.0F - percent : percent;
|
||||||
_particleData.animCellIndex[i] = anim.animationIndices[MIN(abs(percent * anim.animationIndices.size()),
|
|
||||||
|
_particleData.animCellIndex[i] = anim.animationIndices[MIN(percent * anim.animationIndices.size(),
|
||||||
anim.animationIndices.size() - 1)];
|
anim.animationIndices.size() - 1)];
|
||||||
}
|
}
|
||||||
if (_isLoopAnimated)
|
if (_isLoopAnimated)
|
||||||
|
@ -1076,9 +1079,9 @@ void ParticleSystem::update(float dt)
|
||||||
_particleData.animTimeDelta[i] = 0;
|
_particleData.animTimeDelta[i] = 0;
|
||||||
|
|
||||||
float percent = _particleData.animTimeDelta[i] / _particleData.animTimeLength[i];
|
float percent = _particleData.animTimeDelta[i] / _particleData.animTimeLength[i];
|
||||||
|
|
||||||
percent = anim.reverseIndices ? 1.0F - percent : percent;
|
percent = anim.reverseIndices ? 1.0F - percent : percent;
|
||||||
_particleData.animCellIndex[i] = anim.animationIndices[MIN(abs(percent * anim.animationIndices.size()),
|
|
||||||
|
_particleData.animCellIndex[i] = anim.animationIndices[MIN(percent * anim.animationIndices.size(),
|
||||||
anim.animationIndices.size() - 1)];
|
anim.animationIndices.size() - 1)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -915,6 +915,16 @@ public:
|
||||||
std::vector<unsigned short> indices,
|
std::vector<unsigned short> indices,
|
||||||
bool reverse = false);
|
bool reverse = false);
|
||||||
|
|
||||||
|
/** Add a particle animation descriptor with the index 0.
|
||||||
|
*
|
||||||
|
* @param indices An array of the indicies
|
||||||
|
* @param reverse Should the animation indicies be played backwards? (default: false)
|
||||||
|
*/
|
||||||
|
void setAnimationDescriptor(std::vector<unsigned short> indices, bool reverse = false)
|
||||||
|
{
|
||||||
|
setAnimationDescriptor(0, 0, 0, indices, reverse);
|
||||||
|
};
|
||||||
|
|
||||||
/** Gets the particles movement type: Free or Grouped.
|
/** Gets the particles movement type: Free or Grouped.
|
||||||
@since v0.8
|
@since v0.8
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue