aboutsummaryrefslogtreecommitdiff
path: root/addons/voxel-core/engine/importers/voxel_objects.gd
diff options
context:
space:
mode:
Diffstat (limited to 'addons/voxel-core/engine/importers/voxel_objects.gd')
-rw-r--r--addons/voxel-core/engine/importers/voxel_objects.gd112
1 files changed, 112 insertions, 0 deletions
diff --git a/addons/voxel-core/engine/importers/voxel_objects.gd b/addons/voxel-core/engine/importers/voxel_objects.gd
new file mode 100644
index 0000000..e1f2f48
--- /dev/null
+++ b/addons/voxel-core/engine/importers/voxel_objects.gd
@@ -0,0 +1,112 @@
+tool
+extends EditorImportPlugin
+# Import files as VoxelObjects
+
+
+## Enums
+enum Presets { DEFAULT }
+
+
+
+## Built-In Virtual Methods
+func get_visible_name() -> String:
+ return "VoxelObject"
+
+
+func get_importer_name() -> String:
+ return "VoxelCore.VoxelObject"
+
+
+func get_recognized_extensions() -> Array:
+ return [
+ "png", "jpg",
+ "vox",
+ #"qb",
+ #"qbt",
+ #"vxm",
+ ]
+
+
+func get_resource_type() -> String:
+ return "PackedScene"
+
+
+func get_save_extension() -> String:
+ return "tscn"
+
+
+func get_preset_count() -> int:
+ return Presets.size()
+
+
+func get_preset_name(preset : int) -> String:
+ match preset:
+ Presets.DEFAULT:
+ return "Default"
+ _:
+ return "Unknown"
+
+
+func get_import_options(preset : int) -> Array:
+ var preset_options = [
+ {
+ "name": "name",
+ "default_value": "",
+ "usage": PROPERTY_USAGE_EDITOR,
+ },
+ {
+ "name": "voxel_object",
+ "default_value": 0,
+ "property_hint": PROPERTY_HINT_ENUM,
+ "hint_string": "DETECT,VOXEL_MESH",
+ "usage": PROPERTY_USAGE_EDITOR,
+ },
+ {
+ "name": "mesh_mode",
+ "default_value": VoxelMesh.MeshModes.NAIVE,
+ "property_hint": PROPERTY_HINT_ENUM,
+ "hint_string": PoolStringArray(VoxelMesh.MeshModes.keys()).join(","),
+ "usage": PROPERTY_USAGE_EDITOR,
+ },
+ {
+ "name": "center",
+ "default_value": 0,
+ "property_hint": PROPERTY_HINT_ENUM,
+ "hint_string": "NONE,CENTER,CENTER_ABOVE_AXIS",
+ "usage": PROPERTY_USAGE_EDITOR,
+ },
+ ]
+
+ return preset_options
+
+
+func get_option_visibility(option : String, options : Dictionary) -> bool:
+ return true
+
+
+func import(source_file : String, save_path : String, options : Dictionary, r_platform_variants : Array, r_gen_files : Array) -> int:
+ var voxel_object
+ match options.get("voxel_object", 0):
+ _: voxel_object = VoxelMesh.new()
+ var error = voxel_object.load_file(source_file)
+ if error == OK:
+ voxel_object.set_name(source_file.get_file().replace("." + source_file.get_extension(), "") if options["name"].empty() else options["name"])
+ voxel_object.set_mesh_mode(options.get("mesh_mode", VoxelMesh.MeshModes.NAIVE))
+
+ var center = options.get("center", 0)
+ if center > 0:
+ match center:
+ 1:
+ center = Vector3(0.5, 0.5, 0.5)
+ 2:
+ center = Vector3(0.5, 1.0, 0.5)
+ voxel_object.center(center)
+
+ voxel_object.update_mesh()
+
+ var scene = PackedScene.new()
+ error = scene.pack(voxel_object)
+ if error == OK:
+ error = ResourceSaver.save("%s.%s" % [save_path, get_save_extension()], scene)
+ voxel_object.free()
+ return error