From 83d6c17799c4d448a67ab5cdad02954282fa5c94 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 1 Nov 2008 13:33:18 +0000 Subject: server-side model loading, initial @dock function --- src/core/func.cc | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'src/core/func.cc') diff --git a/src/core/func.cc b/src/core/func.cc index 81175f8..42c46c8 100644 --- a/src/core/func.cc +++ b/src/core/func.cc @@ -18,12 +18,12 @@ namespace core Func::Registry Func::func_registry; -Func * Func::add(const char *name, FuncPtr functionptr, unsigned int flags) +Func * Func::add(const char *name, FuncPtr functionptr, bool shared) { Func *func = 0; Registry::iterator it = func_registry.find(name); if (it == func_registry.end()) { - func = new Func(name, (void *)functionptr, flags & ~Func::Game); + func = new Func(name, (void *)functionptr, shared ? Shared : 0); func_registry[std::string(name)] = func; //con_debug << "Function '" << name << "' registered." << std::endl; } else { @@ -33,12 +33,27 @@ Func * Func::add(const char *name, FuncPtr functionptr, unsigned int flags) return func; } -Func *Func::add(const char *name, GameFuncPtr gamefunctionptr, unsigned int flags) +Func *Func::add(const char *name, GameFuncPtr gamefunctionptr) { Func *func = 0; Registry::iterator it = func_registry.find(name); if (it == func_registry.end()) { - func = new Func(name, (void *)gamefunctionptr, flags | Func::Game); + func = new Func(name, (void *)gamefunctionptr, Game); + func_registry[func->name()] = func; + //con_debug << "Function '" << name << "' registered." << std::endl; + } else { + con_warn << "Function '" << name << "' already registered!" << std::endl; + func = (*it).second; + } + return func; +} + +Func *Func::add(const char *name, TargetFuncPtr targetfunctionptr) +{ + Func *func = 0; + Registry::iterator it = func_registry.find(name); + if (it == func_registry.end()) { + func = new Func(name, (void *)targetfunctionptr, Game | Target); func_registry[func->name()] = func; //con_debug << "Function '" << name << "' registered." << std::endl; } else { @@ -145,5 +160,15 @@ void Func::exec(Player *player, std::string const &args) gamefunction(player, args); } +void Func::exec(Player *player, Entity *entity) +{ + if (!(flags() & (Game | Target))) + return; + + TargetFuncPtr targetfunction = (TargetFuncPtr) func_ptr; + targetfunction(player, entity); + +} + } // namespace core -- cgit v1.2.3