Changeset 4421 in orxonox.OLD for orxonox/trunk/src/lib/particles/quick_animation.cc
- Timestamp:
- May 31, 2005, 5:48:17 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note: See TracChangeset
for help on using the changeset viewer.