aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2016-08-07 10:46:03 +0200
committerGitHub <noreply@github.com>2016-08-07 10:46:03 +0200
commit46248b0922846e4beb386c5cf8fc12ebd3219b72 (patch)
tree626f274af1edf2ccdbdb7fe2d307c96491dbc02f /src
parent306945fe147ea7742880635e77a5c2656f6e1fdc (diff)
parent47b6e627449187f5385e9beafeda3b8517faae26 (diff)
downloadraylib-46248b0922846e4beb386c5cf8fc12ebd3219b72.tar.gz
raylib-46248b0922846e4beb386c5cf8fc12ebd3219b72.zip
Merge pull request #175 from ghassanpl/develop
More fixes for Lua
Diffstat (limited to 'src')
-rw-r--r--src/rlgl.c7
-rw-r--r--src/rlua.h104
2 files changed, 92 insertions, 19 deletions
diff --git a/src/rlgl.c b/src/rlgl.c
index d027495f..6fb4bf3d 100644
--- a/src/rlgl.c
+++ b/src/rlgl.c
@@ -2559,11 +2559,13 @@ void DestroyLight(Light light)
{
if (light != NULL)
{
+ int light_id = light->id;
+
// Free dynamic memory allocation
- free(lights[light->id]);
+ free(lights[light_id]);
// Remove *obj from the pointers array
- for (int i = light->id; i < lightsCount; i++)
+ for (int i = light_id; i < lightsCount; i++)
{
// Resort all the following pointers of the array
if ((i + 1) < lightsCount)
@@ -2571,7 +2573,6 @@ void DestroyLight(Light light)
lights[i] = lights[i + 1];
lights[i]->id = lights[i + 1]->id;
}
- else free(lights[i]);
}
// Decrease enabled physic objects count
diff --git a/src/rlua.h b/src/rlua.h
index 08ffbca0..85853793 100644
--- a/src/rlua.h
+++ b/src/rlua.h
@@ -126,7 +126,7 @@ RLUADEF void CloseLuaDevice(void); // De-initialize Lua system
#define LuaPush_SpriteFont(L, sf) LuaPushOpaqueTypeWithMetatable(L, sf, SpriteFont)
#define LuaPush_Mesh(L, vd) LuaPushOpaqueType(L, vd)
#define LuaPush_Shader(L, s) LuaPushOpaqueType(L, s)
-#define LuaPush_Light(L, light) LuaPushOpaqueType(L, light)
+#define LuaPush_Light(L, light) LuaPushOpaqueTypeWithMetatable(L, light, Light)
#define LuaPush_Sound(L, snd) LuaPushOpaqueType(L, snd)
#define LuaPush_Wave(L, wav) LuaPushOpaqueType(L, wav)
#define LuaPush_Music(L, mus) LuaPushOpaqueType(L, mus)
@@ -263,6 +263,8 @@ static int LuaIndexTexture2D(lua_State* L)
lua_pushinteger(L, img.mipmaps);
else if (!strcmp(key, "format"))
lua_pushinteger(L, img.format);
+ else if (!strcmp(key, "id"))
+ lua_pushinteger(L, img.id);
else
return 0;
return 1;
@@ -296,6 +298,58 @@ static int LuaIndexSpriteFont(lua_State* L)
return 1;
}
+static int LuaIndexLight(lua_State* L)
+{
+ Light light = LuaGetArgument_Light(L, 1);
+ const char *key = luaL_checkstring(L, 2);
+ if (!strcmp(key, "id"))
+ lua_pushinteger(L, light->id);
+ else if (!strcmp(key, "enabled"))
+ lua_pushboolean(L, light->enabled);
+ else if (!strcmp(key, "type"))
+ lua_pushinteger(L, light->type);
+ else if (!strcmp(key, "position"))
+ LuaPush_Vector3(L, light->position);
+ else if (!strcmp(key, "target"))
+ LuaPush_Vector3(L, light->target);
+ else if (!strcmp(key, "radius"))
+ lua_pushnumber(L, light->radius);
+ else if (!strcmp(key, "diffuse"))
+ LuaPush_Color(L, light->diffuse);
+ else if (!strcmp(key, "intensity"))
+ lua_pushnumber(L, light->intensity);
+ else if (!strcmp(key, "coneAngle"))
+ lua_pushnumber(L, light->coneAngle);
+ else
+ return 0;
+ return 1;
+}
+
+static int LuaNewIndexLight(lua_State* L)
+{
+ Light light = LuaGetArgument_Light(L, 1);
+ const char *key = luaL_checkstring(L, 2);
+ if (!strcmp(key, "id"))
+ light->id = LuaGetArgument_int(L, 3);
+ else if (!strcmp(key, "enabled"))
+ light->enabled = lua_toboolean(L, 3);
+ else if (!strcmp(key, "type"))
+ light->type = LuaGetArgument_int(L, 3);
+ else if (!strcmp(key, "position"))
+ light->position = LuaGetArgument_Vector3(L, 3);
+ else if (!strcmp(key, "target"))
+ light->target = LuaGetArgument_Vector3(L, 3);
+ else if (!strcmp(key, "radius"))
+ light->radius = LuaGetArgument_float(L, 3);
+ else if (!strcmp(key, "diffuse"))
+ light->diffuse = LuaGetArgument_Color(L, 3);
+ else if (!strcmp(key, "intensity"))
+ light->intensity = LuaGetArgument_float(L, 3);
+ else if (!strcmp(key, "coneAngle"))
+ light->coneAngle = LuaGetArgument_float(L, 3);
+ return 0;
+}
+
static void LuaBuildOpaqueMetatables(void)
{
luaL_newmetatable(L, "Image");
@@ -313,10 +367,17 @@ static void LuaBuildOpaqueMetatables(void)
lua_setfield(L, -2, "__index");
lua_pop(L, 1);
- luaL_newmetatable(L, "SpriteFont");
- lua_pushcfunction(L, &LuaIndexSpriteFont);
- lua_setfield(L, -2, "__index");
- lua_pop(L, 1);
+ luaL_newmetatable(L, "SpriteFont");
+ lua_pushcfunction(L, &LuaIndexSpriteFont);
+ lua_setfield(L, -2, "__index");
+ lua_pop(L, 1);
+
+ luaL_newmetatable(L, "Light");
+ lua_pushcfunction(L, &LuaIndexLight);
+ lua_setfield(L, -2, "__index");
+ lua_pushcfunction(L, &LuaNewIndexLight);
+ lua_setfield(L, -2, "__newindex");
+ lua_pop(L, 1);
}
//----------------------------------------------------------------------------------
@@ -707,7 +768,7 @@ static int lua_BoundingBox(lua_State* L)
{
Vector3 min = LuaGetArgument_Vector3(L, 1);
Vector3 max = LuaGetArgument_Vector3(L, 2);
- LuaPush_BoundingBox(L, (BoundingBox) { { min.x, min.y }, { max.x, max.y } });
+ LuaPush_BoundingBox(L, (BoundingBox) { { min.x, min.y, min.z }, { max.x, max.y, max.z } });
return 1;
}
@@ -1057,15 +1118,20 @@ int lua_IsFileDropped(lua_State* L)
lua_pushboolean(L, result);
return 1;
}
-/*
-int lua_*GetDroppedFiles(lua_State* L)
+
+int lua_GetDroppedFiles(lua_State* L)
{
- int * arg1 = LuaGetArgument_int *(L, 1);
- //char * result = *GetDroppedFiles(arg1);
- LuaPush_//char *(L, result);
- return 1;
+ int count = 0;
+ char ** result = GetDroppedFiles(&count);
+ lua_createtable(L, count, 0);
+ for (int i = 0; i < count; i++)
+ {
+ lua_pushstring(L, result[i]);
+ lua_rawseti(L, -2, i + 1);
+ }
+ return 1;
}
-*/
+
int lua_ClearDroppedFiles(lua_State* L)
{
ClearDroppedFiles();
@@ -1638,7 +1704,6 @@ int lua_DrawPoly(lua_State* L)
sz++; \
lua_pop(L, 1); \
} \
- lua_pop(L, 1); \
name = calloc(sz, sizeof(type)); \
sz = 0; \
lua_pushnil(L); \
@@ -2334,7 +2399,12 @@ int lua_DrawGizmo(lua_State* L)
return 0;
}
-// TODO: DrawLight(Light light);
+int lua_DrawLight(lua_State* L)
+{
+ Light arg1 = LuaGetArgument_Light(L, 1);
+ DrawLight(arg1);
+ return 0;
+}
int lua_Draw3DLine(lua_State* L)
{
@@ -3544,7 +3614,7 @@ static luaL_Reg raylib_functions[] = {
REG(ShowLogo)
REG(IsFileDropped)
- //REG(*GetDroppedFiles)
+ REG(GetDroppedFiles)
REG(ClearDroppedFiles)
REG(StorageSaveValue)
REG(StorageLoadValue)
@@ -3698,6 +3768,8 @@ static luaL_Reg raylib_functions[] = {
REG(DrawRay)
REG(DrawGrid)
REG(DrawGizmo)
+
+ REG(DrawLight)
REG(LoadModel)
REG(LoadModelEx)