Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: ff7ac98f8a80e305afa2739d8fc5faa03858fcac (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
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
   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/testmodelwindow.h"
#include "client/mainwindow.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);

	/// 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 MainWindow *mainwindow() {
		return client_mainwindow;
	}
	
	/// model test widget
	inline TestModelWindow *testmodelwindow() {
		return client_testmodelwindow;
	}

	/// local client sends a chat message
	inline void say(std::string const &text) {
		func_say(text);
	}
	
protected:
	/// run a client frame
	virtual void frame();

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_menu_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_inventory(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_testmodel(std::string const &args);

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

	MainWindow	*client_mainwindow;
	TestModelWindow	*client_testmodelwindow;

	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__