mirror of
https://github.com/overte-org/overte.git
synced 2025-08-05 00:29:40 +02:00
cleaned up some code and added asserts to help track down a crash
This commit is contained in:
parent
062ee657ca
commit
903a248061
4 changed files with 53 additions and 16 deletions
|
@ -69,13 +69,12 @@ ParticleSystem::ParticleSystem() {
|
|||
|
||||
int ParticleSystem::addEmitter() {
|
||||
|
||||
_numEmitters ++;
|
||||
|
||||
if (_numEmitters > MAX_EMITTERS) {
|
||||
return -1;
|
||||
if (_numEmitters < MAX_EMITTERS) {
|
||||
_numEmitters ++;
|
||||
return _numEmitters - 1;
|
||||
}
|
||||
|
||||
return _numEmitters - 1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
@ -95,12 +94,16 @@ void ParticleSystem::simulate(float deltaTime) {
|
|||
|
||||
void ParticleSystem::emitNow(int e) {
|
||||
|
||||
for (unsigned int p = 0; p < _emitter[e].rate; p++) {
|
||||
createParticle(e, _emitter[e].direction);
|
||||
assert( e >= 0 );
|
||||
assert( e <= MAX_EMITTERS );
|
||||
assert( _emitter[e].rate >= 0 );
|
||||
|
||||
for (int p = 0; p < _emitter[e].rate; p++) {
|
||||
createParticle(e);
|
||||
}
|
||||
}
|
||||
|
||||
void ParticleSystem::createParticle(int e, glm::vec3 velocity) {
|
||||
void ParticleSystem::createParticle(int e) {
|
||||
|
||||
for (unsigned int p = 0; p < MAX_PARTICLES; p++) {
|
||||
if (!_particle[p].alive) {
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include <glm/gtc/quaternion.hpp>
|
||||
|
||||
const int MAX_PARTICLES = 5000;
|
||||
const int MAX_EMITTERS = 1000;
|
||||
const int MAX_EMITTERS = 100;
|
||||
const int NUM_PARTICLE_LIFE_STAGES = 4; // each equal time-division of the particle's life can have different attributes
|
||||
const bool SHOW_VELOCITY_TAILS = false;
|
||||
|
||||
|
@ -99,7 +99,7 @@ private:
|
|||
|
||||
// private methods
|
||||
void updateParticle(int index, float deltaTime);
|
||||
void createParticle(int e, glm::vec3 velocity);
|
||||
void createParticle(int e);
|
||||
void killParticle(int p);
|
||||
void renderEmitter(int emitterIndex, float size);
|
||||
void renderParticle(int p);
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include "renderer/ProgramObject.h"
|
||||
|
||||
const bool SHOW_LEAP_HAND = false;
|
||||
const int NUM_TEST_RAVE_GLOVE_MODES = 5;
|
||||
const int NUM_TEST_RAVE_GLOVE_MODES = 6;
|
||||
const float TEST_RAVE_GLOVE_MODE_DURATION = 7.0f;
|
||||
|
||||
using namespace std;
|
||||
|
@ -342,14 +342,14 @@ void Hand::updateFingerParticles(float deltaTime) {
|
|||
FingerData& finger = palm.getFingers()[f];
|
||||
if (finger.isActive()) {
|
||||
if (_fingerParticleEmitter[0] != -1) {
|
||||
_particleSystem.emitNow(_fingerParticleEmitter[fingerIndex]);
|
||||
_particleSystem.emitNow(_fingerParticleEmitter[fingerIndex]);
|
||||
fingerIndex ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
_particleSystem.simulate(deltaTime);
|
||||
}
|
||||
}
|
||||
|
@ -530,6 +530,43 @@ void Hand::setRaveGloveMode(int mode) {
|
|||
attributes.radius = 0.0f;
|
||||
attributes.color = glm::vec4( 0.0f, 0.0f, 0.0f, 1.0f);
|
||||
_particleSystem.setParticleAttributes(_fingerParticleEmitter[f], 3, attributes);
|
||||
|
||||
//-----------------------------------------
|
||||
// flashy trails
|
||||
//-----------------------------------------
|
||||
} else if (mode == 5) {
|
||||
|
||||
_particleSystem.setParticleRenderStyle (_fingerParticleEmitter[f], PARTICLE_RENDER_STYLE_RIBBON );
|
||||
_particleSystem.setShowingEmitterBaseParticle(_fingerParticleEmitter[f], false );
|
||||
_particleSystem.setEmitterParticleLifespan (_fingerParticleEmitter[f], 0.2 );
|
||||
_particleSystem.setEmitterThrust (_fingerParticleEmitter[f], 0.002f );
|
||||
_particleSystem.setEmitterRate (_fingerParticleEmitter[f], 6.0 );
|
||||
_particleSystem.setEmitterParticleResolution (_fingerParticleEmitter[f], 12 );
|
||||
|
||||
attributes.radius = 0.0f;
|
||||
attributes.color = glm::vec4( 1.0f, 1.0f, 1.0f, 1.0f);
|
||||
attributes.gravity = 0.0f;
|
||||
attributes.airFriction = 0.0f;
|
||||
attributes.jitter = 0.01f;
|
||||
attributes.emitterAttraction = 0.0f;
|
||||
attributes.tornadoForce = 0.0f;
|
||||
attributes.neighborAttraction = 0.0f;
|
||||
attributes.neighborRepulsion = 0.0f;
|
||||
attributes.bounce = 1.0f;
|
||||
attributes.usingCollisionSphere = false;
|
||||
_particleSystem.setParticleAttributes(_fingerParticleEmitter[f], 0, attributes);
|
||||
|
||||
attributes.radius = 0.01f;
|
||||
attributes.color = glm::vec4( 1.0f, 1.0f, 0.0f, 1.0f);
|
||||
_particleSystem.setParticleAttributes(_fingerParticleEmitter[f], 1, attributes);
|
||||
|
||||
attributes.radius = 0.01f;
|
||||
attributes.color = glm::vec4( 1.0f, 0.0f, .0f, 1.0f);
|
||||
_particleSystem.setParticleAttributes(_fingerParticleEmitter[f], 2, attributes);
|
||||
|
||||
attributes.radius = 0.0f;
|
||||
attributes.color = glm::vec4( 0.0f, 0.0f, 1.0f, 0.0f);
|
||||
_particleSystem.setParticleAttributes(_fingerParticleEmitter[f], 3, attributes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
#include <SharedUtil.h>
|
||||
#include <vector>
|
||||
|
||||
//const int MAX_TRAIL_PARTICLES = 20;
|
||||
|
||||
class Avatar;
|
||||
class ProgramObject;
|
||||
|
||||
|
@ -63,7 +61,6 @@ private:
|
|||
int _testRaveGloveMode;
|
||||
bool _particleSystemInitialized;
|
||||
int _fingerParticleEmitter[NUM_FINGERS];
|
||||
//int _fingerTrailParticleEmitter[NUM_FINGERS][MAX_TRAIL_PARTICLES];
|
||||
Avatar* _owningAvatar;
|
||||
float _renderAlpha;
|
||||
bool _lookingInMirror;
|
||||
|
|
Loading…
Reference in a new issue