Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-02-13 18:29:55 +0000
committerStijn Buys <ingar@osirion.org>2008-02-13 18:29:55 +0000
commitee891311ccc79bbc7837caac8546aac5b9bdf80f (patch)
tree4279b0bec63d2152669b19d1f11199c56ae57b7b /src/core/func.cc
parenta65427370dfe27dfa74efb0bddd44d7ffb9552ac (diff)
camera Overview as spectator only, join works
Diffstat (limited to 'src/core/func.cc')
-rw-r--r--src/core/func.cc54
1 files changed, 49 insertions, 5 deletions
diff --git a/src/core/func.cc b/src/core/func.cc
index 9f64906..af811cd 100644
--- a/src/core/func.cc
+++ b/src/core/func.cc
@@ -16,20 +16,57 @@ namespace func
std::map<std::string, Func> registry;
+void add(const char * functionname, FuncPtr functionptr, unsigned int flags)
+{
+ std::map<std::string, Func>::iterator it = registry.find(functionname);
+ Func f;
+ if (it == registry.end()) {
+ // function does not yet exist in the registry
+ f = new Func_t();
+ registry[std::string(functionname)] = f;
+ } else {
+ f = (*it).second;
+ }
-void add(const char * functionname, Func functionptr)
+ f->name = functionname;
+ f->ptr = (void *)functionptr;
+ f->flags = flags;
+}
+
+void add(const char * functionname, GameFuncPtr gamefunctionptr, unsigned int flags)
{
- registry[std::string(functionname)] = functionptr;
+ std::map<std::string, Func>::iterator it = registry.find(functionname);
+ Func f;
+ if (it == registry.end()) {
+ // function does not yet exist in the registry
+ f = new Func_t();
+ registry[std::string(functionname)] = f;
+ } else {
+ f = (*it).second;
+ }
+
+ f->name = functionname;
+ f->ptr = (void *)gamefunctionptr;
+ f->flags = flags & func::Game;
}
void remove(const char *functionname)
{
- registry.erase(std::string(functionname));
+ std::map<std::string, Func>::iterator it = registry.find(functionname);
+ if (it != registry.end()) {
+ delete (*it).second;
+ registry.erase(std::string(functionname));
+ }
}
void remove(const std::string &functionname)
{
- registry.erase(functionname);
+ std::map<std::string, Func>::iterator it = registry.find(functionname);
+ if (it != registry.end()) {
+ delete (*it).second;
+ registry.erase(std::string(functionname));
+ }
+
}
Func find(const std::string &functionname)
@@ -43,10 +80,17 @@ Func find(const std::string &functionname)
void list()
{
+ char typeindicator;
+
std::map<std::string, Func>::iterator it;
for (it = registry.begin(); it != registry.end(); it++) {
- con_print << " " << (*it).first << std::endl;
+ if ((*it).second->flags & func::Game)
+ typeindicator = 'G';
+ else
+ typeindicator = ' ';
+ con_print << " " << typeindicator << " " << (*it).first << std::endl;
}
+
con_print << registry.size() << " registered functions" << std::endl;
}