diff --git a/.forgejo/hypsographic-curve.jpg b/.forgejo/hypsographic-curve.jpg new file mode 100644 index 0000000..3e1efb9 --- /dev/null +++ b/.forgejo/hypsographic-curve.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41b3a3cb6ccb59cf3a3eb40809ddbc1c7090eb5a7010854527e96d76da83b3d7 +size 56070 diff --git a/README.md b/README.md index 40fbab5..c8dfb02 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,8 @@ This project is licensed under the MIT License - see the LICENSE.md file for det * [Fractal Philosophy's video](https://www.youtube.com/watch?v=7xL0udlhnqI) * [Devote's video](https://www.youtube.com/watch?v=CeJz8tsgCPw) * [DomPizzie's readme template](https://gist.github.com/DomPizzie/7a5ff55ffa9081f2de27c315f5018afc) +* [Jyri Puputti](https://github.com/puputskov) - Math Genius +* [Mikael Mustonen](https://github.com/wastedalmond) - Color Genious ## End ![Exported Planet](.forgejo/export.png?raw=true) \ No newline at end of file diff --git a/assets/PlanetBase.glb b/assets/PlanetBase.glb deleted file mode 100644 index 0485efa..0000000 --- a/assets/PlanetBase.glb +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index b7b1cbc..0000000 --- a/assets/PlanetBase.glb.import +++ /dev/null @@ -1,54 +0,0 @@ -[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.import b/assets/PlanetBase.obj.import index fbcfcdd..df4fdd5 100644 --- a/assets/PlanetBase.obj.import +++ b/assets/PlanetBase.obj.import @@ -3,7 +3,7 @@ importer="wavefront_obj" importer_version=1 type="Mesh" -uid="uid://65modei4jwaj" +uid="uid://qbjscf2gg35y" path="res://.godot/imported/PlanetBase.obj-e7dd6f84cf7385297b2403f29d44bb02.mesh" [deps] diff --git a/assets/PlanetLow.obj b/assets/PlanetLow.obj deleted file mode 100644 index a68796c..0000000 --- a/assets/PlanetLow.obj +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 031782c..0000000 --- a/assets/PlanetLow.obj.import +++ /dev/null @@ -1,25 +0,0 @@ -[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 deleted file mode 100644 index a4ac6ce..0000000 --- a/assets/PlanetMed.obj +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 1419c86..0000000 --- a/assets/PlanetMed.obj.import +++ /dev/null @@ -1,25 +0,0 @@ -[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 deleted file mode 100644 index 58b8183..0000000 --- a/assets/icosphere.obj +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 6fd25f5..0000000 --- a/assets/icosphere.obj.import +++ /dev/null @@ -1,25 +0,0 @@ -[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/project.godot b/project.godot index 12b931d..23d21db 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="adatonic" -config/version="0.0.3" +config/version="0.0.5" run/main_scene="uid://csfh7ptgerpm2" config/features=PackedStringArray("4.6", "C#", "GL Compatibility") config/icon="res://icon.svg" diff --git a/resources/fastnoise.tres b/resources/fastnoise.tres new file mode 100644 index 0000000..01d9433 --- /dev/null +++ b/resources/fastnoise.tres @@ -0,0 +1,4 @@ +[gd_resource type="FastNoiseLite" format=3 uid="uid://bec450igysexf"] + +[resource] +frequency = 0.027 diff --git a/resources/planet_gradient.tres b/resources/planet_gradient.tres index a7d0a93..b5198ff 100644 --- a/resources/planet_gradient.tres +++ b/resources/planet_gradient.tres @@ -1,5 +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) +offsets = PackedFloat32Array(0.020102732, 0.21077614, 0.4361486, 0.4835682, 0.49508524, 0.49909908, 0.51515174, 0.5367887, 0.5766606, 0.7845561, 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/remapcurve.tres b/resources/remapcurve.tres new file mode 100644 index 0000000..4cfeec3 --- /dev/null +++ b/resources/remapcurve.tres @@ -0,0 +1,5 @@ +[gd_resource type="Curve" format=3 uid="uid://d3jm8hqn6hf6v"] + +[resource] +_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.03899879, 0.2597651), 0.0, 0.0, 0, 0, Vector2(0.4429419, 0.37015414), 0.47422996, 0.47422996, 0, 0, Vector2(0.5, 0.5), 0.39357203, 0.39357203, 0, 0, Vector2(0.94081944, 0.64621437), 0.80014014, 0.80014014, 0, 0, Vector2(1, 1), 5.804001, 0.0, 0, 0] +point_count = 6 diff --git a/resources/stresscurve.tres b/resources/stresscurve.tres new file mode 100644 index 0000000..4cf642e --- /dev/null +++ b/resources/stresscurve.tres @@ -0,0 +1,5 @@ +[gd_resource type="Curve" format=3 uid="uid://duabj1hpvrf2m"] + +[resource] +_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.5004223, 0.4959703), 2.8, 2.8, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0] +point_count = 3 diff --git a/resources/topogradient.tres b/resources/topogradient.tres new file mode 100644 index 0000000..0cd3a8a --- /dev/null +++ b/resources/topogradient.tres @@ -0,0 +1,5 @@ +[gd_resource type="Gradient" format=3 uid="uid://dpafhsbw2t46k"] + +[resource] +offsets = PackedFloat32Array(0.30143952, 0.36898097, 0.4958336, 0.50410336, 0.51667744, 0.5272807, 0.5356805) +colors = PackedColorArray(0, 0, 0.54, 1, 0.34199998, 0.39780006, 0.9, 1, 0.070399985, 0.62362665, 0.88, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0.4569366, 0, 1, 1, 0, 0, 1) diff --git a/scenes/MainScene.tscn b/scenes/MainScene.tscn index cf3ac9e..730e4c6 100644 --- a/scenes/MainScene.tscn +++ b/scenes/MainScene.tscn @@ -1,8 +1,9 @@ [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="ArrayMesh" uid="uid://qbjscf2gg35y" path="res://assets/PlanetBase.obj" id="2_k24pf"] [ext_resource type="Gradient" uid="uid://b5l44rktieewe" path="res://resources/planet_gradient.tres" id="2_ygjfp"] +[ext_resource type="Curve" uid="uid://d3jm8hqn6hf6v" path="res://resources/remapcurve.tres" id="3_1wiy7"] [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"] [ext_resource type="Texture2D" uid="uid://n56csi5ekat" path="res://icon.svg" id="5_ygjfp"] @@ -13,7 +14,8 @@ sky_material = SubResource("ProceduralSkyMaterial_uxrcv") [sub_resource type="Environment" id="Environment_rf2cd"] -background_mode = 2 +background_mode = 1 +background_color = Color(0.11748905, 0.11748903, 0.11748903, 1) sky = SubResource("Sky_tlwt5") ambient_light_source = 3 reflected_light_source = 2 @@ -31,13 +33,14 @@ 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") +_yawNode = NodePath("TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo/Yaw") +_pitchNode = NodePath("TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo/Yaw/Pitch") +_cameraNode = NodePath("TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo/Yaw/Pitch/Camera3D") +_meshInstance = NodePath("TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo/Icosphere") +World = NodePath("TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo") _textureRect = NodePath("TabContainer/Projection") _gradient = ExtResource("2_ygjfp") +_remapCurve = ExtResource("3_1wiy7") [node name="TabContainer" type="TabContainer" parent="." unique_id=1586027287] layout_mode = 1 @@ -52,50 +55,111 @@ current_tab = 0 layout_mode = 2 metadata/_tab_index = 0 -[node name="SubViewportContainer" type="SubViewportContainer" parent="TabContainer/Planet" unique_id=58474785] +[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Planet" unique_id=1579792581] layout_mode = 2 size_flags_horizontal = 3 size_flags_stretch_ratio = 1.44 + +[node name="SubViewportContainer" type="SubViewportContainer" parent="TabContainer/Planet/VBoxContainer" unique_id=58474785] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 1.44 stretch = true -[node name="SubViewport" type="SubViewport" parent="TabContainer/Planet/SubViewportContainer" unique_id=1257998631] +[node name="SubViewport" type="SubViewport" parent="TabContainer/Planet/VBoxContainer/SubViewportContainer" unique_id=1257998631] handle_input_locally = false -size = Vector2i(677, 617) +size = Vector2i(677, 499) render_target_update_mode = 4 -[node name="ZaWarudo" type="Node3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport" unique_id=937719505] +[node name="ZaWarudo" type="Node3D" parent="TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport" unique_id=937719505] -[node name="WorldEnvironment" type="WorldEnvironment" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo" unique_id=610642146] +[node name="WorldEnvironment" type="WorldEnvironment" parent="TabContainer/Planet/VBoxContainer/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] +[node name="Sun" type="DirectionalLight3D" parent="TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo" unique_id=899426195] +unique_name_in_owner = true transform = Transform3D(0.99999994, 0, 0, 0, 0.99999994, 0, 0, 0, 0.99999994, 0, 0, 0) -[node name="Icosphere" type="MeshInstance3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo" unique_id=793654005] +[node name="Icosphere" type="MeshInstance3D" parent="TabContainer/Planet/VBoxContainer/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="Pointer" type="Sprite3D" parent="TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo/Icosphere" unique_id=1498529325] +unique_name_in_owner = true +modulate = Color(1, 0, 0, 1) +pixel_size = 0.0018184 +billboard = 1 +no_depth_test = true +fixed_size = true +texture = ExtResource("5_ygjfp") -[node name="Pitch" type="Node3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/Yaw" unique_id=98015529] +[node name="Yaw" type="Node3D" parent="TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo" unique_id=2073443785] -[node name="Camera3D" type="Camera3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/Yaw/Pitch" unique_id=1654616370] +[node name="Pitch" type="Node3D" parent="TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo/Yaw" unique_id=98015529] + +[node name="Camera3D" type="Camera3D" parent="TabContainer/Planet/VBoxContainer/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="StaticBody3D" type="StaticBody3D" parent="TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo" unique_id=330930041] -[node name="CollisionShape3D" type="CollisionShape3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/StaticBody3D" unique_id=299495076] +[node name="CollisionShape3D" type="CollisionShape3D" parent="TabContainer/Planet/VBoxContainer/SubViewportContainer/SubViewport/ZaWarudo/StaticBody3D" unique_id=299495076] shape = SubResource("SphereShape3D_rpqi1") -[node name="Pointer" type="Sprite3D" parent="TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo" unique_id=1498529325] +[node name="MarginContainer" type="MarginContainer" parent="TabContainer/Planet/VBoxContainer" unique_id=1706135009] +layout_mode = 2 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 8 + +[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Planet/VBoxContainer/MarginContainer" unique_id=781791664] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer" unique_id=49483855] +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1196190097] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Label" type="Label" parent="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer" unique_id=882691555] +layout_mode = 2 +text = "Day" +horizontal_alignment = 1 + +[node name="SunAngle" type="HSlider" parent="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer" unique_id=1452623828] unique_name_in_owner = true -transform = Transform3D(0.01, 0, 0, 0, 0.01, 0, 0, 0, 0.01, 0, 0, 0) -modulate = Color(1, 0, 0, 1) -billboard = 1 -texture = ExtResource("5_ygjfp") +layout_mode = 2 +max_value = 365.0 +tick_count = 14 + +[node name="Label" type="Label" parent="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=536127746] +layout_mode = 2 +text = "Year: " + +[node name="Year" type="LineEdit" parent="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=2071686901] +unique_name_in_owner = true +layout_mode = 2 +text = "1922" + +[node name="HSeparator" type="HSeparator" parent="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer" unique_id=1053749080] +layout_mode = 2 + +[node name="Label2" type="Label" parent="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer" unique_id=473804807] +layout_mode = 2 +text = "Hour" +horizontal_alignment = 1 + +[node name="PlanetAngle" type="HSlider" parent="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer" unique_id=1574475714] +unique_name_in_owner = true +layout_mode = 2 +max_value = 24.0 +step = 0.25 +tick_count = 5 [node name="PanelContainer" type="PanelContainer" parent="TabContainer/Planet" unique_id=716838825] layout_mode = 2 @@ -111,6 +175,24 @@ theme_override_constants/margin_bottom = 12 [node name="VBoxContainer2" type="VBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer" unique_id=1788559732] layout_mode = 2 +[node name="VBoxContainer2" type="VBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2" unique_id=525897562] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer2" unique_id=902181636] +layout_mode = 2 + +[node name="Label" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer2/HBoxContainer" unique_id=1460559875] +layout_mode = 2 +text = "Axial Tilt" + +[node name="AxialTilt" type="LineEdit" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer2/HBoxContainer" unique_id=1085416630] +unique_name_in_owner = true +layout_mode = 2 +text = "23.5" + +[node name="HSeparator" type="HSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2" unique_id=907047328] +layout_mode = 2 + [node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2" unique_id=654818970] layout_mode = 2 size_flags_vertical = 3 @@ -151,6 +233,26 @@ max_length = 5 [node name="HSeparator" type="HSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=1862016318] layout_mode = 2 +[node name="Label4" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=1664133820] +layout_mode = 2 +text = "- World -" + +[node name="HBoxContainer5" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=703726989] +layout_mode = 2 + +[node name="Margin" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer5" unique_id=554179765] +layout_mode = 2 + +[node name="Label" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer5" unique_id=416863531] +layout_mode = 2 +theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) +text = "Date: " + +[node name="Date" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer5" unique_id=716565176] +unique_name_in_owner = true +layout_mode = 2 +text = "-1" + [node name="Label2" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=186838891] layout_mode = 2 text = "- Point -" @@ -184,6 +286,19 @@ unique_name_in_owner = true layout_mode = 2 text = "-1" +[node name="VSeparator2" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer2" unique_id=521477767] +layout_mode = 2 + +[node name="Label2" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer2" unique_id=837979077] +layout_mode = 2 +theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) +text = "Local Time:" + +[node name="LocalTime" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer2" unique_id=501459011] +unique_name_in_owner = true +layout_mode = 2 +text = "-1" + [node name="Label3" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=1412781677] layout_mode = 2 text = " - Plate -" @@ -257,6 +372,14 @@ stretch_mode = 5 metadata/_tab_index = 1 [connection signal="tab_changed" from="TabContainer" to="." method="Tab"] +[connection signal="mouse_entered" from="TabContainer/Planet/VBoxContainer/SubViewportContainer" to="." method="MouseInViewport"] +[connection signal="mouse_exited" from="TabContainer/Planet/VBoxContainer/SubViewportContainer" to="." method="MouseLeftViewport"] +[connection signal="drag_ended" from="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/SunAngle" to="." method="SunAngleStop"] +[connection signal="drag_started" from="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer/SunAngle" to="." method="SunAngleStart"] +[connection signal="text_changed" from="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer/Year" to="." method="YearChanged"] +[connection signal="drag_ended" from="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer/PlanetAngle" to="." method="PlanetAngleStop"] +[connection signal="drag_started" from="TabContainer/Planet/VBoxContainer/MarginContainer/VBoxContainer/PlanetAngle" to="." method="PlanetAngleStart"] +[connection signal="text_changed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer2/HBoxContainer/AxialTilt" to="." method="AxialTiltChanged"] [connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer3/Reset" to="." method="MakeGo"] [connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer3/Advance" to="." method="Advance"] [connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer3/AutoRun" to="." method="AutoRun"] diff --git a/shaders/planet.gdshader b/shaders/planet.gdshader index 56ca46b..36376be 100644 --- a/shaders/planet.gdshader +++ b/shaders/planet.gdshader @@ -1,5 +1,4 @@ shader_type spatial; -render_mode unshaded; uniform int mode = 1; uniform sampler2D gradient; @@ -9,7 +8,7 @@ void vertex() { // Called for every vertex the material is visible on. world_position = VERTEX; color = COLOR.r; - VERTEX += VERTEX * COLOR.q * 0.1f; + VERTEX += VERTEX * COLOR.q * 0.03f; } void fragment() { diff --git a/src/Main.cs b/src/Main.cs index 737d63b..7d79a6d 100644 --- a/src/Main.cs +++ b/src/Main.cs @@ -8,6 +8,7 @@ using Godot.Collections; public partial class Main : Control { + public static Random Random = Random.Shared; private bool _moving = false; [Export] private Node3D _yawNode; @@ -30,22 +31,36 @@ public partial class Main : Control private int _resolution = 512; private PlanetHelper _planetHelper; + [Export] private Curve _remapCurve; public override void _Ready() { - _planetHelper = new PlanetHelper(_meshInstance, _textureRect); + _planetHelper = new PlanetHelper(_meshInstance, _textureRect, _remapCurve); UpdateStats(); Projector.GatherPoints(_planetHelper, int.Parse(GetNode("%Resolution").Text)); + AxialTiltChanged(GetNode("%AxialTilt").Text); + UpdateTime(); } Vector3 _pointerPosition = Vector3.Zero; private const float RayLength = 1000.0f; + + private bool _rotateable = false; + public void MouseInViewport() + { + _rotateable = true; + } + + public void MouseLeftViewport() + { + _rotateable = false; + } public override void _Input(InputEvent @event) { if (@event is InputEventMouseButton mouseEvent) { if (mouseEvent.ButtonIndex == MouseButton.Left) { - _moving = mouseEvent.Pressed; + _moving = mouseEvent.Pressed && _rotateable; } if (mouseEvent.ButtonIndex == MouseButton.WheelUp) { @@ -83,8 +98,8 @@ public partial class Main : Control if (result.Count > 0) { Vector3 pos = result["position"].AsVector3(); - GD.Print($"Hit: '{pos}'"); + pos *= _meshInstance.Transform.Basis.Orthonormalized(); var closest = _planetHelper.Octree.SearchNearest(pos)?.Id; if (closest != null) { @@ -95,7 +110,10 @@ public partial class Main : Control _plate = null; UpdateStats(); Vector3 vertexPos = _planetHelper.Mdt.GetVertex(_vertex.Id) * 0.01f; - _pointerPosition = (Vector3)vertexPos + (vertexPos * (_vertex.Height + 0.01f) * 0.1f); // vertexPos * 1.01f; + vertexPos *= _meshInstance.Transform.Basis.Inverse().Orthonormalized(); + _pointerPosition = (Vector3)vertexPos + (vertexPos * (_vertex.Height + 0.01f) * 0.03f); // vertexPos * 1.01f; + GetNode("%Pointer").GlobalPosition = _pointerPosition; + UpdateTime(); } } @@ -110,7 +128,72 @@ public partial class Main : Control _planetHelper.AutoRun = true; } _planetHelper.Process(); - GetNode("%Pointer").Position = _pointerPosition; + if (_sunRotating) + { + _sunRotation = (double)(GetNode("%SunAngle").Value / 365.0); + GetNode("%Sun").Rotation -= GetNode("%Sun").Rotation; + GetNode("%Sun").Rotation += new Vector3(0, Mathf.DegToRad((float)_sunRotation * 360f), 0); + UpdateTime(); + } + if (_planetRotating) + { + _planetRotation = (double)(GetNode("%PlanetAngle").Value / 24.0); + _meshInstance.Rotation = Vector3.Zero; + _meshInstance.RotateY((float)Mathf.DegToRad(_planetRotation * 360.0)); + _meshInstance.RotateZ(Mathf.DegToRad(_axialTilt)); + UpdateTime(); + } + } + + public void UpdateTime() + { + double hours = GetLocalTime(GetNode("%Pointer").GlobalPosition, GetNode("%Sun").GlobalTransform.Basis.Z, + _meshInstance); + GetNode