luainterface.cpp

来自「3D游戏展示程序」· C++ 代码 · 共 116 行

CPP
116
字号
//--------------------------------------------------
//  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 + =
减小字号Ctrl + -
显示快捷键?