Merge branch 'master' of github.com:supertuxkart/stk-code

This commit is contained in:
hiker
2014-08-14 10:19:54 +10:00
5 changed files with 26 additions and 11 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();

View File

@@ -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;
}

View File

@@ -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; }
};