浏览代码

Merge pull request #175 from ghassanpl/develop

More fixes for Lua
pull/180/head
Ray 8 年前
committed by GitHub
父节点
当前提交
46248b0922
共有 4 个文件被更改,包括 101 次插入25 次删除
  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 while not WindowShouldClose() do -- Detect window close button or ESC key
-- Update -- Update
--------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------
if (IsFileDropped()) then droppedFiles = GetDroppedFiles(count) end
if (IsFileDropped()) then
droppedFiles = GetDroppedFiles()
count = #droppedFiles
end
--------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------
-- Draw -- Draw
@ -41,11 +44,11 @@ while not WindowShouldClose() do -- Detect window close button or ESC key
else else
DrawText("Dropped files:", 100, 40, 20, DARKGRAY) 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)) 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 else DrawRectangle(0, 85 + 40*i, screenWidth, 40, Fade(LIGHTGRAY, 0.3)) end
DrawText(droppedFiles[i], 120, 100 + 40*i, 10, GRAY)
DrawText(droppedFiles[io">+1], 120, 100 + 40*i, 10, GRAY)
end end
DrawText("Drop new files...", 100, 110 + 40*count, 20, DARKGRAY) 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() 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 -- 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 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) if (light != NULL)
{ {
int light_id = light->id;
// Free dynamic memory allocation // Free dynamic memory allocation
free(lights[light->id]);
free(lights[light_id]);
// Remove *obj from the pointers array // 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 // Resort all the following pointers of the array
if ((i + 1) < lightsCount) if ((i + 1) < lightsCount)
@ -2571,7 +2573,6 @@ void DestroyLight(Light light)
lights[i] = lights[i + 1]; lights[i] = lights[i + 1];
lights[i]->id = lights[i + 1]->id; lights[i]->id = lights[i + 1]->id;
} }
else free(lights[i]);
} }
// Decrease enabled physic objects count // 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_SpriteFont(L, sf) LuaPushOpaqueTypeWithMetatable(L, sf, SpriteFont)
#define LuaPush_Mesh(L, vd) LuaPushOpaqueType(L, vd) #define LuaPush_Mesh(L, vd) LuaPushOpaqueType(L, vd)
#define LuaPush_Shader(L, s) LuaPushOpaqueType(L, s) #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_Sound(L, snd) LuaPushOpaqueType(L, snd)
#define LuaPush_Wave(L, wav) LuaPushOpaqueType(L, wav) #define LuaPush_Wave(L, wav) LuaPushOpaqueType(L, wav)
#define LuaPush_Music(L, mus) LuaPushOpaqueType(L, mus) #define LuaPush_Music(L, mus) LuaPushOpaqueType(L, mus)
@ -263,6 +263,8 @@ static int LuaIndexTexture2D(lua_State* L)
lua_pushinteger(L, img.mipmaps); lua_pushinteger(L, img.mipmaps);
else if (!strcmp(key, "format")) else if (!strcmp(key, "format"))
lua_pushinteger(L, img.format); lua_pushinteger(L, img.format);
else if (!strcmp(key, "id"))
lua_pushinteger(L, img.id);
else else
return 0; return 0;
return 1; return 1;
@ -296,6 +298,58 @@ static int LuaIndexSpriteFont(lua_State* L)
return 1; 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) static void LuaBuildOpaqueMetatables(void)
{ {
luaL_newmetatable(L, "Image"); luaL_newmetatable(L, "Image");
@ -313,10 +367,17 @@ static void LuaBuildOpaqueMetatables(void)
lua_setfield(L, -2, "__index"); lua_setfield(L, -2, "__index");
lua_pop(L, 1); 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 min = LuaGetArgument_Vector3(L, 1);
Vector3 max = LuaGetArgument_Vector3(L, 2); 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; return 1;
} }
@ -1057,15 +1118,20 @@ int lua_IsFileDropped(lua_State* L)
lua_pushboolean(L, result); lua_pushboolean(L, result);
return 1; 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) int lua_ClearDroppedFiles(lua_State* L)
{ {
ClearDroppedFiles(); ClearDroppedFiles();
@ -1638,7 +1704,6 @@ int lua_DrawPoly(lua_State* L)
sz++; \ sz++; \
lua_pop(L, 1); \ lua_pop(L, 1); \
} \ } \
lua_pop(L, 1); \
name = calloc(sz, sizeof(type)); \ name = calloc(sz, sizeof(type)); \
sz = 0; \ sz = 0; \
lua_pushnil(L); \ lua_pushnil(L); \
@ -2334,7 +2399,12 @@ int lua_DrawGizmo(lua_State* L)
return 0; 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) int lua_Draw3DLine(lua_State* L)
{ {
@ -3544,7 +3614,7 @@ static luaL_Reg raylib_functions[] = {
REG(ShowLogo) REG(ShowLogo)
REG(IsFileDropped) REG(IsFileDropped)
o">//REG(*GetDroppedFiles)
REG(GetDroppedFiles)
REG(ClearDroppedFiles) REG(ClearDroppedFiles)
REG(StorageSaveValue) REG(StorageSaveValue)
REG(StorageLoadValue) REG(StorageLoadValue)
@ -3698,6 +3768,8 @@ static luaL_Reg raylib_functions[] = {
REG(DrawRay) REG(DrawRay)
REG(DrawGrid) REG(DrawGrid)
REG(DrawGizmo) REG(DrawGizmo)
REG(DrawLight)
REG(LoadModel) REG(LoadModel)
REG(LoadModelEx) REG(LoadModelEx)

正在加载...
取消
保存