Răsfoiți Sursa

world: use require() to gain free hot-reload

Daniele Bartolini 7 luni în urmă
părinte
comite
1932896fa7

+ 1 - 0
docs/changelog.rst

@@ -15,6 +15,7 @@ Changelog
 
 **Fixes**
 
+* Tools: fixed hot-reloading of Unit scripts.
 * Tools: fixed missing sounds in the Level Tree.
 * Tools: fixed inability to select state machines from the "Animation State Machine" component in the Inspector.
 * Tools: fixed missing SKINNING define in materials when importing animated FBX meshes.

+ 1 - 1
src/resource/types.h

@@ -81,7 +81,7 @@ struct Platform
 #define RESOURCE_VERSION_STATE_MACHINE    RESOURCE_VERSION(7)
 #define RESOURCE_VERSION_CONFIG           RESOURCE_VERSION(1)
 #define RESOURCE_VERSION_FONT             RESOURCE_VERSION(1)
-#define RESOURCE_VERSION_UNIT             RESOURCE_VERSION(15)
+#define RESOURCE_VERSION_UNIT             RESOURCE_VERSION(16)
 #define RESOURCE_VERSION_LEVEL            (RESOURCE_VERSION_UNIT + 5) //!< Level embeds UnitResource
 #define RESOURCE_VERSION_MATERIAL         RESOURCE_VERSION(6)
 #define RESOURCE_VERSION_MESH             RESOURCE_VERSION(8)

+ 2 - 0
src/resource/unit_compiler.cpp

@@ -274,10 +274,12 @@ static s32 compile_script(Buffer &output, FlatJsonObject &obj, CompileOptions &o
 
 	ScriptDesc sd;
 	sd.script_resource = RETURN_IF_ERROR(sjson::parse_resource_name(flat_json_object::get(obj, "data.script_resource")), opts);
+	strcpy(sd.script_resource_name, script_resource.c_str());
 
 	FileBuffer fb(output);
 	BinaryWriter bw(fb);
 	bw.write(sd.script_resource);
+	bw.write(sd.script_resource_name);
 	return 0;
 }
 

+ 1 - 3
src/world/script_world.cpp

@@ -54,9 +54,7 @@ namespace script_world
 		} else {
 			script_i = array::size(sw._script);
 
-			const LuaResource *lr = (LuaResource *)sw._resource_manager->get(RESOURCE_TYPE_SCRIPT, desc.script_resource);
-
-			LuaStack stack = sw._lua_environment->execute(lr, 1);
+			LuaStack stack = sw._lua_environment->require(desc.script_resource_name, 1);
 			stack.push_value(0);
 			sd.module_ref = luaL_ref(stack.L, LUA_REGISTRYINDEX);
 			stack.pop(1);

+ 2 - 1
src/world/types.h

@@ -354,7 +354,8 @@ struct LightDesc
 /// @ingroup World
 struct ScriptDesc
 {
-	StringId64 script_resource; ///< Name of .lua resource.
+	StringId64 script_resource;     ///< Name of .lua resource.
+	char script_resource_name[256]; ///< Name of .lua resource (plain text).
 };
 
 /// Transform description.