about summary refs log tree commit diff
path: root/src/game/server/gamecontext.hpp
blob: 1c4571ebd4e48a93ce7784adc5fe0715f7c3064f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#ifndef GAME_SERVER_GAMECONTEXT_H
#define GAME_SERVER_GAMECONTEXT_H

#include "eventhandler.hpp"
#include "gamecontroller.hpp"
#include "gameworld.hpp"
#include "player.hpp"

/*
	Tick
		Game Context (GAMECONTEXT::tick)
			Game World (GAMEWORLD::tick)
				Reset world if requested (GAMEWORLD::reset)
				All entities in the world (ENTITY::tick)
				All entities in the world (ENTITY::tick_defered)
				Remove entities marked for deletion (GAMEWORLD::remove_entities)
			Game Controller (GAMECONTROLLER::tick)
			All players (PLAYER::tick)
			

	Snap
		Game Context (GAMECONTEXT::snap)
			Game World (GAMEWORLD::snap)
				All entities in the world (ENTITY::snap)
			Game Controller (GAMECONTROLLER::snap)
			Events handler (EVENT_HANDLER::snap)
			All players (PLAYER::snap)

*/
class GAMECONTEXT
{
public:
	GAMECONTEXT();
	~GAMECONTEXT();
	
	void clear();
	
	EVENTHANDLER events;
	PLAYER *players[MAX_CLIENTS];
	
	GAMECONTROLLER *controller;
	GAMEWORLD world;

	void tick();
	void snap(int client_id);
	
	// helper functions
	class CHARACTER *get_player_char(int client_id);
	
	// voting
	void start_vote(const char *desc, const char *command);
	void end_vote();
	void send_vote_set(int cid);
	void send_vote_status(int cid);
	int vote_creator;
	int64 vote_closetime;
	char vote_description[512];
	char vote_command[512];

	// helper functions
	void create_damageind(vec2 p, float angle_mod, int amount);
	void create_explosion(vec2 p, int owner, int weapon, bool bnodamage);
	void create_smoke(vec2 p);
	void create_hammerhit(vec2 p);
	void create_playerspawn(vec2 p);
	void create_death(vec2 p, int who);
	void create_sound(vec2 pos, int sound, int mask=-1);
	void create_sound_global(int sound, int target=-1);	


	enum
	{
		CHAT_ALL=-2,
		CHAT_SPEC=-1,
		CHAT_RED=0,
		CHAT_BLUE=1
	};

	// network
	void send_chat(int cid, int team, const char *text);
	void send_emoticon(int cid, int emoticon);
	void send_weapon_pickup(int cid, int weapon);
	void send_broadcast(const char *text, int cid);

};

extern GAMECONTEXT game;

// MISC stuff, move to a better place later on

extern TUNING_PARAMS tuning;
inline int cmask_all() { return -1; }
inline int cmask_one(int cid) { return 1<<cid; }
inline int cmask_all_except_one(int cid) { return 0x7fffffff^cmask_one(cid); }
inline bool cmask_is_set(int mask, int cid) { return (mask&cmask_one(cid)) != 0; }
#endif