aboutsummaryrefslogtreecommitdiff
path: root/addons/voxel-core/engine/importers
diff options
context:
space:
mode:
authorjacopograndi <jacopo.grandi@outlook.it>2021-12-09 00:52:59 +0100
committerjacopograndi <jacopo.grandi@outlook.it>2021-12-09 00:52:59 +0100
commit0f518727c28d3204415db14c7ca0e4f7cb653677 (patch)
treea595121771b69a52f17154d8e5c61b7e4b2b8190 /addons/voxel-core/engine/importers
working
Diffstat (limited to 'addons/voxel-core/engine/importers')
-rw-r--r--addons/voxel-core/engine/importers/meshes.gd108
-rw-r--r--addons/voxel-core/engine/importers/voxel_objects.gd112
-rw-r--r--addons/voxel-core/engine/importers/voxel_sets.gd66
3 files changed, 286 insertions, 0 deletions
diff --git a/addons/voxel-core/engine/importers/meshes.gd b/addons/voxel-core/engine/importers/meshes.gd
new file mode 100644
index 0000000..8b2dbbd
--- /dev/null
+++ b/addons/voxel-core/engine/importers/meshes.gd
@@ -0,0 +1,108 @@
+tool
+extends EditorImportPlugin
+# Import files as static Mesh Resource, not to be confused with VoxelObjects
+
+
+
+## Enums
+enum Presets { DEFAULT }
+
+
+
+## Built-In Virtual Methods
+func get_visible_name() -> String:
+ return "MeshOfVoxels"
+
+
+func get_importer_name() -> String:
+ return "VoxelCore.MeshOfVoxels"
+
+
+func get_recognized_extensions() -> Array:
+ return [
+ "png", "jpg",
+ "vox",
+ #"qb",
+ #"qbt",
+ #"vxm",
+ ]
+
+
+func get_resource_type() -> String:
+ return "Mesh"
+
+
+func get_save_extension() -> String:
+ return "mesh"
+
+
+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": "mesh_mode",
+ "default_value": VoxelMesh.MeshModes.GREEDY,
+ "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,
+ },
+ ]
+
+ match preset:
+ Presets.DEFAULT:
+ pass
+
+ 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 read := Reader.read_file(source_file)
+ var error = read.get("error", FAILED)
+ if error == OK:
+ var voxel_mesh = VoxelMesh.new()
+ voxel_mesh.voxel_set = VoxelSet.new()
+
+ voxel_mesh.set_mesh_mode(options.get("mesh_mode", VoxelMesh.MeshModes.GREEDY))
+ voxel_mesh.voxel_set.set_voxels(read["palette"])
+ for voxel_position in read["voxels"]:
+ voxel_mesh.set_voxel(voxel_position, read["voxels"][voxel_position])
+
+ 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_mesh.center(center)
+
+ voxel_mesh.update_mesh()
+
+ error = ResourceSaver.save(
+ '%s.%s' % [save_path, get_save_extension()],
+ voxel_mesh.mesh)
+
+ voxel_mesh.free()
+ return error
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
diff --git a/addons/voxel-core/engine/importers/voxel_sets.gd b/addons/voxel-core/engine/importers/voxel_sets.gd
new file mode 100644
index 0000000..fc560b4
--- /dev/null
+++ b/addons/voxel-core/engine/importers/voxel_sets.gd
@@ -0,0 +1,66 @@
+tool
+extends EditorImportPlugin
+
+
+
+## Enums
+enum Presets { DEFAULT }
+
+
+
+## Built-In Virtual Methods
+func get_visible_name() -> String:
+ return "VoxelSet"
+
+
+func get_importer_name() -> String:
+ return "VoxelCore.VoxelSet"
+
+
+func get_recognized_extensions() -> Array:
+ return [
+ "png", "jpg",
+ "vox",
+ "gpl",
+ ]
+
+
+func get_resource_type() -> String:
+ return "Resource"
+
+
+func get_save_extension() -> String:
+ return "tres"
+
+
+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 = [
+
+ ]
+
+ 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_set := VoxelSet.new()
+ var error = voxel_set.load_file(source_file)
+ if error == OK:
+ voxel_set.request_refresh()
+ error = ResourceSaver.save("%s.%s" % [save_path, get_save_extension()], voxel_set)
+ return error