engine/include/ScriptManager/ScriptManager.h
2013-01-19 20:02:34 +00:00

117 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