Yosin_Game/SquirrelClassEx.cpp

2117 lines
53 KiB
C++
Raw Normal View History

2024-05-04 18:30:32 +08:00
#include <Windows.h>
#include "SquirrelClassEx.h"
//<2F><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Map
static std::map<uint64_t, ActorPtr>ActorPtrMapObject;
//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Map
static std::map<size_t, SoundPtr>SoundActorPtrMapObject;
extern std::unordered_map<std::string, std::map<int, TexturePtr>>ImageRecObject;
//ʱװList Map
std::map<SQInteger, std::string>GameAvatarList;
//װ<><D7B0>List Map
std::map<SQInteger, std::string>GameEquipmentList;
//<2F><>ͼList Map
std::map<SQInteger, std::string>GameMapList;
//<2F><><EFBFBD><EFBFBD>List Map
std::map<SQInteger, std::string>GameMonsterList;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>List Map
std::map<SQInteger, std::string>GamePassobjectList;
//<2F><>Ƶ Map
std::map<std::string, std::string>GameAudioList;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><E1BAAF>
#include "TextActorRegister.h"
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><E1BAAF>
#include "SpriteActorRegister.h"
//<2F><>Ƶ<EFBFBD><C6B5>ע<EFBFBD><EFBFBD><E1BAAF>
#include "SoundActorRegister.h"
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><E1BAAF>
#include "StageActorRegister.h"
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><E1BAAF>
#include "CanvasActorRegister.h"
//<2F><>ť<EFBFBD><C5A5>ע<EFBFBD><EFBFBD><E1BAAF>
#include "ButtonActorRegister.h"
//IMGUI<55><49>ע<EFBFBD><EFBFBD><E1BAAF>
#include "ImguiLayerActorRegister.h"
//<2F>߳<EFBFBD><DFB3><EFBFBD>ע<EFBFBD><EFBFBD><E1BAAF>
#include "ThreadRegister.h"
wchar_t* char2wchar(const char* cchar)
{
wchar_t* m_wchar;
int len = MultiByteToWideChar(CP_ACP, 0, cchar, strlen(cchar), NULL, 0);
m_wchar = new wchar_t[len + 1];
MultiByteToWideChar(CP_ACP, 0, cchar, strlen(cchar), m_wchar, len);
m_wchar[len] = '\0';
return m_wchar;
}
wchar_t* SquirrelW2W(const wchar_t* Str)
{
size_t len = 0;
char* wbuffer = (char*)(Str);
while (true)
{
if (wbuffer[len] == 0 && wbuffer[len - 1] == 0)break;
++len;
}
char* cbuffer = new char[len / 2 + 1];
int k = 0;
for (size_t i = 0; i < len; i++)
{
if (i % 2 == 0)
{
cbuffer[k] = wbuffer[i];
++k;
}
}
cbuffer[len / 2] = '\0';
wchar_t* str = char2wchar(cbuffer);
delete[]cbuffer;
return str;
}
//ԭ<><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void printfunc(HSQUIRRELVM SQ_UNUSED_ARG(v), const SQChar* s, ...)
{
va_list vl;
va_start(vl, s);
vfprintf(stdout, (char*)s, vl);
va_end(vl);
std::cout << std::endl;
}
void errorfunc(HSQUIRRELVM SQ_UNUSED_ARG(v), const SQChar* s, ...)
{
va_list vl;
va_start(vl, s);
vfprintf(stderr, (char*)s, vl);
va_end(vl);
}
//<2F><><EFBFBD><EFBFBD><ECBAAF>
SquirrelClassEx::SquirrelClassEx()
{
}
void SquirrelClassEx::LoadingListScript()
{
//<2F><>ȡʱװList
std::ifstream AvatarStream("Script/Avatar/Avatar.ylst");
nlohmann::json AvatarList = nlohmann::json::parse(AvatarStream);
AvatarStream.close();
for (nlohmann::json::iterator it = AvatarList.begin(); it != AvatarList.end(); ++it) {
std::string Path = it.value().dump();
Path = Path.substr(1, Path.size() - 2);
GameAvatarList[std::atoi(it.key().c_str())] = Path;
}
//<2F><>ȡװ<C8A1><D7B0>List
std::ifstream EquipmentStream("Script/Equipment/Equipment.ylst");
nlohmann::json EquipmentList = nlohmann::json::parse(EquipmentStream);
EquipmentStream.close();
for (nlohmann::json::iterator it = EquipmentList.begin(); it != EquipmentList.end(); ++it) {
std::string Path = it.value().dump();
Path = Path.substr(1, Path.size() - 2);
GameEquipmentList[std::atoi(it.key().c_str())] = Path;
}
//<2F><>ȡ<EFBFBD><C8A1>ͼList
std::ifstream MapStream("Script/Map/Map.ylst");
nlohmann::json MapList = nlohmann::json::parse(MapStream);
MapStream.close();
for (nlohmann::json::iterator it = MapList.begin(); it != MapList.end(); ++it) {
std::string Path = it.value().dump();
Path = Path.substr(1, Path.size() - 2);
GameMapList[std::atoi(it.key().c_str())] = Path;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>List
std::ifstream MonsterStream("Script/Monster/Monster.ylst");
nlohmann::json MonsterList = nlohmann::json::parse(MonsterStream);
MonsterStream.close();
for (nlohmann::json::iterator it = MonsterList.begin(); it != MonsterList.end(); ++it) {
std::string Path = it.value().dump();
Path = Path.substr(1, Path.size() - 2);
GameMonsterList[std::atoi(it.key().c_str())] = Path;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>List
std::ifstream PassobjectStream("Script/PassObject/PassObject.ylst");
nlohmann::json PassobjectList = nlohmann::json::parse(PassobjectStream);
PassobjectStream.close();
for (nlohmann::json::iterator it = PassobjectList.begin(); it != PassobjectList.end(); ++it) {
std::string Path = it.value().dump();
Path = Path.substr(1, Path.size() - 2);
GamePassobjectList[std::atoi(it.key().c_str())] = Path;
}
//<2F><>ȡ<EFBFBD><C8A1>ƵList
std::ifstream AudioStream("Script/Audio/Audio.ylst");
nlohmann::json AudioList = nlohmann::json::parse(AudioStream);
AudioStream.close();
for (nlohmann::json::iterator it = AudioList.begin(); it != AudioList.end(); ++it) {
std::string Path = it.value().dump();
Path = Path.substr(1, Path.size() - 2);
GameAudioList[it.key().c_str()] = Path;
}
}
//<2F><>ʼ<EFBFBD><CABC>
void SquirrelClassEx::Init()
{
//<2F><>ʼ<EFBFBD><CABC>NPK<50><4B>
npk = new NPK_M();
npk->init();
v = sq_open(4096); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>СΪ1024
sq_setprintfunc(v, printfunc, errorfunc);
sq_pushroottable(v);
sqstd_register_bloblib(v);
sqstd_register_iolib(v);
sqstd_register_systemlib(v);
sqstd_register_mathlib(v);
sqstd_register_stringlib(v);
sqstd_seterrorhandlers(v);
R_Register_Nut(v);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>Ϣ
scfprintf(stdout, _SC("%s %s (%d bits)\n"), SQUIRREL_VERSION, SQUIRREL_COPYRIGHT, (int)sizeof(SQInteger) * 8);
sqstd_dofile(v, _SST("Sqr/BaseTool/BaseTool.nut"), false, true);
//<2F><>һ<EFBFBD>μ<EFBFBD><CEBC>ؽű<D8BD>
ReloadingScript();
sqstd_dofile(v, _SST("Sqr/Run.nut"), false, true);
}
int SquirrelClassEx::Sout(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
const SQChar* OutPutBuffer;
sq_getstring(v, 2, &OutPutBuffer);
char* OutPutText = SquirrelU2W((char*)OutPutBuffer);
std::vector<std::string> Data;
Split(OutPutText, Data, "%L");
delete[]OutPutText;
if (Top != Data.size() + 1)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
size_t Fnum = Data.size();
if (Fnum > 1)Fnum -= 1;
std::string Text = "";
for (size_t i = 0; i < Fnum; i++)
{
std::string Parameter;
//<2F><>ȡֵ<C8A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ValueType = sq_gettype(v, 3 + i);
//<2F>ж<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
switch (ValueType)
{
case OT_INTEGER://int<6E><74><EFBFBD><EFBFBD>
{
SQInteger Value;
sq_getinteger(v, 3 + i, &Value);
Parameter = std::to_string(Value);
break;
}
case OT_FLOAT://float<61><74><EFBFBD><EFBFBD>
{
FLOAT Value;
sq_getfloat(v, 3 + i, &Value);
std::ostringstream oss;
oss << Value;
std::string str(oss.str());
Parameter = str;
break;
}
case OT_BOOL://bool<6F><6C><EFBFBD><EFBFBD>
{
SQBool Value;
sq_getbool(v, 3 + i, &Value);
switch (Value)
{
case true:
Parameter = "true";
break;
case false:
Parameter = "false";
break;
}
//Parameter = std::to_string(Value);
break;
}
case OT_STRING://string<6E><67><EFBFBD><EFBFBD>
{
const SQChar* Value;
sq_getstring(v, 3 + i, &Value);
char* str = SquirrelU2W((char*)Value);
Parameter = str;
delete[]str;
break;
}
default:
Parameter = " ";
break;
}
Text += Data[i];
Text += Parameter;
}
std::cout << Text << std::endl;
return 0;
}
int SquirrelClassEx::Error(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
const SQChar* OutPutBuffer;
sq_getstring(v, 2, &OutPutBuffer);
char* OutPutText = SquirrelU2W((char*)OutPutBuffer);
std::vector<std::string> Data;
Split(OutPutText, Data, "%L");
delete[]OutPutText;
if (Top != Data.size() + 1)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
size_t Fnum = Data.size();
if (Fnum > 1)Fnum -= 1;
std::string Text = "";
for (size_t i = 0; i < Fnum; i++)
{
std::string Parameter;
//<2F><>ȡֵ<C8A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ValueType = sq_gettype(v, 3 + i);
//<2F>ж<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
switch (ValueType)
{
case OT_INTEGER://int<6E><74><EFBFBD><EFBFBD>
{
SQInteger Value;
sq_getinteger(v, 3 + i, &Value);
Parameter = std::to_string(Value);
break;
}
case OT_FLOAT://float<61><74><EFBFBD><EFBFBD>
{
FLOAT Value;
sq_getfloat(v, 3 + i, &Value);
std::ostringstream oss;
oss << Value;
std::string str(oss.str());
Parameter = str;
break;
}
case OT_BOOL://bool<6F><6C><EFBFBD><EFBFBD>
{
SQBool Value;
sq_getbool(v, 3 + i, &Value);
switch (Value)
{
case true:
Parameter = "true";
break;
case false:
Parameter = "false";
break;
}
//Parameter = std::to_string(Value);
break;
}
case OT_STRING://string<6E><67><EFBFBD><EFBFBD>
{
const SQChar* Value;
sq_getstring(v, 3 + i, &Value);
char* str = SquirrelU2W((char*)Value);
Parameter = str;
delete[]str;
break;
}
default:
Parameter = " ";
break;
}
Text += Data[i];
Text += Parameter;
}
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetConsoleTextAttribute(hCon, FOREGROUND_RED); //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
std::cout << "[Squirrel Error] : " << Text << std::endl;
return 0;
}
char* SquirrelClassEx::U8ToUnicode(const char* szU8)
{
//UTF8 to Unicode
//Ԥת<D4A4><D7AA><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>Ĵ<EFBFBD>С
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>Ҫ<EFBFBD><D2AA>'\0'<27><><EFBFBD><EFBFBD><EFBFBD>ռ䣬MultiByteToWideChar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'\0'<27>ռ<EFBFBD>
wchar_t* wszString = new wchar_t[wcsLen + 1];
//ת<><D7AA>
::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'\0'
wszString[wcsLen] = '\0';
char* m_char;
int len = WideCharToMultiByte(CP_ACP, 0, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
m_char = new char[len + 1];
WideCharToMultiByte(CP_ACP, 0, wszString, wcslen(wszString), m_char, len, NULL, NULL);
delete[]wszString;
m_char[len] = '\0';
return m_char;
}
char* SquirrelClassEx::SquirrelU2W(const char* Str)
{
size_t len = 0;
char* wbuffer = (char*)(Str);
while (true)
{
if (wbuffer[len] == 0 && wbuffer[len - 1] == 0)break;
++len;
}
char* cbuffer = new char[len + 1];
for (size_t i = 0; i < len; i++)
{
cbuffer[i] = wbuffer[i];
//std::cout << std::hex << (int)cbuffer[i] << std::endl;
}
cbuffer[len] = '\0';
char* Text = U8ToUnicode(cbuffer);
//std::cout << Text << std::endl;
delete[]cbuffer;
return Text;
}
void SquirrelClassEx::Split(const std::string& src, std::vector<std::string>& dest, const std::string& separator)
{
std::string str = src;
std::string substring;
std::string::size_type start = 0, index;
dest.clear();
index = str.find_first_of(separator, start);
do
{
if (index != std::string::npos)
{
substring = str.substr(start, index - start);
dest.push_back(substring);
start = index + separator.size();
index = str.find(separator, start);
if (start == std::string::npos) break;
}
} while (index != std::string::npos);
//the last part
substring = str.substr(start);
dest.push_back(substring);
}
void SquirrelClassEx::RegisterNutApi(const SQChar* funcName, void* funcAddr, HSQUIRRELVM v)
{
sq_pushroottable(v);
sq_pushstring(v, funcName, -1);
sq_newclosure(v, (SQFUNCTION)funcAddr, 0);
sq_newslot(v, -3, false);
sq_poptop(v);
}
TexturePtr SquirrelClassEx::GetTexturePtrByImg(const std::string ImgPath, const int Frame) {
if (ImageRecObject.count(ImgPath) && ImageRecObject[ImgPath].count(Frame)) {
return ImageRecObject[ImgPath][Frame];
}
else {
IMG* img = npk->ReadNpkTable(ImgPath);
DWORD Height = img->lp_lplist[Frame].Height;
DWORD Width = img->lp_lplist[Frame].Width;
BYTE* Data = img->lp_lplist[Frame].PNGdata;
BinaryData data = { ((void*)Data) ,Height * Width * 4 };
TexturePtr t = new Texture;
t->Load(PixelSize(Width, Height), data, PixelFormat::Bpp32BGRA);
t->SetUserData(&img->lp_lplist[Frame]);
ImageRecObject[ImgPath][Frame] = t;
return t;
}
}
void SquirrelClassEx::ReleaseTextureByImg(const std::string ImgPath)
{
IMG* img = npk->ReadNpkTable(ImgPath);
for (size_t i = 0; i < img->png_sum; i++)
{
std::string RealTextureName = ImgPath;
ImageRecObject.erase(RealTextureName);
}
}
std::map<std::string, std::string> FileFirst;
std::map<std::string, std::string> FileLast;
void ReloadingSquirrelScript(const TCHAR* directory)
{
WIN32_FIND_DATA fileInfo;
TCHAR buffer[MAX_PATH];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
_tcscpy_s(buffer, directory);
_tcscat_s(buffer, _T("\\*.*"));
// <20><><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>/Ŀ¼
HANDLE hFind = FindFirstFile(buffer, &fileInfo);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
// <20>ų<EFBFBD> "." <20><> ".."
if (_tcscmp(fileInfo.cFileName, _T(".")) != 0 && _tcscmp(fileInfo.cFileName, _T("..")) != 0)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
_tcscpy_s(buffer, directory);
_tcscat_s(buffer, _T("\\"));
_tcscat_s(buffer, fileInfo.cFileName);
ReloadingSquirrelScript(buffer);
}
else {
char output[1024];
sprintf(output, "%ws\\%ws", directory, fileInfo.cFileName);
std::string path = output;
if (path.find(".nut") != std::string::npos && path.find("Run.nut") == std::string::npos) {
std::replace(path.begin(), path.end(), '\\', '/');
std::fstream F;
F.open(path,std::ios::in);
std::stringstream ContentStringStream;
ContentStringStream << F.rdbuf();
/*while (!F.eof())
{
F >> ContentString;
}*/
std::string ContentString(ContentStringStream.str());
F.close();
if (ContentString.find("extends") != std::string::npos) {
FileLast[path] = ContentString;
}
else {
FileFirst[path] = ContentString;
}
//sqstd_dofile(v, _SST(path.c_str()), false, true);
}
}
}
} while (FindNextFile(hFind, &fileInfo));
FindClose(hFind);
}
/*
sq_pushroottable(v);
sq_pushstring(v, _SST("PushReloadingNameToRootTab"), -1);
sq_get(v, -2);
sq_pushroottable(v);
sq_pushstring(v, _SST(path.c_str()), -1);
sq_call(v, 2, 0, 1);
sq_pop(v, 2);
*/
}
SQInteger SquirrelClassEx::ReloadingScript()
{
ReloadingSquirrelScript(L"Sqr");
std::map<std::string, std::string>FailMap;
for (auto it = FileFirst.begin(); it != FileFirst.end(); it++) {
std::string Sourcename = it->first;
std::string ContentString = it->second;
if (SQ_SUCCEEDED(sq_compilebuffer(v, _SST(ContentString.c_str()), ContentString.length(), _SST(Sourcename.c_str()), true))) {
sq_pushroottable(v);
sq_call(v, 1, 1, 1);
sq_pop(v, 1);
};
}
for (auto it = FileLast.begin(); it != FileLast.end(); it++) {
std::string Sourcename = it->first;
std::string ContentString = it->second;
if (SQ_SUCCEEDED(sq_compilebuffer(v, _SST(ContentString.c_str()), ContentString.length(), _SST(Sourcename.c_str()), true))) {
sq_pushroottable(v);
if (SQ_FAILED(sq_call(v, 1, 1, 0))) {
FailMap[Sourcename] = ContentString;
};
sq_pop(v, 1);
};
}
while (FailMap.size() > 0)
{
std::map<std::string, std::string>FailMapBuffer;
for (auto it = FailMap.begin(); it != FailMap.end(); it++) {
std::string Sourcename = it->first;
std::string ContentString = it->second;
if (SQ_SUCCEEDED(sq_compilebuffer(v, _SST(ContentString.c_str()), ContentString.length(), _SST(Sourcename.c_str()), true))) {
sq_pushroottable(v);
if (SQ_FAILED(sq_call(v, 1, 1, 1))) {
FailMapBuffer[Sourcename] = ContentString;
};
sq_pop(v, 1);
};
}
FailMap.clear();
if (FailMapBuffer.size() > 0) {
for (auto it = FailMapBuffer.begin(); it != FailMapBuffer.end(); it++) {
std::string Sourcename = it->first;
std::string ContentString = it->second;
FailMap[Sourcename] = ContentString;
}
}
}
return 0;
}
SQInteger SquirrelClassEx::Exit(HSQUIRRELVM v)
{
Application::GetInstance().Quit();
return 0;
}
SQInteger SquirrelClassEx::Cmd(HSQUIRRELVM v)
{
const SQChar* Command;
sq_getstring(v, 2, &Command);
system((char*)Command);
return 0;
}
//<2F><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
static SQInteger String_Replace(HSQUIRRELVM v)
{
const SQChar* F_String;
sq_getstring(v, 2, &F_String);
const SQChar* B_String;
sq_getstring(v, 3, &B_String);
const SQChar* R_String;
sq_getstring(v, 4, &R_String);
std::string Fstring = (char*)F_String;
std::string Bstring = (char*)B_String;
std::string Rstring = (char*)R_String;
Fstring.replace(Fstring.find(Bstring), Bstring.length(), Rstring);
sq_pushstring(v, _SST(Fstring.c_str()), -1);
return 1;
}
//Nut<75>հ<EFBFBD><D5B0>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
static SQInteger ReleaseTextureByImg_n(HSQUIRRELVM v)
{
std::vector<std::string> ImgList;
sq_pushnull(v); // null iterator
while (SQ_SUCCEEDED(sq_next(v, 2)))
{
const SQChar* path;
sq_getstring(v, -1, &path);
ImgList.push_back((char*)path);
//<2F><><EFBFBD><EFBFBD>-1<><31>ֵ<EFBFBD><D6B5>-2<>Ǽ<EFBFBD>
sq_pop(v, 2); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
}
sq_pop(v, 1);
for (auto it = ImgList.begin(); it != ImgList.end(); ++it) {
std::string Iname = *it;
ImageRecObject.erase(Iname);
//SquirrelClassEx::ReleaseTextureByImg(Iname);
}
return 0;
}
//<2F><>ȡʱװ·<D7B0><C2B7>ByʱװID
static SQInteger GetAvatarPathByIndex()
{
SQInteger Index;
sq_getinteger(v, 2, &Index);
if (GameAvatarList.count(Index)) {
sq_pushstring(v, _SST(GameAvatarList[Index].c_str()), -1);
}
else {
sq_pushnull(v);
}
return 1;
}
//<2F><>ȡװ<C8A1><D7B0>·<EFBFBD><C2B7>Byװ<79><D7B0>ID
static SQInteger GetEquipmentPathByIndex()
{
SQInteger Index;
sq_getinteger(v, 2, &Index);
if (GameEquipmentList.count(Index)) {
sq_pushstring(v, _SST(GameEquipmentList[Index].c_str()), -1);
}
else {
sq_pushnull(v);
}
return 1;
}
//<2F><>ȡ<EFBFBD><C8A1>ͼ·<CDBC><C2B7>By<42><79>ͼID
static SQInteger GetMapPathByIndex()
{
SQInteger Index;
sq_getinteger(v, 2, &Index);
if (GameMapList.count(Index)) {
sq_pushstring(v, _SST(GameMapList[Index].c_str()), -1);
}
else {
sq_pushnull(v);
}
return 1;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>·<EFBFBD><C2B7>By<42><79><EFBFBD><EFBFBD>ID
static SQInteger GetMonsterPathByIndex()
{
SQInteger Index;
sq_getinteger(v, 2, &Index);
if (GameMonsterList.count(Index)) {
sq_pushstring(v, _SST(GameMonsterList[Index].c_str()), -1);
}
else {
sq_pushnull(v);
}
return 1;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>By<42><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
static SQInteger GetPassobjectPathByIndex()
{
SQInteger Index;
sq_getinteger(v, 2, &Index);
if (GamePassobjectList.count(Index)) {
sq_pushstring(v, _SST(GamePassobjectList[Index].c_str()), -1);
}
else {
sq_pushnull(v);
}
return 1;
}
//<2F><>ȡ<EFBFBD><C8A1>Ƶ·<C6B5><C2B7>By<42><79>ƵID
static SQInteger GetAudioPathByIndex()
{
const SQChar* Index;
sq_getstring(v, 2, &Index);
if (GameAudioList.count((char*)Index)) {
sq_pushstring(v, _SST(GameAudioList[(char*)Index].c_str()), -1);
}
else {
sq_pushnull(v);
}
return 1;
}
//Ѱ<><D1B0><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
static SQInteger String_Find_Last()
{
const SQChar* F_String;
sq_getstring(v, 2, &F_String);
const SQChar* R_String;
sq_getstring(v, 4, &R_String);
std::string Fstring = (char*)F_String;
std::string Rstring = (char*)R_String;
SQInteger Index = Fstring.find_last_of(Rstring);
sq_pushinteger(v, Index);
return 1;
}
void SquirrelClassEx::RunSceneScript(std::string FuncName, SquirrelStagePtr scene)
{
//std::cout << "ջ<>ռ<EFBFBD><D5BC><EFBFBD>С: " << sq_gettop(v) << std::endl;
sq_pushroottable(v);
sq_pushstring(v, _SST(FuncName.c_str()), -1);
sq_get(v, -2);
sq_pushroottable(v);
sq_pushinteger(v, scene->GetObjectID());
sq_call(v, 2, 0, 1);
sq_pop(v, 2);
}
void SquirrelClassEx::RunSceneScript(std::string FuncName, SquirrelStagePtr scene,SQInteger dt)
{
//std::cout << "ջ<>ռ<EFBFBD><D5BC><EFBFBD>С: " << sq_gettop(v) << std::endl;
sq_pushroottable(v);
sq_pushstring(v, _SST(FuncName.c_str()), -1);
sq_get(v, -2);
sq_pushroottable(v);
sq_pushinteger(v, scene->GetObjectID());
sq_pushinteger(v, dt);
sq_call(v, 3, 0, 1);
sq_pop(v, 2);
}
void SquirrelClassEx::RunSceneScript(std::string FuncName, SquirrelStagePtr scene, SQFloat dt)
{
sq_pushroottable(v);
sq_pushstring(v, _SST(FuncName.c_str()), -1);
sq_get(v, -2);
sq_pushroottable(v);
sq_pushinteger(v, scene->GetObjectID());
sq_pushfloat(v, dt);
sq_call(v, 3, 0, 1);
sq_pop(v, 2);
}
void SquirrelClassEx::RunSceneScript(std::string FuncName, SquirrelTownStagePtr scene)
{
//std::cout << "ջ<>ռ<EFBFBD><D5BC><EFBFBD>С: " << sq_gettop(v) << std::endl;
sq_pushroottable(v);
sq_pushstring(v, _SST(FuncName.c_str()), -1);
sq_get(v, -2);
sq_pushroottable(v);
sq_pushinteger(v, scene->GetObjectID());
sq_call(v, 2, 0, 1);
sq_pop(v, 2);
}
void SquirrelClassEx::RunUpdateScript(std::string FuncName, SQInteger ObjectIdx)
{
//std::cout << "ջ<>ռ<EFBFBD><D5BC><EFBFBD>С: " << sq_gettop(v) << std::endl;
sq_pushroottable(v);
sq_pushstring(v, _SST(FuncName.c_str()), -1);
sq_get(v, -2);
sq_pushroottable(v);
sq_pushinteger(v, ObjectIdx);
sq_call(v, 2, 0, 1);
sq_pop(v, 2);
}
void SquirrelClassEx::RunUpdateScript(std::string FuncName, std::string string)
{
sq_pushroottable(v);
sq_pushstring(v, _SST(FuncName.c_str()), -1);
sq_get(v, -2);
sq_pushroottable(v);
sq_pushstring(v, _SST(string.c_str()),-1);
sq_call(v, 2, 0, 1);
sq_pop(v, 2);
}
void SquirrelClassEx::RunUpdateScript(std::string FuncName, SQInteger ObjectIdx,SQInteger Buf)
{
//std::cout << "ջ<>ռ<EFBFBD><D5BC><EFBFBD>С: " << sq_gettop(v) << std::endl;
sq_pushroottable(v);
sq_pushstring(v, _SST(FuncName.c_str()), -1);
sq_get(v, -2);
sq_pushroottable(v);
sq_pushinteger(v, ObjectIdx);
sq_pushinteger(v, Buf);
sq_call(v, 3, 0, 1);
sq_pop(v, 2);
}
void SquirrelClassEx::RunUpdateScript(std::string FuncName, SQInteger ObjectIdx, SQInteger Buf, SQInteger Buf2)
{
sq_pushroottable(v);
sq_pushstring(v, _SST(FuncName.c_str()), -1);
sq_get(v, -2);
sq_pushroottable(v);
sq_pushinteger(v, ObjectIdx);
sq_pushinteger(v, Buf);
sq_pushinteger(v, Buf2);
sq_call(v, 3, 0, 1);
sq_pop(v, 2);
}
void SquirrelClassEx::RunUpdateScriptPlayer(std::string FuncName, SQInteger ObjectIdx, SQFloat Buf)
{
sq_pushroottable(v);
sq_pushstring(v, _SST(FuncName.c_str()), -1);
sq_get(v, -2);
sq_pushroottable(v);
sq_pushinteger(v, ObjectIdx);
sq_pushfloat(v, Buf);
sq_call(v, 3, 0, 1);
sq_pop(v, 2);
}
void SquirrelClassEx::PushLayerActorPtrToMap(LayerActorPtr Ptr) {
ActorPtrMapObject[Ptr->GetObjectID()] = Ptr;
}
static SQInteger RGBA(HSQUIRRELVM v)
{
SQInteger R;
sq_getinteger(v, 2, &R);
SQInteger G;
sq_getinteger(v, 3, &G);
SQInteger B;
sq_getinteger(v, 4, &B);
SQInteger A;
sq_getinteger(v, 5, &A);
SQInteger _Color = ((R & 0xff) << 24) + ((G & 0xff) << 16) + ((B & 0xff) << 8)
+ (A & 0xff);
sq_pushinteger(v, _Color);
return 1;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
static ActorPtr GetActorObjectByMap(const size_t Hash_Name) {
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Map
if (ActorPtrMapObject.count(Hash_Name))return ActorPtrMapObject[Hash_Name];
return nullptr;
}
//<2F><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>
static SQInteger ReleaseActor(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Map
if (ActorPtrMapObject.count(ActorUUID)) {
ActorPtrMapObject.erase(ActorUUID);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
struct SquirrelClassObjectAbli
{
int Id;
};
static SQInteger _file_releasehook(SQUserPointer p, SQInteger SQ_UNUSED_ARG(size))
{
SquirrelClassObjectAbli* Abli = (SquirrelClassObjectAbli*)p;
std::cout << "C++<2B><><EFBFBD><EFBFBD>: " << Abli->Id << std::endl;
std::cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><EFBFBD>ͷ<EFBFBD>" << std::endl;
delete Abli;
return 0;
}
//ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Register_Destruction(HSQUIRRELVM v)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SQInteger Idx;
sq_getinteger(v, 2, &Idx);
SquirrelClassObjectAbli* Abli = new SquirrelClassObjectAbli();
Abli->Id = Idx;
sq_setinstanceup(v, 3, Abli);
sq_setreleasehook(v, 3, _file_releasehook);
return 0;
}
int TestCallC(HSQUIRRELVM v)
{
//sq_newarray(v, 0);
//const wchar_t* str = _SST("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
//for (size_t i = 0; i < 5; i++)
//{
// sq_pushstring(v, str, -1);
// sq_arrayappend(v, -2);
//}
/*
sq_pushnull(v); // null iterator
while (SQ_SUCCEEDED(sq_next(v, 2)))
{
const SQChar* path;
sq_getstring(v, -1, &path);
std::cout << (char*)path << std::endl;
//<2F><><EFBFBD><EFBFBD>-1<><31>ֵ<EFBFBD><D6B5>-2<>Ǽ<EFBFBD>
sq_pop(v, 2); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
}
sq_pop(v, 1);
sq_pushnull(v); // null iterator
while (SQ_SUCCEEDED(sq_next(v, 3)))
{
SQInteger idx;
sq_getinteger(v, -1, &idx);
std::cout << idx << std::endl;
//<2F><><EFBFBD><EFBFBD>-1<><31>ֵ<EFBFBD><D6B5>-2<>Ǽ<EFBFBD>
sq_pop(v, 2); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
}
sq_pop(v, 1);
*/
//Application::GetInstance().Quit();
return 0;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Create_BaseAct(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
ActorPtr Act = new Actor();
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UUID
uint64_t UUID = Act->GetObjectID();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD>
ActorPtrMapObject[UUID] = Act;
sq_pushinteger(v, UUID);
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Create_CameraObjectAct(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
SquirrelCameraPtr Act = new SquirrelCamera();
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UUID
uint64_t UUID = Act->GetObjectID();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD>
ActorPtrMapObject[UUID] = Act;
sq_pushinteger(v, UUID);
return 1;
}
//<2F><><EFBFBD><EFBFBD>RotateAnimotion <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
static SQInteger Set_RotateAnimotion(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQInteger Duration;
sq_getinteger(v, 3, &Duration);
SQFloat Rotation;
sq_getfloat(v, 4, &Rotation);
//ͨ<><CDA8>ʱ<EFBFBD><CAB1><EFBFBD>ͽǶ<CDBD><C7B6><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
auto rotate_by = animation::RotateBy(Duration, Rotation);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
rotate_by.Loops(-1);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->StartAnimation(rotate_by);
sq_pushbool(v,true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD><EFBFBD>ê<EFBFBD><C3AA>
static SQInteger SetActorAnchor(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQFloat X_Anchor;
sq_getfloat(v, 3, &X_Anchor);
SQFloat Y_Anchor;
sq_getfloat(v, 4, &Y_Anchor);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->SetAnchor(X_Anchor, Y_Anchor);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
static SQInteger SetActorXPos(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQFloat Xpos;
sq_getfloat(v, 3, &Xpos);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->SetPositionX(Xpos);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD>
static SQInteger SetActorYPos(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQFloat Ypos;
sq_getfloat(v, 3, &Ypos);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->SetPositionY(Ypos);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD>ý<EFBFBD>ɫ<EFBFBD><C9AB>Ⱦ<EFBFBD>߿<EFBFBD>
static SQInteger SetActorShowBorder(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQBool Type;
sq_getbool(v, 3, &Type);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->ShowBorder(Type);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><>ȡX<C8A1><58><EFBFBD><EFBFBD>
static SQInteger GetActorXPos(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
sq_pushfloat(v, Act->GetPositionX());
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><>ȡY<C8A1><59><EFBFBD><EFBFBD>
static SQInteger GetActorYPos(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
sq_pushfloat(v, Act->GetPositionY());
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger SetActorPosition(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQFloat Xpos;
sq_getfloat(v, 3, &Xpos);
SQFloat Ypos;
sq_getfloat(v, 4, &Ypos);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->SetPosition(Xpos, Ypos);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
static SQInteger SetActorScale(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQFloat Xrate;
sq_getfloat(v, 3, &Xrate);
SQFloat Yrate;
sq_getfloat(v, 4, &Yrate);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->SetScale(Xrate, Yrate);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD><EFBFBD>Z<EFBFBD><5A><EFBFBD>
static SQInteger SetActorSetZOrder(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQInteger Z;
sq_getinteger(v, 3, &Z);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->SetZOrder(Z);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><>ȡZ<C8A1><5A><EFBFBD>
static SQInteger GetActorSetZOrder(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQInteger Z;
sq_getinteger(v, 3, &Z);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->GetZOrder();
sq_pushinteger(v, Act->GetZOrder());
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
static SQInteger GetActorWidth(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
SQFloat WidthValue = Act->GetWidth();
sq_pushfloat(v, WidthValue);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><>ȡ<EFBFBD>߶<EFBFBD>
static SQInteger GetActorHeight(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
SQFloat HeightValue = Act->GetHeight();
sq_pushfloat(v, HeightValue);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
static SQInteger GetActorName(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
std::string ActName = Act->GetName();
sq_pushstring(v, (SQChar*)ActName.c_str(), -1);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger SetActorName(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
const SQChar* OutPutBuffer;
sq_getstring(v, 3, &OutPutBuffer);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->SetName((char*)OutPutBuffer);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>
static SQInteger SetActorOpacity(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQFloat Opacity;
sq_getfloat(v, 3, &Opacity);
ActorPtr Act = GetActorObjectByMap(ActorUUID);
if (Act) {
Act->SetOpacity(Opacity);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
static SQInteger SetActorChild(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger gFActor;
sq_getinteger(v, 2, &gFActor);
SQInteger gCActor;
sq_getinteger(v, 3, &gCActor);
ActorPtr FActor = GetActorObjectByMap(gFActor);
ActorPtr CActor = GetActorObjectByMap(gCActor);
if (FActor && CActor) {
FActor->AddChild(CActor);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><>ȡ<EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>ByName
static SQInteger GetChildByName(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger gFActor;
sq_getinteger(v, 2, &gFActor);
ActorPtr FActor = GetActorObjectByMap(gFActor);
const SQChar* OutPutBuffer;
sq_getstring(v, 3, &OutPutBuffer);
//<2F>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>New<65><77>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
char* OutPutText = SquirrelClassEx::SquirrelU2W((char*)OutPutBuffer);
std::string Name = (char*)OutPutText;
//<2F><><EFBFBD><EFBFBD>New<65><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
delete[]OutPutText;
if (FActor) {
ActorPtr CAct = FActor->GetChild(Name);
if (CAct) {
sq_pushinteger(v, CAct->GetObjectID());
}
else sq_pushnull(v);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20>Ƴ<EFBFBD><C6B3>Ӷ<EFBFBD><D3B6><EFBFBD>
static SQInteger RemoveActorChild(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger gFActor;
sq_getinteger(v, 2, &gFActor);
SQInteger gCActor;
sq_getinteger(v, 3, &gCActor);
ActorPtr FActor = GetActorObjectByMap(gFActor);
ActorPtr CActor = GetActorObjectByMap(gCActor);
if (FActor && CActor) {
FActor->RemoveChild(CActor);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD>ô<EFBFBD>С
static SQInteger SetSize(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger gActor;
sq_getinteger(v, 2, &gActor);
SQFloat gXsize;
sq_getfloat(v, 3, &gXsize);
SQFloat gYsize;
sq_getfloat(v, 4, &gYsize);
ActorPtr Actor = GetActorObjectByMap(gActor);
if (Actor) {
Actor->SetSize(gXsize, gYsize);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
static SQInteger SetRotate(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger gActor;
sq_getinteger(v, 2, &gActor);
SQFloat gRotation;
sq_getfloat(v, 3, &gRotation);
ActorPtr Actor = GetActorObjectByMap(gActor);
if (Actor) {
Actor->SetRotation(gRotation);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger RemoveActorParent(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger gCActor;
sq_getinteger(v, 2, &gCActor);
ActorPtr CActor = GetActorObjectByMap(gCActor);
if ( CActor) {
CActor->RemoveFromParent();
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//Actor <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger GetActorParent(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger gCActor;
sq_getinteger(v, 2, &gCActor);
ActorPtr CActor = GetActorObjectByMap(gCActor);
if (CActor) {
SQInteger F = CActor->GetParent()->GetObjectID();
sq_pushinteger(v, F);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F>ж<EFBFBD>Key<65><79><EFBFBD><EFBFBD>
static SQInteger Key_Pressed(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger Type;
sq_getinteger(v, 2, &Type);
SQInteger Key;
sq_getinteger(v, 3, &Key);
Input& input = Input::GetInstance();
//<2F>ж<EFBFBD><D0B6><EFBFBD> <20><><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģʽ
bool KeyPressed;
switch (Type)
{
case 0:
KeyPressed = input.WasPressed((MouseButton)Key);
break;
case 1:
KeyPressed = input.WasPressed((KeyCode)Key);
break;
default:
break;
}
sq_pushbool(v, KeyPressed);
return 1;
}
//<2F>ж<EFBFBD>Key<65><79><EFBFBD><EFBFBD>
static SQInteger Key_Is_Down(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger Type;
sq_getinteger(v, 2, &Type);
SQInteger Key;
sq_getinteger(v, 3, &Key);
Input& input = Input::GetInstance();
//<2F>ж<EFBFBD><D0B6><EFBFBD> <20><><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģʽ
bool KeyPressed;
switch (Type)
{
case 0:
KeyPressed = input.IsDown((MouseButton)Key);
break;
case 1:
KeyPressed = input.IsDown((KeyCode)Key);
break;
default:
break;
}
sq_pushbool(v, KeyPressed);
return 1;
}
//<2F>ж<EFBFBD>Key<65><79>̧<EFBFBD><CCA7>
static SQInteger Key_WasReleased(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger Type;
sq_getinteger(v, 2, &Type);
SQInteger Key;
sq_getinteger(v, 3, &Key);
Input& input = Input::GetInstance();
//<2F>ж<EFBFBD><D0B6><EFBFBD> <20><><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģʽ
bool KeyPressed;
switch (Type)
{
case 0:
KeyPressed = input.WasReleased((MouseButton)Key);
break;
case 1:
KeyPressed = input.WasReleased((KeyCode)Key);
break;
default:
break;
}
sq_pushbool(v, KeyPressed);
return 1;
}
//ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Sync_CursorPos(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
//<2F><>ȡ"<22><><EFBFBD><EFBFBD>"<22><><EFBFBD><EFBFBD>
SQUserPointer gCursor;
sq_getuserpointer(v, 2, &gCursor);
//ת<><D7AA>Actor<6F><72>
Actor* Cursor = (Actor*)gCursor;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Cursor->GetParent()) {
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
Input& input = Input::GetInstance();
//<2F><><EFBFBD><EFBFBD>"<22><><EFBFBD><EFBFBD>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Cursor->SetPosition(input.GetMousePos());
}
return 0;
}
extern Cursor* Mouse_Object;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger SetCursor_Task(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
const SQChar* Img;
sq_getstring(v, 2, &Img);
SQInteger Frame;
sq_getinteger(v, 3, &Frame);
TexturePtr T = SquirrelClassEx::GetTexturePtrByImg((char*)Img, Frame);
Mouse_Object->SetFrame(T);
return 0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
static SQInteger Get_Cursor(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
uint32_t ObjectId = Mouse_Object->GetObjectID();
//<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!ActorPtrMapObject.count(ObjectId)) {
Mouse_Object->Retain();
ActorPtrMapObject[ObjectId] = Mouse_Object;
}
sq_pushinteger(v, ObjectId);
return 1;
}
//<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
static SQInteger Create_Layer(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
//const SQChar* gLayer;
//sq_getstring(v, 2, &gLayer);
////<2F>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>New<65><77>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
//char* gLayerbuf = SquirrelClassEx::SquirrelU2W((char*)gLayer);
//std::string Layer = gLayerbuf;
////<2F><><EFBFBD><EFBFBD>New<65><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
//delete[]gLayerbuf;
//<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LayerActorPtr MouseUiLayer = new LayerActor();
uint32_t ObjectId = MouseUiLayer->GetObjectID();
ActorPtrMapObject[ObjectId] = MouseUiLayer;
sq_pushinteger(v, ObjectId);
return 1;
}
void SquirrelClassEx::R_Register_Nut(HSQUIRRELVM v)
{
RegisterNutApi(_SST("C_API"), TestCallC, v);
RegisterNutApi(_SST("Sout"), Sout, v);
RegisterNutApi(_SST("Error"), Error, v);
RegisterNutApi(_SST("Test"), TestCallC, v);
RegisterNutApi(_SST("sq_RGBA"), RGBA, v);
RegisterNutApi(_SST("sq_ReloadingScript"), ReloadingScript, v);
RegisterNutApi(_SST("sq_Exit"), Exit, v);
RegisterNutApi(_SST("sq_Cmd"), Cmd, v);
RegisterNutApi(_SST("sq_String_Replace"), String_Replace, v);
RegisterNutApi(_SST("sq_Register_Destruction"), Register_Destruction, v);
//ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>NPK
RegisterNutApi(_SST("sq_ThreadPreloadImg"), ThreadPreloadImg, v);
//<2F><><EFBFBD><EFBFBD>Img·<67><C2B7><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
RegisterNutApi(_SST("sq_ReleaseTextureByImg"), ReleaseTextureByImg_n, v);
//<2F><>ȡʱװ·<D7B0><C2B7>By ʱװIndex
RegisterNutApi(_SST("sq_GetAvatarPathByIndex"), GetAvatarPathByIndex, v);
//<2F><>ȡװ<C8A1><D7B0>·<EFBFBD><C2B7>By װ<><D7B0>Index
RegisterNutApi(_SST("sq_GetEquipmentPathByIndex"), GetEquipmentPathByIndex, v);
//<2F><>ȡ<EFBFBD><C8A1>ͼ·<CDBC><C2B7>By <20><>ͼIndex
RegisterNutApi(_SST("sq_GetMapPathByIndex"), GetMapPathByIndex, v);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>·<EFBFBD><C2B7>By <20><><EFBFBD><EFBFBD>Index
RegisterNutApi(_SST("sq_GetMonsterPathByIndex"), GetMonsterPathByIndex, v);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>By <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Index
RegisterNutApi(_SST("sq_GetPassobjectPathByIndex"), GetPassobjectPathByIndex, v);
//<2F><>ȡ<EFBFBD><C8A1>Ƶ·<C6B5><C2B7>By <20><>ƵIndex
RegisterNutApi(_SST("sq_GetAudioPathByIndex"), GetAudioPathByIndex, v);
////////////////Actor<6F><72>////////////////
RegisterNutApi(_SST("sq_Create_CameraObjectAct"), Create_CameraObjectAct, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
R_Register_Nut_Text();
//ͼ<><CDBC><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Create_Layer"), Create_Layer, v);//<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
RegisterNutApi(_SST("sq_Create_BaseAct"), Create_BaseAct, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_ReleaseActor"), ReleaseActor, v);//<2F><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>
RegisterNutApi(_SST("sq_Create_Image"), Create_Image, v);//<2F><><EFBFBD><EFBFBD>Image<67><65><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Set_Image_CropRect"), Set_Image_CropRect, v);//<2F><><EFBFBD><EFBFBD>Image<67><65><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Create_ImageEx"), Create_ImageEx, v);//<2F><><EFBFBD><EFBFBD>ExImage<67><65><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Set_ImageEx_Mode"), Set_ImageEx_Mode, v);//<2F><><EFBFBD><EFBFBD>ExImage<67><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
RegisterNutApi(_SST("sq_Set_ImageEx_Frame"), Set_ImageEx_Frame, v);//<2F><><EFBFBD><EFBFBD>ExImage<67><65><EFBFBD><EFBFBD>֡
RegisterNutApi(_SST("sq_Set_ImageEx_Alpha"), Set_ImageEx_Alpha, v);//<2F><><EFBFBD><EFBFBD>ExImage͸<65><CDB8><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Set_ImageEx_FrameInfo"), Set_ImageEx_FrameInfo, v);//<2F><><EFBFBD><EFBFBD>ExImage֡<65><D6A1>Ϣ
RegisterNutApi(_SST("sq_Set_ImageEx_PlayAnimotion"), Set_ImageEx_PlayAnimotion, v);//<2F><><EFBFBD><EFBFBD>ExImage <20><><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
RegisterNutApi(_SST("sq_Set_ImageEx_Animotion_Frame"), Set_ImageEx_Animotion_Frame, v);//<2F><><EFBFBD><EFBFBD>ExImage Ani֡
RegisterNutApi(_SST("sq_Set_ImageEx_Shadow"), Set_ImageEx_Shadow, v);//<2F><><EFBFBD><EFBFBD>ExImage <20><>Ӱ
RegisterNutApi(_SST("sq_SetRotateAnimotion"), Set_RotateAnimotion, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_SetAnchor"), SetActorAnchor, v);//<2F><><EFBFBD><EFBFBD>ê<EFBFBD><C3AA>
RegisterNutApi(_SST("sq_SetXPos"), SetActorXPos, v);//<2F><><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_SetYPos"), SetActorYPos, v);//<2F><><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_GetXPos"), GetActorXPos, v);//<2F><><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_SetActorShowBorder"), SetActorShowBorder, v);//<2F><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD>
RegisterNutApi(_SST("sq_GetYPos"), GetActorYPos, v);//<2F><><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_SetPosition"), SetActorPosition, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X,Y
RegisterNutApi(_SST("sq_SetScale"), SetActorScale, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
RegisterNutApi(_SST("sq_SetZOrder"), SetActorSetZOrder, v);//<2F><><EFBFBD><EFBFBD>Z<EFBFBD><5A><EFBFBD>
RegisterNutApi(_SST("sq_GetZOrder"), GetActorSetZOrder, v);//<2F><>ȡZ<C8A1><5A><EFBFBD>
RegisterNutApi(_SST("sq_GetWidth"), GetActorWidth, v);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_GetHeight"), GetActorHeight, v);//<2F><>ȡ<EFBFBD>߶<EFBFBD>
RegisterNutApi(_SST("sq_GetName"), GetActorName, v);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_SetName"), SetActorName, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_SetActorOpacity"), SetActorOpacity, v);//<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_SetChild"), SetActorChild, v);//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
RegisterNutApi(_SST("sq_GetChildByName"), GetChildByName, v);//<2F><>ȡ<EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>ByName
RegisterNutApi(_SST("sq_RemoveChild"), RemoveActorChild, v);//<2F>Ƴ<EFBFBD><C6B3>Ӷ<EFBFBD><D3B6><EFBFBD>
RegisterNutApi(_SST("sq_RemoveParent"), RemoveActorParent, v);//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_GetParent"), GetActorParent, v);//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_SetSize"), SetSize, v);//<2F><><EFBFBD>ô<EFBFBD>С
RegisterNutApi(_SST("sq_SetRotate"), SetRotate, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
//Sound<6E><64>
RegisterNutApi(_SST("sq_Create_Sound"), Create_Sound, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Set_Sound_Task"), Set_Sound_Task, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Get_Sound_Volume"), Get_Sound_Volume, v);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Set_Sound_Volume"), Set_Sound_Volume, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_PlaySoundEffect"), Squirrel_PlaySoundEffect, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_ReleseSoundEffect"), Squirrel_ReleseSoundEffect, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Input<75><74>
RegisterNutApi(_SST("sq_Key_Pressed"), Key_Pressed, v);//<2F>жϼ<D0B6>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>̶<EFBFBD><CCB6><EFBFBD>
RegisterNutApi(_SST("sq_Key_Is_Down"), Key_Is_Down, v);//<2F>жϼ<D0B6>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>̶<EFBFBD><CCB6><EFBFBD>
RegisterNutApi(_SST("sq_Key_WasReleased"), Key_WasReleased, v);//<2F>жϼ<D0B6>ֵ<EFBFBD><D6B5>̧<EFBFBD><CCA7> <20><><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>̶<EFBFBD><CCB6><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Reset_Scene"), Reset_Scene, v);//<2F><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>
RegisterNutApi(_SST("sq_Create_Scene"), Create_Scene, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Get_SceneByName"), Get_SceneByName, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Get_TownSceneByName"), Get_TownSceneByName, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>򳡾<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_EnterStage"), Director_EnterStage, v);//<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_PushStage"), Director_PushStage, v);//<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Push<73><EFBFBD><EBB3A1>ջ
RegisterNutApi(_SST("sq_PopStage"), Director_PopStage, v);//<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_GetScene"), Director_GetScene, v);//<2F><><EFBFBD>ݻ<EFBFBD>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_ClearStages"), Director_ClearStages, v);//<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD>ջ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Create_FadeTransition"), Creat_FadeTransition, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB5AD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_SetCursor_Task"), SetCursor_Task, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB5AD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD>
RegisterNutApi(_SST("sq_Sync_CursorPos"), Sync_CursorPos, v);//ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Get_Cursor"), Get_Cursor, v);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
//UI<55><49>
//UI<55><49>-<2D><>ť<EFBFBD><C5A5>
RegisterNutApi(_SST("sq_Create_Button"), Create_Button, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Button_Load_Texture"), Button_Load_Texture, v);//<2F><><EFBFBD>ð<EFBFBD>ť״̬<D7B4><CCAC><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Button_Init"), Button_Init, v);//<2F><><EFBFBD>ð<EFBFBD>ť״̬<D7B4><CCAC><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Button_IsPress"), Button_IsPress, v);//<2F><>ȡ<EFBFBD><C8A1>ť<EFBFBD>Ƿ񱻵<C7B7><F1B1BBB5><EFBFBD>
RegisterNutApi(_SST("sq_Button_IsHover"), Button_IsHover, v);//<2F><>ȡ<EFBFBD><C8A1>ť<EFBFBD>Ƿ񱻵<C7B7><F1B1BBB5><EFBFBD>
RegisterNutApi(_SST("sq_Button_RemoveZorder"), Button_RemoveZorder, v);//<2F>Ƴ<EFBFBD><C6B3>Լ<EFBFBD><D4BC><EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//UI<55><49>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Create_Canvas"), Create_Canvas, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Canvas_BeginDraw"), Canvas_BeginDraw, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ⱦ
RegisterNutApi(_SST("sq_Canvas_EndDraw"), Canvas_EndDraw, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ
RegisterNutApi(_SST("sq_Canvas_DrawTexture"), Canvas_DrawTexture, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RegisterNutApi(_SST("sq_Canvas_DrawText"), Canvas_DrawText, v);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
////IMGUI
//RegisterNutApi(_SST("sq_Create_ImguiLayer"), Create_ImguiLayer, v);//<2F><><EFBFBD><EFBFBD>Imguiͼ<69><CDBC>
//RegisterNutApi(_SST("sq_Imgui_Text"), Imgui_Text, v);//Imgui <20><><EFBFBD><EFBFBD>
//RegisterNutApi(_SST("sq_Imgui_InputText"), Imgui_InputText, v);//Imgui <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//RegisterNutApi(_SST("sq_Imgui_SetWindowSize"), Imgui_SetWindowSize, v);//Imgui <20><><EFBFBD>ô<EFBFBD><C3B4>ڴ<EFBFBD>С
//RegisterNutApi(_SST("sq_Imgui_SetWindowPos"), Imgui_SetWindowPos, v);//Imgui <20><><EFBFBD>ô<EFBFBD><C3B4>ڴ<EFBFBD>С
}
void SquirrelClassEx::Run()
{
}
void SquirrelClassEx::Close()
{
sq_close(v);
}