| 1 | /*! |
|---|
| 2 | \file coordinates.h |
|---|
| 3 | \brief Basic coordinate system definitions |
|---|
| 4 | */ |
|---|
| 5 | |
|---|
| 6 | #ifndef COORDINATES_H |
|---|
| 7 | #define COORDINATES_H |
|---|
| 8 | |
|---|
| 9 | #include "vector.h" |
|---|
| 10 | |
|---|
| 11 | class Track; |
|---|
| 12 | |
|---|
| 13 | //! Coordinates relative to track |
|---|
| 14 | /** |
|---|
| 15 | This identifies the position of an object on the track system |
|---|
| 16 | */ |
|---|
| 17 | typedef struct |
|---|
| 18 | { |
|---|
| 19 | unsigned long part; //!< ID of the track part the object is on |
|---|
| 20 | Track* track; //!< This is the current Track to which the Entity belongs to |
|---|
| 21 | float dist; //!< The distance that has already been traveled on the track |
|---|
| 22 | Vector pos; //!< The position relative to the offset marked by the distance already covered - this is mostly for user interaction/control |
|---|
| 23 | Quaternion rot; //!< The direction the object is heading (relative to track direction) |
|---|
| 24 | } Location; |
|---|
| 25 | |
|---|
| 26 | //! Absolute coordinates |
|---|
| 27 | /** |
|---|
| 28 | This is used to store the position of a object in the rendered coordinate system |
|---|
| 29 | */ |
|---|
| 30 | typedef struct |
|---|
| 31 | { |
|---|
| 32 | Vector pos; //!< Absolute x/y/z coordinates |
|---|
| 33 | Quaternion rot; //!< Absolute orientation |
|---|
| 34 | } Placement; |
|---|
| 35 | |
|---|
| 36 | |
|---|
| 37 | /////////////////////////////////////////////////////////////////// |
|---|
| 38 | //////// NEW COORDINATES, because the old ones were a bit fuzy // |
|---|
| 39 | /////////////////////////////////////////////////////////////////// |
|---|
| 40 | enum COORD_TYPE {WORLD, TRACK, LOCAL}; |
|---|
| 41 | |
|---|
| 42 | typedef struct |
|---|
| 43 | { |
|---|
| 44 | Vector position; |
|---|
| 45 | Quaternion rotation; |
|---|
| 46 | } Coord; |
|---|
| 47 | |
|---|
| 48 | //! A class to handle coordinates of Objects. |
|---|
| 49 | class Coordinate |
|---|
| 50 | { |
|---|
| 51 | private: |
|---|
| 52 | Coord worldCoord; |
|---|
| 53 | |
|---|
| 54 | public: |
|---|
| 55 | |
|---|
| 56 | void setCoord (Coord coordinate, COORD_TYPE cType); |
|---|
| 57 | void setPosition (Vector position, COORD_TYPE cType); |
|---|
| 58 | void setRotation (Quaternion rotation, COORD_TYPE cType); |
|---|
| 59 | |
|---|
| 60 | void move (Vector, COORD_TYPE cType); // just move a Object |
|---|
| 61 | |
|---|
| 62 | Coord getCoord (COORD_TYPE cType) const; |
|---|
| 63 | Vector getPosition (COORD_TYPE cType) const; |
|---|
| 64 | Quaternion getRotation (COORD_TYPE cType) const; |
|---|
| 65 | }; |
|---|
| 66 | |
|---|
| 67 | |
|---|
| 68 | |
|---|
| 69 | |
|---|
| 70 | |
|---|
| 71 | //! World coordinates: |
|---|
| 72 | /** |
|---|
| 73 | Absolute coordinates in 3D-space are defined as the coordinates, an Entity has in respect to the absolute Zero point |
|---|
| 74 | */ |
|---|
| 75 | typedef struct |
|---|
| 76 | { |
|---|
| 77 | Vector position; //!< absolute position of the Object (the one opengl has to know) |
|---|
| 78 | Quaternion rot; //!< absolute rotation |
|---|
| 79 | } WorldCoord; |
|---|
| 80 | |
|---|
| 81 | typedef struct |
|---|
| 82 | { |
|---|
| 83 | Vector position; //!< The Vector from the current Path-Position to the Entity. (worldCoord->position - track->worldCoord->position) |
|---|
| 84 | Quaternion rot; //!< rotation an entity has to the track. |
|---|
| 85 | } TrackCoord; |
|---|
| 86 | |
|---|
| 87 | typedef struct |
|---|
| 88 | { |
|---|
| 89 | Vector position; //!< the coordinate to the object itself. This shoud be 0 for an entity. (can be used for explosions on the ship, shoot and so on.) |
|---|
| 90 | Quaternion rot; //!< the Rotation of an object itself. (to easily shoot in different directions) |
|---|
| 91 | } LocalCoord; |
|---|
| 92 | |
|---|
| 93 | #endif |
|---|