#ifndef SCRIPT_MANAGER_H_INCLUDED #define SCRIPT_MANAGER_H_INCLUDED //#include "sqplus.h" #include #include namespace SE { struct TScriptInfo { std::string LongName; std::string ShortDescription; std::string Description; bool Registered; TScriptInfo() : Registered(false) { } TScriptInfo(const std::string& longName, const std::string& shortDescription = "", const std::string& description = "") : LongName(longName) , ShortDescription(shortDescription) , Description(description) , Registered(false) { } }; class TFunctionBinderInterface { public: static std::vector BinderList; TFunctionBinderInterface() { BinderList.push_back(this); } virtual void BindFunctions() = 0; }; class TScriptManager : public TSerializeInterface { protected: //HSQUIRRELVM virtualMachine; std::map FuncInfoMap; template void RegisterFunc(T1& object, T2 method, const std::string& funcName) { //SqPlus::RegisterGlobal(virtualMachine, object, method, _SC(funcName.c_str())); } template void RegisterFunc(T globalFunc, const std::string& funcName) { //SqPlus::RegisterGlobal(virtualMachine, globalFunc, _SC(funcName.c_str())); } public: TScriptManager(); ~TScriptManager(); void AddFuncDescription(const std::string& shortName, TScriptInfo scriptInfo); void RunScript(const std::string& scriptCode); void BindBasicFunctions(); template void AddFunction(const std::string& shortName, TScriptInfo scriptInfo, T1& object, T2 method) { AddFuncDescription(shortName, scriptInfo); RegisterFunc(object, method, shortName); RegisterFunc(object, method, scriptInfo.LongName); FuncInfoMap[shortName].Registered = true; } template void AddFunction(const std::string& shortName, TScriptInfo scriptInfo, T globalFunc) { AddFuncDescription(shortName, scriptInfo); RegisterFunc(globalFunc, shortName); RegisterFunc(globalFunc, scriptInfo.LongName); FuncInfoMap[shortName].Registered = true; } void BindFunctionsFromObject(TFunctionBinderInterface* binderObject); void PrintRegisteredFunctionList(); void PrintFunctionInfo(const std::string& funcName); virtual void Serialize(boost::property_tree::ptree& propertyTree); }; //void SQ_Print(const SQChar *inString); //void SQ_PrintWidgetList(); //void SQ_MoveWidget(const SQChar *widgetName, float x, float y); //void SQ_PrintTextureList(); //void SQ_PrintAnimationList(); //void SQ_MoveWidgetTransformTaskTest(const SQChar *groupName, float x, float y, cardinal totalTime); } //namespace SE #endif