engine/include/ScriptManager/ScriptManager.h

121 lines
2.8 KiB
C++
Executable File

#ifndef SCRIPT_MANAGER_H_INCLUDED
#define SCRIPT_MANAGER_H_INCLUDED
//#include "sqplus.h"
#include <iostream>
#include <string>
typedef char SQChar;
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