diff --git a/3d/voxel/default_bus_layout.tres b/3d/voxel/default_bus_layout.tres index 68db27a4..a93324b8 100644 --- a/3d/voxel/default_bus_layout.tres +++ b/3d/voxel/default_bus_layout.tres @@ -1,8 +1,8 @@ -[gd_resource type="AudioBusLayout" load_steps=2 format=2] +[gd_resource type="AudioBusLayout" load_steps=2 format=3 uid="uid://bnigwafdluiy2"] -[sub_resource type="AudioEffectPitchShift" id=1] +[sub_resource type="AudioEffectPitchShift" id="1"] resource_name = "PitchShift" [resource] -bus/0/effect/0/effect = SubResource( 1 ) +bus/0/effect/0/effect = SubResource( "1" ) bus/0/effect/0/enabled = true diff --git a/3d/voxel/default_env.tres b/3d/voxel/default_env.tres index c7553771..8b57234e 100644 --- a/3d/voxel/default_env.tres +++ b/3d/voxel/default_env.tres @@ -1,18 +1,16 @@ -[gd_resource type="Environment" load_steps=2 format=2] +[gd_resource type="Environment" load_steps=3 format=3 uid="uid://brymefbrev3s"] -[sub_resource type="Sky" id=1] -sun_longitude = 100.0 -sun_angle_min = 2.0 -sun_angle_max = 20.0 +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_rhfg5"] +sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) +ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) + +[sub_resource type="Sky" id="Sky_iri27"] +sky_material = SubResource( "ProceduralSkyMaterial_rhfg5" ) [resource] background_mode = 2 -background_sky = SubResource( 1 ) +sky = SubResource( "Sky_iri27" ) +tonemap_mode = 2 +glow_enabled = true fog_enabled = true -fog_color = Color( 0.501961, 0.6, 0.701961, 1 ) -fog_depth_begin = 32.0 -fog_depth_end = 64.0 -fog_transmit_enabled = true -dof_blur_far_enabled = true -dof_blur_far_transition = 32.0 -dof_blur_far_amount = 0.05 +fog_aerial_perspective = 0.5 diff --git a/3d/voxel/icon.png.import b/3d/voxel/icon.png.import index 889af9df..64a05c89 100644 --- a/3d/voxel/icon.png.import +++ b/3d/voxel/icon.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture2D" -path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" +type="CompressedTexture2D" +uid="uid://cpmihwb2gtevf" +path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,23 @@ metadata={ [deps] source_file="res://icon.png" -dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"] +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] [params] compress/mode=0 compress/lossy_quality=0.7 -compress/hdr_mode=0 +compress/hdr_compression=1 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +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/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/3d/voxel/menu/button.png.import b/3d/voxel/menu/button.png.import index 93950ca8..fbe25279 100644 --- a/3d/voxel/menu/button.png.import +++ b/3d/voxel/menu/button.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture2D" -path="res://.godot/imported/button.png-e6ddd405c0968c9fb68dca7b600a69a3.stex" +type="CompressedTexture2D" +uid="uid://ej6lqf2fptv8" +path="res://.godot/imported/button.png-e6ddd405c0968c9fb68dca7b600a69a3.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,23 @@ metadata={ [deps] source_file="res://menu/button.png" -dest_files=["res://.godot/imported/button.png-e6ddd405c0968c9fb68dca7b600a69a3.stex"] +dest_files=["res://.godot/imported/button.png-e6ddd405c0968c9fb68dca7b600a69a3.ctex"] [params] compress/mode=0 compress/lossy_quality=0.7 -compress/hdr_mode=0 +compress/hdr_compression=1 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +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/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/3d/voxel/menu/ingame/pause_menu.tscn b/3d/voxel/menu/ingame/pause_menu.tscn index ae93ad8d..e7aac660 100644 --- a/3d/voxel/menu/ingame/pause_menu.tscn +++ b/3d/voxel/menu/ingame/pause_menu.tscn @@ -1,132 +1,120 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=6 format=3 uid="uid://dk8arl1if3lyr"] -[ext_resource path="res://player/crosshair.svg" type="Texture2D" id=1] -[ext_resource path="res://menu/theme/theme.tres" type="Theme" id=2] -[ext_resource path="res://menu/options/options.tscn" type="PackedScene" id=3] -[ext_resource path="res://menu/ingame/pause_menu.gd" type="Script" id=4] -[ext_resource path="res://menu/button.png" type="Texture2D" id=5] +[ext_resource type="Texture2D" uid="uid://cgv7xgoy43rbc" path="res://player/crosshair.svg" id="1"] +[ext_resource type="Theme" path="res://menu/theme/theme.tres" id="2"] +[ext_resource type="PackedScene" uid="uid://e22n700qhxqr" path="res://menu/options/options.tscn" id="3"] +[ext_resource type="Script" path="res://menu/ingame/pause_menu.gd" id="4"] +[ext_resource type="Texture2D" uid="uid://ej6lqf2fptv8" path="res://menu/button.png" id="5"] [node name="PauseMenu" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 -theme = ExtResource( 2 ) -script = ExtResource( 4 ) -__meta__ = { -"_edit_use_anchors_": false -} +theme = ExtResource( "2" ) +script = ExtResource( "4" ) [node name="Crosshair" type="CenterContainer" parent="."] anchor_right = 1.0 anchor_bottom = 1.0 -__meta__ = { -"_edit_use_anchors_": false -} [node name="TextureRect" type="TextureRect" parent="Crosshair"] -offset_left = 784.0 -offset_top = 434.0 -offset_right = 816.0 -offset_bottom = 466.0 -texture = ExtResource( 1 ) +offset_left = 496.0 +offset_top = 284.0 +offset_right = 528.0 +offset_bottom = 316.0 +texture = ExtResource( "1" ) [node name="Pause" type="VBoxContainer" parent="."] visible = false anchor_right = 1.0 anchor_bottom = 1.0 -__meta__ = { -"_edit_use_anchors_": false -} [node name="ButtonHolder" type="HBoxContainer" parent="Pause"] -offset_right = 1600.0 -offset_bottom = 900.0 +offset_right = 1024.0 +offset_bottom = 600.0 size_flags_vertical = 3 alignment = 1 [node name="MainButtons" type="VBoxContainer" parent="Pause/ButtonHolder"] -offset_left = 608.0 -offset_right = 992.0 -offset_bottom = 900.0 -custom_constants/separation = 20 +offset_left = 320.0 +offset_right = 704.0 +offset_bottom = 600.0 +theme_override_constants/separation = 20 alignment = 1 [node name="Resume" type="TextureButton" parent="Pause/ButtonHolder/MainButtons"] -offset_top = 292.0 +offset_top = 142.0 offset_right = 384.0 -offset_bottom = 356.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 5 ) +offset_bottom = 206.0 +texture_normal = ExtResource( "5" ) [node name="Label" type="Label" parent="Pause/ButtonHolder/MainButtons/Resume"] anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Resume Game" -align = 1 -valign = 1 -__meta__ = { -"_edit_use_anchors_": false -} +horizontal_alignment = 1 +vertical_alignment = 1 [node name="Options" type="TextureButton" parent="Pause/ButtonHolder/MainButtons"] -offset_top = 376.0 +offset_top = 226.0 offset_right = 384.0 -offset_bottom = 440.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 5 ) +offset_bottom = 290.0 +texture_normal = ExtResource( "5" ) [node name="Label" type="Label" parent="Pause/ButtonHolder/MainButtons/Options"] anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Options" -align = 1 -valign = 1 +horizontal_alignment = 1 +vertical_alignment = 1 __meta__ = { "_edit_use_anchors_": false } [node name="MainMenu" type="TextureButton" parent="Pause/ButtonHolder/MainButtons"] -offset_top = 460.0 +offset_top = 310.0 offset_right = 384.0 -offset_bottom = 524.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 5 ) +offset_bottom = 374.0 +texture_normal = ExtResource( "5" ) [node name="Label" type="Label" parent="Pause/ButtonHolder/MainButtons/MainMenu"] anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Main Menu" -align = 1 -valign = 1 +horizontal_alignment = 1 +vertical_alignment = 1 __meta__ = { "_edit_use_anchors_": false } [node name="Exit" type="TextureButton" parent="Pause/ButtonHolder/MainButtons"] -offset_top = 544.0 +offset_top = 394.0 offset_right = 384.0 -offset_bottom = 608.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 5 ) +offset_bottom = 458.0 +texture_normal = ExtResource( "5" ) [node name="Label" type="Label" parent="Pause/ButtonHolder/MainButtons/Exit"] anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Exit Game" -align = 1 -valign = 1 +horizontal_alignment = 1 +vertical_alignment = 1 __meta__ = { "_edit_use_anchors_": false } -[node name="Options" parent="." instance=ExtResource( 3 )] +[node name="Options" parent="." instance=ExtResource( "3" )] [connection signal="pressed" from="Pause/ButtonHolder/MainButtons/Resume" to="." method="_on_Resume_pressed"] [connection signal="pressed" from="Pause/ButtonHolder/MainButtons/Options" to="." method="_on_Options_pressed"] diff --git a/3d/voxel/menu/main/dark_dirt.png.import b/3d/voxel/menu/main/dark_dirt.png.import index c26485c1..eefc27b5 100644 --- a/3d/voxel/menu/main/dark_dirt.png.import +++ b/3d/voxel/menu/main/dark_dirt.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture2D" -path="res://.godot/imported/dark_dirt.png-8e8d84e3c30520a8995166be2b7ea97e.stex" +type="CompressedTexture2D" +uid="uid://c514noc8ngc4x" +path="res://.godot/imported/dark_dirt.png-8e8d84e3c30520a8995166be2b7ea97e.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,23 @@ metadata={ [deps] source_file="res://menu/main/dark_dirt.png" -dest_files=["res://.godot/imported/dark_dirt.png-8e8d84e3c30520a8995166be2b7ea97e.stex"] +dest_files=["res://.godot/imported/dark_dirt.png-8e8d84e3c30520a8995166be2b7ea97e.ctex"] [params] compress/mode=0 compress/lossy_quality=0.7 -compress/hdr_mode=0 +compress/hdr_compression=1 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +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/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/3d/voxel/menu/main/main_menu.tscn b/3d/voxel/menu/main/main_menu.tscn index 83f4a251..a73fc236 100644 --- a/3d/voxel/menu/main/main_menu.tscn +++ b/3d/voxel/menu/main/main_menu.tscn @@ -1,152 +1,147 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=8 format=3 uid="uid://csdy1t6j24awl"] -[ext_resource path="res://menu/main/title.png" type="Texture2D" id=1] -[ext_resource path="res://menu/main/splash_text.gd" type="Script" id=2] -[ext_resource path="res://menu/main/main_menu.gd" type="Script" id=3] -[ext_resource path="res://menu/main/dark_dirt.png" type="Texture2D" id=4] -[ext_resource path="res://menu/options/options.tscn" type="PackedScene" id=5] -[ext_resource path="res://menu/theme/theme.tres" type="Theme" id=6] -[ext_resource path="res://menu/button.png" type="Texture2D" id=7] +[ext_resource type="Texture2D" uid="uid://c2eorasvxyf5u" path="res://menu/main/title.png" id="1"] +[ext_resource type="Script" path="res://menu/main/splash_text.gd" id="2"] +[ext_resource type="Script" path="res://menu/main/main_menu.gd" id="3"] +[ext_resource type="Texture2D" uid="uid://c514noc8ngc4x" path="res://menu/main/dark_dirt.png" id="4"] +[ext_resource type="PackedScene" uid="uid://e22n700qhxqr" path="res://menu/options/options.tscn" id="5"] +[ext_resource type="Theme" path="res://menu/theme/theme.tres" id="6"] +[ext_resource type="Texture2D" uid="uid://ej6lqf2fptv8" path="res://menu/button.png" id="7"] [node name="MainMenu" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 -theme = ExtResource( 6 ) -script = ExtResource( 3 ) -__meta__ = { -"_edit_use_anchors_": false -} +theme = ExtResource( "6" ) +script = ExtResource( "3" ) [node name="Background" type="TextureRect" parent="."] anchor_right = 1.0 anchor_bottom = 1.0 -texture = ExtResource( 4 ) -stretch_mode = 2 -__meta__ = { -"_edit_use_anchors_": false -} +texture = ExtResource( "4" ) +stretch_mode = 1 [node name="TitleScreen" type="VBoxContainer" parent="."] anchor_right = 1.0 anchor_bottom = 1.0 -__meta__ = { -"_edit_use_anchors_": false -} [node name="Logo" type="CenterContainer" parent="TitleScreen"] -offset_right = 1600.0 -offset_bottom = 300.0 -rect_min_size = Vector2(0, 300) +texture_repeat = 2 +minimum_size = Vector2(0, 240) +offset_right = 1024.0 +offset_bottom = 240.0 [node name="Logo" type="TextureRect" parent="TitleScreen/Logo"] -offset_left = 432.0 -offset_top = 110.0 -offset_right = 1168.0 -offset_bottom = 190.0 -texture = ExtResource( 1 ) +offset_left = 144.0 +offset_top = 80.0 +offset_right = 880.0 +offset_bottom = 160.0 +texture = ExtResource( "1" ) [node name="SplashHolder" type="Control" parent="TitleScreen/Logo/Logo"] anchor_left = 1.0 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -script = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -36.0 +offset_right = -36.0 +script = ExtResource( "2" ) [node name="SplashText" type="Label" parent="TitleScreen/Logo/Logo/SplashHolder"] modulate = Color(1, 1, 0, 1) +texture_filter = 1 anchor_left = 1.0 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -offset_left = -110.0 -offset_top = 10.0 -offset_right = -110.0 -offset_bottom = 12.0 -rect_rotation = -20.0 +offset_left = -120.0 +offset_right = 124.0 +offset_bottom = 52.0 +grow_horizontal = 0 +grow_vertical = 0 +rotation = -0.261799 +theme_override_font_sizes/font_size = 61 text = "Made in Godot!" __meta__ = { -"_edit_use_anchors_": false +"_edit_layout_mode": 1, +"_edit_use_anchors_": false, +"_edit_use_custom_anchors": false } [node name="ButtonHolder" type="HBoxContainer" parent="TitleScreen"] -offset_top = 304.0 -offset_right = 1600.0 -offset_bottom = 680.0 +offset_top = 244.0 +offset_right = 1024.0 +offset_bottom = 476.0 size_flags_vertical = 3 alignment = 1 [node name="MainButtons" type="VBoxContainer" parent="TitleScreen/ButtonHolder"] -offset_left = 608.0 -offset_right = 992.0 -offset_bottom = 376.0 -custom_constants/separation = 20 +offset_left = 320.0 +offset_right = 704.0 +offset_bottom = 232.0 +theme_override_constants/separation = 20 alignment = 1 [node name="Start" type="TextureButton" parent="TitleScreen/ButtonHolder/MainButtons"] -offset_top = 72.0 offset_right = 384.0 -offset_bottom = 136.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 7 ) +offset_bottom = 64.0 +texture_normal = ExtResource( "7" ) [node name="Label" type="Label" parent="TitleScreen/ButtonHolder/MainButtons/Start"] +texture_filter = 1 anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Start Game" -align = 1 -valign = 1 +horizontal_alignment = 1 +vertical_alignment = 1 __meta__ = { "_edit_use_anchors_": false } [node name="Options" type="TextureButton" parent="TitleScreen/ButtonHolder/MainButtons"] -offset_top = 156.0 +offset_top = 84.0 offset_right = 384.0 -offset_bottom = 220.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 7 ) +offset_bottom = 148.0 +texture_normal = ExtResource( "7" ) [node name="Label" type="Label" parent="TitleScreen/ButtonHolder/MainButtons/Options"] +texture_filter = 1 anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Options" -align = 1 -valign = 1 -__meta__ = { -"_edit_use_anchors_": false -} +horizontal_alignment = 1 +vertical_alignment = 1 [node name="Exit" type="TextureButton" parent="TitleScreen/ButtonHolder/MainButtons"] -offset_top = 240.0 +offset_top = 168.0 offset_right = 384.0 -offset_bottom = 304.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 7 ) +offset_bottom = 232.0 +texture_normal = ExtResource( "7" ) [node name="Label" type="Label" parent="TitleScreen/ButtonHolder/MainButtons/Exit"] +texture_filter = 1 anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Exit Game" -align = 1 -valign = 1 +horizontal_alignment = 1 +vertical_alignment = 1 __meta__ = { "_edit_use_anchors_": false } [node name="Spacer" type="Control" parent="TitleScreen"] -offset_top = 684.0 -offset_right = 1600.0 -offset_bottom = 900.0 -rect_min_size = Vector2(0, 216) +minimum_size = Vector2(0, 120) +offset_top = 480.0 +offset_right = 1024.0 +offset_bottom = 600.0 [node name="StartGame" type="HBoxContainer" parent="."] visible = false @@ -158,76 +153,75 @@ __meta__ = { } [node name="StartButtons" type="VBoxContainer" parent="StartGame"] -offset_left = 608.0 -offset_right = 992.0 -offset_bottom = 900.0 -custom_constants/separation = 20 +offset_left = 320.0 +offset_right = 704.0 +offset_bottom = 600.0 +theme_override_constants/separation = 20 alignment = 1 [node name="Spacer" type="Control" parent="StartGame/StartButtons"] -offset_top = 292.0 +offset_top = 198.0 offset_right = 384.0 -offset_bottom = 356.0 -rect_min_size = Vector2(0, 64) +offset_bottom = 198.0 [node name="RandomBlocks" type="TextureButton" parent="StartGame/StartButtons"] -offset_top = 376.0 +offset_top = 202.0 offset_right = 384.0 -offset_bottom = 440.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 7 ) +offset_bottom = 266.0 +texture_normal = ExtResource( "7" ) [node name="Label" type="Label" parent="StartGame/StartButtons/RandomBlocks"] anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Random Blocks" -align = 1 -valign = 1 +horizontal_alignment = 1 +vertical_alignment = 1 __meta__ = { "_edit_use_anchors_": false } [node name="FlatGrass" type="TextureButton" parent="StartGame/StartButtons"] -offset_top = 460.0 +offset_top = 270.0 offset_right = 384.0 -offset_bottom = 524.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 7 ) +offset_bottom = 334.0 +texture_normal = ExtResource( "7" ) [node name="Label" type="Label" parent="StartGame/StartButtons/FlatGrass"] anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Flat Grass" -align = 1 -valign = 1 +horizontal_alignment = 1 +vertical_alignment = 1 __meta__ = { "_edit_use_anchors_": false } [node name="BackToTitle" type="TextureButton" parent="StartGame/StartButtons"] -offset_top = 544.0 +offset_top = 338.0 offset_right = 384.0 -offset_bottom = 608.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 7 ) +offset_bottom = 402.0 +texture_normal = ExtResource( "7" ) [node name="Label" type="Label" parent="StartGame/StartButtons/BackToTitle"] anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Back" -align = 1 -valign = 1 +horizontal_alignment = 1 +vertical_alignment = 1 __meta__ = { "_edit_use_anchors_": false } -[node name="Options" parent="." instance=ExtResource( 5 )] +[node name="Options" parent="." instance=ExtResource( "5" )] [connection signal="pressed" from="TitleScreen/ButtonHolder/MainButtons/Start" to="." method="_on_Start_pressed"] [connection signal="pressed" from="TitleScreen/ButtonHolder/MainButtons/Options" to="." method="_on_Options_pressed"] diff --git a/3d/voxel/menu/main/splash_text.gd b/3d/voxel/menu/main/splash_text.gd index 06f7e03c..ab1beb7b 100644 --- a/3d/voxel/menu/main/splash_text.gd +++ b/3d/voxel/menu/main/splash_text.gd @@ -5,4 +5,4 @@ var time := 0.0 func _process(delta): time += delta - rect_scale = Vector2.ONE * (1 - abs(sin(time * 4)) / 4) + scale = Vector2.ONE * (1 - abs(sin(time * 4)) / 4) diff --git a/3d/voxel/menu/main/title.png.import b/3d/voxel/menu/main/title.png.import index e39b2bcb..94d43780 100644 --- a/3d/voxel/menu/main/title.png.import +++ b/3d/voxel/menu/main/title.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture2D" -path="res://.godot/imported/title.png-73a3b55f70af530edac2d45668ba262c.stex" +type="CompressedTexture2D" +uid="uid://c2eorasvxyf5u" +path="res://.godot/imported/title.png-73a3b55f70af530edac2d45668ba262c.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,23 @@ metadata={ [deps] source_file="res://menu/main/title.png" -dest_files=["res://.godot/imported/title.png-73a3b55f70af530edac2d45668ba262c.stex"] +dest_files=["res://.godot/imported/title.png-73a3b55f70af530edac2d45668ba262c.ctex"] [params] compress/mode=0 compress/lossy_quality=0.7 -compress/hdr_mode=0 +compress/hdr_compression=1 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=false process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/3d/voxel/menu/options/option_buttons.gd b/3d/voxel/menu/options/option_buttons.gd index 124111cf..14332c32 100644 --- a/3d/voxel/menu/options/option_buttons.gd +++ b/3d/voxel/menu/options/option_buttons.gd @@ -2,13 +2,13 @@ extends Control @onready var render_distance_label = $RenderDistanceLabel @onready var render_distance_slider = $RenderDistanceSlider -@onready var fog_checkbox = $FogCheckBox +@onready var fog_checkbox: CheckBox = $FogCheckBox func _ready(): render_distance_slider.value = Settings.render_distance render_distance_label.text = "Render distance: " + str(Settings.render_distance) - fog_checkbox.pressed = Settings.fog_enabled + fog_checkbox.button_pressed = Settings.fog_enabled func _on_RenderDistanceSlider_value_changed(value): @@ -18,5 +18,5 @@ func _on_RenderDistanceSlider_value_changed(value): func _on_FogCheckBox_pressed(): - Settings.fog_enabled = fog_checkbox.pressed + Settings.fog_enabled = fog_checkbox.button_pressed Settings.save_settings() diff --git a/3d/voxel/menu/options/options.tscn b/3d/voxel/menu/options/options.tscn index ad60a66a..7fd70b4c 100644 --- a/3d/voxel/menu/options/options.tscn +++ b/3d/voxel/menu/options/options.tscn @@ -1,33 +1,35 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=5 format=3 uid="uid://e22n700qhxqr"] -[ext_resource path="res://menu/options/options.gd" type="Script" id=1] -[ext_resource path="res://menu/options/option_buttons.gd" type="Script" id=2] -[ext_resource path="res://menu/button.png" type="Texture2D" id=3] +[ext_resource type="Script" path="res://menu/options/options.gd" id="1"] +[ext_resource type="Theme" path="res://menu/theme/theme.tres" id="1_1y7gy"] +[ext_resource type="Script" path="res://menu/options/option_buttons.gd" id="2"] +[ext_resource type="Texture2D" uid="uid://ej6lqf2fptv8" path="res://menu/button.png" id="3"] [node name="Options" type="HBoxContainer"] visible = false anchor_right = 1.0 anchor_bottom = 1.0 +theme = ExtResource( "1_1y7gy" ) alignment = 1 -script = ExtResource( 1 ) +script = ExtResource( "1" ) __meta__ = { "_edit_use_anchors_": false } [node name="VBoxContainer" type="VBoxContainer" parent="."] -offset_left = 384.0 -offset_right = 1216.0 -offset_bottom = 900.0 -custom_constants/separation = 93 +offset_left = 87.0 +offset_right = 937.0 +offset_bottom = 600.0 +theme_override_constants/separation = 20 alignment = 1 [node name="OptionsBackground" type="TextureRect" parent="VBoxContainer"] -offset_top = 288.0 -offset_right = 832.0 -offset_bottom = 448.0 -rect_min_size = Vector2(832, 160) -texture = ExtResource( 3 ) -stretch_mode = 2 +minimum_size = Vector2(850, 150) +offset_top = 183.0 +offset_right = 850.0 +offset_bottom = 333.0 +texture = ExtResource( "3" ) +stretch_mode = 1 [node name="OptionButtons" type="GridContainer" parent="VBoxContainer/OptionsBackground"] anchor_left = 0.5 @@ -38,28 +40,25 @@ offset_left = -400.0 offset_top = -66.0 offset_right = 400.0 offset_bottom = 66.0 -rect_min_size = Vector2(800, 128) columns = 2 -script = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} +script = ExtResource( "2" ) [node name="RenderDistanceLabel" type="Label" parent="VBoxContainer/OptionsBackground/OptionButtons"] -offset_right = 384.0 +minimum_size = Vector2(320, 0) +offset_right = 320.0 offset_bottom = 64.0 -rect_min_size = Vector2(384, 64) size_flags_vertical = 5 +theme_override_font_sizes/font_size = 60 text = "Render distance: 3" +horizontal_alignment = 2 __meta__ = { "_edit_use_anchors_": false } [node name="RenderDistanceSlider" type="HSlider" parent="VBoxContainer/OptionsBackground/OptionButtons"] -offset_left = 388.0 +offset_left = 324.0 offset_right = 800.0 offset_bottom = 64.0 -rect_min_size = Vector2(384, 64) size_flags_horizontal = 3 size_flags_vertical = 3 min_value = 3.0 @@ -68,45 +67,42 @@ value = 7.0 [node name="FogLabel" type="Label" parent="VBoxContainer/OptionsBackground/OptionButtons"] offset_top = 68.0 -offset_right = 384.0 +offset_right = 320.0 offset_bottom = 132.0 -rect_min_size = Vector2(384, 64) size_flags_vertical = 5 +theme_override_font_sizes/font_size = 60 text = "Fog Enabled" +horizontal_alignment = 2 [node name="FogCheckBox" type="CheckBox" parent="VBoxContainer/OptionsBackground/OptionButtons"] -offset_left = 388.0 +offset_left = 324.0 offset_top = 68.0 offset_right = 800.0 offset_bottom = 132.0 -rect_min_size = Vector2(384, 64) size_flags_horizontal = 3 size_flags_vertical = 3 [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] -offset_top = 548.0 -offset_right = 832.0 -offset_bottom = 612.0 +offset_top = 353.0 +offset_right = 850.0 +offset_bottom = 417.0 alignment = 1 [node name="Back" type="TextureButton" parent="VBoxContainer/HBoxContainer"] -offset_left = 224.0 -offset_right = 608.0 +offset_left = 233.0 +offset_right = 617.0 offset_bottom = 64.0 -rect_min_size = Vector2(384, 64) -texture_normal = ExtResource( 3 ) +texture_normal = ExtResource( "3" ) [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/Back"] anchor_right = 1.0 anchor_bottom = 1.0 offset_top = -1.0 offset_bottom = -18.0 +theme_override_font_sizes/font_size = 60 text = "Back" -align = 1 -valign = 1 -__meta__ = { -"_edit_use_anchors_": false -} +horizontal_alignment = 1 +vertical_alignment = 1 [connection signal="value_changed" from="VBoxContainer/OptionsBackground/OptionButtons/RenderDistanceSlider" to="VBoxContainer/OptionsBackground/OptionButtons" method="_on_RenderDistanceSlider_value_changed"] [connection signal="pressed" from="VBoxContainer/OptionsBackground/OptionButtons/FogCheckBox" to="VBoxContainer/OptionsBackground/OptionButtons" method="_on_FogCheckBox_pressed"] diff --git a/3d/voxel/menu/theme/TinyUnicode.tres b/3d/voxel/menu/theme/TinyUnicode.tres index afc2922c..886f2c8a 100644 --- a/3d/voxel/menu/theme/TinyUnicode.tres +++ b/3d/voxel/menu/theme/TinyUnicode.tres @@ -1,7 +1,6 @@ -[gd_resource type="Font" load_steps=2 format=2] +[gd_resource type="Font" load_steps=2 format=3 uid="uid://65p88jvybwaw"] -[ext_resource path="res://menu/theme/TinyUnicode.ttf" type="FontData" id=1] +[ext_resource type="FontData" uid="uid://d223lt6j1fyie" path="res://menu/theme/TinyUnicode.ttf" id="1"] [resource] -size = 64 -font_data = ExtResource( 1 ) +data/0 = ExtResource( "1" ) diff --git a/3d/voxel/menu/theme/TinyUnicode.ttf.import b/3d/voxel/menu/theme/TinyUnicode.ttf.import new file mode 100644 index 00000000..7164edd8 --- /dev/null +++ b/3d/voxel/menu/theme/TinyUnicode.ttf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontData" +uid="uid://d223lt6j1fyie" +path="res://.godot/imported/TinyUnicode.ttf-eba88eb6541afc571b283cb8123beb7f.fontdata" + +[deps] + +source_file="res://menu/theme/TinyUnicode.ttf" +dest_files=["res://.godot/imported/TinyUnicode.ttf-eba88eb6541afc571b283cb8123beb7f.fontdata"] + +[params] + +antialiased=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +force_autohinter=false +hinting=1 +subpixel_positioning=1 +embolden=0.0 +transform=Transform2D(1, 0, 0, 1, 0, 0) +oversampling=0.0 +compress=true +opentype_feature_overrides={} +preload/char_ranges=PackedStringArray() +preload/glyph_ranges=PackedStringArray() +preload/configurations=PackedStringArray() +support_overrides/language_enabled=PackedStringArray() +support_overrides/language_disabled=PackedStringArray() +support_overrides/script_enabled=PackedStringArray() +support_overrides/script_disabled=PackedStringArray() diff --git a/3d/voxel/player/crosshair.svg.import b/3d/voxel/player/crosshair.svg.import index 3d61af6f..1c40a5d7 100644 --- a/3d/voxel/player/crosshair.svg.import +++ b/3d/voxel/player/crosshair.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture2D" -path="res://.godot/imported/crosshair.svg-c15896115a8fc4f09948d0fd31ee95e9.stex" +type="CompressedTexture2D" +uid="uid://cgv7xgoy43rbc" +path="res://.godot/imported/crosshair.svg-c15896115a8fc4f09948d0fd31ee95e9.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://player/crosshair.svg" -dest_files=["res://.godot/imported/crosshair.svg-c15896115a8fc4f09948d0fd31ee95e9.stex"] +dest_files=["res://.godot/imported/crosshair.svg-c15896115a8fc4f09948d0fd31ee95e9.ctex"] [params] compress/mode=0 compress/lossy_quality=0.7 -compress/hdr_mode=0 +compress/hdr_compression=1 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +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/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 diff --git a/3d/voxel/player/player.gd b/3d/voxel/player/player.gd index 9d064de1..c64d45f2 100644 --- a/3d/voxel/player/player.gd +++ b/3d/voxel/player/player.gd @@ -1,7 +1,5 @@ extends CharacterBody3D -var velocity = Vector3() - var _mouse_motion = Vector2() var _selected_block = 6 @@ -9,6 +7,7 @@ var _selected_block = 6 @onready var head = $Head @onready var raycast = $Head/RayCast3D +@onready var camera_effects = $Head/Camera3D.effects @onready var selected_block_texture = $SelectedBlock @onready var voxel_world = $"../VoxelWorld" @onready var crosshair = $"../PauseMenu/Crosshair" @@ -21,15 +20,15 @@ func _ready(): func _process(_delta): # Mouse movement. _mouse_motion.y = clamp(_mouse_motion.y, -1550, 1550) - transform.basis = Basis(Vector3(0, _mouse_motion.x * -0.001, 0)) - head.transform.basis = Basis(Vector3(_mouse_motion.y * -0.001, 0, 0)) + transform.basis = Basis.from_euler(Vector3(0, _mouse_motion.x * -0.001, 0)) + head.transform.basis = Basis.from_euler(Vector3(_mouse_motion.y * -0.001, 0, 0)) # Block selection. - var position = raycast.get_collision_point() - var normal = raycast.get_collision_normal() + var ray_position = raycast.get_collision_point() + var ray_normal = raycast.get_collision_normal() if Input.is_action_just_pressed("pick_block"): # Block picking. - var block_global_position = (position - normal / 2).floor() + var block_global_position = Vector3i((ray_position - ray_normal / 2).floor()) _selected_block = voxel_world.get_block_global_position(block_global_position) else: # Block prev/next keys. @@ -51,14 +50,17 @@ func _process(_delta): return if breaking: - var block_global_position = (position - normal / 2).floor() + var block_global_position = Vector3i((ray_position - ray_normal / 2).floor()) voxel_world.set_block_global_position(block_global_position, 0) elif placing: - var block_global_position = (position + normal / 2).floor() + var block_global_position = Vector3i((ray_position + ray_normal / 2).floor()) voxel_world.set_block_global_position(block_global_position, _selected_block) func _physics_process(delta): + camera_effects.dof_blur_far_enabled = Settings.fog_enabled + camera_effects.dof_blur_far_distance = Settings.fog_distance * 1.5 + camera_effects.dof_blur_far_transition = Settings.fog_distance / 8 # Crouching. var crouching = Input.is_action_pressed("crouch") if crouching: @@ -76,8 +78,8 @@ func _physics_process(delta): velocity.y -= gravity * delta #warning-ignore:return_value_discarded - # TODO: This information should be set to the CharacterBody properties instead of arguments. - move_and_slide(Vector3(movement.x, velocity.y, movement.z), Vector3.UP) + velocity = Vector3(movement.x, velocity.y, movement.z) + move_and_slide() # Jumping, applied next frame. if is_on_floor() and Input.is_action_pressed("jump"): @@ -91,4 +93,4 @@ func _input(event): func chunk_pos(): - return (transform.origin / Chunk.CHUNK_SIZE).floor() + return Vector3i((transform.origin / Chunk.CHUNK_SIZE).floor()) diff --git a/3d/voxel/player/player.tscn b/3d/voxel/player/player.tscn index d3367311..7dc9f50e 100644 --- a/3d/voxel/player/player.tscn +++ b/3d/voxel/player/player.tscn @@ -1,49 +1,48 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=3 uid="uid://1s4asqpay67m"] -[ext_resource path="res://player/player.gd" type="Script" id=1] -[ext_resource path="res://world/textures/texture_sheet.png" type="Texture2D" id=2] +[ext_resource type="Script" path="res://player/player.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://d3f34krqfgdjd" path="res://world/textures/texture_sheet.png" id="2"] -[sub_resource type="CylinderShape3D" id=1] -radius = 0.4 -height = 1.8 +[sub_resource type="CylinderShape3D" id="1"] +radius = 0.375 +height = 1.75 -[sub_resource type="AtlasTexture" id=2] -flags = 11 -atlas = ExtResource( 2 ) +[sub_resource type="CameraEffects" id="CameraEffects_hnscx"] +dof_blur_far_enabled = true +dof_blur_far_distance = 100.0 +dof_blur_far_transition = 16.0 +dof_blur_amount = 0.25 + +[sub_resource type="AtlasTexture" id="2"] +atlas = ExtResource( "2" ) region = Rect2(0, 0, 64, 64) [node name="Player" type="CharacterBody3D"] collision_layer = 0 -script = ExtResource( 1 ) +script = ExtResource( "1" ) [node name="CollisionShape3D" type="CollisionShape3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 0) -shape = SubResource( 1 ) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.875, 0) +shape = SubResource( "1" ) [node name="Head" type="Node3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0) [node name="Camera3D" type="Camera3D" parent="Head"] -fov = 75.0 +effects = SubResource( "CameraEffects_hnscx" ) near = 0.02 far = 1000.0 [node name="RayCast3D" type="RayCast3D" parent="Head"] -enabled = true -cast_to = Vector3(0, 0, -5) +target_position = Vector3(0, 0, -4) [node name="SelectedBlock" type="TextureRect" parent="."] +texture_filter = 1 anchor_left = 1.0 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 offset_left = -128.0 offset_top = -128.0 -offset_right = -64.0 -offset_bottom = -64.0 -rect_min_size = Vector2(64, 64) -rect_scale = Vector2(2, 2) -texture = SubResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} +texture = SubResource( "2" ) +ignore_texture_size = true diff --git a/3d/voxel/project.godot b/3d/voxel/project.godot index 5216fd2c..18c1c55d 100644 --- a/3d/voxel/project.godot +++ b/3d/voxel/project.godot @@ -6,7 +6,7 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=4 +config_version=5 _global_script_classes=[{ "base": "StaticBody3D", @@ -34,6 +34,7 @@ quite limiting. If you are making your own voxel game, you should probably use Zylann's voxel module instead: https://github.com/Zylann/godot_voxel" run/main_scene="res://menu/main/main_menu.tscn" config/icon="res://icon.png" +config/features=PackedStringArray("4.0") [autoload] @@ -41,11 +42,10 @@ Settings="*res://settings.gd" [display] -window/size/width=1600 -window/size/height=900 -window/dpi/allow_hidpi=true window/stretch/mode="2d" window/stretch/aspect="expand" +window/size/width=1600 +window/size/height=900 [input] @@ -156,11 +156,14 @@ pick_block={ [physics] -common/physics_fps=120 3d/physics_engine="Bullet" +common/physics_fps=120 [rendering] +anti_aliasing/quality/msaa=3 +anti_aliasing/quality/screen_space_aa=1 +textures/canvas_textures/default_texture_filter=0 quality/driver/driver_name="GLES2" vram_compression/import_etc=true vram_compression/import_etc2=false diff --git a/3d/voxel/settings.gd b/3d/voxel/settings.gd index 56697895..d250536a 100644 --- a/3d/voxel/settings.gd +++ b/3d/voxel/settings.gd @@ -3,9 +3,11 @@ extends Node var render_distance = 7 var fog_enabled = true +var fog_distance = 32.0 # Not saved, only used during runtime. var world_type = 0 # Not saved, only used during runtime. var _save_path = "user://settings.json" +@warning_ignore(unused_private_class_variable) var _loaded = false @@ -19,7 +21,7 @@ func _enter_tree(): var file = File.new() if file.file_exists(_save_path): file.open(_save_path, File.READ) - while file.get_position() < file.get_len(): + while file.get_position() < file.get_length(): # Get the saved dictionary from the next line in the save file var json = JSON.new() json.parse(file.get_line()) diff --git a/3d/voxel/world/chunk.gd b/3d/voxel/world/chunk.gd index 34b9c17f..4269e544 100644 --- a/3d/voxel/world/chunk.gd +++ b/3d/voxel/world/chunk.gd @@ -19,7 +19,7 @@ var _thread func _ready(): - transform.origin = chunk_position * CHUNK_SIZE + transform.origin = Vector3(chunk_position * CHUNK_SIZE) name = str(chunk_position) if Settings.world_type == 0: data = TerrainGenerator.random_blocks() @@ -30,7 +30,7 @@ func _ready(): _generate_chunk_collider() # However, we can use a thread for mesh generation. _thread = Thread.new() - _thread.start(self, "_generate_chunk_mesh") + _thread.start(self._generate_chunk_mesh) func regenerate(): @@ -113,7 +113,7 @@ func _draw_block_mesh(surface_tool, block_sub_position, block_id): bottom_uvs = top_uvs # Main rendering code for normal blocks. - var other_block_position = block_sub_position + Vector3.LEFT + var other_block_position = block_sub_position + Vector3i.LEFT var other_block_id = 0 if other_block_position.x == -1: other_block_id = voxel_world.get_block_global_position(other_block_position + chunk_position * CHUNK_SIZE) @@ -122,7 +122,7 @@ func _draw_block_mesh(surface_tool, block_sub_position, block_id): if block_id != other_block_id and is_block_transparent(other_block_id): _draw_block_face(surface_tool, [verts[2], verts[0], verts[3], verts[1]], uvs) - other_block_position = block_sub_position + Vector3.RIGHT + other_block_position = block_sub_position + Vector3i.RIGHT other_block_id = 0 if other_block_position.x == CHUNK_SIZE: other_block_id = voxel_world.get_block_global_position(other_block_position + chunk_position * CHUNK_SIZE) @@ -131,7 +131,7 @@ func _draw_block_mesh(surface_tool, block_sub_position, block_id): if block_id != other_block_id and is_block_transparent(other_block_id): _draw_block_face(surface_tool, [verts[7], verts[5], verts[6], verts[4]], uvs) - other_block_position = block_sub_position + Vector3.FORWARD + other_block_position = block_sub_position + Vector3i.FORWARD other_block_id = 0 if other_block_position.z == -1: other_block_id = voxel_world.get_block_global_position(other_block_position + chunk_position * CHUNK_SIZE) @@ -140,7 +140,7 @@ func _draw_block_mesh(surface_tool, block_sub_position, block_id): if block_id != other_block_id and is_block_transparent(other_block_id): _draw_block_face(surface_tool, [verts[6], verts[4], verts[2], verts[0]], uvs) - other_block_position = block_sub_position + Vector3.BACK + other_block_position = block_sub_position + Vector3i.BACK other_block_id = 0 if other_block_position.z == CHUNK_SIZE: other_block_id = voxel_world.get_block_global_position(other_block_position + chunk_position * CHUNK_SIZE) @@ -149,7 +149,7 @@ func _draw_block_mesh(surface_tool, block_sub_position, block_id): if block_id != other_block_id and is_block_transparent(other_block_id): _draw_block_face(surface_tool, [verts[3], verts[1], verts[7], verts[5]], uvs) - other_block_position = block_sub_position + Vector3.DOWN + other_block_position = block_sub_position + Vector3i.DOWN other_block_id = 0 if other_block_position.y == -1: other_block_id = voxel_world.get_block_global_position(other_block_position + chunk_position * CHUNK_SIZE) @@ -158,7 +158,7 @@ func _draw_block_mesh(surface_tool, block_sub_position, block_id): if block_id != other_block_id and is_block_transparent(other_block_id): _draw_block_face(surface_tool, [verts[4], verts[5], verts[0], verts[1]], bottom_uvs) - other_block_position = block_sub_position + Vector3.UP + other_block_position = block_sub_position + Vector3i.UP other_block_id = 0 if other_block_position.y == CHUNK_SIZE: other_block_id = voxel_world.get_block_global_position(other_block_position + chunk_position * CHUNK_SIZE) @@ -168,21 +168,21 @@ func _draw_block_mesh(surface_tool, block_sub_position, block_id): _draw_block_face(surface_tool, [verts[2], verts[3], verts[6], verts[7]], top_uvs) -func _draw_block_face(surface_tool, verts, uvs): - surface_tool.add_uv(uvs[1]); surface_tool.add_vertex(verts[1]) - surface_tool.add_uv(uvs[2]); surface_tool.add_vertex(verts[2]) - surface_tool.add_uv(uvs[3]); surface_tool.add_vertex(verts[3]) +func _draw_block_face(surface_tool: SurfaceTool, verts, uvs): + surface_tool.set_uv(uvs[1]); surface_tool.add_vertex(verts[1]) + surface_tool.set_uv(uvs[2]); surface_tool.add_vertex(verts[2]) + surface_tool.set_uv(uvs[3]); surface_tool.add_vertex(verts[3]) - surface_tool.add_uv(uvs[2]); surface_tool.add_vertex(verts[2]) - surface_tool.add_uv(uvs[1]); surface_tool.add_vertex(verts[1]) - surface_tool.add_uv(uvs[0]); surface_tool.add_vertex(verts[0]) + surface_tool.set_uv(uvs[2]); surface_tool.add_vertex(verts[2]) + surface_tool.set_uv(uvs[1]); surface_tool.add_vertex(verts[1]) + surface_tool.set_uv(uvs[0]); surface_tool.add_vertex(verts[0]) func _create_block_collider(block_sub_position): var collider = CollisionShape3D.new() collider.shape = BoxShape3D.new() collider.shape.extents = Vector3.ONE / 2 - collider.transform.origin = block_sub_position + Vector3.ONE / 2 + collider.transform.origin = Vector3(block_sub_position) + Vector3.ONE / 2 add_child(collider) @@ -192,10 +192,12 @@ static func calculate_block_uvs(block_id): var col = block_id % TEXTURE_SHEET_WIDTH return [ - TEXTURE_TILE_SIZE * Vector2(col, row), - TEXTURE_TILE_SIZE * Vector2(col, row + 1), - TEXTURE_TILE_SIZE * Vector2(col + 1, row), - TEXTURE_TILE_SIZE * Vector2(col + 1, row + 1), + # Godot 4 has a weird bug where there are seams at the edge + # of the textures. Adding a margin of 0.01 "fixes" it. + TEXTURE_TILE_SIZE * Vector2(col + 0.01, row + 0.01), + TEXTURE_TILE_SIZE * Vector2(col + 0.01, row + 0.99), + TEXTURE_TILE_SIZE * Vector2(col + 0.99, row + 0.01), + TEXTURE_TILE_SIZE * Vector2(col + 0.99, row + 0.99), ] diff --git a/3d/voxel/world/environment.gd b/3d/voxel/world/environment.gd index 8b1f9108..8b369713 100644 --- a/3d/voxel/world/environment.gd +++ b/3d/voxel/world/environment.gd @@ -6,12 +6,8 @@ extends WorldEnvironment func _process(delta): environment.fog_enabled = Settings.fog_enabled - environment.dof_blur_far_enabled = Settings.fog_enabled var target_distance = clamp(voxel_world.effective_render_distance, 2, voxel_world.render_distance - 1) * Chunk.CHUNK_SIZE var rate = delta * 4 - if environment.fog_depth_end > target_distance: - rate *= 2 - environment.fog_depth_begin = move_toward(environment.fog_depth_begin, target_distance - Chunk.CHUNK_SIZE, rate) - environment.fog_depth_end = move_toward(environment.fog_depth_end, target_distance, rate) - environment.dof_blur_far_distance = environment.fog_depth_end + Settings.fog_distance = move_toward(Settings.fog_distance, target_distance, rate) + environment.fog_density = 0.5 / Settings.fog_distance diff --git a/3d/voxel/world/terrain_generator.gd b/3d/voxel/world/terrain_generator.gd index f1c36d90..bfab6b55 100644 --- a/3d/voxel/world/terrain_generator.gd +++ b/3d/voxel/world/terrain_generator.gd @@ -29,14 +29,14 @@ static func flat(chunk_position): for x in range(CHUNK_SIZE): for z in range(CHUNK_SIZE): - data[Vector3(x, 0, z)] = 3 + data[Vector3i(x, 0, z)] = 3 return data # Used to create the project icon. static func origin_grass(chunk_position): - if chunk_position == Vector3.ZERO: - return {Vector3.ZERO: 3} + if chunk_position == Vector3i.ZERO: + return {Vector3i.ZERO: 3} return {} diff --git a/3d/voxel/world/textures/material.tres b/3d/voxel/world/textures/material.tres index 9a112ee0..f6d46b9f 100644 --- a/3d/voxel/world/textures/material.tres +++ b/3d/voxel/world/textures/material.tres @@ -1,8 +1,9 @@ -[gd_resource type="StandardMaterial3D" load_steps=2 format=2] +[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://wfvc2s58yyad"] -[ext_resource path="res://world/textures/texture_sheet.png" type="Texture2D" id=1] +[ext_resource type="Texture2D" uid="uid://d3f34krqfgdjd" path="res://world/textures/texture_sheet.png" id="1"] [resource] -flags_transparent = true -params_depth_draw_mode = 3 -albedo_texture = ExtResource( 1 ) +transparency = 4 +albedo_texture = ExtResource( "1" ) +texture_filter = 0 +texture_repeat = false diff --git a/3d/voxel/world/textures/texture_sheet.png.import b/3d/voxel/world/textures/texture_sheet.png.import index beef45a2..2b9f54b3 100644 --- a/3d/voxel/world/textures/texture_sheet.png.import +++ b/3d/voxel/world/textures/texture_sheet.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture2D" -path="res://.godot/imported/texture_sheet.png-52286655fc64f0acb01bdaefe1f1bd3e.stex" +type="CompressedTexture2D" +uid="uid://d3f34krqfgdjd" +path="res://.godot/imported/texture_sheet.png-52286655fc64f0acb01bdaefe1f1bd3e.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,23 @@ metadata={ [deps] source_file="res://world/textures/texture_sheet.png" -dest_files=["res://.godot/imported/texture_sheet.png-52286655fc64f0acb01bdaefe1f1bd3e.stex"] +dest_files=["res://.godot/imported/texture_sheet.png-52286655fc64f0acb01bdaefe1f1bd3e.ctex"] [params] compress/mode=0 compress/lossy_quality=1.0 -compress/hdr_mode=0 +compress/hdr_compression=1 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=true -flags/filter=false -flags/mipmaps=true -flags/anisotropic=true -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=false process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/3d/voxel/world/voxel_world.gd b/3d/voxel/world/voxel_world.gd index 9d61e7a7..5a837985 100644 --- a/3d/voxel/world/voxel_world.gd +++ b/3d/voxel/world/voxel_world.gd @@ -6,8 +6,9 @@ const CHUNK_END_SIZE = Chunk.CHUNK_SIZE - 1 var render_distance: set(value): - # TODO: Manually copy the code from this method. - _set_render_distance(value) + render_distance = value + _delete_distance = value + 2 + var _delete_distance = 0 var effective_render_distance = 0 var _old_player_chunk = Vector3i() @@ -21,8 +22,8 @@ var _chunks = {} func _process(_delta): - _set_render_distance(Settings.render_distance) - var player_chunk = (player.transform.origin / Chunk.CHUNK_SIZE).round() + render_distance = Settings.render_distance + var player_chunk = Vector3i((player.transform.origin / Chunk.CHUNK_SIZE).round()) if _deleting or player_chunk != _old_player_chunk: _delete_far_away_chunks(player_chunk) @@ -38,8 +39,8 @@ func _process(_delta): for x in range(player_chunk.x - effective_render_distance, player_chunk.x + effective_render_distance): for y in range(player_chunk.y - effective_render_distance, player_chunk.y + effective_render_distance): for z in range(player_chunk.z - effective_render_distance, player_chunk.z + effective_render_distance): - var chunk_position = Vector3(x, y, z) - if player_chunk.distance_to(chunk_position) > render_distance: + var chunk_position = Vector3i(x, y, z) + if Vector3(player_chunk).distance_to(Vector3(chunk_position)) > render_distance: continue if _chunks.has(chunk_position): @@ -60,20 +61,20 @@ func _process(_delta): _generating = false -func get_block_global_position(block_global_position): - var chunk_position = (block_global_position / Chunk.CHUNK_SIZE).floor() +func get_block_global_position(block_global_position: Vector3i): + var chunk_position = Vector3i((block_global_position / Chunk.CHUNK_SIZE)) if _chunks.has(chunk_position): var chunk = _chunks[chunk_position] - var sub_position = block_global_position.posmod(Chunk.CHUNK_SIZE) + var sub_position = Vector3i(Vector3(block_global_position).posmod(Chunk.CHUNK_SIZE)) if chunk.data.has(sub_position): return chunk.data[sub_position] return 0 -func set_block_global_position(block_global_position, block_id): - var chunk_position = (block_global_position / Chunk.CHUNK_SIZE).floor() +func set_block_global_position(block_global_position: Vector3i, block_id): + var chunk_position = Vector3i((Vector3(block_global_position) / Chunk.CHUNK_SIZE).floor()) var chunk = _chunks[chunk_position] - var sub_position = block_global_position.posmod(Chunk.CHUNK_SIZE) + var sub_position = Vector3i(Vector3(block_global_position).posmod(Chunk.CHUNK_SIZE)) if block_id == 0: chunk.data.erase(sub_position) else: @@ -83,17 +84,17 @@ func set_block_global_position(block_global_position, block_id): # We also might need to regenerate some neighboring chunks. if Chunk.is_block_transparent(block_id): if sub_position.x == 0: - _chunks[chunk_position + Vector3.LEFT].regenerate() + _chunks[chunk_position + Vector3i.LEFT].regenerate() elif sub_position.x == CHUNK_END_SIZE: - _chunks[chunk_position + Vector3.RIGHT].regenerate() + _chunks[chunk_position + Vector3i.RIGHT].regenerate() if sub_position.z == 0: - _chunks[chunk_position + Vector3.FORWARD].regenerate() + _chunks[chunk_position + Vector3i.FORWARD].regenerate() elif sub_position.z == CHUNK_END_SIZE: - _chunks[chunk_position + Vector3.BACK].regenerate() + _chunks[chunk_position + Vector3i.BACK].regenerate() if sub_position.y == 0: - _chunks[chunk_position + Vector3.DOWN].regenerate() + _chunks[chunk_position + Vector3i.DOWN].regenerate() elif sub_position.y == CHUNK_END_SIZE: - _chunks[chunk_position + Vector3.UP].regenerate() + _chunks[chunk_position + Vector3i.UP].regenerate() func clean_up(): @@ -119,7 +120,7 @@ func _delete_far_away_chunks(player_chunk): var max_deletions = clamp(2 * (render_distance - effective_render_distance), 2, 8) # Also take the opportunity to delete far away chunks. for chunk_position_key in _chunks.keys(): - if player_chunk.distance_to(chunk_position_key) > _delete_distance: + if Vector3(player_chunk).distance_to(Vector3(chunk_position_key)) > _delete_distance: var thread = _chunks[chunk_position_key]._thread if thread: thread.wait_to_finish() @@ -134,8 +135,3 @@ func _delete_far_away_chunks(player_chunk): # We're done deleting. _deleting = false - - -func _set_render_distance(value): - render_distance = value - _delete_distance = value + 2 diff --git a/3d/voxel/world/world.tscn b/3d/voxel/world/world.tscn index e3f03dd6..f289a1b9 100644 --- a/3d/voxel/world/world.tscn +++ b/3d/voxel/world/world.tscn @@ -1,16 +1,30 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=10 format=3 uid="uid://3wtpjm677uyk"] -[ext_resource path="res://player/player.tscn" type="PackedScene" id=1] -[ext_resource path="res://world/voxel_world.gd" type="Script" id=2] -[ext_resource path="res://default_env.tres" type="Environment" id=3] -[ext_resource path="res://world/environment.gd" type="Script" id=4] -[ext_resource path="res://menu/ingame/pause_menu.tscn" type="PackedScene" id=5] -[ext_resource path="res://menu/debug.gd" type="Script" id=6] -[ext_resource path="res://menu/theme/theme.tres" type="Theme" id=7] +[ext_resource type="PackedScene" uid="uid://1s4asqpay67m" path="res://player/player.tscn" id="1"] +[ext_resource type="Script" path="res://world/voxel_world.gd" id="2"] +[ext_resource type="Script" path="res://world/environment.gd" id="4"] +[ext_resource type="PackedScene" uid="uid://dk8arl1if3lyr" path="res://menu/ingame/pause_menu.tscn" id="5"] +[ext_resource type="Script" path="res://menu/debug.gd" id="6"] +[ext_resource type="Theme" path="res://menu/theme/theme.tres" id="7"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_rhfg5"] +sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) +ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) + +[sub_resource type="Sky" id="Sky_iri27"] +sky_material = SubResource( "ProceduralSkyMaterial_rhfg5" ) + +[sub_resource type="Environment" id="Environment_cs0j5"] +background_mode = 2 +sky = SubResource( "Sky_iri27" ) +tonemap_mode = 2 +glow_enabled = true +fog_enabled = true +fog_aerial_perspective = 0.5 [node name="World3D" type="Node3D"] -[node name="Player" parent="." instance=ExtResource( 1 )] +[node name="Player" parent="." instance=ExtResource( "1" )] [node name="Debug" type="Label" parent="."] visible = false @@ -19,20 +33,25 @@ anchor_bottom = 1.0 offset_left = 20.0 offset_right = -20.0 offset_bottom = -20.0 -theme = ExtResource( 7 ) -script = ExtResource( 6 ) +theme = ExtResource( "7" ) +theme_override_font_sizes/font_size = 48 +script = ExtResource( "6" ) __meta__ = { "_edit_use_anchors_": false } -[node name="PauseMenu" parent="." instance=ExtResource( 5 )] +[node name="PauseMenu" parent="." instance=ExtResource( "5" )] [node name="VoxelWorld" type="Node" parent="."] -script = ExtResource( 2 ) +script = ExtResource( "2" ) [node name="Environment" type="WorldEnvironment" parent="."] -environment = ExtResource( 3 ) -script = ExtResource( 4 ) +environment = SubResource( "Environment_cs0j5" ) +script = ExtResource( "4" ) [node name="Sun" type="DirectionalLight3D" parent="Environment"] -transform = Transform3D(0.173648, -0.564863, 0.806707, 0, 0.819152, 0.573576, -0.984808, -0.0996005, 0.142244, 0, 0, 0) +transform = Transform3D(-0.866025, -0.433013, 0.25, 0, 0.5, 0.866026, -0.5, 0.75, -0.433013, 0, 0, 0) +shadow_enabled = true +directional_shadow_max_distance = 250.0 + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."]