Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/simple_animation.h @ 3738

Last change on this file since 3738 was 3738, checked in by patrick, 19 years ago

orxonox/trunk: simpleanimation is on the way to support more than one world entity it is bound to… does not yet work, and may crash in segfault.

File size: 2.8 KB
Line 
1/*!
2    \file simple_animation.h
3    \brief A class to interpolate the movement of an object following descrete points in room and time
4    \todo implement it
5
6    This class has been done to animate some movement, works best for short
7    distances.
8*/
9
10#ifndef _SIMPLE_ANIMATION_H
11#define _SIMPLE_ANIMATION_H
12
13#include "base_object.h"
14#include "list.h"
15
16
17class Vector;
18class Quaternion;
19class WorldEntity;
20class PNode;
21
22typedef enum movementMode{LINEAR=0, EXP, NEG_EXP, SIN, COS, QUADRATIC};
23typedef enum animationMode{SINGLE=0, LOOP};
24#define DEFAULT_ANIMATION_MODE LINEAR
25
26
27//! KeyFrame Struct
28/**
29   This represents one point with direction of the animation
30*/
31typedef struct KeyFrame {
32  Vector* position;
33  Quaternion* direction;
34  WorldEntity* object;
35  float time;
36  movementMode mode;
37};
38
39//! Animation Struct
40/**
41   This represents an animation for a object
42*/
43typedef struct Animation {
44  WorldEntity* object;
45  KeyFrame* currentFrame;
46  KeyFrame* lastFrame;
47  Vector* lastPosition;
48  Vector* tmpVect;
49  tList<KeyFrame>* frames;
50  animationMode animMode;
51  movementMode movMode;
52  bool bRunning;
53  float deltaT;
54};
55
56//! Animation Class
57/**
58   Helps you making some small animation
59*/
60class SimpleAnimation : public BaseObject {
61 
62 public:
63  static SimpleAnimation* getInstance();
64
65  void animatorBegin();
66  void animatorEnd();
67  void selectObject(WorldEntity* entity);
68  void addKeyFrame(Vector* point, Quaternion* direction, float time);
69  void addKeyFrame(Vector* point, Quaternion* direction, float time, movementMode mode);
70  void addKeyFrame(KeyFrame* frame);
71  void reset();
72
73
74  void start();
75  void stop();
76  void restart();
77  void pause();
78  void resume();
79
80  void tick(float time);
81
82 private:
83  SimpleAnimation();
84  virtual ~SimpleAnimation();
85
86  static SimpleAnimation* singletonRef;
87  bool bDescriptive;               //<! is true, when AnimatorBegin() was executed but no AnimatorEnd() yet: in describtive mode: pass commands
88  bool bRunning;                   //<! is set, when the animation is running
89  tList<KeyFrame>* frames;         //<! where keyframes are stored in
90  tList<Animation>* animators;      //<! a list of animation's
91  KeyFrame* currentFrame;          //<! the frame that is been played now
92  KeyFrame* lastFrame;
93  Vector* lastPosition;
94  movementMode mode;               //<! this is an enum of the mode, how the speed is distributed
95  float localTime;
96  PNode* parent;
97 
98  Vector* tmpVect;                 //<! this is the temporary vector save place -
99  WorldEntity* workingObject;      //<! this is a pointer to the current working object that has been selected via selectObject()
100  Animator* workingAnimator;       //<! the animator with which you are currently working
101  float deltaT;                    //<! this is a time constant for the movement
102
103};
104
105#endif /* _SIMPLE_ANIMATION_H */
Note: See TracBrowser for help on using the repository browser.