src/proto2/GameState.hh
author terom
Tue, 18 Nov 2008 22:58:50 +0000
branchno-netsession
changeset 35 e21cfda0edde
parent 26 5685602aeb9c
child 41 ca80cd67785d
permissions -rw-r--r--
Merge from at r31:36
3
5a209a8585c9 proto p2
terom
parents:
diff changeset
     1
#ifndef GAMESTATE_HH
5a209a8585c9 proto p2
terom
parents:
diff changeset
     2
#define GAMESTATE_HH
5a209a8585c9 proto p2
terom
parents:
diff changeset
     3
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
     4
#include "Physics.hh"
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
     5
#include "Input.hh"
4
e28b28b8817c Drawer lis?tty. Pari metodia gamestateen ja dimensioniin.
ekku
parents: 3
diff changeset
     6
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents: 4
diff changeset
     7
#include <list>
22
b70d30e1b0fe all the network code is now there, although it doesn't quite work
terom
parents: 8
diff changeset
     8
#include <stdexcept>
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents: 4
diff changeset
     9
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    10
// in meters/kg
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    11
const float MAP_WIDTH = 100.0;
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    12
const float MAP_HEIGHT = 100.0;
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    13
const float MAP_GRAVITY = 9.81;
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    14
const float PLAYER_MASS = 10.0;
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    15
const float PLAYER_MOVE_FORCE = 500.0;
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    16
const float PLAYER_INITIAL_X = 50.0;
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    17
const float PLAYER_INITIAL_Y = 40.0;
22
b70d30e1b0fe all the network code is now there, although it doesn't quite work
terom
parents: 8
diff changeset
    18
26
5685602aeb9c it works \o/
terom
parents: 25
diff changeset
    19
// forward-declare GameState
5685602aeb9c it works \o/
terom
parents: 25
diff changeset
    20
class GameState;
5685602aeb9c it works \o/
terom
parents: 25
diff changeset
    21
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    22
class Player : public PhysicsObject {
24
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    23
    protected:
26
5685602aeb9c it works \o/
terom
parents: 25
diff changeset
    24
        GameState &state;
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    25
        bool visible;
26
5685602aeb9c it works \o/
terom
parents: 25
diff changeset
    26
24
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    27
    public:
3
5a209a8585c9 proto p2
terom
parents:
diff changeset
    28
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    29
        Player(GameState &state, Vector position, bool visible) : 
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    30
            PhysicsObject((PhysicsWorld &) state, PLAYER_MASS, position, Vector(0, 0)), state(state), visible(visible) { }
22
b70d30e1b0fe all the network code is now there, although it doesn't quite work
terom
parents: 8
diff changeset
    31
3
5a209a8585c9 proto p2
terom
parents:
diff changeset
    32
};
5a209a8585c9 proto p2
terom
parents:
diff changeset
    33
5a209a8585c9 proto p2
terom
parents:
diff changeset
    34
class LocalPlayer : public Player {
24
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    35
    protected:
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    36
        LocalPlayer (GameState &state, Vector pos, bool visible) : Player(state, pos, visible) { }
24
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    37
    
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    38
    public:
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    39
        virtual void handleMove (PlayerInput_Move input);
3
5a209a8585c9 proto p2
terom
parents:
diff changeset
    40
};
5a209a8585c9 proto p2
terom
parents:
diff changeset
    41
5a209a8585c9 proto p2
terom
parents:
diff changeset
    42
class RemotePlayer : public Player {
24
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    43
    protected:
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    44
        RemotePlayer (GameState &state, Vector pos, bool visible) : Player(state, pos, visible) { }
6
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents: 5
diff changeset
    45
};
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents: 5
diff changeset
    46
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    47
class GameState : public PhysicsWorld {
24
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    48
    public:
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    49
        std::list<Player*> player_list;
8
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    50
24
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    51
        // only one local player is supported
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    52
        LocalPlayer *local_player;
22
b70d30e1b0fe all the network code is now there, although it doesn't quite work
terom
parents: 8
diff changeset
    53
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    54
        GameState (void) : PhysicsWorld(Vector(0, MAP_GRAVITY), Vector(MAP_WIDTH, MAP_HEIGHT)), local_player(NULL) {
22
b70d30e1b0fe all the network code is now there, although it doesn't quite work
terom
parents: 8
diff changeset
    55
24
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    56
        }
35
e21cfda0edde Merge from at r31:36
terom
parents: 26
diff changeset
    57
       
25
af75a1894a32 simple proto *almost* works
terom
parents: 24
diff changeset
    58
        /*
af75a1894a32 simple proto *almost* works
terom
parents: 24
diff changeset
    59
         * This will return NULL if we don't have a local player - yet
af75a1894a32 simple proto *almost* works
terom
parents: 24
diff changeset
    60
         */
af75a1894a32 simple proto *almost* works
terom
parents: 24
diff changeset
    61
        LocalPlayer *getLocalPlayer (void) {
af75a1894a32 simple proto *almost* works
terom
parents: 24
diff changeset
    62
            return local_player;
24
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    63
        }
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    64
        
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    65
        void newLocalPlayer (LocalPlayer *player) {
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    66
            if (local_player)
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    67
                throw std::logic_error("newLocalPlayer called even though we already have a local player");
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    68
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    69
            player_list.push_back(player);
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    70
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    71
            local_player = player;
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    72
        }
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    73
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    74
        void newRemotePlayer (RemotePlayer *player) {
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    75
            player_list.push_back(player);
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    76
        }
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    77
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    78
        void removePlayer (Player *player) {
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    79
            player_list.remove(player);
b81cb670e6b2 the great :retab
terom
parents: 22
diff changeset
    80
        }
6
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents: 5
diff changeset
    81
};
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents: 5
diff changeset
    82
3
5a209a8585c9 proto p2
terom
parents:
diff changeset
    83
#endif