118 lines
2.7 KiB
C++
118 lines
2.7 KiB
C++
#ifndef SCRIPT_MANAGER_H_INCLUDED
|
|
#define SCRIPT_MANAGER_H_INCLUDED
|
|
|
|
//#include "sqplus.h"
|
|
#include <iostream>
|
|
#include <string>
|
|
|
|
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<TFunctionBinderInterface*> BinderList;
|
|
|
|
TFunctionBinderInterface()
|
|
{
|
|
BinderList.push_back(this);
|
|
}
|
|
|
|
virtual void BindFunctions() = 0;
|
|
};
|
|
|
|
|
|
|
|
class TScriptManager : public TSerializeInterface
|
|
{
|
|
protected:
|
|
//HSQUIRRELVM virtualMachine;
|
|
std::map<std::string, TScriptInfo> FuncInfoMap;
|
|
|
|
template<typename T1,typename T2>
|
|
void RegisterFunc(T1& object, T2 method, const std::string& funcName)
|
|
{
|
|
//SqPlus::RegisterGlobal(virtualMachine, object, method, _SC(funcName.c_str()));
|
|
}
|
|
|
|
template<typename T>
|
|
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<typename T1, typename T2>
|
|
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<typename T>
|
|
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 |