Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/FICN/src/network/GameStateManager.h @ 413

Last change on this file since 413 was 413, checked in by scheusso, 16 years ago

still errors

File size: 1.7 KB
Line 
1//
2// C++ Interface: GameStateManager
3//
4// Description:
5//
6//
7// Author:  Oliver Scheuss, (C) 2007
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#ifndef NETWORK_GAMESTATEMANAGER_H
13#define NETWORK_GAMESTATEMANAGER_H
14
15#include <vector>
16
17#include "zlib.h"
18
19#include "Synchronisable.h"
20#include "orxonox/core/IdentifierIncludes.h"
21#include "orxonox/core/Iterator.h"
22#include "PacketManager.h"
23
24namespace network {
25
26/**
27 * This struct defines a gamestate:
28 * size: total size of the data in *data
29 * data: pointer to the data allocated in the memory
30 */
31  struct GameState{
32  int id;
33  int size;
34  unsigned char *data;
35};
36
37/**
38 * this struct defines a gamestate:
39 * compsize is the size of the compressed data
40 * normsize is the size of the uncompressed data
41 * data are the gamestates
42 */
43  struct GameStateCompressed{
44        int id; 
45        int compsize;
46        int normsize;
47        unsigned char *data;
48  };
49
50/**
51 * This Class implements a manager for gamestates:
52 * - creating snapshots of gamestates
53 * - writing gamestates to universe
54 * - diffing gamestates ?
55 *
56 * EN/DECODATION:
57 * a: last Gamestate a client has received
58 * b: new Gamestate
59 * x: diffed and compressed gamestate
60 * x=(a^b)
61 * b=(a^x)
62 * diff(a,diff(a,x))=x (hope this is correct)
63 * @author Oliver Scheuss
64*/
65class GameStateManager{
66public:
67  GameStateManager();
68  ~GameStateManager();
69  void update();
70  GameStateCompressed popGameState(int clientID);
71private:
72  GameState getSnapshot(int id);
73  GameStateCompressed encode(GameState *a, GameState *b);
74  GameState diff(GameState *a, GameState *b);
75  GameStateCompressed compress_(GameState a);
76 
77  std::vector<GameState *> clientGameState;
78  GameState reference;
79  int id;
80};
81
82}
83
84#endif
Note: See TracBrowser for help on using the repository browser.