src/PhysicsObject.hh
author nireco
Sat, 31 Jan 2009 12:33:08 +0200
changeset 443 5d1119729f58
parent 428 712b943195a6
permissions -rw-r--r--
worm02 two pics to comment
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
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     5
// Forward declares
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     6
class PhysicsObject;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     7
struct Derivative;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     8
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     9
#include "PhysicsWorld.hh"
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    10
#include "Vector.hh"
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents: 200
diff changeset
    11
#include "Timer.hh"
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    12
#include "Config.hh"
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    13
423
947ab54de4b7 fix worst compilation errors when using the debian lenny gcc/libc...
Tero Marttila <terom@fixme.fi>
parents: 322
diff changeset
    14
#include <utility>
947ab54de4b7 fix worst compilation errors when using the debian lenny gcc/libc...
Tero Marttila <terom@fixme.fi>
parents: 322
diff changeset
    15
#include <queue>
947ab54de4b7 fix worst compilation errors when using the debian lenny gcc/libc...
Tero Marttila <terom@fixme.fi>
parents: 322
diff changeset
    16
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    17
// Type definitions
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    18
typedef Vector Force;
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    19
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    20
/** Specifies possible object types. */
265
d97bf6790c22 PhysicsObject enum
ekku
parents: 264
diff changeset
    21
enum ObjectType { PLAYER, PROJECTILE, ROPE };
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    22
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    23
/** Specifies possible facing directions for objects. */
264
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    24
enum FacingDirection {
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    25
    FACING_LEFT,
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    26
    FACING_RIGHT
215de3d4de60 change facingRight from a bool to an
terom
parents: 257
diff changeset
    27
};
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    28
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    29
/**
321
69ed10f20a9e fixed typo
saiam
parents: 320
diff changeset
    30
 * PhysicsObject class. Represents an object in the physics simulation.
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    31
 */
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    32
class PhysicsObject {
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    33
protected:
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    34
    /** Reference to PhysicsWorld. */
282
e0e4dfc3e528 compiles cleanly with -Wall -Wextra -Wconversion, not tested, but that shouldn't break anything :)
terom
parents: 279
diff changeset
    35
    PhysicsWorld &world;
e0e4dfc3e528 compiles cleanly with -Wall -Wextra -Wconversion, not tested, but that shouldn't break anything :)
terom
parents: 279
diff changeset
    36
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    37
private:
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    38
    /** Position */
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    39
    Vector position;
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    40
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    41
    /** Position at previous tick */
285
c080c8c70333 Previous position added, and unsigned int bug fixed
ekku
parents: 282
diff changeset
    42
    Vector previousPosition;
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    43
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    44
    /** Velocity */
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    45
    Vector velocity;
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    46
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    47
    /** Mass */
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    48
    float mass; 
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    49
 
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    50
    /** Object's shape, polygon vertices */
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    51
    std::vector<Vector> shape;
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    52
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    53
    /** Force queue, emptied on every physics tick */
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    54
    std::queue<std::pair<Force, TimeMS> > forceq;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    55
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    56
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    57
protected:
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    58
    /** Tells if the object is "on the ground" */
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    59
    bool inAir;
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    60
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    61
    /** Object elasticity */
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    62
    float collision_elasticity;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    63
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    64
    /** Aim angle in radians */
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    65
    float aim; 
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    66
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
    67
    /** Player facing */
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    68
    FacingDirection facing; 
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    69
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    70
    /** Specifies if the object should be simulated */
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
    71
    bool alive;
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    72
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    73
    /** True if !alive, and the object can be delete'd */
225
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    74
    bool shouldDelete;
265
d97bf6790c22 PhysicsObject enum
ekku
parents: 264
diff changeset
    75
    
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    76
    /** Type of the object */
265
d97bf6790c22 PhysicsObject enum
ekku
parents: 264
diff changeset
    77
    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
    78
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    79
    /** Pivot object for this object */
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    80
    PhysicsObject *pivot;
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    81
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    82
    /** 
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    83
     * Class constructor
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    84
     *
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    85
     * @param world Reference to PhysicsWorld
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    86
     * @param mass Object mass
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    87
     * @param position Object position
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    88
     * @param velocity Object velocity
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    89
     * @param type Object type
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    90
     * @param collision_elasticity Object elasticity
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    91
     * @param enabled Is the object currently part of the simulation
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
    92
     */
279
e36f5e1a1c8d let projectiles bounce, the new BounceBounce weapon puts the Physics engine into an infinite loop
terom
parents: 273
diff changeset
    93
    PhysicsObject (PhysicsWorld &world, float mass, Vector position, Vector velocity, ObjectType type, 
e36f5e1a1c8d let projectiles bounce, the new BounceBounce weapon puts the Physics engine into an infinite loop
terom
parents: 273
diff changeset
    94
            float collision_elasticity, bool enabled = true);
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    95
    
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    96
    /**
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    97
     * Virtual destructor
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
    98
     */
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
    99
    virtual ~PhysicsObject (void);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   100
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   101
    /**
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   102
     * Apply a force to the object. The force is applied to the object
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   103
     * on the next physics tick.
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   104
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   105
     * @param force Force vector
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   106
     */
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   107
    void applyForce (Force force, TimeMS dt = PHYSICS_TICK_MS);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   108
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   109
    /**
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   110
     * Change player aim. This function takes care that aim angle
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   111
     * stays inside limits.
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   112
     *
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   113
     * @param da Aim angle change in radians
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   114
     */
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   115
    void changeAim (float da);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   116
   
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   117
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   118
     * Set player facing.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   119
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   120
     * @param facingRight True if player is facing right.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   121
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   122
    void setFacing (FacingDirection facing) {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   123
        this->facing = facing;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   124
    }
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   125
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   126
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   127
     * Makes the player jump in the air.
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   128
     *
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   129
     * @param direction -1: jump left, 0: jump up, 1: jump right
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   130
     */
299
e4dacf550ba1 implement players dying
terom
parents: 288
diff changeset
   131
    void jump (int direction);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   132
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   133
    /** 
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   134
     * Handle object bounce.
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   135
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   136
     * @param normal Normal vector relative to which to bounce
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   137
     */
299
e4dacf550ba1 implement players dying
terom
parents: 288
diff changeset
   138
    void bounce (Vector normal);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   139
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   140
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   141
     * Called on network clients to sync state from server
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   142
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   143
     * @param position New position
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   144
     * @param velocity New velocity
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   145
     * @param inAir New inAir value
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 197
diff changeset
   146
     * @param facingRight New facingRight value
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 197
diff changeset
   147
     * @param aim New aim
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   148
     */
299
e4dacf550ba1 implement players dying
terom
parents: 288
diff changeset
   149
    virtual void updatePhysics (Vector position, Vector velocity, bool inAir, FacingDirection facing, float aim);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   150
225
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   151
    /**
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   152
     * Put the object in the physics simulation. When the object is in
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   153
     * the physics simulation it's movements will be calculated.
225
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   154
     */
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   155
    void enable (void);
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   156
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   157
    /**
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   158
     * Remove object from the objects physics simulation. When the
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   159
     * object isn't in the physics simulation it won't be deleted but
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   160
     * its movements will not be calculated.
225
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   161
     */
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   162
    void disable (void);
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
   163
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   164
private:
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   165
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   166
     * Handle player movement and apply forces.
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   167
     *
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   168
     * @param dt Time intervall
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   169
     */
299
e4dacf550ba1 implement players dying
terom
parents: 288
diff changeset
   170
    void updatePosition (TimeMS dt);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   171
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   172
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   173
     * Use RK4 to integrate the effects of force over a time interwall.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   174
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   175
     * @param force Force to integrate
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   176
     * @param dt Time intervall
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   177
     * @param posAfterTick Reference to object postition after integration.
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   178
     * @param velAfterTick Reference to object velocity after integration.
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   179
     */
299
e4dacf550ba1 implement players dying
terom
parents: 288
diff changeset
   180
    void integrate (Force force, TimeMS dt, Vector &posAfterTick, Vector &velAfterTick);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   181
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   182
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   183
     * Evaluate the value of the derivative at given time
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   184
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   185
     * @param force Force
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   186
     * @param dt Time
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   187
     * @param d Previous derivative
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   188
     * @return Derivative
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   189
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   190
    Derivative evaluate (Force force, TimeMS dt, const Derivative &d, const Vector &posAfterTick, const Vector &velAfterTick);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   191
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   192
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   193
     * Return object acceleration with given force.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   194
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   195
     * @param force Force
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   196
     * @return Acceleration
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   197
     */
299
e4dacf550ba1 implement players dying
terom
parents: 288
diff changeset
   198
    Vector acceleration (const Force &force);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   199
249
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   200
     /**
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   201
     * Handle ground movement.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   202
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   203
     * @param right Boolean describing the movement direction.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   204
     * @return New position
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   205
     */
299
e4dacf550ba1 implement players dying
terom
parents: 288
diff changeset
   206
    void walk (TimeMS, bool right);
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   207
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   208
    /*
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   209
     * Undocumented private method
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   210
     */
299
e4dacf550ba1 implement players dying
terom
parents: 288
diff changeset
   211
    Vector walk_one_step (float, bool);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   212
288
47a5d7896aec some collisions on PhysicsWorld::tick
nireco
parents: 287
diff changeset
   213
public:
249
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   214
    /**
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   215
     * Define object behaviour on collisions.
282
e0e4dfc3e528 compiles cleanly with -Wall -Wextra -Wconversion, not tested, but that shouldn't break anything :)
terom
parents: 279
diff changeset
   216
     *
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   217
     * @param collisionPoint Point of collision.
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   218
     * @param other The other object we have collided with.
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   219
     */
288
47a5d7896aec some collisions on PhysicsWorld::tick
nireco
parents: 287
diff changeset
   220
    virtual void onCollision (Vector collisionPoint, PhysicsObject *other = NULL);
272
97de051edbcf Added PhysicsObject* attribute to onCollision
saiam
parents: 268
diff changeset
   221
249
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   222
    /**
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   223
     * Get object type.
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   224
     *
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   225
     * @return Object type
287
f59c8dee7f91 getType added for physics object
ekku
parents: 285
diff changeset
   226
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   227
    ObjectType getType (void) const {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   228
        return type;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   229
    }
287
f59c8dee7f91 getType added for physics object
ekku
parents: 285
diff changeset
   230
f59c8dee7f91 getType added for physics object
ekku
parents: 285
diff changeset
   231
    /**
249
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   232
     * Checks if it is possible for the object to be in the given
5647f58e37cd Removed some unnecessary TODOs
saiam
parents: 235
diff changeset
   233
     * location.
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   234
     *
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   235
     * @param loc Location
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   236
     */
299
e4dacf550ba1 implement players dying
terom
parents: 288
diff changeset
   237
    bool possibleLocation (Vector loc);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   238
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   239
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   240
     * Get current object position.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   241
     *
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   242
     * @return position vector
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   243
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   244
    Vector getPosition (void) const {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   245
        return position;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   246
    }
255
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   247
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   248
    /**
285
c080c8c70333 Previous position added, and unsigned int bug fixed
ekku
parents: 282
diff changeset
   249
     * Get previous object position.
c080c8c70333 Previous position added, and unsigned int bug fixed
ekku
parents: 282
diff changeset
   250
     *
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   251
     * @return position vector
285
c080c8c70333 Previous position added, and unsigned int bug fixed
ekku
parents: 282
diff changeset
   252
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   253
    Vector getPreviousPosition (void) const {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   254
        return previousPosition;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   255
    }
285
c080c8c70333 Previous position added, and unsigned int bug fixed
ekku
parents: 282
diff changeset
   256
c080c8c70333 Previous position added, and unsigned int bug fixed
ekku
parents: 282
diff changeset
   257
    /**
255
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   258
     * 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
   259
     *
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   260
     * @return PixelCoordinate position
99431fdb0dc8 add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
terom
parents: 252
diff changeset
   261
     */
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
   262
    PixelCoordinate getCoordinate (void) const;
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   263
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   264
    /**
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
   265
     * 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
   266
     *
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
   267
     * @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
   268
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   269
    Vector getVelocity (void) const {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   270
        return velocity;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   271
    }
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   272
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   273
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   274
     * Return object facing.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   275
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   276
     * @return Object facing (true if facing right)
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   277
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   278
    FacingDirection getFacing (void) const {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   279
        return facing;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   280
    }
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   281
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   282
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   283
     * Return object aim angle.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   284
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   285
     * @return Object aim angle
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   286
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   287
    float getAim (void) const {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   288
        return aim;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   289
    }
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   290
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   291
    /**
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   292
     * Get object direction.
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   293
     *
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   294
     * @return Unit vector to facing+aim
235
0a0c729365ee code cleanup
terom
parents: 228
diff changeset
   295
     */
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
   296
    Vector getDirection (void) const;
235
0a0c729365ee code cleanup
terom
parents: 228
diff changeset
   297
0a0c729365ee code cleanup
terom
parents: 228
diff changeset
   298
    /**
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
   299
     *  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
   300
     */
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
   301
    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
   302
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   303
    /**
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   304
     * Check if the object is alive.
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   305
     *
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   306
     * @return Is the object alive?
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
   307
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   308
    bool isAlive (void) const {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   309
        return alive;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   310
    }
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
   311
    
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
   312
    /**
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   313
     * Tells the state of the object.
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   314
     *
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   315
     * @return True if object has been destroyed.
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
   316
     */
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
   317
    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
   318
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
   319
    /**
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   320
     * Set object pivot.
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   321
     *
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   322
     * @param pivot Pivot object
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   323
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   324
    void setPivot (PhysicsObject *pivot) {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   325
        this->pivot = pivot;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   326
    }
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   327
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
   328
    /**
322
f94a5c192097 Rope fixing
ekku
parents: 321
diff changeset
   329
     * Return the pivot object pointer.
f94a5c192097 Rope fixing
ekku
parents: 321
diff changeset
   330
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   331
    PhysicsObject *getPivot (void) {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   332
        return pivot;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   333
    }
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   334
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   335
    /**
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   336
     * Compute the force that this object (as a pivot) exerts on the given object
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   337
     *
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   338
     * @param bob Othe object
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   339
     * @return Force
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   340
     */
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   341
    virtual Vector getPivotForce (void);
322
f94a5c192097 Rope fixing
ekku
parents: 321
diff changeset
   342
f94a5c192097 Rope fixing
ekku
parents: 321
diff changeset
   343
    /**
268
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   344
     * Checks if object collides with other objects
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   345
     *
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   346
     * @param obj Other PhysicsObject
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   347
     * @return Did we collide?
268
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   348
     */
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   349
    bool collides (const PhysicsObject &obj);
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   350
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   351
    /**
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   352
     * Update object in physics simulation.
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   353
     *
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   354
     * @param tick_length Length of the physics tick
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   355
     */
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 209
diff changeset
   356
    virtual void tick (TimeMS tick_length);
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   357
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   358
protected:
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   359
    /**
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   360
     * Set object shape.
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   361
     *
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   362
     * XXX: constructor
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   363
     *
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   364
     * @param shape Vector containing polygon points
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   365
     */
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   366
    void setShape(std::vector<Vector> shape) {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   367
        this->shape = shape;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   368
    }
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   369
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   370
    /**
427
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   371
     * Update object position, also updating our previous position
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   372
     *
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   373
     * @param pos new position
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   374
     */
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   375
    void setPosition (Vector pos);
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   376
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   377
    /**
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   378
     * Update current object velocity.
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   379
     *
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   380
     * @param velocity new velocity
01e77fe8c040 fix ticket:1 and make PhysicsObject setPosition/setVelocity protected
Tero Marttila <terom@fixme.fi>
parents: 423
diff changeset
   381
     */
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   382
    void setVelocity (Vector velocity) {
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   383
        this->velocity = velocity;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   384
    }
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   385
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   386
    /**
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   387
     * Reset state and disable, ready to be resume()'d again in a different place
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   388
     */
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   389
    void reset (void);
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   390
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   391
    /**
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   392
     * Resume after a reset() at the given position with a zero velocity
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   393
     */
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   394
    void resume (Vector position);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   395
};
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   396
320
cb33eca69b29 Updated PhysicsObject documentation
saiam
parents: 317
diff changeset
   397
/** Helper struct for the integration */
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   398
struct Derivative {
428
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   399
    /**
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   400
     * Velocity
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   401
     */
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   402
    Vector dx;
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   403
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   404
    /**
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   405
     * Acceleration
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   406
     */ 
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   407
    Vector dv; 
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   408
    
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   409
    Derivative () : dx(), dv() { }
712b943195a6 clean up PhysicsObject.hh a bit, make some things private
Tero Marttila <terom@fixme.fi>
parents: 427
diff changeset
   410
    Derivative (Vector dx, Vector dv) : dx(dx), dv(dv) { }
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   411
};
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   412
268
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   413
/**
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   414
 * Returns the "sign" of the cross product between given points. In
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   415
 * practice the sign of the return value tels on which side of the
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   416
 * line drawn between p1 and p2 the point p3 is.
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   417
 *
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   418
 * @param p1 Line start point
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   419
 * @param p2 Line end point
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   420
 * @param p3 Point
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   421
 * @return Variable, the sign of which tells on which side of the line p3 is.
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   422
 */
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   423
int8_t crossProduct(const Vector &p1, const Vector &p2, const Vector &p3);
0b96b88af335 Added collision detection method to PhysicsObject. Not tested.
saiam
parents: 265
diff changeset
   424
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
   425
#endif