// // LUA_DestroyScene(scene (object)) // static int LUA_DestroyScene(lua_State *lua) { int count = lua_gettop(lua); if (lua_gettop(lua) < 1) { CzScriptEngineLua::DisplayError(lua, "scene.destroy() not enough parameters, expected scene (object)"); lua_pushboolean(lua, false); return 1; } // Get the main game object CzApp* game = (CzApp*)CZ_GLOBAL_RESOURCES->getResourceManager()->getParent(); // Get the object IzXomlResource* object = NULL; if (lua_isuserdata(lua, 1)) object = (IzXomlResource*)lua_touserdata(lua, 1); if (object == NULL || object->getClassTypeHash() != CzHashes::Scene_Hash) { CzScriptEngineLua::DisplayError(lua, "scene.destroy() Invalid object, expected a scene object in Param0"); lua_pushboolean(lua, false); return 1; } game->removeScene((CzScene*)object); lua_pushboolean(lua, true); return 1; }
// // LUA_AddPropertyScene scene (object), property (string), value (string) // static int LUA_AddPropertyScene(lua_State *lua) { if (lua_gettop(lua) < 3) { CzScriptEngineLua::DisplayError(lua, "scene.add() not enough parameters, expected scene (object), property (string), value (string, number, boolean or vec)"); lua_pushboolean(lua, false); return 1; } // Get the target object IzXomlResource* object = NULL; if (lua_isuserdata(lua, 1)) object = (IzXomlResource*)lua_touserdata(lua, 1); if (object == NULL || object->getClassTypeHash() != CzHashes::Scene_Hash) { CzScriptEngineLua::DisplayError(lua, "scene.add() Invalid target object for Param0"); lua_pushboolean(lua, false); return 1; } CzString prop_name, value; if (lua_isstring(lua, 2)) prop_name = lua_tostring(lua, 2); else { CzScriptEngineLua::DisplayError(lua, "scene.add() property must be a property name (Param1) - object - ", object->getName().c_str()); lua_pushboolean(lua, false); return 1; } CzXomlProperty prop; if (!LUA_ValueToProperty(lua, 3, prop)) { CzScriptEngineLua::DisplayError(lua, "scene.add() value must be a string, number, boolean or vec - object - ", object->getName().c_str()); CzDebug::Log(CZ_DEBUG_CHANNEL_INFO, "- property - ", prop_name.c_str()); lua_pushboolean(lua, false); return 1; } lua_pushboolean(lua, ((CzScene*)object)->setProperty(prop_name.getHash(), prop, true)); return 1; }
// // LUA_GetPropertyScene scene (object), property (string) // static int LUA_GetPropertyScene(lua_State *lua) { if (lua_gettop(lua) < 2) { CzScriptEngineLua::DisplayError(lua, "scene.get() not enough parameters, expected scene (object), property (string)"); lua_pushnil(lua); return 1; } // Get the target object IzXomlResource* object = NULL; if (lua_isuserdata(lua, 1)) object = (IzXomlResource*)lua_touserdata(lua, 1); if (object == NULL || object->getClassTypeHash() != CzHashes::Scene_Hash) { CzScriptEngineLua::DisplayError(lua, "scene.get() Invalid target object for Param0"); lua_pushnil(lua); return 1; } CzString prop_name, value; if (lua_isstring(lua, 2)) prop_name = lua_tostring(lua, 2); else { CzScriptEngineLua::DisplayError(lua, "scene.get() property must be a property name (Param1) - object - ", object->getName().c_str()); lua_pushnil(lua); return 1; } CzXomlProperty prop; if (!((CzScene*)object)->getProperty(prop_name.getHash(), prop)) { CzScriptEngineLua::DisplayError(lua, "scene.get() scene property does not exist - ", prop_name.c_str()); lua_pushnil(lua); return 1; } LUA_ReturnProperty(lua, prop); return 1; }
// // LUA_FindScene scene-name (string) // static int LUA_FindScene(lua_State *lua) { if (lua_gettop(lua) < 1) { CzScriptEngineLua::DisplayError(lua, "scene.find() not enough parameters, expected scene-name (string)"); lua_pushnil(lua); return 1; } const char* name = NULL; // Get the scene name if (lua_isstring(lua, 1)) name = lua_tostring(lua, 1); if (name == NULL) { CzScriptEngineLua::DisplayError(lua, "scene.find() Invalid name for Param0"); lua_pushnil(lua); return 1; } // Locate scene CzScene* scene = NULL; IzXomlResource* parent = CZ_GLOBAL_RESOURCES->getResourceManager()->getParent(); if (parent != NULL && parent->getClassTypeHash() == CzHashes::Game_Hash) scene = ((CzApp*)parent)->findScene(name); else if (parent != NULL && parent->getClassTypeHash() == CzHashes::Scene_Hash) scene = ((CzScene*)parent)->getParent()->findScene(name); if (scene == NULL) { // CzScriptEngineLua::DisplayError(lua, "scene.find() scene not found - ", name); lua_pushnil(lua); return 1; } // Return the scene lua_pushlightuserdata(lua, scene); return 1; }
// // LUA_isTypeOf(type-name) // static int LUA_isTypeOf(lua_State *lua) { int count = lua_gettop(lua); if (lua_gettop(lua) < 1) { CzScriptEngineLua::DisplayError(lua, "sys.isTypeOf() not enough parameters, expected type-name"); lua_pushboolean(lua, false); return 1; } // Get the resource IzXomlResource* resource = NULL; if (lua_isuserdata(lua, 1)) resource = (CzScene*)lua_touserdata(lua, 1); else { CzScriptEngineLua::DisplayError(lua, "sys.isTypeOf() Invalid parameter, expected object for Param0"); lua_pushboolean(lua, false); return 1; } // Get the type of actor to create const char* type = NULL; if (lua_isstring(lua, 2)) type = lua_tostring(lua, 2); else { CzScriptEngineLua::DisplayError(lua, "sys.isTypeOf() Invalid parameter, expected type-name for Param1"); lua_pushboolean(lua, false); return 1; } unsigned int type_hash = CZ_HASH(type); if (resource->getClassTypeHash() == type_hash) lua_pushboolean(lua, true); else lua_pushboolean(lua, false); return 1; }