Fix bogus cast resulting in reading random URL in particles

This commit is contained in:
Marianne Gagnon 2014-08-13 20:10:02 -04:00
parent ba3027b6bb
commit 5c3c7afeae
3 changed files with 11 additions and 9 deletions

View File

@ -9,7 +9,7 @@
#define COMPONENTCOUNT 8
scene::IParticleSystemSceneNode *ParticleSystemProxy::addParticleNode(
bool withDefaultEmitter, ISceneNode* parent, s32 id,
bool withDefaultEmitter, bool randomize_initial_y, ISceneNode* parent, s32 id,
const core::vector3df& position,
const core::vector3df& rotation,
const core::vector3df& scale)
@ -18,7 +18,7 @@ scene::IParticleSystemSceneNode *ParticleSystemProxy::addParticleNode(
parent = irr_driver->getSceneManager()->getRootSceneNode();
IParticleSystemSceneNode* node = new ParticleSystemProxy(withDefaultEmitter,
parent, irr_driver->getSceneManager(), id, position, rotation, scale);
parent, irr_driver->getSceneManager(), id, position, rotation, scale, randomize_initial_y);
node->drop();
return node;
@ -28,8 +28,10 @@ ParticleSystemProxy::ParticleSystemProxy(bool createDefaultEmitter,
ISceneNode* parent, scene::ISceneManager* mgr, s32 id,
const core::vector3df& position,
const core::vector3df& rotation,
const core::vector3df& scale) : CParticleSystemSceneNode(createDefaultEmitter, parent, mgr, id, position, rotation, scale), m_alpha_additive(false), m_first_execution(true)
const core::vector3df& scale,
bool randomize_initial_y) : CParticleSystemSceneNode(createDefaultEmitter, parent, mgr, id, position, rotation, scale), m_alpha_additive(false), m_first_execution(true)
{
m_randomize_initial_y = randomize_initial_y;
size_increase_factor = 0.;
ParticleParams = nullptr;
InitialValues = nullptr;
@ -148,8 +150,6 @@ void ParticleSystemProxy::generateParticlesFromBoxEmitter(scene::IParticleBoxEmi
const core::vector3df& extent = emitter->getBox().getExtent();
bool randomize_initial_y = ((ParticleEmitter*)emitter)->randomizeInitialY();
for (unsigned i = 0; i < count; i++)
{
ParticleParams[i].PositionX = emitter->getBox().MinEdge.X + os::Randomizer::frand() * extent.X;
@ -163,7 +163,7 @@ void ParticleSystemProxy::generateParticlesFromBoxEmitter(scene::IParticleBoxEmi
ParticleParams[i].DirectionX, ParticleParams[i].DirectionY, ParticleParams[i].DirectionZ);
memcpy(&(InitialValues[i].DirectionX), &(ParticleParams[i].DirectionX), 4 * sizeof(float));
if (randomize_initial_y)
if (m_randomize_initial_y)
InitialValues[i].PositionY = os::Randomizer::frand()*50.0f; // -100.0f;
}
}

View File

@ -20,6 +20,7 @@ protected:
float m_color_from[3];
float m_color_to[3];
bool m_first_execution;
bool m_randomize_initial_y;
GLuint texture;
unsigned count;
@ -56,7 +57,7 @@ private:
void generateParticlesFromSphereEmitter(scene::IParticleSphereEmitter *);
public:
static IParticleSystemSceneNode *addParticleNode(
bool withDefaultEmitter = true, ISceneNode* parent = 0, s32 id = -1,
bool withDefaultEmitter = true, bool randomize_initial_y = false, ISceneNode* parent = 0, s32 id = -1,
const core::vector3df& position = core::vector3df(0, 0, 0),
const core::vector3df& rotation = core::vector3df(0, 0, 0),
const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f));
@ -65,7 +66,8 @@ public:
ISceneNode* parent, scene::ISceneManager* mgr, s32 id,
const core::vector3df& position,
const core::vector3df& rotation,
const core::vector3df& scale);
const core::vector3df& scale,
bool randomize_initial_y);
~ParticleSystemProxy();
virtual void setEmitter(scene::IParticleEmitter* emitter);

View File

@ -450,7 +450,7 @@ void ParticleEmitter::setParticleType(const ParticleKind* type)
else
{
if (m_is_glsl)
m_node = ParticleSystemProxy::addParticleNode(m_is_glsl);
m_node = ParticleSystemProxy::addParticleNode(m_is_glsl, true);
else
m_node = irr_driver->addParticleNode();