Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: 2de731d0580e79d65610c1ff57322d0fafc2704f (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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
   client/client.h
   This file is part of the Osirion project and is distributed under
   the terms and conditions of the GNU General Public License version 2
*/

#ifndef __INCLUDED_CLIENT_H__
#define __INCLUDED_CLIENT_H__

#include "core/application.h"
#include "core/extension.h"
#include "core/entity.h"
#include "client/clientext.h"
#include "client/soundext.h"
#include "client/worldview.h"
#include "render/renderext.h"

/// client part of the engine
namespace client
{

/// run the client application
void run(int count, char **arguments);

/// client application implementation
class Client : public core::Application
{
public:
	/// initialize the client
	virtual void init(int count, char **arguments);

	/// run the client
	virtual void run();

	/// shutdown the client
	virtual void shutdown();

	/// quit the client
	virtual void quit(int status);

	/// sound notifications from the core
	virtual void notify_sound(const char * name);

	/// text notifications from the core
	virtual void notify_message(const core::Message::Channel channel, const std::string &message);

	/// loading message notification
	virtual void notify_loader(const std::string &message);

	/// text notifications from the client
	void notify_message(const std::string &message);

	/// text notifications from the client
	void notify_message(const char *message);

	/// clear zone notification
	virtual void notify_zonechange();

	/// connect notification
	virtual void notify_connect();

	/// disconnect notification
	virtual void notify_disconnect();

	/// the main client widget
	inline WorldView *worldview() {
		return client_worldview;
	}

protected:
	/// run a client frame
	virtual void frame(unsigned long timestamp);

private:

	static void func_snd_restart(std::string const &args);
	static void func_r_restart(std::string const &args);
	static void func_list_ui(std::string const &args);
	static void func_ui_restart(std::string const &args);
	static void func_ui_console(std::string const &args);
	static void func_list_menu(std::string const &args);

	static void func_ui_help();

	static void func_ui(std::string const &args);
	static void func_ui_chat(std::string const &args);
	static void func_ui_chatbar(std::string const &args);
	static void func_ui_map(std::string const &args);
	static void func_ui_menu(std::string const &args);

	static void func_menu(std::string const &args);
	static void func_view(std::string const &args);

	WorldView	*client_worldview;

	unsigned long	previous_timestamp;
};

Client *client();

inline ClientExt *ext_client(const core::Entity *entity)
{
	return static_cast<ClientExt *>(entity->extension(core::Extension::Client));
}

inline SoundExt *ext_sound(const core::Entity *entity)
{
	return static_cast<SoundExt *>(entity->extension(core::Extension::Sound));
}

inline render::RenderExt *ext_render(const core::Entity *entity)
{
	return static_cast<render::RenderExt *>(entity->extension(core::Extension::Render));
}

}

#endif // __INCLUDED_CLIENT_H__