diff --git a/.idea/.idea.adatonic/.idea/vcs.xml b/.idea/.idea.adatonic/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/.idea.adatonic/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/PlanetBase.glb b/assets/PlanetBase.glb new file mode 100644 index 0000000..0485efa --- /dev/null +++ b/assets/PlanetBase.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efae792f29c6d0f3a696fed43f2ac0fd487e29513b4ee88f372161913f9e53d0 +size 27453584 diff --git a/assets/PlanetBase.glb.import b/assets/PlanetBase.glb.import new file mode 100644 index 0000000..b7b1cbc --- /dev/null +++ b/assets/PlanetBase.glb.import @@ -0,0 +1,54 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cdtbfiae03msw" +path="res://.godot/imported/PlanetBase.glb-cb9772b7baab7be7a9066dd45b99a7d7.scn" + +[deps] + +source_file="res://assets/PlanetBase.glb" +dest_files=["res://.godot/imported/PlanetBase.glb-cb9772b7baab7be7a9066dd45b99a7d7.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=false +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={ +"meshes": { +"PlanetBase_Icosphere": { +"generate/lightmap_uv": 2, +"generate/lods": 2, +"generate/shadow_meshes": 2, +"lods/normal_merge_angle": 20.0, +"save_to_file/enabled": false, +"save_to_file/fallback_path": "res://sphere.tres", +"save_to_file/path": "uid://2kh0vgcigdse" +} +} +} +gltf/naming_version=2 +gltf/embedded_image_handling=1 diff --git a/assets/PlanetBase.obj b/assets/PlanetBase.obj new file mode 100644 index 0000000..fa9dca1 --- /dev/null +++ b/assets/PlanetBase.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa4f37f8f758f26003e46328afb09e9175329669f15210c40bd0e898f1c78834 +size 23685601 diff --git a/assets/PlanetBase.obj.import b/assets/PlanetBase.obj.import new file mode 100644 index 0000000..fbcfcdd --- /dev/null +++ b/assets/PlanetBase.obj.import @@ -0,0 +1,25 @@ +[remap] + +importer="wavefront_obj" +importer_version=1 +type="Mesh" +uid="uid://65modei4jwaj" +path="res://.godot/imported/PlanetBase.obj-e7dd6f84cf7385297b2403f29d44bb02.mesh" + +[deps] + +files=["res://.godot/imported/PlanetBase.obj-e7dd6f84cf7385297b2403f29d44bb02.mesh"] + +source_file="res://assets/PlanetBase.obj" +dest_files=["res://.godot/imported/PlanetBase.obj-e7dd6f84cf7385297b2403f29d44bb02.mesh", "res://.godot/imported/PlanetBase.obj-e7dd6f84cf7385297b2403f29d44bb02.mesh"] + +[params] + +generate_tangents=true +generate_lods=true +generate_shadow_mesh=true +generate_lightmap_uv2=false +generate_lightmap_uv2_texel_size=0.2 +scale_mesh=Vector3(1, 1, 1) +offset_mesh=Vector3(0, 0, 0) +force_disable_mesh_compression=false diff --git a/assets/PlanetLow.obj b/assets/PlanetLow.obj new file mode 100644 index 0000000..a68796c --- /dev/null +++ b/assets/PlanetLow.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4883191d5cba21ad612eb206eaa94e32d0e87d1508fac9fc4ac3a52c2634e43f +size 316428 diff --git a/assets/PlanetLow.obj.import b/assets/PlanetLow.obj.import new file mode 100644 index 0000000..031782c --- /dev/null +++ b/assets/PlanetLow.obj.import @@ -0,0 +1,25 @@ +[remap] + +importer="wavefront_obj" +importer_version=1 +type="Mesh" +uid="uid://i15y020lbl21" +path="res://.godot/imported/PlanetLow.obj-04144c5140c8d3a6a9a4499e7542afe4.mesh" + +[deps] + +files=["res://.godot/imported/PlanetLow.obj-04144c5140c8d3a6a9a4499e7542afe4.mesh"] + +source_file="res://assets/PlanetLow.obj" +dest_files=["res://.godot/imported/PlanetLow.obj-04144c5140c8d3a6a9a4499e7542afe4.mesh", "res://.godot/imported/PlanetLow.obj-04144c5140c8d3a6a9a4499e7542afe4.mesh"] + +[params] + +generate_tangents=true +generate_lods=true +generate_shadow_mesh=true +generate_lightmap_uv2=false +generate_lightmap_uv2_texel_size=0.2 +scale_mesh=Vector3(1, 1, 1) +offset_mesh=Vector3(0, 0, 0) +force_disable_mesh_compression=false diff --git a/assets/PlanetMed.obj b/assets/PlanetMed.obj new file mode 100644 index 0000000..a4ac6ce --- /dev/null +++ b/assets/PlanetMed.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2eb720087d7f891047bbd9232149989242a8b9701caf6587642f187c5a26c626 +size 5630125 diff --git a/assets/PlanetMed.obj.import b/assets/PlanetMed.obj.import new file mode 100644 index 0000000..1419c86 --- /dev/null +++ b/assets/PlanetMed.obj.import @@ -0,0 +1,25 @@ +[remap] + +importer="wavefront_obj" +importer_version=1 +type="Mesh" +uid="uid://cxpivgqm7x7ky" +path="res://.godot/imported/PlanetMed.obj-a5753ae94b99c04c1b3bfb2440cece04.mesh" + +[deps] + +files=["res://.godot/imported/PlanetMed.obj-a5753ae94b99c04c1b3bfb2440cece04.mesh"] + +source_file="res://assets/PlanetMed.obj" +dest_files=["res://.godot/imported/PlanetMed.obj-a5753ae94b99c04c1b3bfb2440cece04.mesh", "res://.godot/imported/PlanetMed.obj-a5753ae94b99c04c1b3bfb2440cece04.mesh"] + +[params] + +generate_tangents=true +generate_lods=true +generate_shadow_mesh=true +generate_lightmap_uv2=false +generate_lightmap_uv2_texel_size=0.2 +scale_mesh=Vector3(1, 1, 1) +offset_mesh=Vector3(0, 0, 0) +force_disable_mesh_compression=false diff --git a/assets/icosphere.obj b/assets/icosphere.obj new file mode 100644 index 0000000..58b8183 --- /dev/null +++ b/assets/icosphere.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd7662e611447786f40ef0fc50f04220a3f5994ca3ce41981265383288f2ae20 +size 1650 diff --git a/assets/icosphere.obj.import b/assets/icosphere.obj.import new file mode 100644 index 0000000..6fd25f5 --- /dev/null +++ b/assets/icosphere.obj.import @@ -0,0 +1,25 @@ +[remap] + +importer="wavefront_obj" +importer_version=1 +type="Mesh" +uid="uid://bpdmuywq6qd6d" +path="res://.godot/imported/icosphere.obj-18fc8dc1aa0ca7202b62526d6632660d.mesh" + +[deps] + +files=["res://.godot/imported/icosphere.obj-18fc8dc1aa0ca7202b62526d6632660d.mesh"] + +source_file="res://assets/icosphere.obj" +dest_files=["res://.godot/imported/icosphere.obj-18fc8dc1aa0ca7202b62526d6632660d.mesh", "res://.godot/imported/icosphere.obj-18fc8dc1aa0ca7202b62526d6632660d.mesh"] + +[params] + +generate_tangents=true +generate_lods=true +generate_shadow_mesh=true +generate_lightmap_uv2=false +generate_lightmap_uv2_texel_size=0.2 +scale_mesh=Vector3(1, 1, 1) +offset_mesh=Vector3(0, 0, 0) +force_disable_mesh_compression=false diff --git a/resources/planet_gradient.tres b/resources/planet_gradient.tres new file mode 100644 index 0000000..a7d0a93 --- /dev/null +++ b/resources/planet_gradient.tres @@ -0,0 +1,5 @@ +[gd_resource type="Gradient" format=3 uid="uid://b5l44rktieewe"] + +[resource] +offsets = PackedFloat32Array(0.020102732, 0.21077614, 0.4361486, 0.4835682, 0.49508524, 0.49909908, 0.52932715, 0.5585736, 0.6065243, 0.65517426, 1) +colors = PackedColorArray(2.5268645e-07, 3.128499e-07, 0.274243, 1, 8.904189e-07, 2.4065375e-07, 0.42930406, 1, 0.20772403, 0.34871656, 0.66512626, 1, 0.3622311, 0.6195445, 0.94423914, 1, 0.10825918, 0.3611443, 0.64106447, 1, 0.61873, 0.8132518, 0.40761396, 1, 0.35594854, 0.5452644, 0.23284999, 1, 0.77351433, 0.7971149, 0.5667908, 1, 0.7397217, 0.59494364, 0.46294695, 1, 0.3225033, 0.42213485, 0.47578907, 1, 1, 1, 1, 1) diff --git a/resources/simple_gradient.tres b/resources/simple_gradient.tres new file mode 100644 index 0000000..9cfa2ce --- /dev/null +++ b/resources/simple_gradient.tres @@ -0,0 +1,5 @@ +[gd_resource type="Gradient" format=3 uid="uid://cq6xba4c8m2j8"] + +[resource] +offsets = PackedFloat32Array(0, 0.499, 0.501, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.17078295, 0.40157902, 0.9999513, 1, 0.4204993, 0.7579306, 0.19122374, 1, 1, 1, 1, 1) diff --git a/scenes/MainScene.tscn b/scenes/MainScene.tscn new file mode 100644 index 0000000..a7be514 --- /dev/null +++ b/scenes/MainScene.tscn @@ -0,0 +1,199 @@ +[gd_scene format=3 uid="uid://csfh7ptgerpm2"] + +[ext_resource type="Script" uid="uid://bhpic251bgvgk" path="res://src/Main.cs" id="1_611at"] +[ext_resource type="ArrayMesh" uid="uid://65modei4jwaj" path="res://assets/PlanetBase.obj" id="2_k24pf"] +[ext_resource type="Material" uid="uid://c55st036tapeo" path="res://shaders/planet.tres" id="3_ygjfp"] +[ext_resource type="Material" uid="uid://k3teblrpopsb" path="res://shaders/map.tres" id="4_1wiy7"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_uxrcv"] + +[sub_resource type="Sky" id="Sky_tlwt5"] +sky_material = SubResource("ProceduralSkyMaterial_uxrcv") + +[sub_resource type="Environment" id="Environment_rf2cd"] +background_mode = 2 +sky = SubResource("Sky_tlwt5") +ambient_light_source = 3 +reflected_light_source = 2 + +[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_a814b"] + +[sub_resource type="SphereShape3D" id="SphereShape3D_rpqi1"] +radius = 1.0 + +[node name="MainScene" type="Control" unique_id=1070682561 node_paths=PackedStringArray("_yawNode", "_pitchNode", "_cameraNode", "_meshInstance", "World", "_textureRect")] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_611at") +_yawNode = NodePath("TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/Yaw") +_pitchNode = NodePath("TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/Yaw/Pitch") +_cameraNode = NodePath("TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/Yaw/Pitch/Camera3D") +_meshInstance = NodePath("TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/Icosphere") +World = NodePath("TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo") +_textureRect = NodePath("TabContainer/Projection") + +[node name="TabContainer" type="TabContainer" parent="." unique_id=1586027287] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +current_tab = 0 + +[node name="Planet" type="HBoxContainer" parent="TabContainer" unique_id=1786930306] +layout_mode = 2 +metadata/_tab_index = 0 + +[node name="SubViewportContainer" type="SubViewportContainer" parent="TabContainer/Planet" unique_id=58474785] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 1.44 +stretch = true + +[node name="SubViewport" type="SubViewport" parent="TabContainer/Planet/SubViewportContainer" unique_id=1257998631] +handle_input_locally = false +size = Vector2i(677, 617) +render_target_update_mode = 4 + +[node name="ZaWarudo" type="Node3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport" unique_id=937719505] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo" unique_id=610642146] +environment = SubResource("Environment_rf2cd") +camera_attributes = SubResource("CameraAttributesPractical_a814b") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo" unique_id=899426195] +transform = Transform3D(0.88874525, -0.29675773, 0.3493804, 0, 0.7621714, 0.6473753, -0.45840138, -0.5753517, 0.6773762, 0, 0, 0) + +[node name="Icosphere" type="MeshInstance3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo" unique_id=793654005] +transform = Transform3D(0.01, 0, 0, 0, 0.01, 0, 0, 0, 0.01, 0, 0, 0) +mesh = ExtResource("2_k24pf") +surface_material_override/0 = ExtResource("3_ygjfp") + +[node name="Yaw" type="Node3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo" unique_id=2073443785] + +[node name="Pitch" type="Node3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/Yaw" unique_id=98015529] + +[node name="Camera3D" type="Camera3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/Yaw/Pitch" unique_id=1654616370] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30) +fov = 5.0 + +[node name="StaticBody3D" type="StaticBody3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo" unique_id=330930041] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/StaticBody3D" unique_id=299495076] +shape = SubResource("SphereShape3D_rpqi1") + +[node name="PanelContainer" type="PanelContainer" parent="TabContainer/Planet" unique_id=716838825] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="MarginContainer" type="MarginContainer" parent="TabContainer/Planet/PanelContainer" unique_id=249859922] +layout_mode = 2 +theme_override_constants/margin_left = 12 +theme_override_constants/margin_top = 12 +theme_override_constants/margin_right = 12 +theme_override_constants/margin_bottom = 12 + +[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer" unique_id=654818970] +layout_mode = 2 + +[node name="Generate" type="Button" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=662365522] +layout_mode = 2 +text = "Generate" + +[node name="HSeparator" type="HSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=1862016318] +layout_mode = 2 + +[node name="Label2" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=186838891] +layout_mode = 2 +text = "- Point -" + +[node name="HBoxContainer2" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=1345806516] +layout_mode = 2 + +[node name="Margin" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=1465747985] +layout_mode = 2 + +[node name="Label" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=1300757041] +layout_mode = 2 +theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) +text = "Point ID: " + +[node name="PointId" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=1976947082] +unique_name_in_owner = true +layout_mode = 2 +text = "-1" + +[node name="VSeparator1" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=746067660] +layout_mode = 2 + +[node name="Label1" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=1690535936] +layout_mode = 2 +theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) +text = "Height:" + +[node name="PointHeight" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=2115494397] +unique_name_in_owner = true +layout_mode = 2 +text = "-1" + +[node name="Label3" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=1412781677] +layout_mode = 2 +text = " - Plate -" + +[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=471041646] +layout_mode = 2 + +[node name="Margin" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1514412102] +layout_mode = 2 + +[node name="Label1" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1070896445] +layout_mode = 2 +theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) +text = "Plate ID:" + +[node name="PlateId" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=37820014] +unique_name_in_owner = true +layout_mode = 2 +text = "-1" + +[node name="VSeparator1" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1699626450] +layout_mode = 2 + +[node name="Label2" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=288487629] +layout_mode = 2 +theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) +text = "Is Landform:" + +[node name="IsLandform" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=2089133484] +unique_name_in_owner = true +layout_mode = 2 +text = "unknown" + +[node name="VSeparator2" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=75061841] +layout_mode = 2 + +[node name="Label3" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1444405231] +layout_mode = 2 +theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) +text = "Area:" + +[node name="Area" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=849006497] +unique_name_in_owner = true +layout_mode = 2 +text = "0%" + +[node name="Projection" type="TextureRect" parent="TabContainer" unique_id=155743781] +visible = false +material = ExtResource("4_1wiy7") +layout_mode = 2 +expand_mode = 1 +stretch_mode = 5 +metadata/_tab_index = 1 + +[connection signal="tab_changed" from="TabContainer" to="." method="Tab"] +[connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/Generate" to="." method="MakeGo"] diff --git a/shaders/map.gdshader b/shaders/map.gdshader new file mode 100644 index 0000000..a76116d --- /dev/null +++ b/shaders/map.gdshader @@ -0,0 +1,23 @@ +shader_type canvas_item; + +uniform int mode = 1; +uniform sampler2D gradient; +void vertex() { + // Called for every vertex the material is visible on. +} + +void fragment() { + if (mode == 1) { + COLOR = COLOR; + } + if (mode == 2) + { + vec4 ree = texture(gradient, vec2(COLOR.r)); + COLOR = ree; + } +} + +//void light() { +// // Called for every pixel for every light affecting the material. +// // Uncomment to replace the default light processing function with this one. +//} diff --git a/shaders/map.gdshader.uid b/shaders/map.gdshader.uid new file mode 100644 index 0000000..9995057 --- /dev/null +++ b/shaders/map.gdshader.uid @@ -0,0 +1 @@ +uid://b5n8mkb7vo6of diff --git a/shaders/map.tres b/shaders/map.tres new file mode 100644 index 0000000..02fbbaa --- /dev/null +++ b/shaders/map.tres @@ -0,0 +1,12 @@ +[gd_resource type="ShaderMaterial" format=3 uid="uid://k3teblrpopsb"] + +[ext_resource type="Shader" uid="uid://b5n8mkb7vo6of" path="res://shaders/map.gdshader" id="1_l44ik"] +[ext_resource type="Gradient" uid="uid://b5l44rktieewe" path="res://resources/planet_gradient.tres" id="2_1qhyp"] + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_e6qn0"] +gradient = ExtResource("2_1qhyp") + +[resource] +shader = ExtResource("1_l44ik") +shader_parameter/mode = 1 +shader_parameter/gradient = SubResource("GradientTexture1D_e6qn0") diff --git a/shaders/planet.gdshader b/shaders/planet.gdshader new file mode 100644 index 0000000..4b2dc69 --- /dev/null +++ b/shaders/planet.gdshader @@ -0,0 +1,32 @@ +shader_type spatial; +render_mode unshaded; + +uniform int mode = 1; +uniform sampler2D gradient; +varying vec3 world_position; +varying flat float color; +void vertex() { + // Called for every vertex the material is visible on. + world_position = VERTEX; + color = COLOR.r; +} + +void fragment() { + // Called for every pixel the material is visible on. + float temp = sin((world_position.y-95.0) / 60.0); + + temp = clamp(temp, 0.0, 1)*28.0; + if (mode == 1) { + ALBEDO = vec3(COLOR.r, COLOR.g, COLOR.b); + } + if (mode == 2) + { + vec4 ree = texture(gradient, vec2(color)); + ALBEDO = vec3(ree.x, ree.y, ree.z); + } +} + +//void light() { +// // Called for every pixel for every light affecting the material. +// // Uncomment to replace the default light processing function with this one. +//} diff --git a/shaders/planet.gdshader.uid b/shaders/planet.gdshader.uid new file mode 100644 index 0000000..73f97f7 --- /dev/null +++ b/shaders/planet.gdshader.uid @@ -0,0 +1 @@ +uid://bi1msxvmhvcqf diff --git a/shaders/planet.tres b/shaders/planet.tres new file mode 100644 index 0000000..d075bda --- /dev/null +++ b/shaders/planet.tres @@ -0,0 +1,13 @@ +[gd_resource type="ShaderMaterial" format=3 uid="uid://c55st036tapeo"] + +[ext_resource type="Shader" uid="uid://bi1msxvmhvcqf" path="res://shaders/planet.gdshader" id="1_p4gwj"] +[ext_resource type="Gradient" uid="uid://b5l44rktieewe" path="res://resources/planet_gradient.tres" id="2_tjikr"] + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_5ojgt"] +gradient = ExtResource("2_tjikr") + +[resource] +render_priority = 0 +shader = ExtResource("1_p4gwj") +shader_parameter/mode = 1 +shader_parameter/gradient = SubResource("GradientTexture1D_5ojgt") diff --git a/src/Main.cs b/src/Main.cs new file mode 100644 index 0000000..6a0b529 --- /dev/null +++ b/src/Main.cs @@ -0,0 +1,139 @@ +#nullable enable +using Godot; +using System; +using System.Globalization; +using System.Linq; +using Godot.Collections; + +public partial class Main : Control +{ + private bool _moving = false; + [Export] + private Node3D _yawNode; + [Export] + private Node3D _pitchNode; + [Export] + private Camera3D _cameraNode; + + [Export] private float _moveSensitivity = 1f/500f; + [Export] private float _zoomSensitivity = 1f; + + [Export] private MeshInstance3D _meshInstance; + [Export] private Node3D World; + [Export] private TextureRect _textureRect; + + private PlanetHelper.VertexData? _vertex = null; + private PlanetHelper.PlateData? _plate = null; + + private PlanetHelper _planetHelper; + public override void _Ready() + { + _planetHelper = new PlanetHelper(_meshInstance, _textureRect); + UpdateStats(); + } + + private const float RayLength = 1000.0f; + public override void _Input(InputEvent @event) + { + if (@event is InputEventMouseButton mouseEvent) + { + if (mouseEvent.ButtonIndex == MouseButton.Left) + { + _moving = mouseEvent.Pressed; + } + if (mouseEvent.ButtonIndex == MouseButton.WheelUp) + { + _cameraNode.Position += new Vector3(0, 0, _zoomSensitivity); + } + + if (mouseEvent.ButtonIndex == MouseButton.WheelDown) + { + _cameraNode.Position -= new Vector3(0, 0, _zoomSensitivity); + } + } + else if (@event is InputEventMouseMotion motionEvent && _moving) + { + _yawNode.RotateY(-motionEvent.ScreenRelative.X * _moveSensitivity); + _pitchNode.RotateX(-motionEvent.ScreenRelative.Y * _moveSensitivity); + } + } + + public void Tab(int tab) + { + if (tab == 1) + { + Projector.GatherPoints(_planetHelper); + _textureRect.Texture = Projector.Render(_planetHelper); + } + } + + public override void _Process(double delta) + { + if (Input.IsActionJustPressed("mouse_secondary")) + { + var from = _cameraNode.ProjectRayOrigin(GetViewport().GetMousePosition()); + var to = from + _cameraNode.ProjectRayNormal(GetViewport().GetMousePosition()) * RayLength; + var result = World.GetWorld3D().DirectSpaceState.IntersectRay(PhysicsRayQueryParameters3D.Create(from, to)); + if (result.Count > 0) + { + Vector3? pos = result["position"].AsVector3(); + if (pos != null) + { + GD.Print($"Hit: '{pos}'"); + var closest = _planetHelper.Octree.SearchNearest(pos ?? Vector3.Zero)?.Id; + if (closest != null) + { + _vertex = _planetHelper.Vertices.Single(v => v.Id == closest); + if (_planetHelper.Plates.Count > 0 && _vertex.PlateId != -1) + _plate = _planetHelper.Plates[_vertex.PlateId]; + else + _plate = null; + UpdateStats(); + } + } + } + } + + if (Input.IsActionJustPressed("spacebar")) + { + _planetHelper.Advance = true; + } + if (Input.IsActionJustPressed("enter")) + { + _planetHelper.AutoRun = true; + } + _planetHelper.Process(); + } + public void UpdateStats() + { + if (_vertex != null) + { + var height = -9000f * (0.5f - _vertex.Height) * 2f; + GetNode