📄 luainterface.cpp
字号:
//--------------------------------------------------
// Desc: APIs for LUA
// Author: Artsylee
//--------------------------------------------------
#include "LuaInterface.h"
#include "Common.h"
extern enum GameState g_GameState;
GFont g_LuaFont;
DWORD StringToDWord(const char *szValue)
{
if(szValue==NULL)
return 0;
return strtoul(szValue, 0, 0);
}
int GetGameState(lua_State *pState)
{
lua_pushnumber(pState, g_GameState);
return 1;
}
int GetTime(lua_State *pState)
{
lua_pushnumber(pState, g_GlobalTime);
return 1;
}
int LoadTexture(lua_State *pState)
{
unsigned long handle = LoadTexture(lua_tostring(pState, 1));
lua_pushnumber(pState, handle);
return 1;
}
int ReleaseTexture(lua_State *pState)
{
DWORD handle = (DWORD)lua_tonumber(pState, 1);
::ReleaseTexture(handle);
return 0;
}
int Render(lua_State *pState)
{
unsigned long handle = StringToDWord(lua_tostring(pState, 1));
int x = (int)lua_tonumber(pState, 2);
int y = (int)lua_tonumber(pState, 3);
int count = lua_gettop(pState);
if(count == 3 || count == 4)
{
DWORD color = 0xFFFFFFFF;
if(count==4) color = StringToDWord(lua_tostring(pState, 4));
::Render(handle, x, y, NULL, color);
}
else if(count == 5 || count == 6)
{
float xscale = (float)lua_tonumber(pState, 4);
float yscale = (float)lua_tonumber(pState, 5);
DWORD color = 0xFFFFFFFF;
if(count==6) color = StringToDWord(lua_tostring(pState, 6));
::Render(handle, x, y, xscale, yscale, NULL, color);
}
else if(count == 9 || count == 10)
{
int dstX = (int)lua_tonumber(pState, 4);
int dstY = (int)lua_tonumber(pState, 5);
int srcL = (int)lua_tonumber(pState, 6);
int srcT = (int)lua_tonumber(pState, 7);
int srcR = (int)lua_tonumber(pState, 8);
int srcB = (int)lua_tonumber(pState, 9);
DWORD color = 0xFFFFFFFF;
if(count==10) color = StringToDWord(lua_tostring(pState, 10));
RECT rc = { x, y, dstX, dstY };
RECT src = { srcL, srcT, srcR, srcB };
::Render(handle, &rc, &src, color);
}
return 0;
}
int DrawText(lua_State *pState)
{
int x = (int)lua_tonumber(pState, 1);
int y = (int)lua_tonumber(pState, 2);
DWORD color = StringToDWord(lua_tostring(pState, 3));
const char *pString = lua_tostring(pState, 4);
g_LuaFont.DrawText(x, y, color, pString);
return 0;
}
int DrawSingleLine(lua_State *pState)
{
int x = (int)lua_tonumber(pState, 1);
int y = (int)lua_tonumber(pState, 2);
DWORD color = StringToDWord(lua_tostring(pState, 3));
bool bCenter = (bool)lua_tonumber(pState, 4);
const char *pString = lua_tostring(pState, 5);
g_LuaFont.DrawSingleLine(x, y, color, bCenter, pString);
return 0;
}
void RegisterAPI(lua_State *pState)
{
g_LuaFont.CreateFont("Lucida Console", 24, 0, FW_NORMAL);
g_LuaFont.SetLineCount(46);
g_LuaFont.SetLineHeight(30);
lua_register(pState, "GetGameState", GetGameState);
lua_register(pState, "LoadTexture", LoadTexture);
lua_register(pState, "ReleaseTexture", ReleaseTexture);
lua_register(pState, "Render", Render);
lua_register(pState, "GetTime", GetTime);
lua_register(pState, "DrawText", DrawText);
lua_register(pState, "DrawSingleLine", DrawSingleLine);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -