src/PhysicsWorld.hh
author terom
Mon, 08 Dec 2008 22:28:51 +0000
changeset 319 9f6a838d58c4
parent 300 417183866f35
child 408 e6cfc44266af
permissions -rw-r--r--
improve input handling further, ROPE_THROW and DIG don't repeat at all now
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     1
#ifndef PHYSICS_WORLD_HH
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     2
#define PHYSICS_WORLD_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
#include <ClanLib/core.h>
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     6
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     7
#include <algorithm>
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     8
#include <functional>
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
     9
#include <cmath>
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 197
diff changeset
    10
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents: 201
diff changeset
    11
#include "Terrain.hh"          
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 197
diff changeset
    12
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    13
class PhysicsWorld;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    14
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    15
#include "PhysicsObject.hh"
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    16
#include "Vector.hh"
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents: 201
diff changeset
    17
#include "Timer.hh"
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    18
#include "Config.hh"
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    19
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    20
/**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    21
* PhysicsWorld class. PhysicsWorld contains PhysicsObjects that are
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    22
* simulated in the PhysicsWorld.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    23
*/
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    24
class PhysicsWorld : public Terrain {
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    25
    friend class PhysicsObject;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    26
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    27
private:
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    28
208
7709571e1131 Digging now uses projectiles.
saiam
parents: 205
diff changeset
    29
    
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    30
protected:
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: 208
diff changeset
    31
    std::list<PhysicsObject*> objects;
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    32
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    33
    // Contains connections between signals and slots
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    34
    CL_SlotContainer slots;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    35
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    36
    Vector dimensions;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    37
    Vector gravity;
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    38
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    39
public:
208
7709571e1131 Digging now uses projectiles.
saiam
parents: 205
diff changeset
    40
    // Someone is going to kill me for this
7709571e1131 Digging now uses projectiles.
saiam
parents: 205
diff changeset
    41
    Timer tick_timer;
7709571e1131 Digging now uses projectiles.
saiam
parents: 205
diff changeset
    42
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 197
diff changeset
    43
    PhysicsWorld(Vector gravity, Vector dimensions);
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 197
diff changeset
    44
225
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    45
    /**
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    46
     * Add object to the PhysicsWorld.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    47
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    48
     * @param object Pointer to the PhysicsObject to add.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    49
     */
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: 208
diff changeset
    50
    void addPhysicsObject(PhysicsObject *object);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    51
    
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    52
    /**
225
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    53
     * Remove the object from the PhysicsWorld.
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    54
     */
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    55
    void removePhysicsObject (PhysicsObject *po);
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    56
    
22ecb9cb9245 Rope can be drawn.
ekku
parents: 222
diff changeset
    57
    /**
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    58
     * Advance one time step in physics simulation.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    59
     */
300
417183866f35 suicide key and respawning
terom
parents: 255
diff changeset
    60
    void tick (TimeMS tick_length);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    61
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    62
    /**
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    63
     * Get current tick in physics simulation.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    64
     *
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    65
     * @return tick Current simulation tick.
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    66
     */
300
417183866f35 suicide key and respawning
terom
parents: 255
diff changeset
    67
    TickCount getTicks (void);
197
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    68
};
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    69
d9ac888de778 Hajotetaan lis??
ekku
parents:
diff changeset
    70
#endif