blob: bb76cfee9f082070f87c26d2a70334d4b2e9f06c (
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
133
134
135
136
|
/*
core/application.h
This file is part of the Osirion project and is distributed under
the terms of the GNU General Public License version 2.
*/
#ifndef __INCLUDED_CORE_APPLICATION_H__
#define __INCLUDED_CORE_APPLICATION_H__
#include "sys/sys.h"
#include "core/commandbuffer.h"
#include "core/message.h"
#include "core/netserver.h"
#include "core/netconnection.h"
#include "core/gameinterface.h"
#include "core/module.h"
namespace core
{
/// core interface for the client and server Application classes
class Application
{
public:
/// default constructor
Application();
/// default destructor
virtual ~Application();
/*----- inspectors ----------------------------------------------- */
/// the current application time, in microseconds
inline unsigned long timestamp() const { return application_timestamp; }
/// the current application time, in seconds
float time() const { return ((float)(timestamp()) / 1000.0f); }
/// true if the core is connected to a running game interface
inline bool connected() const { return (application_game && application_game->running()); }
/// return the game interface, returns 0 if the application is not connected to a game
inline GameInterface *game() { return application_game; }
/*----- mutators ------------------------------------------------- */
/// start the server or connect to remote host
void connect(std::string const &host);
/// disconnect from the game module
void disconnect();
/// load a module
Module *load(std::string const &module_name);
/*----- virtual mutators ------------------------------------------ */
/// initialize the application
virtual void init(int count, char **arguments);
/// shutdown the application
virtual void shutdown();
/// quit the application without proper shutdown
virtual void quit(int status);
/*----- notifications --------------------------------------------- */
/// sound notifications from the core to the application
virtual void notify_sound(const char * name);
/// text notifications from the core to the application
virtual void notify_message(const core::Message::Channel channel, const std::string &message);
/// connect notification
virtual void notify_connect();
/// disconnect notification
virtual void notify_disconnect();
/// zone change notification
virtual void notify_zonechange();
/// remove sound source notification
virtual void notify_remove_sound(size_t source);
/// a pointer to the current application instance
static inline Application *instance() { return application_instance; }
protected:
/// run a core frame
virtual void frame(unsigned long timestamp);
/// load cvar config
void load_config();
/// load exra config
void load_autoexec();
/// save cvar config
void save_config();
/// load command line arguments
void load_commandline(int count, char **argments);
private:
/// time the core has been running
unsigned long application_timestamp;
GameInterface *application_game;
Module *module_interactive;
static Application *application_instance;
/*-- engine functions --*/
static void func_help(std::string const &args);
static void func_quit(std::string const &args);
static void func_connect(std::string const &args);
static void func_disconnect(std::string const &args);
static void func_say(std::string const &args);
static void func_msg(std::string const &args);
static void func_load(std::string const &args);
};
/// pointer to the application
inline Application *application() { return Application::instance(); }
/// pointer to the console
inline sys::ConsoleInterface *console() { return sys::ConsoleInterface::instance(); }
/// pointer to the game interface
inline GameInterface *game() { return Application::instance()->game(); }
}
#endif // __INCLUDED_CORE_APPLICATION_H__
|