src/PhysicsObject.hh
author ekku
Sun, 07 Dec 2008 21:34:12 +0000
changeset 265 d97bf6790c22
parent 264 215de3d4de60
child 268 0b96b88af335
permissions -rw-r--r--
PhysicsObject enum
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     1
#ifndef PHYSICS_OBJECT_HH
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     2
#define PHYSICS_OBJECT_HH
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     3
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     4
#include <ClanLib/display.h>
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     5
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     6
// Forward declares
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     7
class PhysicsObject;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     8
struct Derivative;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     9
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    10
#include "PhysicsWorld.hh"
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    11
#include "Vector.hh"
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents: 200
diff changeset
    12
#include "Timer.hh"
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    13
#include "Config.hh"
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    14
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    15
// Type definitions
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    16
typedef Vector Force;
265
d97bf6790c22 PhysicsObject enum
ekku
parents: 264
diff changeset
    17
    
d97bf6790c22 PhysicsObject enum
ekku
parents: 264
diff changeset
    18
enum ObjectType { PLAYER, PROJECTILE, ROPE };
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    19
264
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    20
enum FacingDirection {
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    21
    FACING_LEFT,
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    22
    FACING_RIGHT
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    23
};
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    24
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    25
/**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    26
 * PhysicObject class. A basic PhysicsObject class.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    27
 */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    28
class PhysicsObject {
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    29
protected:
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    30
    Vector position;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    31
    Vector velocity;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    32
    float mass;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    33
    bool inAir; // Is the object "on the ground"
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    34
    float collision_elasticity;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    35
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    36
    // Attributes for players
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    37
    float aim; // Aim direction (half circle)
264
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    38
    FacingDirection facing; // Player facing
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    39
222
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
    40
    bool alive;
225
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    41
    bool shouldDelete;
265
d97bf6790c22 PhysicsObject enum
ekku
parents: 264
diff changeset
    42
    
d97bf6790c22 PhysicsObject enum
ekku
parents: 264
diff changeset
    43
    ObjectType type;
222
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
    44
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    45
    PhysicsObject *pivot;
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    46
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    47
    PhysicsObject(PhysicsWorld &world, float mass, Vector position, 
265
d97bf6790c22 PhysicsObject enum
ekku
parents: 264
diff changeset
    48
                  Vector velocity, ObjectType type, bool enabled = true);
222
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
    49
    virtual ~PhysicsObject (void);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    50
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    51
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    52
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    53
     * Add force to the force queue to be applied on next tick.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    54
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    55
     * @param force Force vector
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    56
     */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    57
    void applyForce(Force force);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    58
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    59
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    60
     * Change player aim
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    61
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    62
     * @param da Aim angle change
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    63
     */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    64
    void changeAim(float da);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    65
   
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    66
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    67
     * Set player facing.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    68
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    69
     * @param facingRight True if player is facing right.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    70
     */
264
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    71
    void setFacing (FacingDirection facing);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    72
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    73
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    74
     * Makes the player jump in the air.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    75
     * @param direction -1: jump left, 0: jump up, 1: jump right
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    76
     */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    77
    void jump(int direction);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    78
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    79
    /** 
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    80
     * Handle ground-bounce
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    81
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    82
     * @param normal Normal vector relative to which to bounce
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    83
     */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    84
    void bounce(Vector normal);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    85
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    86
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    87
     * Called on network clients to sync state from server
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    88
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    89
     * @param position New position
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    90
     * @param velocity New velocity
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    91
     * @param inAir New inAir value
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 197
diff changeset
    92
     * @param facingRight New facingRight value
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 197
diff changeset
    93
     * @param aim New aim
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    94
     */
264
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    95
    virtual void updatePhysics(Vector position, Vector velocity, bool inAir, FacingDirection facing, float aim);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    96
225
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    97
    /**
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    98
     * Put object to the objects list so that its movement will be calculated.
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    99
     */
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   100
    void enable (void);
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   101
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   102
    /**
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   103
     * Remove object from the objects list but don't delete the object itself.
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   104
     */
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   105
    void disable (void);
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   106
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   107
private:
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   108
    // Shape of the object. Edge points of the shape polygon.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   109
    std::vector<Vector> shape;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   110
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   111
    // Force queue that is emptied on every tick
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   112
    std::queue<Force> forceq;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   113
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   114
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   115
     * Handle player movement and apply forces.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   116
     */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents: 200
diff changeset
   117
    void updatePosition(TimeMS dt);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   118
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   119
    // TODO: Should these be moved to PhysicsWorld?
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   120
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   121
     * Use RK4 to integrate the effects of force over a time interwall.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   122
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   123
     * @param force Force to integrate
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   124
     * @param dt Time intervall
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   125
     */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   126
    void integrate(Force force, TimeMS dt, Vector &posAfterTick, Vector &velAfterTick);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   127
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   128
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   129
     * Evaluate the value of the derivative at given time
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   130
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   131
     * @param force Force
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   132
     * @param dt Time
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   133
     * @param d Previous derivative
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   134
     */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   135
    Derivative evaluate(Force force, TimeMS dt, Derivative &d, const Vector &posAfterTick, const Vector &velAfterTick);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   136
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   137
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   138
     * Return object acceleration with given force.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   139
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   140
     * @param force Force
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   141
     * @return Acceleration
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   142
     */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   143
    Vector acceleration(const Force &force);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   144
249
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   145
     /**
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   146
     * Handle ground movement.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   147
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   148
     * @param right Boolean describing the movement direction.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   149
     * @return New position
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   150
     */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   151
    void walk(TimeMS, bool right);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   152
    Vector walk_one_step(float, bool);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   153
249
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   154
    /**
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   155
     * Define object behaviour on collisions.
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   156
     */
252
25054ce94d07 Rope is released if the ground on the pivot point is destroyed.
ekku
parents: 249
diff changeset
   157
    virtual void onCollision (Vector collisionPoint) {}
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   158
249
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   159
    /**
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   160
     * Checks if it is possible for the object to be in the given
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   161
     * location.
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   162
     */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   163
    bool possibleLocation(Vector loc);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   164
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   165
public:
208
7709571e1131 Digging now uses projectiles.
saiam
parents: 205
diff changeset
   166
    PhysicsWorld &world;
7709571e1131 Digging now uses projectiles.
saiam
parents: 205
diff changeset
   167
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   168
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   169
     * Get current object position.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   170
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   171
     * @return Position vector
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   172
     */
257
549783d71e51 add a handful of consts to PhysicsObject and modify draw to use getCoordinate, and replace old skin.png with new skin.png
terom
parents: 255
diff changeset
   173
    Vector getPosition (void) const;
255
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   174
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   175
    /**
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   176
     * Get current object screen coordinates
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   177
     *
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   178
     * @return PixelCoordinate position
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   179
     */
257
549783d71e51 add a handful of consts to PhysicsObject and modify draw to use getCoordinate, and replace old skin.png with new skin.png
terom
parents: 255
diff changeset
   180
    PixelCoordinate getCoordinate (void) const;
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   181
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   182
    /**
222
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   183
     * Get current object velocity.
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   184
     *
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   185
     * @return Velocity vector
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   186
     */
257
549783d71e51 add a handful of consts to PhysicsObject and modify draw to use getCoordinate, and replace old skin.png with new skin.png
terom
parents: 255
diff changeset
   187
    Vector getVelocity() const;
222
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   188
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   189
    /**
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   190
     * Return object shape.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   191
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   192
     * @return Polygon points
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   193
     */
257
549783d71e51 add a handful of consts to PhysicsObject and modify draw to use getCoordinate, and replace old skin.png with new skin.png
terom
parents: 255
diff changeset
   194
    const std::vector<Vector>& getShape() const;
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   195
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   196
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   197
     * Set object shape.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   198
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   199
     * @param shape Vector containing polygon poinst
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   200
     */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   201
    void setShape(std::vector<Vector> shape);
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   202
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   203
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   204
     * Return object facing.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   205
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   206
     * @return Object facing (true if facing right)
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   207
     */
264
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
   208
    FacingDirection getFacing() const;
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   209
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   210
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   211
     * Return object aim angle.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   212
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   213
     * @return Object aim angle
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   214
     */
257
549783d71e51 add a handful of consts to PhysicsObject and modify draw to use getCoordinate, and replace old skin.png with new skin.png
terom
parents: 255
diff changeset
   215
    float getAim() const;
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   216
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   217
    /**
235
0a0c729365ee code cleanup
terom
parents: 228
diff changeset
   218
     * Returns facing+aim as a unit vector
0a0c729365ee code cleanup
terom
parents: 228
diff changeset
   219
     */
257
549783d71e51 add a handful of consts to PhysicsObject and modify draw to use getCoordinate, and replace old skin.png with new skin.png
terom
parents: 255
diff changeset
   220
    Vector getDirection (void) const;
235
0a0c729365ee code cleanup
terom
parents: 228
diff changeset
   221
0a0c729365ee code cleanup
terom
parents: 228
diff changeset
   222
    /**
222
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   223
     *  Mark object as destroyed, it will be delete'd later
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   224
     */
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   225
    void destroy (void);
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   226
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   227
    /*
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   228
     * Had the object been destroyed?
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   229
     */
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   230
    bool isDestroyed (void);
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   231
    
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   232
    /**
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   233
     * Delete ourselves if we've been destroyed and return true, else return false
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   234
     */
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   235
    bool removeIfDestroyed (void);
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   236
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
   237
    /**
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   238
     * Sets this object's pivot to the given value, which will then exert a force on this object
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   239
     */
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   240
    void setPivot (PhysicsObject *pivot);
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   241
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   242
    /**
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   243
     * Compute the force that this object (as a pivot) exerts on the given object
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   244
     */
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   245
    virtual float getPivotForce (PhysicsObject *bob);
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   246
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   247
    /**
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   248
     * Update object in physics simulation.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   249
     */
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 209
diff changeset
   250
    virtual void tick (TimeMS tick_length);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   251
};
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   252
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   253
struct Derivative {
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   254
    Vector dx; // Velocity
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   255
    Vector dv; // Acceleration
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   256
};
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   257
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   258
#endif