Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 4415 in orxonox.OLD for orxonox/trunk/src/lib/graphics/particles


Ignore:
Timestamp:
May 31, 2005, 9:12:33 AM (20 years ago)
Author:
bensch
Message:

orxonox/trunk: added quick-animation for FAST, bad animations that suffice for the properties particles over time

Location:
orxonox/trunk/src/lib/graphics/particles
Files:
2 copied

Legend:

Unmodified
Added
Removed
  • orxonox/trunk/src/lib/graphics/particles/quick_animation.cc

    r4394 r4415  
    1616//#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_
    1717
    18 #include "proto_class.h"
     18#include "quick_animation.h"
     19
     20#include "compiler.h"
     21#include "debug.h"
     22#ifndef NULL
     23#define NULL 0
     24#endif
     25
    1926
    2027using namespace std;
     
    2330/**
    2431   \brief standard constructor
    25    \todo this constructor is not jet implemented - do it
    2632*/
    27 ProtoClass::ProtoClass ()
     33QuickAnimation::QuickAnimation (float rangeStart, float valueStart, float rangeEnd, float valueEnd)
    2834{
    29    this->setClassID(CL_PROTO_ID, "ProtoClass");
     35   this->setClassName("QuickAnimation");
    3036
    31    /* If you make a new class, what is most probably the case when you write this file
    32       don't forget to:
    33        1. Add the new file new_class.cc to the ./src/Makefile.am
    34        2. Add the class identifier to ./src/class_list.h eg. CL_NEW_CLASS
    35 
    36       Advanced Topics:
    37       - if you want to let your object be managed via the ObjectManager make sure to read
    38         the object_manager.h header comments. You will use this most certanly only if you
    39         make many objects of your class, like a weapon bullet.
    40    */
     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;
    4143}
    4244
     
    4648
    4749*/
    48 ProtoClass::~ProtoClass ()
     50QuickAnimation::~QuickAnimation ()
    4951{
    50   // delete what has to be deleted here
     52  this->current = this->first;
     53  QuickKeyFrame delKF;
     54 
     55  while (this->current != NULL)
     56    {
     57      this->first = this->current->next;
     58      delete this->current;
     59      this->current = this->first;
     60    }
     61
    5162}
     63
     64
     65void QuickAnimation::addEntry(float position, float value)
     66{
     67  this->current = this->first;
     68  if (position < this->current->positionStart)
     69    {
     70      this->current = new QuickKeyFrame;
     71
     72      this->current->positionStart = position;
     73      this->current->positionEnd = this->first->positionStart;
     74
     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)
     83    {
     84      if (this->current->positionStart < position)
     85        {
     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;
     95        }
     96    }
     97}
     98
     99
     100float QuickAnimation::getValue(float position)
     101{
     102  while (likely (this->current->positionStart > position || this->current->positionEnd < position))
     103    {
     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        }
     115    }
     116  return this->current->valueStart + (this->current->positionEnd - position) *
     117    (this->current->valueEnd - this->current->valueStart) /
     118    (this->current->positionEnd - this->current->positionStart);
     119}
     120
  • orxonox/trunk/src/lib/graphics/particles/quick_animation.h

    r4394 r4415  
    11/*!
    2     \file proto_class.h
    3     \brief Definition of ...
     2    \file quick_animation.h
     3    \brief Definition of the QuickAnimation-class
    44
    55*/
    66
    7 #ifndef _PROTO_CLASS_H
    8 #define _PROTO_CLASS_H
     7#ifndef _QUICK_ANIMATION_H
     8#define _QUICK_ANIMATION_H
    99
    1010#include "base_object.h"
     
    1414
    1515
    16 //! A class for ...
    17 class ProtoClass : public BaseObject {
     16
     17//! A class for that linearely interpolates between multiple values.
     18/**
     19   to be quick this only has the capability to store very little date
     20
     21   this class is optimized for a raising value. eg. 100 particles sorted
     22   by age.
     23*/
     24class QuickAnimation : public BaseObject {
    1825
    1926 public:
    20   ProtoClass();
    21   virtual ~ProtoClass();
     27  //! a simple struct that stores keyframes for the QuickAnimation-Class.
     28  struct QuickKeyFrame
     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
    2234
     35    QuickKeyFrame* next;    //!< The next Animation
     36  };
     37
     38  QuickAnimation(float rangeStart = 0.0, float valueStart = 0.0, float rangeEnd = 1.0, float valueEnd = 0.0);
     39  virtual ~QuickAnimation();
     40
     41  void addEntry(float position, float value);
     42
     43  float getValue(float position);
    2344
    2445 private:
     46  QuickKeyFrame* first;
     47  QuickKeyFrame* current;
    2548
    2649};
    2750
    28 #endif /* _PROTO_CLASS_H */
     51#endif /* _QUICK_ANIMATION_H */
Note: See TracChangeset for help on using the changeset viewer.