⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 luainterface.cpp

📁 3D游戏展示程序
💻 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 + -