From ee891311ccc79bbc7837caac8546aac5b9bdf80f Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Wed, 13 Feb 2008 18:29:55 +0000 Subject: camera Overview as spectator only, join works --- src/core/func.cc | 54 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 5 deletions(-) (limited to 'src/core/func.cc') 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 registry; +void add(const char * functionname, FuncPtr functionptr, unsigned int flags) +{ + std::map::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::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::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::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::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; } -- cgit v1.2.3