- Timestamp:
- May 31, 2005, 5:48:17 PM (19 years ago)
- Location:
- orxonox/trunk/src/lib/particles
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
orxonox/trunk/src/lib/particles/particle_system.cc
r4397 r4421 58 58 this->setMass(1.0, 0.0); 59 59 ParticleEngine::getInstance()->addSystem(this); 60 61 radiusAnim.addEntry(0.0,5); 62 63 radiusAnim.addEntry(.80,3); 64 65 radiusAnim.addEntry(.5, 0); 60 66 } 61 67 … … 247 253 // rendering new position. 248 254 tickPart->position = tickPart->position + tickPart->velocity * dt; 249 tickPart->radius += tickPart->radiusIt * dt;255 tickPart->radius = radiusAnim.getValue(tickPart->lifeCycle); 250 256 251 257 tickPart->extForce = Vector(0,0,0); -
orxonox/trunk/src/lib/particles/particle_system.h
r4396 r4421 12 12 #include "glincl.h" 13 13 #include "vector.h" 14 15 #include "quick_animation.h" 14 16 15 17 #define PARTICLE_DOT_MASK 0x000001 … … 136 138 GLuint* glID; //!< A List of different gl-List-ID's 137 139 GLuint dialectCount; //!< How many different types of particles are there in the Particle System 140 141 QuickAnimation radiusAnim; 138 142 }; 139 143 -
orxonox/trunk/src/lib/particles/quick_animation.cc
r4415 r4421 31 31 \brief standard constructor 32 32 */ 33 QuickAnimation::QuickAnimation ( float rangeStart, float valueStart, float rangeEnd, float valueEnd)33 QuickAnimation::QuickAnimation (void) 34 34 { 35 35 this->setClassName("QuickAnimation"); 36 36 37 this->first = this->current = new QuickKeyFrame; 38 this->current->positionStart = rangeStart; 39 this->current->positionEnd = rangeEnd; 40 this->current->valueStart = valueStart; 41 this->current->valueEnd = valueEnd; 42 this->current->next = NULL; 37 this->first = this->current = NULL; 43 38 } 44 39 … … 48 43 49 44 */ 50 QuickAnimation::~QuickAnimation ( )45 QuickAnimation::~QuickAnimation (void) 51 46 { 52 47 this->current = this->first; … … 62 57 } 63 58 64 65 void QuickAnimation::addEntry(float position, float value) 59 /** 60 \brief adds a new entry to the list of keyframes 61 \param position the position to add the key to 62 \param value the Value to set for the position 63 \returns false if the key existed already for a given position 64 */ 65 bool QuickAnimation::addEntry(float position, float value) 66 66 { 67 67 this->current = this->first; 68 if (position < this->current->positionStart)68 while (this->current != NULL) 69 69 { 70 this->current = new QuickKeyFrame; 70 // if it is between some keyframes 71 if ((!this->current->next && this->current->position < position) 72 || (this->current->position < position && this->current->next->position > position)) 73 break; 74 // if it is the same as an already existing keyframe 75 else if (this->current->position == position) 76 return false; 77 this->current = this->current->next; 78 } 71 79 72 this->current->positionStart = position; 73 this->current->positionEnd = this->first->positionStart; 80 QuickKeyFrame* newKey = new QuickKeyFrame; 81 if (this->first == NULL) 82 { 83 this->first = newKey; 84 this->current = newKey; 85 newKey->next = NULL; 86 } 87 else 88 { 89 newKey->next = this->current->next; 90 this->current->next = newKey; 91 } 92 newKey->value = value; 93 newKey->position = position; 94 95 this->current = this->first; 96 } 74 97 75 this->current->valueStart = value; 76 this->current->valueEnd = this->first->valueStart; 77 78 this->current->next = this->first; 79 this->first = this->current; 80 } 81 82 while(this->current != NULL) 98 /** 99 \brief returns the value of the animation at a certain position 100 \param position the position to get the value from :) 101 */ 102 float QuickAnimation::getValue(float position) 103 { 104 if (unlikely(this->first == NULL)) 105 return 0.0; 106 else if (unlikely (this->first->next == NULL)) 107 return this->first->value; 108 else 83 109 { 84 if ( this->current->positionStart < position)110 if (unlikely(position < this->current->position)) 85 111 { 86 QuickKeyFrame* tmpKey = new QuickKeyFrame; 87 tmpKey->positionStart = position; 88 tmpKey->positionEnd = this->current->positionEnd; 89 tmpKey->valueStart = value; 90 tmpKey->valueEnd = this->current->valueEnd; 91 tmpKey->next = this->current->next; 92 93 this->current->positionEnd = tmpKey->positionStart; 94 this->current->valueEnd = tmpKey->valueStart; 112 if (position <= this->first->position) 113 return this->first->value; 114 this->current = this->first; 95 115 } 116 while (likely(this->current->next != NULL && position > this->current->next->position)) 117 this->current = this->current->next; 118 if (this->current->next == NULL) 119 return this->current->value; 120 121 return this->current->value + (this->current->next->value - this->current->value) 122 * ((position-this->current->position) / (this->current->next->position -this->current->position)); 96 123 } 97 124 } 98 125 99 126 100 float QuickAnimation::getValue(float position)127 void QuickAnimation::debug(void) 101 128 { 102 while (likely (this->current->positionStart > position || this->current->positionEnd < position)) 129 this->current = this->first; 130 131 PRINT(0)("QuickAnim:: (position, value)"); 132 while(this->current) 103 133 { 104 if (likely(this->current->next != NULL)) 105 this->current = this->current->next; 106 else 107 { 108 if (unlikely(this->first->positionStart > position)) 109 { 110 PRINTF(2)("Position out of range. chose %f, min is: %f, max is\n", position, this->first->positionStart, this->current->positionEnd); 111 return 0; 112 } 113 this->current = this->first; 114 } 134 PRINT(0)("->(%f, %f)", this->current->position, this->current->value); 135 this->current = this->current->next; 115 136 } 116 return this->current->valueStart + (this->current->positionEnd - position) * 117 (this->current->valueEnd - this->current->valueStart) /118 (this->current->positionEnd - this->current->positionStart);137 138 PRINT(0)("\n"); 139 this->current = this->first; 119 140 } 120 -
orxonox/trunk/src/lib/particles/quick_animation.h
r4415 r4421 28 28 struct QuickKeyFrame 29 29 { 30 float valueStart; //!< The starting value of this KeyFrame 31 float valueEnd; //!< The end value of this KeyFrame 32 float positionStart; //!< The starting position of this KeyFrame 33 float positionEnd; //!< The end position of thies KeyFrame 30 float value; //!< The starting value of this KeyFrame 31 float position; //!< The end position of thies KeyFrame 34 32 35 33 QuickKeyFrame* next; //!< The next Animation 36 34 }; 37 35 38 QuickAnimation( float rangeStart = 0.0, float valueStart = 0.0, float rangeEnd = 1.0, float valueEnd = 0.0);36 QuickAnimation(); 39 37 virtual ~QuickAnimation(); 40 38 41 voidaddEntry(float position, float value);39 bool addEntry(float position, float value); 42 40 43 41 float getValue(float position); 44 42 43 void debug(void); 45 44 private: 46 45 QuickKeyFrame* first; 47 46 QuickKeyFrame* current; 48 49 47 }; 50 48
Note: See TracChangeset
for help on using the changeset viewer.