diff --git a/Assets/Placeholders/3D/Project.gdshader b/Assets/Editor/Project.gdshader similarity index 79% rename from Assets/Placeholders/3D/Project.gdshader rename to Assets/Editor/Project.gdshader index cb9db41..8442179 100644 --- a/Assets/Placeholders/3D/Project.gdshader +++ b/Assets/Editor/Project.gdshader @@ -1,12 +1,14 @@ shader_type spatial; uniform sampler2D tilemap_camera: repeat_disable; -uniform float scale = 8; +uniform vec2 scale = vec2(8); +uniform vec2 offset = vec2(0); void vertex() { vec3 world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz; vec2 pos = world_position.xz; pos.y -= world_position.y; + pos += offset; pos /= scale; UV = pos; } diff --git a/Assets/Editor/voronoi-cube.png b/Assets/Editor/voronoi-cube.png new file mode 100644 index 0000000..bced6ec Binary files /dev/null and b/Assets/Editor/voronoi-cube.png differ diff --git a/Assets/Editor/voronoi-cube.png.import b/Assets/Editor/voronoi-cube.png.import new file mode 100644 index 0000000..b3e2528 --- /dev/null +++ b/Assets/Editor/voronoi-cube.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://773fvksy2hdp" +path="res://.godot/imported/voronoi-cube.png-a1f9b93c2df6016ace96d3c0f8a65468.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Editor/voronoi-cube.png" +dest_files=["res://.godot/imported/voronoi-cube.png-a1f9b93c2df6016ace96d3c0f8a65468.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/heightmap_meshlibrary.tres b/Assets/heightmap_meshlibrary.tres new file mode 100644 index 0000000..b855846 --- /dev/null +++ b/Assets/heightmap_meshlibrary.tres @@ -0,0 +1,14 @@ +[gd_resource type="MeshLibrary" load_steps=3 format=3 uid="uid://wivhy7dy5i1n"] + +[ext_resource type="Texture2D" uid="uid://773fvksy2hdp" path="res://Assets/Editor/voronoi-cube.png" id="1_rwoe1"] + +[sub_resource type="BoxMesh" id="BoxMesh_q3bcf"] + +[resource] +item/0/name = "Full Cube" +item/0/mesh = SubResource("BoxMesh_q3bcf") +item/0/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +item/0/shapes = [] +item/0/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +item/0/navigation_layers = 1 +item/0/preview = ExtResource("1_rwoe1") diff --git a/Scenes/Debugging/Old/Square.tscn b/Scenes/Debugging/Old/Square.tscn index 969cbd7..439bfd8 100644 --- a/Scenes/Debugging/Old/Square.tscn +++ b/Scenes/Debugging/Old/Square.tscn @@ -2,9 +2,9 @@ [ext_resource type="TileSet" uid="uid://coub5ioem1v7o" path="res://Assets/tileset.tres" id="1_v8tdb"] [ext_resource type="MeshLibrary" uid="uid://ctek5p2fwk8gc" path="res://Assets/Placeholders/3D/mesh_library.tres" id="2_hkfg0"] -[ext_resource type="Shader" path="res://Assets/Placeholders/3D/Project.gdshader" id="3_8af8g"] +[ext_resource type="Shader" path="res://Assets/Editor/Project.gdshader" id="3_8af8g"] -[sub_resource type="ViewportTexture" id="ViewportTexture_r414k"] +[sub_resource type="ViewportTexture" id="ViewportTexture_6xjcl"] viewport_path = NodePath("SubViewport") [sub_resource type="ShaderMaterial" id="ShaderMaterial_e3oir"] @@ -12,7 +12,7 @@ resource_local_to_scene = true render_priority = 0 shader = ExtResource("3_8af8g") shader_parameter/scale = 8.0 -shader_parameter/tilemap_camera = SubResource("ViewportTexture_r414k") +shader_parameter/tilemap_camera = SubResource("ViewportTexture_6xjcl") [sub_resource type="BoxMesh" id="BoxMesh_03j8n"] material = SubResource("ShaderMaterial_e3oir") diff --git a/addons/editor_helper/Add.svg b/addons/editor_helper/Add.svg new file mode 100644 index 0000000..eaeb043 --- /dev/null +++ b/addons/editor_helper/Add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/editor_helper/Add.svg.import b/addons/editor_helper/Add.svg.import new file mode 100644 index 0000000..a33d518 --- /dev/null +++ b/addons/editor_helper/Add.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0ed20ix8ugpl" +path="res://.godot/imported/Add.svg-8040edfa4f8699d0a514bb9170ba578d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/editor_helper/Add.svg" +dest_files=["res://.godot/imported/Add.svg-8040edfa4f8699d0a514bb9170ba578d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/editor_helper/BasePlate.svg b/addons/editor_helper/BasePlate.svg new file mode 100644 index 0000000..74d57df --- /dev/null +++ b/addons/editor_helper/BasePlate.svg @@ -0,0 +1,40 @@ + + + + + + diff --git a/addons/editor_helper/BasePlate.svg.import b/addons/editor_helper/BasePlate.svg.import new file mode 100644 index 0000000..90cf483 --- /dev/null +++ b/addons/editor_helper/BasePlate.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bjaym0poii0lp" +path="res://.godot/imported/BasePlate.svg-4b97e5a0d6089afcd35ed595fe2c6c54.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/editor_helper/BasePlate.svg" +dest_files=["res://.godot/imported/BasePlate.svg-4b97e5a0d6089afcd35ed595fe2c6c54.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/editor_helper/Collapse.svg b/addons/editor_helper/Collapse.svg new file mode 100644 index 0000000..048ac81 --- /dev/null +++ b/addons/editor_helper/Collapse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/editor_helper/Collapse.svg.import b/addons/editor_helper/Collapse.svg.import new file mode 100644 index 0000000..7f42df2 --- /dev/null +++ b/addons/editor_helper/Collapse.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d3dtusyl30nq0" +path="res://.godot/imported/Collapse.svg-4f248181360e4ac0865c9973e661b2ed.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/editor_helper/Collapse.svg" +dest_files=["res://.godot/imported/Collapse.svg-4f248181360e4ac0865c9973e661b2ed.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/editor_helper/Down.svg b/addons/editor_helper/Down.svg new file mode 100644 index 0000000..943e576 --- /dev/null +++ b/addons/editor_helper/Down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/editor_helper/Down.svg.import b/addons/editor_helper/Down.svg.import new file mode 100644 index 0000000..75cd848 --- /dev/null +++ b/addons/editor_helper/Down.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bqmald1jy1a2c" +path="res://.godot/imported/Down.svg-f372b7cca346d21da6e294a5e170d35c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/editor_helper/Down.svg" +dest_files=["res://.godot/imported/Down.svg-f372b7cca346d21da6e294a5e170d35c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/editor_helper/Expand.svg b/addons/editor_helper/Expand.svg new file mode 100644 index 0000000..9abf5f4 --- /dev/null +++ b/addons/editor_helper/Expand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/editor_helper/Expand.svg.import b/addons/editor_helper/Expand.svg.import new file mode 100644 index 0000000..6410772 --- /dev/null +++ b/addons/editor_helper/Expand.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cg40j0yoi1sq0" +path="res://.godot/imported/Expand.svg-cea13ac131c9bfa54e65e2534de4027a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/editor_helper/Expand.svg" +dest_files=["res://.godot/imported/Expand.svg-cea13ac131c9bfa54e65e2534de4027a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/editor_helper/HeightMap.svg b/addons/editor_helper/HeightMap.svg new file mode 100644 index 0000000..bc4fe32 --- /dev/null +++ b/addons/editor_helper/HeightMap.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + diff --git a/addons/editor_helper/HeightMap.svg.import b/addons/editor_helper/HeightMap.svg.import new file mode 100644 index 0000000..189cf26 --- /dev/null +++ b/addons/editor_helper/HeightMap.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhbqj6pa3geas" +path="res://.godot/imported/HeightMap.svg-8b4db60f40a4b87e465619d68a3f1b08.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/editor_helper/HeightMap.svg" +dest_files=["res://.godot/imported/HeightMap.svg-8b4db60f40a4b87e465619d68a3f1b08.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/editor_helper/New.svg b/addons/editor_helper/New.svg new file mode 100644 index 0000000..8ac4eea --- /dev/null +++ b/addons/editor_helper/New.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/editor_helper/New.svg.import b/addons/editor_helper/New.svg.import new file mode 100644 index 0000000..ff5934d --- /dev/null +++ b/addons/editor_helper/New.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://djvtp1nbp5ib5" +path="res://.godot/imported/New.svg-48ddecfdcb486cb2a23484b9c5d725f7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/editor_helper/New.svg" +dest_files=["res://.godot/imported/New.svg-48ddecfdcb486cb2a23484b9c5d725f7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/editor_helper/Refresh.svg b/addons/editor_helper/Refresh.svg new file mode 100644 index 0000000..d278d9b --- /dev/null +++ b/addons/editor_helper/Refresh.svg @@ -0,0 +1,37 @@ + + + + + + diff --git a/addons/editor_helper/Refresh.svg.import b/addons/editor_helper/Refresh.svg.import new file mode 100644 index 0000000..82a2913 --- /dev/null +++ b/addons/editor_helper/Refresh.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://df52p7ftdm52e" +path="res://.godot/imported/Refresh.svg-045b521bebc8968ffacd1f3d419799f8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/editor_helper/Refresh.svg" +dest_files=["res://.godot/imported/Refresh.svg-045b521bebc8968ffacd1f3d419799f8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/editor_helper/TileMap.svg b/addons/editor_helper/TileMap.svg new file mode 100644 index 0000000..f86d2a9 --- /dev/null +++ b/addons/editor_helper/TileMap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/editor_helper/TileMap.svg.import b/addons/editor_helper/TileMap.svg.import new file mode 100644 index 0000000..da859f3 --- /dev/null +++ b/addons/editor_helper/TileMap.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://71btnu3srsav" +path="res://.godot/imported/TileMap.svg-06eac9cf0e8a760e3cb4b7035235fd87.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/editor_helper/TileMap.svg" +dest_files=["res://.godot/imported/TileMap.svg-06eac9cf0e8a760e3cb4b7035235fd87.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/editor_helper/Up.svg b/addons/editor_helper/Up.svg new file mode 100644 index 0000000..609db3f --- /dev/null +++ b/addons/editor_helper/Up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/editor_helper/Up.svg.import b/addons/editor_helper/Up.svg.import new file mode 100644 index 0000000..31b2fda --- /dev/null +++ b/addons/editor_helper/Up.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d21g7jrsdyc8p" +path="res://.godot/imported/Up.svg-8f5b8e04b97adc16f6123f132e6fef37.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/editor_helper/Up.svg" +dest_files=["res://.godot/imported/Up.svg-8f5b8e04b97adc16f6123f132e6fef37.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/editor_helper/dock.gd b/addons/editor_helper/dock.gd new file mode 100644 index 0000000..5298978 --- /dev/null +++ b/addons/editor_helper/dock.gd @@ -0,0 +1,150 @@ +@tool +extends Control + +#func _ready(): + #EditorInterface.get_selection().selection_changed.connect(update_layer_number) + +func _process(_delta): + update_layer_number() + +func _on_expand_pressed(): + var scene = get_scene() + if !is_scene_expanded(scene): return await error_not_expanded() + + update_proj_map() + +func _on_up_pressed(): + move_up_or_down(1) + +func _on_down_pressed(): + move_up_or_down(-1) + +func _on_edit_2d_pressed(): + var scene = get_scene() + if !is_scene_expanded(scene): return await error_not_expanded() + + focus_node(scene.get_node("TileMap").get_child(0)) + +func _on_edit_3d_pressed(): + var scene = get_scene() + if !is_scene_expanded(scene): return await error_not_expanded() + + update_proj_map() + focus_node(scene.get_node("HeightMap")) + +func _on_update_pressed(): + update_proj_map() + +func _on_create_baseplate_pressed(): + var scene = get_scene() + if !is_scene_expanded(scene): return await error_not_expanded() + + var heightmap: GridMap = scene.get_node("HeightMap") + var maps = scene.get_node("TileMap") + var item_list = heightmap.mesh_library.get_item_list() + var cube = item_list[0] + print(cube) + + for map: TileMapLayer in maps.get_children(): + if map is not TileMapLayer: continue + for cell in map.get_used_cells(): + heightmap.set_cell_item(Vector3i(cell.x, -1, cell.y), cube) + +func move_up_or_down(direction: int): + var selection = EditorInterface.get_selection().get_selected_nodes() + if len(selection) != 1: return await error_not_editing_tilemap() + selection = selection[0] + if selection is GridMap: + #EditorCommandPalette + #var event = InputEventKey.new() + #event.physical_keycode = KEY_Q + #event.pressed = true + #Input.parse_input_event(event) + #event.pressed = false + #Input.parse_input_event(event) + #InputMap.action_get_events("floor") + var floor: Vector3 = selection.get(&"metadata/_editor_floor_") + floor.y += direction + selection.set(&"metadata/_editor_floor_", floor) + EditorInterface.save_scene() + EditorInterface.reload_scene_from_path(get_scene().scene_file_path) + update_proj_map() + elif selection is TileMapLayer: + var index = selection.get_index() + direction + if index == -1: return + var target = selection.get_parent().get_child(index) + if target != null: focus_node(target) + #update_layer_number() + +func update_layer_number(): + var s = "N/A ¯\\_(ツ)_/¯" + var selection = EditorInterface.get_selection().get_selected_nodes() + if len(selection) == 1: + selection = selection[0] + if selection is GridMap: + var v = selection.get(&"metadata/_editor_floor_").y + if v == -1: + s = "-1 (Baseplate)" + else: + s = str(v) + if selection is TileMapLayer: + s = str(selection.get_index()) + $"VBoxContainer/Current Layer".text = "Current layer: %s" % s + +func focus_node(node: Node): + var selection = EditorInterface.get_selection() + selection.clear() + selection.add_node(node) + +func get_scene() -> Node: + return EditorInterface.get_edited_scene_root() + +func is_scene_expanded(scene: Node) -> bool: + if !scene: return false + return scene.has_node("NotMinified") + +func error(message: String): + var dialog = AcceptDialog.new() + dialog.dialog_text = message + EditorInterface.popup_dialog_centered(dialog) + await dialog.close_requested + dialog.queue_free() + +func error_not_expanded(): + error("This scene is not an expanded map!") + +func error_not_editing_tilemap(): + error("Please start editing a map before using this button!") + +func heightmap_set_proj_map(height_map: GridMap, proj_vp: SubViewport, rect: Rect2i): + var ml = load("res://Assets/heightmap_meshlibrary.tres").duplicate() + var cube: BoxMesh = ml.get(&"item/0/mesh").duplicate() + var sm = ShaderMaterial.new() + sm.shader = load("res://Assets/Editor/Project.gdshader") + sm.set(&"shader_parameter/tilemap_camera", proj_vp.get_texture()) + sm.set(&"shader_parameter/offset", -rect.position as Vector2) + sm.set(&"shader_parameter/scale", rect.size as Vector2) + cube.material = sm + ml.set(&"item/0/mesh", cube) + height_map.mesh_library = ml + +func update_proj_map(): + var scene = get_scene() + if !is_scene_expanded(scene): return error_not_expanded() + + var maps = scene.get_node("TileMap").duplicate(0) + var proj_vp = scene.get_node("ProjectionViewport") + if proj_vp.has_node("TileMap"): proj_vp.get_node("TileMap").free() + proj_vp.add_child(maps) + #maps.owner = scene + + var total_rect = Rect2i() + for map: TileMapLayer in maps.get_children(): + if map is not TileMapLayer: continue + total_rect = total_rect.merge(map.get_used_rect()) + #map.owner = scene + + maps.position = total_rect.position * -128 + proj_vp.size = total_rect.size.max(Vector2i.ONE) * 128 + + heightmap_set_proj_map(scene.get_node("HeightMap"), proj_vp, total_rect) diff --git a/addons/editor_helper/dock.tscn b/addons/editor_helper/dock.tscn new file mode 100644 index 0000000..ea32de2 --- /dev/null +++ b/addons/editor_helper/dock.tscn @@ -0,0 +1,98 @@ +[gd_scene load_steps=11 format=3 uid="uid://d1bj8t8yjv2uj"] + +[ext_resource type="Texture2D" uid="uid://d21g7jrsdyc8p" path="res://addons/editor_helper/Up.svg" id="1_pbfaa"] +[ext_resource type="Texture2D" uid="uid://djvtp1nbp5ib5" path="res://addons/editor_helper/New.svg" id="1_py207"] +[ext_resource type="Script" path="res://addons/editor_helper/dock.gd" id="1_t1280"] +[ext_resource type="Texture2D" uid="uid://d3dtusyl30nq0" path="res://addons/editor_helper/Collapse.svg" id="2_d6cq4"] +[ext_resource type="Texture2D" uid="uid://bqmald1jy1a2c" path="res://addons/editor_helper/Down.svg" id="2_ek7b6"] +[ext_resource type="Texture2D" uid="uid://cg40j0yoi1sq0" path="res://addons/editor_helper/Expand.svg" id="3_73lev"] +[ext_resource type="Texture2D" uid="uid://71btnu3srsav" path="res://addons/editor_helper/TileMap.svg" id="3_ri7dm"] +[ext_resource type="Texture2D" uid="uid://dhbqj6pa3geas" path="res://addons/editor_helper/HeightMap.svg" id="4_ie2iw"] +[ext_resource type="Texture2D" uid="uid://df52p7ftdm52e" path="res://addons/editor_helper/Refresh.svg" id="8_aph12"] +[ext_resource type="Texture2D" uid="uid://bjaym0poii0lp" path="res://addons/editor_helper/BasePlate.svg" id="10_l2bcy"] + +[node name="Mapping" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_t1280") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="New" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Create new map" +icon = ExtResource("1_py207") +expand_icon = true + +[node name="Minify" type="Button" parent="VBoxContainer"] +layout_mode = 2 +tooltip_text = "Removes editor-only elements from the map." +text = "Minify map" +icon = ExtResource("2_d6cq4") +expand_icon = true + +[node name="Expand" type="Button" parent="VBoxContainer"] +layout_mode = 2 +tooltip_text = "Re-adds editor-only elements to the map." +text = "Expand map" +icon = ExtResource("3_73lev") +expand_icon = true + +[node name="Current Layer" type="Label" parent="VBoxContainer"] +layout_mode = 2 +text = "Current layer: N/A ¯\\_(ツ)_/¯" +horizontal_alignment = 1 + +[node name="Up" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Go up a layer" +icon = ExtResource("1_pbfaa") +expand_icon = true + +[node name="Down" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Go down a layer" +icon = ExtResource("2_ek7b6") +expand_icon = true + +[node name="Edit 2D" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Edit 2D TileMap" +icon = ExtResource("3_ri7dm") +expand_icon = true + +[node name="Edit 3D" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Edit 3D HeightMap" +icon = ExtResource("4_ie2iw") +expand_icon = true + +[node name="Update" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Update projected map" +icon = ExtResource("8_aph12") +expand_icon = true + +[node name="Create Baseplate" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Create HeightMap baseplate" +icon = ExtResource("10_l2bcy") +expand_icon = true + +[connection signal="pressed" from="VBoxContainer/Expand" to="." method="_on_expand_pressed"] +[connection signal="pressed" from="VBoxContainer/Up" to="." method="_on_up_pressed"] +[connection signal="pressed" from="VBoxContainer/Down" to="." method="_on_down_pressed"] +[connection signal="pressed" from="VBoxContainer/Edit 2D" to="." method="_on_edit_2d_pressed"] +[connection signal="pressed" from="VBoxContainer/Edit 3D" to="." method="_on_edit_3d_pressed"] +[connection signal="pressed" from="VBoxContainer/Update" to="." method="_on_update_pressed"] +[connection signal="pressed" from="VBoxContainer/Create Baseplate" to="." method="_on_create_baseplate_pressed"] diff --git a/addons/editor_helper/editor_helper.gd b/addons/editor_helper/editor_helper.gd new file mode 100644 index 0000000..05b936b --- /dev/null +++ b/addons/editor_helper/editor_helper.gd @@ -0,0 +1,12 @@ +@tool +extends EditorPlugin + +var dock + +func _enter_tree(): + dock = preload("res://addons/editor_helper/dock.tscn").instantiate() + add_control_to_dock(DOCK_SLOT_LEFT_UR, dock) + +func _exit_tree(): + remove_control_from_docks(dock) + dock.free() diff --git a/addons/editor_helper/plugin.cfg b/addons/editor_helper/plugin.cfg new file mode 100644 index 0000000..f12fc7e --- /dev/null +++ b/addons/editor_helper/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Land Grifter Editor Helper" +description="Land Grifter Editor Helper, made to help with mapping" +author="Charlotte (CenTdemeern1)" +version="" +script="editor_helper.gd" diff --git a/addons/editor_helper/template.tscn b/addons/editor_helper/template.tscn new file mode 100644 index 0000000..465d570 --- /dev/null +++ b/addons/editor_helper/template.tscn @@ -0,0 +1,62 @@ +[gd_scene load_steps=8 format=4 uid="uid://cm7vfupftbsu8"] + +[ext_resource type="TileSet" uid="uid://coub5ioem1v7o" path="res://Assets/tileset.tres" id="1_0y2ly"] +[ext_resource type="Texture2D" uid="uid://773fvksy2hdp" path="res://Assets/Editor/voronoi-cube.png" id="2_7oxkx"] +[ext_resource type="Shader" path="res://Assets/Editor/Project.gdshader" id="2_e7bie"] + +[sub_resource type="ViewportTexture" id="ViewportTexture_qt304"] +viewport_path = NodePath("ProjectionViewport") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_qkhvu"] +render_priority = 0 +shader = ExtResource("2_e7bie") +shader_parameter/scale = Vector2(7, 7) +shader_parameter/offset = Vector2(2, 2) +shader_parameter/tilemap_camera = SubResource("ViewportTexture_qt304") + +[sub_resource type="BoxMesh" id="BoxMesh_ce6ak"] +material = SubResource("ShaderMaterial_qkhvu") + +[sub_resource type="MeshLibrary" id="MeshLibrary_yl7gh"] +item/0/name = "Full Cube" +item/0/mesh = SubResource("BoxMesh_ce6ak") +item/0/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +item/0/shapes = [] +item/0/navigation_mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +item/0/navigation_layers = 1 +item/0/preview = ExtResource("2_7oxkx") + +[node name="Template" type="Node2D"] +metadata/_edit_lock_ = true +metadata/_edit_group_ = true + +[node name="NotMinified" type="Node" parent="."] + +[node name="TileMap" type="Node2D" parent="."] +metadata/_edit_lock_ = true + +[node name="TileMapLayer" type="TileMapLayer" parent="TileMap"] +tile_map_data = PackedByteArray("AAD+/wEAAAAAAAAAAAD/////AAAAAAAAAAD//wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAQAAAAAAAAAAAABAAAAAwAAAAAAAAABAAEAAgAAAAAAAAABAAIAAQAAAAAAAAABAAMAAQAAAAAAAAABAAQAAAAAAAAAAAACAAAAAwAAAAAAAAACAAEAAgAAAAAAAAACAAIAAQAAAAAAAAACAAMAAQAAAAAAAAACAAQAAAAAAAAAAAADAAAAAAAAAAAAAAADAAEAAAAAAAAAAAADAAIAAAAAAAAAAAADAAMAAAAAAAAAAAADAAQAAAAAAAAAAAAEAAEAAAAAAAAAAAAEAAIAAAAAAAAAAAAEAAMAAAAAAAAAAAD+//7/AAAAAAAAAAD///7/AAAAAAAAAAAAAP7/AAAAAAAAAAABAP7/AAAAAAAAAAACAP7/AAAAAAAAAAACAP//AAAAAAAAAAADAP//AAAAAAAAAAADAP7/AAAAAAAAAAABAP//AAAAAAAAAAAAAP//AAAAAAAAAAD//wAAAAAAAAAAAAD+/wAAAAAAAAAAAAD+////AAAAAAAAAAA=") +tile_set = ExtResource("1_0y2ly") + +[node name="TileMapLayer2" type="TileMapLayer" parent="TileMap"] +tile_set = ExtResource("1_0y2ly") + +[node name="TileMapLayer3" type="TileMapLayer" parent="TileMap"] +tile_set = ExtResource("1_0y2ly") + +[node name="TileMapLayer4" type="TileMapLayer" parent="TileMap"] +tile_set = ExtResource("1_0y2ly") + +[node name="HeightMap" type="GridMap" parent="."] +mesh_library = SubResource("MeshLibrary_yl7gh") +cell_size = Vector3(1, 1, 1) +data = { +"cells": PackedInt32Array(-65536, 0, 0, -65535, 0, 0, -65536, 1, 0, -65535, 1, 0, -65535, 65535, 0, -65535, 65534, 0, -65536, 65534, 0, -1, 65534, 0, -1, 65535, 0, -1, 0, 0, -65536, 65535, 0, -2, 0, 0, -2, 1, 0, -1, 1, 0, -2, 65535, 0, -2, 65534, 0, -65536, 2, 0, -65536, 3, 0, -65536, 4, 0, -65535, 4, 0, -65535, 3, 0, -65535, 2, 0, -65534, 4, 0, -65534, 3, 0, -65534, 2, 0, -65534, 1, 0, -65534, 0, 0, -65533, 0, 0, -65532, 1, 0, -65532, 2, 0, -65533, 2, 0, -65533, 3, 0, -65533, 4, 0, -65533, 1, 0, -65532, 3, 0, -65534, 65535, 0, -65533, 65535, 0, -65534, 65534, 0, -65533, 65534, 0, 2, 3, 0, 1, 3, 0, 1, 2, 0, 2, 2, 0, 65538, 2, 0, 65537, 2, 0, 65537, 3, 0, 65538, 3, 0) +} +metadata/_edit_lock_ = true +metadata/_editor_floor_ = Vector3(0, -1, 0) + +[node name="ProjectionViewport" type="SubViewport" parent="."] +disable_3d = true +size = Vector2i(896, 896) diff --git a/project.godot b/project.godot index 6360675..de7cdad 100644 --- a/project.godot +++ b/project.godot @@ -13,3 +13,7 @@ config_version=5 config/name="Land Grifter" config/features=PackedStringArray("4.3", "Forward Plus") config/icon="res://icon.svg" + +[editor_plugins] + +enabled=PackedStringArray("res://addons/editor_helper/plugin.cfg")