From 050fda3a4cc0f619f941da1298b877f429ded75f Mon Sep 17 00:00:00 2001 From: Aaron Franke Date: Sat, 29 Feb 2020 00:34:10 -0500 Subject: [PATCH] Add a Voxel demo project --- 3d/voxel/README.md | 58 +++++ 3d/voxel/default_bus_layout.tres | 8 + 3d/voxel/default_env.tres | 18 ++ 3d/voxel/icon.png | Bin 0 -> 25556 bytes 3d/voxel/icon.png.import | 34 +++ 3d/voxel/menu/button.png | Bin 0 -> 840 bytes 3d/voxel/menu/button.png.import | 34 +++ 3d/voxel/menu/debug.gd | 45 ++++ 3d/voxel/menu/ingame/pause_menu.gd | 38 +++ 3d/voxel/menu/ingame/pause_menu.tscn | 133 ++++++++++ 3d/voxel/menu/main/dark_dirt.png | Bin 0 -> 2841 bytes 3d/voxel/menu/main/dark_dirt.png.import | 34 +++ 3d/voxel/menu/main/main_menu.gd | 37 +++ 3d/voxel/menu/main/main_menu.tscn | 236 ++++++++++++++++++ 3d/voxel/menu/main/splash_text.gd | 8 + 3d/voxel/menu/main/title.png | Bin 0 -> 7394 bytes 3d/voxel/menu/main/title.png.import | 34 +++ 3d/voxel/menu/options/option_buttons.gd | 22 ++ 3d/voxel/menu/options/options.gd | 8 + 3d/voxel/menu/options/options.tscn | 112 +++++++++ 3d/voxel/menu/theme/TinyUnicode.tres | 7 + 3d/voxel/menu/theme/TinyUnicode.ttf | Bin 0 -> 23296 bytes 3d/voxel/menu/theme/theme.tres | 6 + 3d/voxel/player/crosshair.svg | 1 + 3d/voxel/player/crosshair.svg.import | 34 +++ 3d/voxel/player/player.gd | 94 +++++++ 3d/voxel/player/player.tscn | 48 ++++ 3d/voxel/project.godot | 161 ++++++++++++ 3d/voxel/screenshots/.gdignore | 0 3d/voxel/screenshots/blocks.png | Bin 0 -> 1861971 bytes 3d/voxel/screenshots/title.png | Bin 0 -> 44371 bytes 3d/voxel/settings.gd | 40 +++ 3d/voxel/world/chunk.gd | 216 ++++++++++++++++ 3d/voxel/world/environment.gd | 17 ++ 3d/voxel/world/terrain_generator.gd | 42 ++++ 3d/voxel/world/textures/material.tres | 8 + 3d/voxel/world/textures/texture_sheet.png | Bin 0 -> 38041 bytes .../world/textures/texture_sheet.png.import | 36 +++ 3d/voxel/world/voxel_world.gd | 138 ++++++++++ 3d/voxel/world/world.tscn | 38 +++ 40 files changed, 1745 insertions(+) create mode 100644 3d/voxel/README.md create mode 100644 3d/voxel/default_bus_layout.tres create mode 100644 3d/voxel/default_env.tres create mode 100644 3d/voxel/icon.png create mode 100644 3d/voxel/icon.png.import create mode 100644 3d/voxel/menu/button.png create mode 100644 3d/voxel/menu/button.png.import create mode 100644 3d/voxel/menu/debug.gd create mode 100644 3d/voxel/menu/ingame/pause_menu.gd create mode 100644 3d/voxel/menu/ingame/pause_menu.tscn create mode 100644 3d/voxel/menu/main/dark_dirt.png create mode 100644 3d/voxel/menu/main/dark_dirt.png.import create mode 100644 3d/voxel/menu/main/main_menu.gd create mode 100644 3d/voxel/menu/main/main_menu.tscn create mode 100644 3d/voxel/menu/main/splash_text.gd create mode 100644 3d/voxel/menu/main/title.png create mode 100644 3d/voxel/menu/main/title.png.import create mode 100644 3d/voxel/menu/options/option_buttons.gd create mode 100644 3d/voxel/menu/options/options.gd create mode 100644 3d/voxel/menu/options/options.tscn create mode 100644 3d/voxel/menu/theme/TinyUnicode.tres create mode 100644 3d/voxel/menu/theme/TinyUnicode.ttf create mode 100644 3d/voxel/menu/theme/theme.tres create mode 100644 3d/voxel/player/crosshair.svg create mode 100644 3d/voxel/player/crosshair.svg.import create mode 100644 3d/voxel/player/player.gd create mode 100644 3d/voxel/player/player.tscn create mode 100644 3d/voxel/project.godot create mode 100644 3d/voxel/screenshots/.gdignore create mode 100644 3d/voxel/screenshots/blocks.png create mode 100644 3d/voxel/screenshots/title.png create mode 100644 3d/voxel/settings.gd create mode 100644 3d/voxel/world/chunk.gd create mode 100644 3d/voxel/world/environment.gd create mode 100644 3d/voxel/world/terrain_generator.gd create mode 100644 3d/voxel/world/textures/material.tres create mode 100644 3d/voxel/world/textures/texture_sheet.png create mode 100644 3d/voxel/world/textures/texture_sheet.png.import create mode 100644 3d/voxel/world/voxel_world.gd create mode 100644 3d/voxel/world/world.tscn diff --git a/3d/voxel/README.md b/3d/voxel/README.md new file mode 100644 index 00000000..8631211f --- /dev/null +++ b/3d/voxel/README.md @@ -0,0 +1,58 @@ +# Voxel Game + +This demo is a minimal first-person voxel game, +inspired by others such as Minecraft. + +Language: GDScript + +Renderer: GLES 2 + +## How does it work? + +Each chunk is a +[`StaticBody`](https://docs.godotengine.org/en/latest/classes/class_staticbody.html) +with each block having its own +[`CollisionShape`](https://docs.godotengine.org/en/latest/classes/class_collisionshape.html) +for collisions. The meshes are created using +[`SurfaceTool`](https://docs.godotengine.org/en/latest/classes/class_surfacetool.html) +which allows specifying vertices, triangles, and UV coordinates +for constructing a mesh. + +The chunks and chunk data are stored in +[`Dictionary`](https://docs.godotengine.org/en/latest/classes/class_dictionary.html) +objects. New chunks have their meshes drawn in separate +[`Thread`](https://docs.godotengine.org/en/latest/classes/class_thread.html)s, +but generating the collisions is done in the main thread, since Godot does +not support changing physics objects in a separate thread. There +are two terrain types, random blocks and flat grass. A more +complex terrain generator is out-of-scope for this demo project. + +The player can place and break blocks using the +[`RayCast`](https://docs.godotengine.org/en/latest/classes/class_raycast.html) +node attached to the camera. It uses the collision information to +figure out the block position and change the block data. You can +switch the active block using the brackets or with the middle mouse button. + +There is a settings menu for render distance and toggling the fog. +Settings are stored inside of an +[AutoLoad singleton](https://docs.godotengine.org/en/latest/getting_started/step_by_step/singletons_autoload.html) +called "Settings". This class will automatically save +settings, and load them when the game opens, by using the +[`File`](https://docs.godotengine.org/en/latest/classes/class_file.html) class. + +Sticking to GDScript and the built-in Godot tools, as this demo does, is +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 + +## Screenshots + +![Screenshot](screenshots/blocks.png) + +![Screenshot](screenshots/title.png) + +## Licenses + +Textures are from [Minetest](https://www.minetest.net/). Copyright © 2010-2018 Minetest contributors, CC BY-SA 3.0 Unported (Attribution-ShareAlike) +http://creativecommons.org/licenses/by-sa/3.0/ + +Font is "TinyUnicode" by DuffsDevice. Copyright © DuffsDevice, CC-BY (Attribution) http://www.pentacom.jp/pentacom/bitfontmaker2/gallery/?id=468 diff --git a/3d/voxel/default_bus_layout.tres b/3d/voxel/default_bus_layout.tres new file mode 100644 index 00000000..68db27a4 --- /dev/null +++ b/3d/voxel/default_bus_layout.tres @@ -0,0 +1,8 @@ +[gd_resource type="AudioBusLayout" load_steps=2 format=2] + +[sub_resource type="AudioEffectPitchShift" id=1] +resource_name = "PitchShift" + +[resource] +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 new file mode 100644 index 00000000..0a8e581e --- /dev/null +++ b/3d/voxel/default_env.tres @@ -0,0 +1,18 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="ProceduralSky" id=1] +sun_longitude = 100.0 +sun_angle_min = 2.0 +sun_angle_max = 20.0 + +[resource] +background_mode = 2 +background_sky = SubResource( 1 ) +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 diff --git a/3d/voxel/icon.png b/3d/voxel/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..42cfb8ca7eeb616d70f502af803fa2c7d8fae045 GIT binary patch literal 25556 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 #YE?qg5%~* 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 literal 0 HcmV?d00001 diff --git a/3d/voxel/icon.png.import b/3d/voxel/icon.png.import new file mode 100644 index 00000000..96cbf462 --- /dev/null +++ b/3d/voxel/icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.png" +dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/3d/voxel/menu/button.png b/3d/voxel/menu/button.png new file mode 100644 index 0000000000000000000000000000000000000000..78f2cdf17eeb32aa2118c8df1653bbfee8d3eeca GIT binary patch literal 840 zcmeAS@N?(olHy`uVBq!ia0y~yU~B-g9XObPtN`4*<#d*akSPrG^Z zRh6Cn&$X-kqHgAxt+o6Az`2W&( z+2mX1)4GqotFXCQpZ0gpt@$=D-uH>~^KZRA(`WhCE`RGA&_pU-Dw zS&`7d$gyC?tHZy`x90Pln^pf@ejaaBZR9FvJ@M1Gu0P(@Jmu==$$vhbzJKvgnnME@ z8_=q*mrJW2S8TDrm-pKLUY_~dUvaPMCd?^b{I%-pjq0c9CZB%#wA;V$HOC{V#tM6n zb9QR$FK(+p1$6uI$@h6U0uBOQ?qGQJ?A1LVoh@H;EV^Q+F!|z+Z(ol-Hu`ej_3hVW z_ulXGp1f(+-v8&5e0rU+f&(ivj|0O|nLoT4KX2suI%e5V+)<{m)lYG2zi0i0J?}$46P`138^v|c$_pe4M46gn6rSNRs zZr_&gy)M)L>UVn9{@XvybwHY;5t=6N5!Xq-e{)Wrg(gy79Wt-ySXc_Vr3t%hAJ&Hckh}%Y2l0sgu1hzv|qV>}woH&duB` z|Mq@`-!`D3@oGq6RsQ|^*1x)^UKV}a{`ZD=@ZS%neBXA*t_P*EzGv`AIHT{pq=$>| T+;SOU4q@bP0l+XkK>J_ct literal 0 HcmV?d00001 diff --git a/3d/voxel/menu/button.png.import b/3d/voxel/menu/button.png.import new file mode 100644 index 00000000..28de1bfb --- /dev/null +++ b/3d/voxel/menu/button.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/button.png-e6ddd405c0968c9fb68dca7b600a69a3.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://menu/button.png" +dest_files=[ "res://.import/button.png-e6ddd405c0968c9fb68dca7b600a69a3.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/3d/voxel/menu/debug.gd b/3d/voxel/menu/debug.gd new file mode 100644 index 00000000..2beae26c --- /dev/null +++ b/3d/voxel/menu/debug.gd @@ -0,0 +1,45 @@ +extends Label +# Displays some useful debug information in a Label. + +onready var player = $"../Player" +onready var voxel_world = $"../VoxelWorld" + + +func _process(_delta): + if Input.is_action_just_pressed("debug"): + visible = !visible + + text = "Position: " + _vector_to_string_appropriate_digits(player.transform.origin) + text += "\nEffective render distance: " + str(voxel_world.effective_render_distance) + text += "\nLooking: " + _cardinal_string_from_radians(player.transform.basis.get_euler().y) + text += "\nFPS: " + str(Engine.get_frames_per_second()) + + +# Avoids the problem of showing more digits than needed or available. +func _vector_to_string_appropriate_digits(vector): + var factors = [1000, 1000, 1000] + for i in range(3): + if abs(vector[i]) > 4096: + factors[i] = factors[i] / 10 + if abs(vector[i]) > 65536: + factors[i] = factors[i] / 10 + if abs(vector[i]) > 524288: + factors[i] = factors[i] / 10 + + return "(" + \ + str(round(vector.x * factors[0]) / factors[0]) + ", " + \ + str(round(vector.y * factors[1]) / factors[1]) + ", " + \ + str(round(vector.z * factors[2]) / factors[2]) + ")" + + +# Expects a rotation where 0 is North, on the range -PI to PI. +func _cardinal_string_from_radians(angle): + if angle > TAU * 3 / 8: + return "South" + if angle < -TAU * 3 / 8: + return "South" + if angle > TAU * 1 / 8: + return "West" + if angle < -TAU * 1 / 8: + return "East" + return "North" diff --git a/3d/voxel/menu/ingame/pause_menu.gd b/3d/voxel/menu/ingame/pause_menu.gd new file mode 100644 index 00000000..a84196e0 --- /dev/null +++ b/3d/voxel/menu/ingame/pause_menu.gd @@ -0,0 +1,38 @@ +extends Control + +onready var tree = get_tree() + +onready var crosshair = $Crosshair +onready var pause = $Pause +onready var options = $Options +onready var voxel_world = $"../VoxelWorld" + + +func _process(_delta): + if Input.is_action_just_pressed("pause"): + pause.visible = crosshair.visible + crosshair.visible = !crosshair.visible + options.visible = false + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED if crosshair.visible else Input.MOUSE_MODE_VISIBLE) + + +func _on_Resume_pressed(): + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + crosshair.visible = true + pause.visible = false + + +func _on_Options_pressed(): + options.prev_menu = pause + options.visible = true + pause.visible = false + + +func _on_MainMenu_pressed(): + voxel_world.clean_up() + tree.change_scene("res://menu/main/main_menu.tscn") + + +func _on_Exit_pressed(): + voxel_world.clean_up() + tree.quit() diff --git a/3d/voxel/menu/ingame/pause_menu.tscn b/3d/voxel/menu/ingame/pause_menu.tscn new file mode 100644 index 00000000..2cfe0bd1 --- /dev/null +++ b/3d/voxel/menu/ingame/pause_menu.tscn @@ -0,0 +1,133 @@ +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://player/crosshair.svg" type="Texture" 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="Texture" 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 +} + +[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"] +margin_left = 784.0 +margin_top = 434.0 +margin_right = 816.0 +margin_bottom = 466.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"] +margin_right = 1600.0 +margin_bottom = 900.0 +size_flags_vertical = 3 +alignment = 1 + +[node name="MainButtons" type="VBoxContainer" parent="Pause/ButtonHolder"] +margin_left = 608.0 +margin_right = 992.0 +margin_bottom = 900.0 +custom_constants/separation = 20 +alignment = 1 + +[node name="Resume" type="TextureButton" parent="Pause/ButtonHolder/MainButtons"] +margin_top = 292.0 +margin_right = 384.0 +margin_bottom = 356.0 +rect_min_size = Vector2( 384, 64 ) +texture_normal = ExtResource( 5 ) + +[node name="Label" type="Label" parent="Pause/ButtonHolder/MainButtons/Resume"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -1.0 +margin_bottom = -18.0 +text = "Resume Game" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Options" type="TextureButton" parent="Pause/ButtonHolder/MainButtons"] +margin_top = 376.0 +margin_right = 384.0 +margin_bottom = 440.0 +rect_min_size = Vector2( 384, 64 ) +texture_normal = ExtResource( 5 ) + +[node name="Label" type="Label" parent="Pause/ButtonHolder/MainButtons/Options"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -1.0 +margin_bottom = -18.0 +text = "Options" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="MainMenu" type="TextureButton" parent="Pause/ButtonHolder/MainButtons"] +margin_top = 460.0 +margin_right = 384.0 +margin_bottom = 524.0 +rect_min_size = Vector2( 384, 64 ) +texture_normal = ExtResource( 5 ) + +[node name="Label" type="Label" parent="Pause/ButtonHolder/MainButtons/MainMenu"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -1.0 +margin_bottom = -18.0 +text = "Main Menu" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Exit" type="TextureButton" parent="Pause/ButtonHolder/MainButtons"] +margin_top = 544.0 +margin_right = 384.0 +margin_bottom = 608.0 +rect_min_size = Vector2( 384, 64 ) +texture_normal = ExtResource( 5 ) + +[node name="Label" type="Label" parent="Pause/ButtonHolder/MainButtons/Exit"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -1.0 +margin_bottom = -18.0 +text = "Exit Game" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[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"] +[connection signal="pressed" from="Pause/ButtonHolder/MainButtons/MainMenu" to="." method="_on_MainMenu_pressed"] +[connection signal="pressed" from="Pause/ButtonHolder/MainButtons/Exit" to="." method="_on_Exit_pressed"] diff --git a/3d/voxel/menu/main/dark_dirt.png b/3d/voxel/menu/main/dark_dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..9331e4035bbbf1de23ba538410b7afa399050781 GIT binary patch literal 2841 zcmV+!3+D8RP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxvMVPH{AU$e0*IGb4v(3t>>$fe0}>wFC&|54 z@f;5r7$J2_%^Y+6_2+H=z=s?q6Jq96QnL7j5(-sx*zQkRcW1-8uTPLE{C*oZXM!-~ z(fa)}S6N>%9$ydW9 zWbK(x^iS^te5x|;Kd?-K5jsCkxcD>p3*yJd{&+<16E55Q6^?>@55DhfM^{4vqDeB! z8bxQJe-FSO{CX_m%J@d~^STNyw$*k}K5VxQS9iq`Shf9Epy z-6urO^1%vz(adYOF`1iptO6nK7T)3lSTCX9KJsU#YQVAyGb6xi+cwdnd*zm2JbSE* zXm<%YlZO}pMA$pR8Rx-(P0mM`oXtepIpD}3sKRsdff^WaG17pO6g;ZMWMZ0o|?b`mVfweKuxxN_NRX8!V9@TgIQHf2ZR`^2R z<42ukfGP?2>jC*cJ8au(aTxkKm%w5zYXn6%bdh1w$+0HM6|bfuZ|m0Wxy0Zyt-;MzF740~RtbkuEIOq=9jK#*DvRw|vtclg zRp2aYF!ls9js@Y-_91xKHY8H#jhamYpq21GSy>EtO|`V+gM{C*$~etrtF&efR7~RR z?wha>N)e1pkTi!NEv!sj?^ioAw{0b&cBuXY`D}!@Kq2A!-*p4iC5sA2#rF| z!b=q?L_AV!_9!4}S=+8!@v3i04W!M`GAIh^h>QM7b~#k_v2%~4CSMdEA#;+~_~)SR zeQ^934u?p8=+**1wP%|;Hq^X-H*a2QXx{}I8GD{?pXyH^ZMlpB8=gwO#i_pQ_Y7Bo zqK^^}-l!jV{nfzxbxNVAc4-D2Em2>RD6u(_y(0R0sGXB4D4UT~Wb$?#^dAIbJLM_W zZzI2z_EX>4Tx0C=2zkvmAkKpe)uwiX}M2iQTx zAwzYtAX>yxt5Adrp;lmEM7 z-bHzq_qjhuuaYwv;1h^vnQmCb8^qI_md<&fILwNYLVQj&ouk{0a_DsomLMgJpcdz z24YJ`L;xxPL;zZj9}z47000SaNLh0L04^f{04^f|c%?sf00007bV*G`2jm412{bi3 zuqS{300T`)L_t(|+U=W3lG9KSL}hEV+OiGZjUiwG2cR#&f&*~>BM=Qe;8C)yk*)G| z#CLeD(yshv`75ogA*(d`_2YZ*4UV>HhNgEqS7J{mVtPrE==yXj_AxKSp5LTmpUx8zgHExH<3*bYhzVD37ecw6P zqcCu8xT@6$`9a|Peo<)N(bSba0S15pFvtVQ*&1=0^>`3!eZBejEcRmYPUC#6=QnNV z%quSC?oED#516Y<>fAnt_hS?=0LJbEd|xr>5a;jKpT&NCdK7!LBIgq)$9b?e2*6S5 z2V7@dZ=0#JHdwDe*%M#@7ytuGA#8fdTsgf(oQFi`Rb`1d?EXR40@-qfdR?zajgtDo zVZU|ODp|I4`Xr-(0WfwS(1Ntp=Fyo;vlh5?T&vM>KXIzLev#+;4`P4pJ<_L8PcRA? z0Au$75&Gv9<2K?jb8pty)aaOdQ=_~6pzBY6ev4feN9PU1=v_u(=+p<;r!Wc_0Au$7 zS{E!5h>vKk^E_Tj5gMEfKwE=tt`y5ehGeQP{0U&xn>lX1k)B-&F ziWE1*Xi~6K0%4TMR`8k6JP)s00SRDPLlI)5W_n|C)De#4LIXN zT^?!1n^|Gj^X%=-X8L>V1Mr<8_7aT(2Egd`0O^jf;-{*qbhb=D?Lxxx2sR@eYA00zf@6{ct~jr}4S00000NkvXXu0mjfnSoME literal 0 HcmV?d00001 diff --git a/3d/voxel/menu/main/dark_dirt.png.import b/3d/voxel/menu/main/dark_dirt.png.import new file mode 100644 index 00000000..f87f957b --- /dev/null +++ b/3d/voxel/menu/main/dark_dirt.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/dark_dirt.png-8e8d84e3c30520a8995166be2b7ea97e.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://menu/main/dark_dirt.png" +dest_files=[ "res://.import/dark_dirt.png-8e8d84e3c30520a8995166be2b7ea97e.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/3d/voxel/menu/main/main_menu.gd b/3d/voxel/menu/main/main_menu.gd new file mode 100644 index 00000000..3cdce1fd --- /dev/null +++ b/3d/voxel/menu/main/main_menu.gd @@ -0,0 +1,37 @@ +extends Control + +onready var tree = get_tree() + +onready var title = $TitleScreen +onready var start = $StartGame +onready var options = $Options + + +func _on_Start_pressed(): + start.visible = true + title.visible = false + + +func _on_Options_pressed(): + options.prev_menu = title + options.visible = true + title.visible = false + + +func _on_Exit_pressed(): + tree.quit() + + +func _on_RandomBlocks_pressed(): + Settings.world_type = 0 + tree.change_scene("res://world/world.tscn") + + +func _on_FlatGrass_pressed(): + Settings.world_type = 1 + tree.change_scene("res://world/world.tscn") + + +func _on_BackToTitle_pressed(): + title.visible = true + start.visible = false diff --git a/3d/voxel/menu/main/main_menu.tscn b/3d/voxel/menu/main/main_menu.tscn new file mode 100644 index 00000000..ad1b66f5 --- /dev/null +++ b/3d/voxel/menu/main/main_menu.tscn @@ -0,0 +1,236 @@ +[gd_scene load_steps=8 format=2] + +[ext_resource path="res://menu/main/title.png" type="Texture" 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="Texture" 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="Texture" 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 +} + +[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 +} + +[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"] +margin_right = 1600.0 +margin_bottom = 300.0 +rect_min_size = Vector2( 0, 300 ) + +[node name="Logo" type="TextureRect" parent="TitleScreen/Logo"] +margin_left = 432.0 +margin_top = 110.0 +margin_right = 1168.0 +margin_bottom = 190.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 +} + +[node name="SplashText" type="Label" parent="TitleScreen/Logo/Logo/SplashHolder"] +modulate = Color( 1, 1, 0, 1 ) +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -110.0 +margin_top = 10.0 +margin_right = -110.0 +margin_bottom = 12.0 +rect_rotation = -20.0 +text = "Made in Godot!" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="ButtonHolder" type="HBoxContainer" parent="TitleScreen"] +margin_top = 304.0 +margin_right = 1600.0 +margin_bottom = 680.0 +size_flags_vertical = 3 +alignment = 1 + +[node name="MainButtons" type="VBoxContainer" parent="TitleScreen/ButtonHolder"] +margin_left = 608.0 +margin_right = 992.0 +margin_bottom = 376.0 +custom_constants/separation = 20 +alignment = 1 + +[node name="Start" type="TextureButton" parent="TitleScreen/ButtonHolder/MainButtons"] +margin_top = 72.0 +margin_right = 384.0 +margin_bottom = 136.0 +rect_min_size = Vector2( 384, 64 ) +texture_normal = ExtResource( 7 ) + +[node name="Label" type="Label" parent="TitleScreen/ButtonHolder/MainButtons/Start"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -1.0 +margin_bottom = -18.0 +text = "Start Game" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Options" type="TextureButton" parent="TitleScreen/ButtonHolder/MainButtons"] +margin_top = 156.0 +margin_right = 384.0 +margin_bottom = 220.0 +rect_min_size = Vector2( 384, 64 ) +texture_normal = ExtResource( 7 ) + +[node name="Label" type="Label" parent="TitleScreen/ButtonHolder/MainButtons/Options"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -1.0 +margin_bottom = -18.0 +text = "Options" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Exit" type="TextureButton" parent="TitleScreen/ButtonHolder/MainButtons"] +margin_top = 240.0 +margin_right = 384.0 +margin_bottom = 304.0 +rect_min_size = Vector2( 384, 64 ) +texture_normal = ExtResource( 7 ) + +[node name="Label" type="Label" parent="TitleScreen/ButtonHolder/MainButtons/Exit"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -1.0 +margin_bottom = -18.0 +text = "Exit Game" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Spacer" type="Control" parent="TitleScreen"] +margin_top = 684.0 +margin_right = 1600.0 +margin_bottom = 900.0 +rect_min_size = Vector2( 0, 216 ) + +[node name="StartGame" type="HBoxContainer" parent="."] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +alignment = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="StartButtons" type="VBoxContainer" parent="StartGame"] +margin_left = 608.0 +margin_right = 992.0 +margin_bottom = 900.0 +custom_constants/separation = 20 +alignment = 1 + +[node name="Spacer" type="Control" parent="StartGame/StartButtons"] +margin_top = 292.0 +margin_right = 384.0 +margin_bottom = 356.0 +rect_min_size = Vector2( 0, 64 ) + +[node name="RandomBlocks" type="TextureButton" parent="StartGame/StartButtons"] +margin_top = 376.0 +margin_right = 384.0 +margin_bottom = 440.0 +rect_min_size = Vector2( 384, 64 ) +texture_normal = ExtResource( 7 ) + +[node name="Label" type="Label" parent="StartGame/StartButtons/RandomBlocks"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -1.0 +margin_bottom = -18.0 +text = "Random Blocks" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="FlatGrass" type="TextureButton" parent="StartGame/StartButtons"] +margin_top = 460.0 +margin_right = 384.0 +margin_bottom = 524.0 +rect_min_size = Vector2( 384, 64 ) +texture_normal = ExtResource( 7 ) + +[node name="Label" type="Label" parent="StartGame/StartButtons/FlatGrass"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -1.0 +margin_bottom = -18.0 +text = "Flat Grass" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="BackToTitle" type="TextureButton" parent="StartGame/StartButtons"] +margin_top = 544.0 +margin_right = 384.0 +margin_bottom = 608.0 +rect_min_size = Vector2( 384, 64 ) +texture_normal = ExtResource( 7 ) + +[node name="Label" type="Label" parent="StartGame/StartButtons/BackToTitle"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -1.0 +margin_bottom = -18.0 +text = "Back" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[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"] +[connection signal="pressed" from="TitleScreen/ButtonHolder/MainButtons/Exit" to="." method="_on_Exit_pressed"] +[connection signal="pressed" from="StartGame/StartButtons/RandomBlocks" to="." method="_on_RandomBlocks_pressed"] +[connection signal="pressed" from="StartGame/StartButtons/FlatGrass" to="." method="_on_FlatGrass_pressed"] +[connection signal="pressed" from="StartGame/StartButtons/BackToTitle" to="." method="_on_BackToTitle_pressed"] diff --git a/3d/voxel/menu/main/splash_text.gd b/3d/voxel/menu/main/splash_text.gd new file mode 100644 index 00000000..06f7e03c --- /dev/null +++ b/3d/voxel/menu/main/splash_text.gd @@ -0,0 +1,8 @@ +extends Control + +var time := 0.0 + + +func _process(delta): + time += delta + rect_scale = Vector2.ONE * (1 - abs(sin(time * 4)) / 4) diff --git a/3d/voxel/menu/main/title.png b/3d/voxel/menu/main/title.png new file mode 100644 index 0000000000000000000000000000000000000000..ed8dbcac23e11d89d9d3300d825611bcbe23438e GIT binary patch literal 7394 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 PYd&^h diff --git a/3d/voxel/player/crosshair.svg.import b/3d/voxel/player/crosshair.svg.import new file mode 100644 index 00000000..dbb1d218 --- /dev/null +++ b/3d/voxel/player/crosshair.svg.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/crosshair.svg-c15896115a8fc4f09948d0fd31ee95e9.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://player/crosshair.svg" +dest_files=[ "res://.import/crosshair.svg-c15896115a8fc4f09948d0fd31ee95e9.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/3d/voxel/player/player.gd b/3d/voxel/player/player.gd new file mode 100644 index 00000000..1d4ca49d --- /dev/null +++ b/3d/voxel/player/player.gd @@ -0,0 +1,94 @@ +extends KinematicBody + +var velocity = Vector3() + +var _mouse_motion = Vector2() +var _selected_block = 6 + +onready var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") + +onready var head = $Head +onready var raycast = $Head/RayCast +onready var selected_block_texture = $SelectedBlock +onready var voxel_world = $"../VoxelWorld" +onready var crosshair = $"../PauseMenu/Crosshair" + + +func _ready(): + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + + +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)) + + # Block selection. + var position = raycast.get_collision_point() + var normal = raycast.get_collision_normal() + if Input.is_action_just_pressed("pick_block"): + # Block picking. + var block_global_position = (position - normal / 2).floor() + _selected_block = voxel_world.get_block_global_position(block_global_position) + else: + # Block prev/next keys. + if Input.is_action_just_pressed("prev_block"): + _selected_block -= 1 + if Input.is_action_just_pressed("next_block"): + _selected_block += 1 + _selected_block = wrapi(_selected_block, 1, 30) + # Set the appropriate texture. + var uv = Chunk.calculate_block_uvs(_selected_block) + selected_block_texture.texture.region = Rect2(uv[0] * 512, Vector2.ONE * 64) + + # Block breaking/placing. + if crosshair.visible and raycast.is_colliding(): + var breaking = Input.is_action_just_pressed("break") + var placing = Input.is_action_just_pressed("place") + # Either both buttons were pressed or neither are, so stop. + if breaking == placing: + return + + if breaking: + var block_global_position = (position - normal / 2).floor() + voxel_world.set_block_global_position(block_global_position, 0) + elif placing: + var block_global_position = (position + normal / 2).floor() + voxel_world.set_block_global_position(block_global_position, _selected_block) + + +func _physics_process(delta): + # Crouching. + var crouching = Input.is_action_pressed("crouch") + if crouching: + head.transform.origin = Vector3(0, 1.2, 0) + else: + head.transform.origin = Vector3(0, 1.6, 0) + + # Keyboard movement. + var movement = transform.basis.xform(Vector3( + Input.get_action_strength("move_right") - Input.get_action_strength("move_left"), + 0, + Input.get_action_strength("move_back") - Input.get_action_strength("move_forward") + ).normalized() * (1 if crouching else 5)) + + # Gravity. + velocity.y -= gravity * delta + + #warning-ignore:return_value_discarded + velocity = move_and_slide(Vector3(movement.x, velocity.y, movement.z), Vector3.UP) + + # Jumping, applied next frame. + if is_on_floor() and Input.is_action_pressed("jump"): + velocity.y = 5 + + +func _input(event): + if event is InputEventMouseMotion: + if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: + _mouse_motion += event.relative + + +func chunk_pos(): + return (transform.origin / Chunk.CHUNK_SIZE).floor() diff --git a/3d/voxel/player/player.tscn b/3d/voxel/player/player.tscn new file mode 100644 index 00000000..9fb4c5b8 --- /dev/null +++ b/3d/voxel/player/player.tscn @@ -0,0 +1,48 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://player/player.gd" type="Script" id=1] +[ext_resource path="res://world/textures/texture_sheet.png" type="Texture" id=2] + +[sub_resource type="CylinderShape" id=1] +radius = 0.4 +height = 1.8 + +[sub_resource type="AtlasTexture" id=2] +flags = 3 +atlas = ExtResource( 2 ) +region = Rect2( 0, 0, 64, 64 ) + +[node name="Player" type="KinematicBody"] +script = ExtResource( 1 ) + +[node name="CollisionShape" type="CollisionShape" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 0 ) +shape = SubResource( 1 ) + +[node name="Head" type="Spatial" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0 ) + +[node name="Camera" type="Camera" parent="Head"] +fov = 75.0 +near = 0.02 +far = 1000.0 + +[node name="RayCast" type="RayCast" parent="Head"] +enabled = true +cast_to = Vector3( 0, 0, -5 ) + +[node name="SelectedBlock" type="TextureRect" parent="."] +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -128.0 +margin_top = -128.0 +margin_right = -64.0 +margin_bottom = -64.0 +rect_min_size = Vector2( 64, 64 ) +rect_scale = Vector2( 2, 2 ) +texture = SubResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/3d/voxel/project.godot b/3d/voxel/project.godot new file mode 100644 index 00000000..98881fc7 --- /dev/null +++ b/3d/voxel/project.godot @@ -0,0 +1,161 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=4 + +_global_script_classes=[ { +"base": "StaticBody", +"class": "Chunk", +"language": "GDScript", +"path": "res://world/chunk.gd" +}, { +"base": "Resource", +"class": "TerrainGenerator", +"language": "GDScript", +"path": "res://world/terrain_generator.gd" +} ] +_global_script_class_icons={ +"Chunk": "", +"TerrainGenerator": "" +} + +[application] + +config/name="Voxel Game" +config/description="This demo is a minimal voxel game, inspired by others such as Minecraft." +run/main_scene="res://menu/main/main_menu.tscn" +config/icon="res://icon.png" + +[autoload] + +Settings="*res://settings.gd" + +[display] + +window/size/width=1600 +window/size/height=900 + +[input] + +move_forward={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null) + ] +} +move_back={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null) + ] +} +move_left={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null) + ] +} +move_right={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null) + ] +} +jump={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null) + ] +} +crouch={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null) + ] +} +pause={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null) + ] +} +break={ +"deadzone": 0.5, +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":7,"axis_value":1.0,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":7,"pressure":0.0,"pressed":false,"script":null) + ] +} +place={ +"deadzone": 0.5, +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":6,"axis_value":1.0,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":6,"pressure":0.0,"pressed":false,"script":null) + ] +} +look_up={ +"deadzone": 0.5, +"events": [ Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":3,"axis_value":-1.0,"script":null) + ] +} +look_down={ +"deadzone": 0.5, +"events": [ Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":3,"axis_value":1.0,"script":null) + ] +} +look_left={ +"deadzone": 0.5, +"events": [ Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":2,"axis_value":-1.0,"script":null) + ] +} +look_right={ +"deadzone": 0.5, +"events": [ Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":2,"axis_value":1.0,"script":null) + ] +} +debug={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777246,"unicode":0,"echo":false,"script":null) + ] +} +prev_block={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":123,"unicode":0,"echo":false,"script":null) +, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":4,"pressed":false,"doubleclick":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":91,"unicode":0,"echo":false,"script":null) + ] +} +next_block={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":125,"unicode":0,"echo":false,"script":null) +, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":5,"pressed":false,"doubleclick":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":93,"unicode":0,"echo":false,"script":null) + ] +} +pick_block={ +"deadzone": 0.5, +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":3,"pressed":false,"doubleclick":false,"script":null) + ] +} + +[physics] + +common/physics_fps=120 +3d/physics_engine="Bullet" + +[rendering] + +quality/driver/driver_name="GLES2" +vram_compression/import_etc=true +vram_compression/import_etc2=false +gles2/debug/disable_half_float=true +environment/default_environment="res://default_env.tres" diff --git a/3d/voxel/screenshots/.gdignore b/3d/voxel/screenshots/.gdignore new file mode 100644 index 00000000..e69de29b diff --git a/3d/voxel/screenshots/blocks.png b/3d/voxel/screenshots/blocks.png new file mode 100644 index 0000000000000000000000000000000000000000..bd806a9155f88747309c09e0e7a80d945663f9ca GIT binary patch literal 1861971 zcmV(sK<&SYP)w1^@s6`Az+z002q}dQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3^!lH@v$W&djxy#$dIMRGY5Kg?zav-~-Sp6_*4 zb@xoS*;LlcjEoF-mq_5^UJ!t;^}qkuzW(js{w=(zJlB&;ecSuq{O@T`i=8j({rg`# zzlZxdzn}l{<@@Km|MdNbI@B88T^G0p`zIaGuBm^S=Laf&OWc z|N83s*VX@P4gPiUWB>CL>0j3J{j)}V@t^)f$p7;F^!Mk-fBfL|_Z7u|{)ca;^&f8M z&wqQ*y7&6sU4LFy^!;N|XR*UyZ^I9MEO|OFd-+xPFY|RdzZ$>l-S5Gc&wJb-zeZ>w zvMc)vPne;H9oG4Cgux{~amB))F^-td_i8G!#lap0_K06$$C6r_sj^ukt}7+J9sjc=xR~v?R$N!quDJ|%&fobdHYDsn z`_V{_N_1`1L>7weV-x z;@K&GuKc}geD^BlueS)oNp{cJvG@dbyto4xbac<|8lES*bMD#QB2JMb7n$9gYX*0W zEqqppd56FE?%#LrzqM~yuK%rli~p~kyWG0}A3Jxkb^meS{*zss#<_8J?B|89>7DRC zK6fQD>&U#0e$^BmtK=)J&pTB~&zd#=ScUp3!z z%umBgATJAt;efAwe=ok@V|(YymG9M;jmBwbeb=4yF8A2q&V7x}x8Io_wv`|2@mt^1 zxMr@u-22O!O<&7skiu@cwDHV!U*Tg1<9hk5G}4EsPu}4jW4-gu@m_PZSZ-GD*`ud+ zr!?61r{6Q}l3NI!{om`_35UApvo^-s`26}s%qO#T@9bRk6UY6Qx@yv$hnM%RKCzL> z=dZVXnAs}qr9Jg>F>*(^7s3ll{MdC+~d1fVG*9aeLp^+;3qk?FSm*vJ>N?FCA>Ld-fb85 z4G+$^9Twfv2&t`arf-(eI@U8vz%8L*Ij@MzvkEN}vcI@ioRy!g6XqCK$Cg2)FL%}= zr^zZ3Ici&P0wFY_dN5?A7;&s z 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 G2pB9x>74EVA%6_eW!TbmM_>|w2~jTk6^bt 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