mirror of
https://github.com/Kiritow/LuaEngine.git
synced 2024-03-22 13:11:45 +08:00
LuaEngine v0.5.5
Code refactor. More font function supported.
This commit is contained in:
parent
466dd6ee73
commit
08237332c0
154
Font.cpp
154
Font.cpp
|
@ -4,8 +4,12 @@
|
||||||
class Font
|
class Font
|
||||||
constructor(filename: string, size: int)
|
constructor(filename: string, size: int)
|
||||||
constructor(data: string, size: int, flag: int) flag is not used currently.
|
constructor(data: string, size: int, flag: int) flag is not used currently.
|
||||||
renderText(str: string, r: int, g: int, b: int, a: int): Surface
|
renderText(str: utf-8 string, r: int, g: int, b: int, a: int): Surface
|
||||||
renderText(rnd: Renderer, str: string, r: int, g: int, b: int, a: int): Texture
|
renderText(rnd: Renderer, str: utf-8 string, r: int, g: int, b: int, a: int): Texture
|
||||||
|
renderTextSolid(str: utf-8 string, r: int, g: int, b: int, a: int): Surface
|
||||||
|
renderTextSolid(rnd: Renderer, str: utf-8 string, r: int, g: int, b: int, a: int): Texture
|
||||||
|
renderTextShaded(str: utf-8 string, fr: int, fg: int, fb: int, fa: int, br: int, bg: int, bb: int, ba: int): Surface
|
||||||
|
renderTextShaded(rnd: Renderer, str: utf-8 string, fr: int, fg: int, fb: int, fa: int, br: int, bg: int, bb: int, ba: int): Texture
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int font_close(lua_State* L)
|
int font_close(lua_State* L)
|
||||||
|
@ -15,50 +19,6 @@ int font_close(lua_State* L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int font_rendertext(lua_State* L)
|
|
||||||
{
|
|
||||||
auto font = lua_checkpointer<TTF_Font>(L, 1, "LuaEngineFont");
|
|
||||||
const char* str;
|
|
||||||
SDL_Color color;
|
|
||||||
if (lua_isstring(L, 2))
|
|
||||||
{
|
|
||||||
str = luaL_checkstring(L, 2);
|
|
||||||
color.r = luaL_checkinteger(L, 3);
|
|
||||||
color.g = luaL_checkinteger(L, 4);
|
|
||||||
color.b = luaL_checkinteger(L, 5);
|
|
||||||
color.a = luaL_checkinteger(L, 6);
|
|
||||||
SDL_Surface* surf = TTF_RenderText_Blended(font, str, color);
|
|
||||||
if (!surf)
|
|
||||||
{
|
|
||||||
return TTFError(L, TTF_RenderText_Blended);
|
|
||||||
}
|
|
||||||
put_surface(L, surf);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
auto rnd = lua_checkpointer<SDL_Renderer>(L, 2, "LuaEngineRenderer");
|
|
||||||
str = luaL_checkstring(L, 3);
|
|
||||||
color.r = luaL_checkinteger(L, 4);
|
|
||||||
color.g = luaL_checkinteger(L, 5);
|
|
||||||
color.b = luaL_checkinteger(L, 6);
|
|
||||||
color.a = luaL_checkinteger(L, 7);
|
|
||||||
SDL_Surface* surf = TTF_RenderText_Blended(font, str, color);
|
|
||||||
if (!surf)
|
|
||||||
{
|
|
||||||
return TTFError(L, TTF_RenderText_Blended);
|
|
||||||
}
|
|
||||||
SDL_Texture* text = SDL_CreateTextureFromSurface(rnd, surf);
|
|
||||||
SDL_FreeSurface(surf);
|
|
||||||
if (!text)
|
|
||||||
{
|
|
||||||
return SDLError(L, SDL_CreateTextureFromSurface);
|
|
||||||
}
|
|
||||||
put_texture(L, text);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int font_renderutf8(lua_State* L)
|
int font_renderutf8(lua_State* L)
|
||||||
{
|
{
|
||||||
auto font = lua_checkpointer<TTF_Font>(L, 1, "LuaEngineFont");
|
auto font = lua_checkpointer<TTF_Font>(L, 1, "LuaEngineFont");
|
||||||
|
@ -103,6 +63,103 @@ int font_renderutf8(lua_State* L)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int font_renderutf8_solid(lua_State* L)
|
||||||
|
{
|
||||||
|
auto font = lua_checkpointer<TTF_Font>(L, 1, "LuaEngineFont");
|
||||||
|
const char* str;
|
||||||
|
SDL_Color color;
|
||||||
|
if (lua_isstring(L, 2))
|
||||||
|
{
|
||||||
|
str = luaL_checkstring(L, 2);
|
||||||
|
color.r = luaL_checkinteger(L, 3);
|
||||||
|
color.g = luaL_checkinteger(L, 4);
|
||||||
|
color.b = luaL_checkinteger(L, 5);
|
||||||
|
color.a = luaL_checkinteger(L, 6);
|
||||||
|
SDL_Surface* surf = TTF_RenderUTF8_Solid(font, str, color);
|
||||||
|
if (!surf)
|
||||||
|
{
|
||||||
|
return TTFError(L, TTF_RenderUTF8_Solid);
|
||||||
|
}
|
||||||
|
put_surface(L, surf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto rnd = lua_checkpointer<SDL_Renderer>(L, 2, "LuaEngineRenderer");
|
||||||
|
str = luaL_checkstring(L, 3);
|
||||||
|
color.r = luaL_checkinteger(L, 4);
|
||||||
|
color.g = luaL_checkinteger(L, 5);
|
||||||
|
color.b = luaL_checkinteger(L, 6);
|
||||||
|
color.a = luaL_checkinteger(L, 7);
|
||||||
|
SDL_Surface* surf = TTF_RenderUTF8_Solid(font, str, color);
|
||||||
|
if (!surf)
|
||||||
|
{
|
||||||
|
return TTFError(L, TTF_RenderUTF8_Solid);
|
||||||
|
}
|
||||||
|
SDL_Texture* text = SDL_CreateTextureFromSurface(rnd, surf);
|
||||||
|
SDL_FreeSurface(surf);
|
||||||
|
if (!text)
|
||||||
|
{
|
||||||
|
return SDLError(L, SDL_CreateTextureFromSurface);
|
||||||
|
}
|
||||||
|
put_texture(L, text);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int font_renderutf8_shaded(lua_State* L)
|
||||||
|
{
|
||||||
|
auto font = lua_checkpointer<TTF_Font>(L, 1, "LuaEngineFont");
|
||||||
|
const char* str;
|
||||||
|
SDL_Color frontColor;
|
||||||
|
SDL_Color backColor;
|
||||||
|
if (lua_isstring(L, 2))
|
||||||
|
{
|
||||||
|
str = luaL_checkstring(L, 2);
|
||||||
|
frontColor.r = luaL_checkinteger(L, 3);
|
||||||
|
frontColor.g = luaL_checkinteger(L, 4);
|
||||||
|
frontColor.b = luaL_checkinteger(L, 5);
|
||||||
|
frontColor.a = luaL_checkinteger(L, 6);
|
||||||
|
backColor.r = luaL_checkinteger(L, 7);
|
||||||
|
backColor.g = luaL_checkinteger(L, 8);
|
||||||
|
backColor.b = luaL_checkinteger(L, 9);
|
||||||
|
backColor.a = luaL_checkinteger(L, 10);
|
||||||
|
SDL_Surface* surf = TTF_RenderUTF8_Shaded(font, str, frontColor, backColor);
|
||||||
|
if (!surf)
|
||||||
|
{
|
||||||
|
return TTFError(L, TTF_RenderUTF8_Shaded);
|
||||||
|
}
|
||||||
|
put_surface(L, surf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto rnd = lua_checkpointer<SDL_Renderer>(L, 2, "LuaEngineRenderer");
|
||||||
|
str = luaL_checkstring(L, 3);
|
||||||
|
frontColor.r = luaL_checkinteger(L, 4);
|
||||||
|
frontColor.g = luaL_checkinteger(L, 5);
|
||||||
|
frontColor.b = luaL_checkinteger(L, 6);
|
||||||
|
frontColor.a = luaL_checkinteger(L, 7);
|
||||||
|
backColor.r = luaL_checkinteger(L, 8);
|
||||||
|
backColor.g = luaL_checkinteger(L, 9);
|
||||||
|
backColor.b = luaL_checkinteger(L, 10);
|
||||||
|
backColor.a = luaL_checkinteger(L, 11);
|
||||||
|
SDL_Surface* surf = TTF_RenderUTF8_Shaded(font, str, frontColor, backColor);
|
||||||
|
if (!surf)
|
||||||
|
{
|
||||||
|
return TTFError(L, TTF_RenderUTF8_Shaded);
|
||||||
|
}
|
||||||
|
SDL_Texture* text = SDL_CreateTextureFromSurface(rnd, surf);
|
||||||
|
SDL_FreeSurface(surf);
|
||||||
|
if (!text)
|
||||||
|
{
|
||||||
|
return SDLError(L, SDL_CreateTextureFromSurface);
|
||||||
|
}
|
||||||
|
put_texture(L, text);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int font_new(lua_State* L)
|
int font_new(lua_State* L)
|
||||||
{
|
{
|
||||||
TTF_Font* font;
|
TTF_Font* font;
|
||||||
|
@ -136,8 +193,9 @@ int font_new(lua_State* L)
|
||||||
{
|
{
|
||||||
lua_setfield_function(L, "__gc", font_close);
|
lua_setfield_function(L, "__gc", font_close);
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
lua_setfield_function(L, "renderText", font_rendertext);
|
lua_setfield_function(L, "renderText", font_renderutf8);
|
||||||
lua_setfield_function(L, "renderUTF8", font_renderutf8);
|
lua_setfield_function(L, "renderTextSolid", font_renderutf8_solid);
|
||||||
|
lua_setfield_function(L, "renderTextShaded", font_renderutf8_shaded);
|
||||||
lua_setfield(L, -2, "__index");
|
lua_setfield(L, -2, "__index");
|
||||||
}
|
}
|
||||||
lua_setmetatable(L, -2);
|
lua_setmetatable(L, -2);
|
||||||
|
|
28
Socket.h
28
Socket.h
|
@ -1,6 +1,34 @@
|
||||||
#include "include.h"
|
#include "include.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define _WIN32_WINNT 0x0A00 // Win10
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/tcp.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
|
||||||
|
#define closesocket close
|
||||||
|
#define WSAGetLastError() errno
|
||||||
|
#define WSAEWOULDBLOCK EWOULDBLOCK
|
||||||
|
#define put_winerror put_linuxerror
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int SetSocketBlocking(lua_State* L, int fd, bool blocking);
|
||||||
|
|
||||||
class SocketData
|
class SocketData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
21
SocketLinux.cpp
Normal file
21
SocketLinux.cpp
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#include "Socket.h"
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
|
||||||
|
int SetSocketBlocking(lua_State* L, int fd, bool blocking)
|
||||||
|
{
|
||||||
|
const int flags = fcntl(fd, F_GETFL, 0);
|
||||||
|
if (((flags & O_NONBLOCK) && !blocking) || (!(flags & O_NONBLOCK) && blocking))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int ret = fcntl(fd, F_SETFL, blocking ? flags & ~O_NONBLOCK : flags | O_NONBLOCK);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
put_linuxerror(L, errno, "fcntl");
|
||||||
|
return lua_error(L);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
18
SocketWin.cpp
Normal file
18
SocketWin.cpp
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#include "Socket.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
int SetSocketBlocking(lua_State* L, int fd, bool blocking)
|
||||||
|
{
|
||||||
|
u_long arg = blocking ? 0 : 1;
|
||||||
|
int ret = ioctlsocket(fd, FIONBIO, &arg);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
int errcode = WSAGetLastError();
|
||||||
|
put_winerror(L, errcode, "ioctlsocket");
|
||||||
|
return lua_error(L);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
70
TCP.cpp
70
TCP.cpp
|
@ -1,59 +1,25 @@
|
||||||
#include "TCP.h"
|
#include "Socket.h"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#ifdef _WIN32
|
/*
|
||||||
#define _WIN32_WINNT 0x0A00 // Win10
|
class TCPSocket
|
||||||
#include <winsock2.h>
|
constructor(nonblocking: boolean)
|
||||||
#include <ws2tcpip.h>
|
close()
|
||||||
|
setblocking(nonblocking: boolean)
|
||||||
|
listen([ip: string], port: int, [backlog: int]) Address default to 0.0.0.0, backlog default to 10.
|
||||||
|
|
||||||
static int SetSocketBlocking(lua_State* L, int fd, bool blocking)
|
# Blocking mode: All unexpected error will be raised as exception.
|
||||||
{
|
connect(ip: string, port: int)
|
||||||
u_long arg = blocking ? 0 : 1;
|
accept(): TCPSocket PeerIP PeerPort
|
||||||
int ret = ioctlsocket(fd, FIONBIO, &arg);
|
send(data: string) All data will be sent before return.
|
||||||
if (ret)
|
recv([maxsize: int]): string. Default to 4KB.
|
||||||
{
|
|
||||||
int errcode = WSAGetLastError();
|
|
||||||
put_winerror(L, errcode, "ioctlsocket");
|
|
||||||
return lua_error(L);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
# Non-blocking mode:
|
||||||
#include <arpa/inet.h>
|
connect(ip: string, port: int)
|
||||||
#include <netinet/in.h>
|
accept(): (TCPSocket PeerIP PeerPort) or nil
|
||||||
#include <netinet/tcp.h>
|
send(data: string)
|
||||||
#include <netdb.h>
|
recv([maxsize: int]): string
|
||||||
#include <errno.h>
|
*/
|
||||||
#include <sys/epoll.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/epoll.h>
|
|
||||||
|
|
||||||
static int SetSocketBlocking(lua_State* L, int fd, bool blocking)
|
|
||||||
{
|
|
||||||
const int flags = fcntl(fd, F_GETFL, 0);
|
|
||||||
if( ((flags & O_NONBLOCK) && !blocking) || (!(flags & O_NONBLOCK) && blocking))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
int ret = fcntl(fd, F_SETFL, blocking ? flags & ~O_NONBLOCK : flags | O_NONBLOCK);
|
|
||||||
if (ret)
|
|
||||||
{
|
|
||||||
put_linuxerror(L, errno, "fcntl");
|
|
||||||
return lua_error(L);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define closesocket close
|
|
||||||
#define WSAGetLastError() errno
|
|
||||||
#define WSAEWOULDBLOCK EWOULDBLOCK
|
|
||||||
#define put_winerror put_linuxerror
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
21
TCP.h
21
TCP.h
|
@ -1,21 +0,0 @@
|
||||||
#include "Socket.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
class TCPSocket
|
|
||||||
constructor(nonblocking: boolean)
|
|
||||||
close()
|
|
||||||
setblocking(nonblocking: boolean)
|
|
||||||
listen([ip: string], port: int, [backlog: int]) Address default to 0.0.0.0, backlog default to 10.
|
|
||||||
|
|
||||||
# Blocking mode: All unexpected error will be raised as exception.
|
|
||||||
connect(ip: string, port: int)
|
|
||||||
accept(): TCPSocket PeerIP PeerPort
|
|
||||||
send(data: string) All data will be sent before return.
|
|
||||||
recv([maxsize: int]): string. Default to 4KB.
|
|
||||||
|
|
||||||
# Non-blocking mode:
|
|
||||||
connect(ip: string, port: int)
|
|
||||||
accept(): (TCPSocket PeerIP PeerPort) or nil
|
|
||||||
send(data: string)
|
|
||||||
recv([maxsize: int]): string
|
|
||||||
*/
|
|
|
@ -1,9 +1,19 @@
|
||||||
#include "UDP.h"
|
#include "Socket.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
/*
|
||||||
#define _WIN32_WINNT 0x0A00 // Win10
|
class UDPSocket
|
||||||
#include <winsock2.h>
|
constructor()
|
||||||
#include <ws2tcpip.h>
|
close()
|
||||||
|
setblocking(nonblocking: boolean)
|
||||||
|
setbroadcast(isbroadcast: boolean) Broadcast default to false.
|
||||||
|
listen([ip: string], port: int) Address default to 0.0.0.0.
|
||||||
|
|
||||||
|
connect(ip: string, port: int)
|
||||||
|
send(data: string)
|
||||||
|
recv([maxsize: int]): string. Default to 4KB.
|
||||||
|
sendto([ip: string], port: int, data: string) If ip is empty, default to 255.255.255.255 (broadcast)
|
||||||
|
recvfrom(): data: string, ip: string, port: int
|
||||||
|
*/
|
||||||
|
|
||||||
int udp_socket_dtor(lua_State* L)
|
int udp_socket_dtor(lua_State* L)
|
||||||
{
|
{
|
||||||
|
@ -344,5 +354,3 @@ void InitUDPSocket(lua_State* L)
|
||||||
lua_setfield(L, -2, "UDPSocket");
|
lua_setfield(L, -2, "UDPSocket");
|
||||||
lua_pop(L, 2);
|
lua_pop(L, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // end of _WIN32
|
|
16
UDP.h
16
UDP.h
|
@ -1,16 +0,0 @@
|
||||||
#include "Socket.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
class UDPSocket
|
|
||||||
constructor()
|
|
||||||
close()
|
|
||||||
setblocking(nonblocking: boolean)
|
|
||||||
setbroadcast(isbroadcast: boolean) Broadcast default to false.
|
|
||||||
listen([ip: string], port: int) Address default to 0.0.0.0.
|
|
||||||
|
|
||||||
connect(ip: string, port: int)
|
|
||||||
send(data: string)
|
|
||||||
recv([maxsize: int]): string. Default to 4KB.
|
|
||||||
sendto([ip: string], port: int, data: string) If ip is empty, default to 255.255.255.255 (broadcast)
|
|
||||||
recvfrom(): data: string, ip: string, port: int
|
|
||||||
*/
|
|
Loading…
Reference in New Issue
Block a user