From 17de12dc8bf4a429bb80ecdfb6d960194dd7aaf2 Mon Sep 17 00:00:00 2001 From: mniip Date: Wed, 12 Jun 2013 21:12:07 +0400 Subject: [PATCH] simulation.parts() iterator --- src/cat/LuaScriptInterface.cpp | 24 +++++++++++++++++++++++- src/cat/LuaScriptInterface.h | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/cat/LuaScriptInterface.cpp b/src/cat/LuaScriptInterface.cpp index 4cb5bd9ef..4d7f64389 100644 --- a/src/cat/LuaScriptInterface.cpp +++ b/src/cat/LuaScriptInterface.cpp @@ -479,9 +479,9 @@ void LuaScriptInterface::initSimulationAPI() {"gravityMode", simulation_gravityMode}, {"airMode", simulation_airMode}, {"waterEqualisation", simulation_waterEqualisation}, - {"waterEqualization", simulation_waterEqualisation}, {"ambientAirTemp", simulation_ambientAirTemp}, {"elementCount", simulation_elementCount}, + {"parts", simulation_parts}, {NULL, NULL} }; luaL_register(l, "simulation", simulationAPIMethods); @@ -1505,6 +1505,28 @@ int LuaScriptInterface::simulation_elementCount(lua_State * l) return 1; } +int PartsClosure(lua_State * l) +{ + int i = lua_tointeger(l, lua_upvalueindex(1)); + i++; + while(!luacon_sim->parts[i].type) + if(i>=NPART) + return 0; + else + i++; + lua_pushnumber(l, i); + lua_replace(l, lua_upvalueindex(1)); + lua_pushnumber(l, i); + return 1; +} + +int LuaScriptInterface::simulation_parts(lua_State *l) +{ + lua_pushnumber(l, -1); + lua_pushcclosure(l, PartsClosure, 1); + return 1; +} + //// Begin Renderer API void LuaScriptInterface::initRendererAPI() diff --git a/src/cat/LuaScriptInterface.h b/src/cat/LuaScriptInterface.h index 5a09be929..19204a04d 100644 --- a/src/cat/LuaScriptInterface.h +++ b/src/cat/LuaScriptInterface.h @@ -101,6 +101,7 @@ class LuaScriptInterface: public CommandInterface static int simulation_waterEqualisation(lua_State * l); static int simulation_ambientAirTemp(lua_State * l); static int simulation_elementCount(lua_State * l); + static int simulation_parts(lua_State * l); //Renderer void initRendererAPI();