src/proto2/Physics.hh
author saiam
Thu, 20 Nov 2008 21:25:09 +0000
changeset 83 cbba9729e92b
parent 79 295ecb26d8ff
child 85 351cb6b69c04
permissions -rw-r--r--
Integrointia fyssaan, jotain pikkubugausta havaittavissa.
42
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
     1
#ifndef PHYSICS_HH
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
     2
#define PHYSICS_HH
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
     3
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
     4
#include "Vector.hh"
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
     5
72
04428c5e548c Enum fix
ekku
parents: 71
diff changeset
     6
#include <vector>
83
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
     7
#include <queue>
50
9e1a6506f5a1 some rough-handed code modifications towards a newer, better, working Physics
terom
parents: 48
diff changeset
     8
#include <ClanLib/core.h>
9e1a6506f5a1 some rough-handed code modifications towards a newer, better, working Physics
terom
parents: 48
diff changeset
     9
79
295ecb26d8ff jotain mik? hajottaa kaiken
ekku
parents: 78
diff changeset
    10
typedef uint16_t TimeMS;
78
bbc21da84813 This is probably better way of representing time
saiam
parents: 77
diff changeset
    11
79
295ecb26d8ff jotain mik? hajottaa kaiken
ekku
parents: 78
diff changeset
    12
const TimeMS PHYSICS_TICK_MS = 10;
42
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
    13
72
04428c5e548c Enum fix
ekku
parents: 71
diff changeset
    14
enum TerrainType {EMPTY, DIRT, ROCK};
71
b5dbb83daa94 En takaa et k??ntyy en?? 8)
ekku
parents: 70
diff changeset
    15
50
9e1a6506f5a1 some rough-handed code modifications towards a newer, better, working Physics
terom
parents: 48
diff changeset
    16
// forward-declare
9e1a6506f5a1 some rough-handed code modifications towards a newer, better, working Physics
terom
parents: 48
diff changeset
    17
class PhysicsObject;
83
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    18
class Force;
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    19
struct Derivative;
50
9e1a6506f5a1 some rough-handed code modifications towards a newer, better, working Physics
terom
parents: 48
diff changeset
    20
42
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
    21
class PhysicsWorld {
60
26571fd9a8d1 physics is starting to work
terom
parents: 58
diff changeset
    22
    friend class PhysicsObject;
70
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    23
    
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    24
private:
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    25
    CL_Timer tick_timer;
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    26
    
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    27
protected:
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    28
    std::vector<PhysicsObject*> objects;
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    29
    Vector gravity;
75
f2c79f2d9384 added simple random map generation
nireco
parents: 74
diff changeset
    30
    Vector dimensions; //const requested
70
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    31
    
72
04428c5e548c Enum fix
ekku
parents: 71
diff changeset
    32
    std::vector<std::vector<TerrainType> > terrain;
71
b5dbb83daa94 En takaa et k??ntyy en?? 8)
ekku
parents: 70
diff changeset
    33
70
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    34
    CL_SlotContainer slots;
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    35
    
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    36
    PhysicsWorld (Vector gravity, Vector dimensions);
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    37
    
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    38
public:
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    39
    void addObject (PhysicsObject *object);
50
9e1a6506f5a1 some rough-handed code modifications towards a newer, better, working Physics
terom
parents: 48
diff changeset
    40
70
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    41
    void tick (void);
74
279788e460fd changed some tabs from Physics.hh
nireco
parents: 73
diff changeset
    42
    void generateTerrain (int seed);
279788e460fd changed some tabs from Physics.hh
nireco
parents: 73
diff changeset
    43
    bool collided (Vector oldPos, Vector newPos);
77
98dc9008d15f changed collision detection, remove old if content with new
nireco
parents: 75
diff changeset
    44
98dc9008d15f changed collision detection, remove old if content with new
nireco
parents: 75
diff changeset
    45
    TerrainType getType(Vector pos) const;
42
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
    46
};
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
    47
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
    48
class PhysicsObject {
70
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    49
protected:
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    50
    PhysicsWorld &world;
83
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    51
    
70
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    52
    float mass;
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    53
    Vector position;
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    54
    Vector velocity;
74
279788e460fd changed some tabs from Physics.hh
nireco
parents: 73
diff changeset
    55
    // Whether the object (worms mainly) is in the air 
279788e460fd changed some tabs from Physics.hh
nireco
parents: 73
diff changeset
    56
    // or firmly on the ground. Affects to physics.
279788e460fd changed some tabs from Physics.hh
nireco
parents: 73
diff changeset
    57
    bool inAir;
83
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    58
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    59
    // Force queue that is emptied on every tick
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    60
    std::queue<Force> forceq;
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    61
    Vector posAfterTick;
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    62
    Vector velAfterTick;
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    63
70
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    64
    PhysicsObject (PhysicsWorld &world, float mass, Vector position, Vector velocity);
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    65
    
79
295ecb26d8ff jotain mik? hajottaa kaiken
ekku
parents: 78
diff changeset
    66
    virtual void applyForce (Vector force, TimeMS dt);
70
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    67
    void updatePhysics (Vector position, Vector velocity);
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    68
    
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    69
private:
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    70
    void updatePosition (void);
69
309c11126949 little cleanup
saiam
parents: 66
diff changeset
    71
70
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    72
    /**
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    73
     * Use RK4 to integrate the effects of force over a time intervall.
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    74
     */
79
295ecb26d8ff jotain mik? hajottaa kaiken
ekku
parents: 78
diff changeset
    75
    void integrate(Vector force, TimeMS dt);
83
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    76
    Derivative evaluate(Vector force, TimeMS dt, Derivative &d);
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    77
    Vector acceleration(const Vector &force);
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    78
70
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    79
public:
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    80
    Vector getPosition (void);
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    81
    
a5b7499219a4 Some drafts
saiam
parents: 69
diff changeset
    82
    void tick (void);
42
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
    83
};
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
    84
83
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    85
class Force {
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    86
public:
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    87
    Vector force;
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    88
    TimeMS dt;
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    89
    
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    90
    Force() {}
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    91
    Force(Vector force, TimeMS dt) : force(force), dt(dt) {}
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    92
};
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    93
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    94
struct Derivative {
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    95
    Vector dx; // Velocity
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    96
    Vector dv; // Acceleration
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    97
};
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    98
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
    99
cbba9729e92b Integrointia fyssaan, jotain pikkubugausta havaittavissa.
saiam
parents: 79
diff changeset
   100
42
eb1a93a38cde lazy commit that breaks everything, should be a branch
terom
parents:
diff changeset
   101
#endif