Browse Source

Merge pull request #175 from ghassanpl/develop

More fixes for Lua
Ray 9 years ago
parent
commit
46248b0922
4 changed files with 101 additions and 25 deletions
  1. 6 3
      examples/core_drop_files.lua
  2. 3 3
      examples/shaders_custom_uniform.lua
  3. 4 3
      src/rlgl.c
  4. 88 16
      src/rlua.h

+ 6 - 3
examples/core_drop_files.lua

@@ -28,7 +28,10 @@ SetTargetFPS(60)
 while not WindowShouldClose() do    -- Detect window close button or ESC key
     -- Update
     ---------------------------------------------------------------------------------------
-    if (IsFileDropped()) then droppedFiles = GetDroppedFiles(count) end
+    if (IsFileDropped()) then 
+			droppedFiles = GetDroppedFiles() 
+			count = #droppedFiles
+		end
     ---------------------------------------------------------------------------------------
 
     -- Draw
@@ -41,11 +44,11 @@ while not WindowShouldClose() do    -- Detect window close button or ESC key
         else
             DrawText("Dropped files:", 100, 40, 20, DARKGRAY)
             
-            for i = 0, count do
+            for i = 0, count-1 do
                 if (i%2 == 0) then DrawRectangle(0, 85 + 40*i, screenWidth, 40, Fade(LIGHTGRAY, 0.5))
                 else DrawRectangle(0, 85 + 40*i, screenWidth, 40, Fade(LIGHTGRAY, 0.3)) end
                 
-                DrawText(droppedFiles[i], 120, 100 + 40*i, 10, GRAY)
+                DrawText(droppedFiles[i+1], 120, 100 + 40*i, 10, GRAY)
             end
             
             DrawText("Drop new files...", 100, 110 + 40*count, 20, DARKGRAY)

+ 3 - 3
examples/shaders_custom_uniform.lua

@@ -60,11 +60,11 @@ while not WindowShouldClose() do       -- Detect window close button or ESC key
     ---------------------------------------------------------------------------------------
     local mousePosition = GetMousePosition()
 
-    swirlCenter[0] = mousePosition.x
-    swirlCenter[1] = screenHeight - mousePosition.y
+    swirlCenter[1] = mousePosition.x
+    swirlCenter[2] = screenHeight - mousePosition.y
 
     -- Send new value to the shader to be used on drawing
-    SetShaderValue(shader, swirlCenterLoc, swirlCenter, 2)
+    SetShaderValue(shader, swirlCenterLoc, swirlCenter)
     
     camera = UpdateCamera(camera)      -- Update internal camera and our camera
     ---------------------------------------------------------------------------------------

+ 4 - 3
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

+ 88 - 16
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)