src/proto2/Physics.hh
author terom
Tue, 18 Nov 2008 22:58:50 +0000
branchno-netsession
changeset 35 e21cfda0edde
child 41 ca80cd67785d
permissions -rw-r--r--
Merge from at r31:36
35
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     1
#ifndef PHYSICS_HH
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     2
#define PHYSICS_HH
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     3
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     4
#include "Vector.hh"
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     5
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     6
#include <ClanLib/core.h>
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     7
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     8
const uint16_t PHYSICS_TICK_MS = 10;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     9
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    10
// forward-declare
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    11
class PhysicsObject;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    12
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    13
class PhysicsWorld {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    14
    friend class PhysicsObject;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    15
            
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    16
    private:
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    17
        CL_Timer tick_timer;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    18
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    19
    protected:
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    20
        std::vector<PhysicsObject*> objects;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    21
        Vector gravity;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    22
        Vector dimensions;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    23
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    24
        CL_SlotContainer slots;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    25
        
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    26
        PhysicsWorld (Vector gravity, Vector dimensions);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    27
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    28
    public:
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    29
        void addObject (PhysicsObject *object);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    30
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    31
        void tick (void);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    32
};
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    33
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    34
class PhysicsObject {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    35
    protected:
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    36
        PhysicsWorld &world;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    37
        float mass;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    38
        Vector position;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    39
        Vector velocity;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    40
    
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    41
        PhysicsObject (PhysicsWorld &world, float mass, Vector position, Vector velocity);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    42
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    43
        virtual void applyForce (Vector force, uint16_t dt);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    44
        void updatePhysics (Vector position, Vector velocity);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    45
    
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    46
    private:
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    47
        void updatePosition (void);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    48
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    49
    public:
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    50
        Vector getPosition (void);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    51
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    52
        void tick (void);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    53
};
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    54
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    55
#endif