Merge branch 'master' of github.com:supertuxkart/stk-code
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -55,8 +55,9 @@ ParticleKind::ParticleKind(const std::string file) : m_min_start_color(255,255,2
|
||||
m_has_scale_affector = NULL;
|
||||
m_scale_affector_factor_x = 0.0f;
|
||||
m_scale_affector_factor_y = 0.0f;
|
||||
m_wind_speed = 0;
|
||||
m_flips = false;
|
||||
m_wind_speed = 0;
|
||||
m_flips = false;
|
||||
m_vertical_particles = false;
|
||||
|
||||
|
||||
// ----- Read XML file
|
||||
@@ -237,6 +238,12 @@ ParticleKind::ParticleKind(const std::string file) : m_min_start_color(255,255,2
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
const XMLNode* orientation = xml->getNode("orientation");
|
||||
if (orientation != NULL)
|
||||
{
|
||||
orientation->get("vertical", &m_vertical_particles);
|
||||
}
|
||||
|
||||
delete xml;
|
||||
}
|
||||
|
||||
|
||||
@@ -99,6 +99,10 @@ private:
|
||||
float m_scale_affector_factor_x;
|
||||
float m_scale_affector_factor_y;
|
||||
|
||||
/** The particle's billboards should face the
|
||||
player by rotating around the Y axis only */
|
||||
bool m_vertical_particles;
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
@@ -161,6 +165,8 @@ public:
|
||||
|
||||
bool getFlips() const { return m_flips; }
|
||||
|
||||
bool isVerticalParticles() const { return m_vertical_particles; }
|
||||
|
||||
std::string getName() const { return m_name; }
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user