From a38b31506449174072c1bb2827d3c55a513db473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Tue, 26 Feb 2019 14:50:18 +0100 Subject: [PATCH] Port audio, gui, mono, networking and viewport demos to Godot 3.1 --- audio/mic_record/Node2D.tscn | 1 - audio/mic_record/default_bus_layout.tres | 2 - audio/mic_record/default_env.tres | 2 - gui/drag_and_drop/drag_and_drop.tscn | 184 +------ gui/drag_and_drop/drag_drop_script.gd | 8 +- gui/drag_and_drop/icon.png.import | 5 +- gui/drag_and_drop/project.godot | 7 +- gui/input_mapping/controls.tscn | 234 +-------- gui/input_mapping/project.godot | 32 +- gui/rich_text_bbcode/project.godot | 7 +- gui/rich_text_bbcode/rich_text_bbcode.gd | 6 +- gui/rich_text_bbcode/rich_text_bbcode.tscn | 53 +- gui/translation/controls.tscn | 54 -- gui/translation/main.tscn | 147 +----- gui/translation/project.godot | 7 +- gui/translation/text.csv.import | 3 - gui/translation/text.en.translation | Bin 436 -> 409 bytes gui/translation/text.es.translation | Bin 440 -> 428 bytes gui/translation/text.ja.translation | Bin 444 -> 432 bytes mono/DodgeTheCreepsCS/Main.tscn | 79 +-- mono/DodgeTheCreepsCS/Player.cs | 6 +- mono/DodgeTheCreepsCS/default_env.tres | 89 ---- mono/DodgeTheCreepsCS/project.godot | 2 +- mono/monkey_pong/pong.tscn | 91 ---- mono/monkey_pong/project.godot | 28 +- networking/multiplayer_bomber/bomb.tscn | 105 +--- .../multiplayer_bomber/brickfloor.png.import | 5 +- .../multiplayer_bomber/charwalk.png.import | 5 +- .../multiplayer_bomber/explosion.png.import | 5 +- networking/multiplayer_bomber/gamestate.gd | 2 +- networking/multiplayer_bomber/lobby.gd | 1 - networking/multiplayer_bomber/lobby.tscn | 200 +------- networking/multiplayer_bomber/player.gd | 24 +- networking/multiplayer_bomber/player.tscn | 46 +- networking/multiplayer_bomber/project.godot | 36 +- networking/multiplayer_bomber/rock.gd | 4 +- networking/multiplayer_bomber/rock.tscn | 29 +- .../multiplayer_bomber/rock_bit.png.import | 5 +- networking/multiplayer_bomber/score.gd | 2 +- networking/multiplayer_bomber/tile_scene.tscn | 22 +- networking/multiplayer_bomber/world.tscn | 315 ++++-------- networking/multiplayer_pong/ball.gd | 2 +- networking/multiplayer_pong/ball.png.import | 5 +- networking/multiplayer_pong/ball.tscn | 13 - networking/multiplayer_pong/icon.png.import | 5 +- networking/multiplayer_pong/lobby.gd | 4 +- networking/multiplayer_pong/lobby.tscn | 102 ---- networking/multiplayer_pong/paddle.gd | 2 +- networking/multiplayer_pong/paddle.png.import | 5 +- networking/multiplayer_pong/paddle.tscn | 26 - networking/multiplayer_pong/pong.gd | 2 +- networking/multiplayer_pong/pong.tscn | 70 +-- networking/multiplayer_pong/project.godot | 21 +- .../multiplayer_pong/separator.png.import | 5 +- viewport/2d_in_3d/2D_in_3D.tscn | 479 +----------------- viewport/2d_in_3d/ball.png.import | 5 +- viewport/2d_in_3d/default_env.tres | 86 ---- viewport/2d_in_3d/icon.png.import | 5 +- viewport/2d_in_3d/left_pallete.png.import | 5 +- viewport/2d_in_3d/project.godot | 27 +- viewport/2d_in_3d/right_pallete.png.import | 5 +- viewport/2d_in_3d/separator.png.import | 5 +- viewport/3d_in_2d/3D_in_2D.tscn | 56 +- viewport/3d_in_2d/default_env.tres | 88 ---- viewport/3d_in_2d/icon.png.import | 5 +- viewport/3d_in_2d/player.scn | Bin 26876 -> 25703 bytes viewport/3d_in_2d/project.godot | 7 +- viewport/3d_in_2d/robot_demo.png.import | 5 +- viewport/gui_in_3d/Gui_in_3D.tscn | 420 +-------------- viewport/gui_in_3d/default_env.tres | 86 ---- viewport/gui_in_3d/gui_3d.gd | 2 +- viewport/gui_in_3d/project.godot | 11 +- viewport/screen_capture/capture_screen.tscn | 55 +- viewport/screen_capture/default_env.tres | 86 ---- viewport/screen_capture/icon.png.import | 5 +- viewport/screen_capture/mountains.png.import | 5 +- viewport/screen_capture/project.godot | 11 +- 77 files changed, 482 insertions(+), 3092 deletions(-) diff --git a/audio/mic_record/Node2D.tscn b/audio/mic_record/Node2D.tscn index 09c33861..0d76607e 100644 --- a/audio/mic_record/Node2D.tscn +++ b/audio/mic_record/Node2D.tscn @@ -5,7 +5,6 @@ [sub_resource type="AudioStreamMicrophone" id=1] - [node name="Node2D" type="Node2D"] script = ExtResource( 1 ) diff --git a/audio/mic_record/default_bus_layout.tres b/audio/mic_record/default_bus_layout.tres index 2d2dae83..ad554a92 100644 --- a/audio/mic_record/default_bus_layout.tres +++ b/audio/mic_record/default_bus_layout.tres @@ -1,11 +1,9 @@ [gd_resource type="AudioBusLayout" load_steps=2 format=2] [sub_resource type="AudioEffectRecord" id=1] - resource_name = "Record" [resource] - bus/1/name = "Record" bus/1/solo = false bus/1/mute = true diff --git a/audio/mic_record/default_env.tres b/audio/mic_record/default_env.tres index feeea6b8..60c2c1b7 100644 --- a/audio/mic_record/default_env.tres +++ b/audio/mic_record/default_env.tres @@ -1,14 +1,12 @@ [gd_resource type="Environment" load_steps=2 format=2] [sub_resource type="ProceduralSky" id=1] - sky_top_color = Color( 0.647059, 0.839216, 0.945098, 1 ) sky_horizon_color = Color( 0.839216, 0.917647, 0.980392, 1 ) ground_bottom_color = Color( 0.156863, 0.184314, 0.211765, 1 ) ground_horizon_color = Color( 0.423529, 0.396078, 0.372549, 1 ) [resource] - background_mode = 2 background_sky = SubResource( 1 ) diff --git a/gui/drag_and_drop/drag_and_drop.tscn b/gui/drag_and_drop/drag_and_drop.tscn index 6706d756..75a281a1 100644 --- a/gui/drag_and_drop/drag_and_drop.tscn +++ b/gui/drag_and_drop/drag_and_drop.tscn @@ -2,273 +2,111 @@ [ext_resource path="res://drag_drop_script.gd" type="Script" id=1] -[node name="Control" type="Control" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 +[node name="Control" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 __meta__ = { "__editor_plugin_screen__": "2D" } -[node name="ColorPickerButton0" type="ColorPickerButton" parent="." index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ColorPickerButton0" type="ColorPickerButton" parent="."] margin_left = 64.0 margin_top = 64.0 margin_right = 160.0 margin_bottom = 128.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 color = Color( 0.671032, 0.605183, 0, 1 ) -edit_alpha = true script = ExtResource( 1 ) -[node name="ColorPickerButton1" type="ColorPickerButton" parent="." index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ColorPickerButton1" type="ColorPickerButton" parent="."] margin_left = 224.0 margin_top = 64.0 margin_right = 320.0 margin_bottom = 128.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 color = Color( 0, 0.797347, 0.741037, 1 ) -edit_alpha = true script = ExtResource( 1 ) -[node name="ColorPickerButton2" type="ColorPickerButton" parent="." index="2"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ColorPickerButton2" type="ColorPickerButton" parent="."] margin_left = 384.0 margin_top = 64.0 margin_right = 480.0 margin_bottom = 128.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 color = Color( 0.443924, 0, 0.632923, 1 ) -edit_alpha = true script = ExtResource( 1 ) -[node name="ColorPickerButton3" type="ColorPickerButton" parent="." index="3"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ColorPickerButton3" type="ColorPickerButton" parent="."] margin_left = 64.0 margin_top = 160.0 margin_right = 160.0 margin_bottom = 224.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 color = Color( 1, 1, 1, 1 ) -edit_alpha = true script = ExtResource( 1 ) -[node name="ColorPickerButton4" type="ColorPickerButton" parent="." index="4"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ColorPickerButton4" type="ColorPickerButton" parent="."] margin_left = 224.0 margin_top = 160.0 margin_right = 320.0 margin_bottom = 224.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 color = Color( 1, 0.933842, 0, 1 ) -edit_alpha = true script = ExtResource( 1 ) -[node name="ColorPickerButton5" type="ColorPickerButton" parent="." index="5"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ColorPickerButton5" type="ColorPickerButton" parent="."] margin_left = 384.0 margin_top = 160.0 margin_right = 480.0 margin_bottom = 224.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 color = Color( 0.287293, 0.886362, 0.122933, 1 ) -edit_alpha = true script = ExtResource( 1 ) -[node name="ColorPickerButton6" type="ColorPickerButton" parent="." index="6"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ColorPickerButton6" type="ColorPickerButton" parent="."] margin_left = 64.0 margin_top = 256.0 margin_right = 160.0 margin_bottom = 320.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 color = Color( 0.908461, 0, 0.88789, 1 ) -edit_alpha = true script = ExtResource( 1 ) -[node name="ColorPickerButton7" type="ColorPickerButton" parent="." index="7"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ColorPickerButton7" type="ColorPickerButton" parent="."] margin_left = 224.0 margin_top = 256.0 margin_right = 320.0 margin_bottom = 320.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 color = Color( 0, 0.283703, 0, 1 ) -edit_alpha = true script = ExtResource( 1 ) -[node name="ColorPickerButton8" type="ColorPickerButton" parent="." index="8"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ColorPickerButton8" type="ColorPickerButton" parent="."] margin_left = 384.0 margin_top = 256.0 margin_right = 480.0 margin_bottom = 320.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 color = Color( 0, 0, 0.178211, 1 ) -edit_alpha = true script = ExtResource( 1 ) -[node name="Label" type="Label" parent="." index="9"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Label" type="Label" parent="."] margin_left = 10.0 margin_top = 11.0 margin_right = 470.0 margin_bottom = 24.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Drag colors from button to button, or change button colors and drag them again." -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 - diff --git a/gui/drag_and_drop/drag_drop_script.gd b/gui/drag_and_drop/drag_drop_script.gd index 59347365..35a8ef86 100644 --- a/gui/drag_and_drop/drag_drop_script.gd +++ b/gui/drag_and_drop/drag_drop_script.gd @@ -2,7 +2,7 @@ extends ColorPickerButton -func get_drag_data(pos): +func get_drag_data(_pos): # Use another colorpicker as drag preview var cpb = ColorPickerButton.new() cpb.color = color @@ -12,9 +12,9 @@ func get_drag_data(pos): return color -func can_drop_data(pos, data): +func can_drop_data(_pos, data): return typeof(data) == TYPE_COLOR -func drop_data(pos, data): - color=data +func drop_data(_pos, data): + color = data diff --git a/gui/drag_and_drop/icon.png.import b/gui/drag_and_drop/icon.png.import index 1b45c9b9..45ee6af7 100644 --- a/gui/drag_and_drop/icon.png.import +++ b/gui/drag_and_drop/icon.png.import @@ -7,16 +7,14 @@ path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" [deps] source_file="res://icon.png" -source_md5="9cb7b2d10396f1f208c56fb5126b023d" - dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] -dest_md5="3a238454b327f15f0e03ddf32f186730" [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 @@ -26,6 +24,7 @@ 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 diff --git a/gui/drag_and_drop/project.godot b/gui/drag_and_drop/project.godot index 65aa91f7..63863e28 100644 --- a/gui/drag_and_drop/project.godot +++ b/gui/drag_and_drop/project.godot @@ -6,7 +6,12 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=3 +config_version=4 + +_global_script_classes=[ ] +_global_script_class_icons={ + +} [application] diff --git a/gui/input_mapping/controls.tscn b/gui/input_mapping/controls.tscn index 2173b4dc..46d0929b 100644 --- a/gui/input_mapping/controls.tscn +++ b/gui/input_mapping/controls.tscn @@ -2,17 +2,9 @@ [ext_resource path="res://controls.gd" type="Script" id=1] -[node name="controls_ui" type="Control" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="controls_ui" type="Control"] margin_right = 40.0 margin_bottom = 40.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 script = ExtResource( 1 ) @@ -20,339 +12,149 @@ __meta__ = { "__editor_plugin_screen__": "2D" } -[node name="contextual_help" type="Label" parent="." index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="contextual_help" type="Label" parent="."] margin_left = 100.0 margin_top = 50.0 margin_right = 465.0 margin_bottom = 89.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Click on a key binding to reassign it, or press the Cancel action." -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="bindings" type="Control" parent="." index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="bindings" type="Control" parent="."] margin_left = 50.0 margin_top = 50.0 margin_right = 90.0 margin_bottom = 90.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -[node name="move_up" type="Control" parent="bindings" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="move_up" type="Control" parent="bindings"] margin_left = 50.0 margin_top = 50.0 margin_right = 90.0 margin_bottom = 90.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -[node name="Label" type="Label" parent="bindings/move_up" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Label" type="Label" parent="bindings/move_up"] margin_left = 5.0 margin_top = 8.0 margin_right = 45.0 margin_bottom = 21.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Up" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="Button" type="Button" parent="bindings/move_up" index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Button" type="Button" parent="bindings/move_up"] margin_left = 84.0 margin_top = -1.0 margin_right = 144.0 margin_bottom = 29.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 - -[node name="move_down" type="Control" parent="bindings" index="1"] +[node name="move_down" type="Control" parent="bindings"] editor/display_folded = true -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 50.0 margin_top = 100.0 margin_right = 90.0 margin_bottom = 140.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -[node name="Label" type="Label" parent="bindings/move_down" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Label" type="Label" parent="bindings/move_down"] margin_left = 5.0 margin_top = 8.0 margin_right = 45.0 margin_bottom = 21.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Down" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="Button" type="Button" parent="bindings/move_down" index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Button" type="Button" parent="bindings/move_down"] margin_left = 84.0 margin_top = -1.0 margin_right = 144.0 margin_bottom = 29.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 - -[node name="move_left" type="Control" parent="bindings" index="2"] +[node name="move_left" type="Control" parent="bindings"] editor/display_folded = true -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 50.0 margin_top = 150.0 margin_right = 90.0 margin_bottom = 190.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -[node name="Label" type="Label" parent="bindings/move_left" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Label" type="Label" parent="bindings/move_left"] margin_left = 5.0 margin_top = 8.0 margin_right = 45.0 margin_bottom = 21.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Left" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="Button" type="Button" parent="bindings/move_left" index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Button" type="Button" parent="bindings/move_left"] margin_left = 84.0 margin_top = -1.0 margin_right = 144.0 margin_bottom = 29.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 - -[node name="move_right" type="Control" parent="bindings" index="3"] +[node name="move_right" type="Control" parent="bindings"] editor/display_folded = true -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 50.0 margin_top = 200.0 margin_right = 90.0 margin_bottom = 240.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -[node name="Label" type="Label" parent="bindings/move_right" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Label" type="Label" parent="bindings/move_right"] margin_left = 5.0 margin_top = 8.0 margin_right = 45.0 margin_bottom = 21.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Right" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="Button" type="Button" parent="bindings/move_right" index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Button" type="Button" parent="bindings/move_right"] margin_left = 84.0 margin_top = -1.0 margin_right = 144.0 margin_bottom = 29.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 - -[node name="jump" type="Control" parent="bindings" index="4"] +[node name="jump" type="Control" parent="bindings"] editor/display_folded = true -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 50.0 margin_top = 250.0 margin_right = 90.0 margin_bottom = 290.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -[node name="Label" type="Label" parent="bindings/jump" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Label" type="Label" parent="bindings/jump"] margin_left = 5.0 margin_top = 8.0 margin_right = 45.0 margin_bottom = 21.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Jump" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="Button" type="Button" parent="bindings/jump" index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="Button" type="Button" parent="bindings/jump"] margin_left = 84.0 margin_top = -1.0 margin_right = 144.0 margin_bottom = 29.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null -flat = false -align = 1 - diff --git a/gui/input_mapping/project.godot b/gui/input_mapping/project.godot index c2ddafb4..336b8d7e 100644 --- a/gui/input_mapping/project.godot +++ b/gui/input_mapping/project.godot @@ -6,7 +6,12 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=3 +config_version=4 + +_global_script_classes=[ ] +_global_script_class_icons={ + +} [application] @@ -25,13 +30,28 @@ singletons=[ ] [input] -jump=[ 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) +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) ] -move_down=[ 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) +} +move_down={ +"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":16777234,"unicode":0,"echo":false,"script":null) ] -move_left=[ 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) +} +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":16777231,"unicode":0,"echo":false,"script":null) ] -move_right=[ 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) +} +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":16777233,"unicode":0,"echo":false,"script":null) ] -move_up=[ 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) +} +move_up={ +"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":16777232,"unicode":0,"echo":false,"script":null) ] +} diff --git a/gui/rich_text_bbcode/project.godot b/gui/rich_text_bbcode/project.godot index 25b7fcb0..596ae29c 100644 --- a/gui/rich_text_bbcode/project.godot +++ b/gui/rich_text_bbcode/project.godot @@ -6,7 +6,12 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=3 +config_version=4 + +_global_script_classes=[ ] +_global_script_class_icons={ + +} [application] diff --git a/gui/rich_text_bbcode/rich_text_bbcode.gd b/gui/rich_text_bbcode/rich_text_bbcode.gd index 79a08c13..ca172d9e 100644 --- a/gui/rich_text_bbcode/rich_text_bbcode.gd +++ b/gui/rich_text_bbcode/rich_text_bbcode.gd @@ -3,4 +3,8 @@ extends Panel func _on_RichTextLabel_meta_clicked(meta): - OS.shell_open(meta) + var err = OS.shell_open(meta) + if (err == OK): + print("Opened link '%s' successfully!" % meta) + else: + print("Failed opening the link '%s'!" % meta) diff --git a/gui/rich_text_bbcode/rich_text_bbcode.tscn b/gui/rich_text_bbcode/rich_text_bbcode.tscn index 6734b967..129339c1 100644 --- a/gui/rich_text_bbcode/rich_text_bbcode.tscn +++ b/gui/rich_text_bbcode/rich_text_bbcode.tscn @@ -7,46 +7,24 @@ [ext_resource path="res://Titillium-Regular.otf" type="DynamicFontData" id=5] [sub_resource type="DynamicFont" id=1] - size = 20 -use_mipmaps = false -use_filter = false font_data = ExtResource( 2 ) -_sections_unfolded = [ "Font", "Settings" ] [sub_resource type="DynamicFont" id=2] - size = 20 -use_mipmaps = false -use_filter = false font_data = ExtResource( 3 ) -_sections_unfolded = [ "Font", "Settings" ] [sub_resource type="DynamicFont" id=3] - size = 20 -use_mipmaps = false -use_filter = false font_data = ExtResource( 4 ) -_sections_unfolded = [ "Font", "Settings" ] [sub_resource type="DynamicFont" id=4] - size = 20 -use_mipmaps = false -use_filter = false font_data = ExtResource( 5 ) -_sections_unfolded = [ "Font", "Settings" ] -[node name="Panel" type="Panel" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 +[node name="Panel" type="Panel"] anchor_right = 1.0 anchor_bottom = 1.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 script = ExtResource( 1 ) @@ -54,20 +32,13 @@ __meta__ = { "__editor_plugin_screen__": "2D" } -[node name="RichTextLabel" type="RichTextLabel" parent="." index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 +[node name="RichTextLabel" type="RichTextLabel" parent="."] anchor_right = 1.0 anchor_bottom = 1.0 margin_left = 49.0 margin_top = 55.0 margin_right = -48.0 margin_bottom = -62.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = true -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 custom_fonts/bold_italics_font = SubResource( 1 ) @@ -78,18 +49,22 @@ bbcode_enabled = true bbcode_text = "[b][u]Rich Text Test[/u][/b] RichTextLabel is a flexible way of adding text to your game, with support for [i]italics[/i], [b]bold[/b] and [i][b]both[/b][/i]. [u]Underline[/u] works too. -It is also possible to include [img]res://unicorn_icon.png[/img] custom images, as well as [color=aqua][url=http://www.google.com]Custom URLs[/url][/color]. +It is also possible to include [img]res://unicorn_icon.png[/img] custom images, as well as [color=aqua][url=https://godotengine.org]Custom URLs[/url][/color]. Left alignment is default,[center]but center alignment is supported,[/center][right]as well as right alignment.[/right] [fill]Fill alignment is also supported, and allows writing very long text that will end up fitting the horizontal space entirely with words of joy.[/fill] -For full reference [color=aqua][url=http://docs.godotengine.org/en/latest/learning/features/gui/bbcode_in_richtextlabel.html]check the documentation.[/url][/color] +For full reference [color=aqua][url=https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel.html]check the documentation.[/url][/color] +" +text = "Rich Text Test + +RichTextLabel is a flexible way of adding text to your game, with support for italics, bold and both. Underline works too. +It is also possible to include custom images, as well as Custom URLs. + +Left alignment is default,but center alignment is supported,as well as right alignment. +Fill alignment is also supported, and allows writing very long text that will end up fitting the horizontal space entirely with words of joy. + +For full reference check the documentation. " -visible_characters = -1 -percent_visible = 1.0 -override_selected_font_color = false -_sections_unfolded = [ "BBCode", "custom_fonts" ] [connection signal="meta_clicked" from="RichTextLabel" to="." method="_on_RichTextLabel_meta_clicked"] - - diff --git a/gui/translation/controls.tscn b/gui/translation/controls.tscn index 043865ba..c46f056b 100644 --- a/gui/translation/controls.tscn +++ b/gui/translation/controls.tscn @@ -4,14 +4,8 @@ [ext_resource path="res://flag_uk.png" type="Texture" id=2] [node name="Panel" type="Panel"] - -anchor_left = 0.0 -anchor_top = 0.0 anchor_right = 1.0 anchor_bottom = 1.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 size_flags_horizontal = 2 size_flags_vertical = 2 script = ExtResource( 1 ) @@ -20,88 +14,40 @@ __meta__ = { } [node name="Label" type="Label" parent="."] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 175.0 margin_top = 118.0 margin_right = 328.0 margin_bottom = 132.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 text = "KEY_HELLO" align = 1 -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 [node name="Button" type="Button" parent="."] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 166.0 margin_top = 178.0 margin_right = 335.0 margin_bottom = 199.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "KEY_PUSH" -flat = false [node name="TextureFrame" type="TextureRect" parent="."] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 377.0 margin_top = 118.0 margin_right = 505.0 margin_bottom = 203.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 1 size_flags_horizontal = 2 size_flags_vertical = 2 texture = ExtResource( 2 ) -stretch_mode = 0 [node name="back" type="Button" parent="."] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 26.0 margin_top = 20.0 margin_right = 150.0 margin_bottom = 44.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "<- back" -flat = false [connection signal="pressed" from="back" to="." method="_on_back_pressed"] - - diff --git a/gui/translation/main.tscn b/gui/translation/main.tscn index 27181154..3e56f8fe 100644 --- a/gui/translation/main.tscn +++ b/gui/translation/main.tscn @@ -6,15 +6,9 @@ [ext_resource path="res://flag_uk.png" type="Texture" id=4] [ext_resource path="res://hello_en.wav" type="AudioStream" id=5] -[node name="Panel" type="Panel" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 +[node name="Panel" type="Panel"] anchor_right = 1.0 anchor_bottom = 1.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 script = ExtResource( 1 ) @@ -22,91 +16,38 @@ __meta__ = { "__editor_plugin_screen__": "2D" } -[node name="english" type="Button" parent="." index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="english" type="Button" parent="."] margin_left = 32.0 margin_top = 64.0 margin_right = 192.0 margin_bottom = 88.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "Use English" -flat = false -align = 1 -[node name="spanish" type="Button" parent="." index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="spanish" type="Button" parent="."] margin_left = 32.0 margin_top = 112.0 margin_right = 192.0 margin_bottom = 136.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "Use Spanish" -flat = false -align = 1 -[node name="japanese" type="Button" parent="." index="2"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="japanese" type="Button" parent="."] margin_left = 32.0 margin_top = 160.0 margin_right = 192.0 margin_bottom = 184.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "Use Japanese" -flat = false -align = 1 -[node name="description" type="Label" parent="." index="3"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="description" type="Label" parent="."] margin_left = 243.0 margin_top = 42.0 margin_right = 808.0 margin_bottom = 312.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 custom_fonts/font = ExtResource( 2 ) @@ -116,111 +57,45 @@ Translations are created in a CSV file and then imported into Godot. Using a TTF/OTF font with CJK is required for this demo to run. One is provided in the font/ folder for your games. -Godot allows internationalized text to change automatically when locale is +Godot allows internationalized text to change automatically when the locale is modified. Resources can also be set internationalized alternatives and replaced automatically on locale change." -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -_sections_unfolded = [ "custom_fonts" ] -[node name="HSeparator" type="HSeparator" parent="." index="4"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="HSeparator" type="HSeparator" parent="."] margin_left = 33.0 margin_top = 330.0 margin_right = 1001.0 margin_bottom = 370.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 1 -[node name="label" type="Label" parent="." index="5"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="label" type="Label" parent="."] margin_left = 246.0 margin_top = 381.0 margin_right = 324.0 margin_bottom = 400.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 size_flags_vertical = 0 custom_fonts/font = ExtResource( 2 ) text = "KEY_HELLO" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -_sections_unfolded = [ "custom_fonts" ] -[node name="play" type="Button" parent="." index="6"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="play" type="Button" parent="."] margin_left = 243.0 margin_top = 442.0 margin_right = 475.0 margin_bottom = 467.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 1 custom_fonts/font = ExtResource( 2 ) -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "KEY_PUSH" icon = ExtResource( 3 ) -flat = false -align = 1 -_sections_unfolded = [ "custom_fonts" ] -[node name="TextureRect" type="TextureRect" parent="." index="7"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="TextureRect" type="TextureRect" parent="."] margin_left = 85.0 margin_top = 382.0 margin_right = 213.0 margin_bottom = 467.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 1 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 1 texture = ExtResource( 4 ) -stretch_mode = 0 - -[node name="audio" type="AudioStreamPlayer" parent="." index="8"] +[node name="audio" type="AudioStreamPlayer" parent="."] stream = ExtResource( 5 ) -volume_db = 0.0 -autoplay = false -mix_target = 0 -bus = "Master" [connection signal="pressed" from="english" to="." method="_on_english_pressed"] - [connection signal="pressed" from="spanish" to="." method="_on_spanish_pressed"] - [connection signal="pressed" from="japanese" to="." method="_on_japanese_pressed"] - [connection signal="pressed" from="play" to="." method="_on_play_pressed"] - - diff --git a/gui/translation/project.godot b/gui/translation/project.godot index 6102c20a..faf403d4 100644 --- a/gui/translation/project.godot +++ b/gui/translation/project.godot @@ -6,7 +6,12 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=3 +config_version=4 + +_global_script_classes=[ ] +_global_script_class_icons={ + +} [application] diff --git a/gui/translation/text.csv.import b/gui/translation/text.csv.import index 4ecdc7e4..c925c70d 100644 --- a/gui/translation/text.csv.import +++ b/gui/translation/text.csv.import @@ -8,10 +8,7 @@ type="Translation" files=[ "res://text.en.translation", "res://text.es.translation", "res://text.ja.translation" ] source_file="res://text.csv" -source_md5="4c02672dcc571d8d3754983a2d06042e" - dest_files=[ "res://text.en.translation", "res://text.es.translation", "res://text.ja.translation" ] -dest_md5="f710d4f235972e0a916cc4d6ba28aedc" [params] diff --git a/gui/translation/text.en.translation b/gui/translation/text.en.translation index 2653635ec12bc5d22493596fe6d9ea38f16b7f6d..cf4c90e066a924b67d57b675883620d78131655d 100644 GIT binary patch delta 34 hcmdnOJd;^4C^*QO0ScIbG~-4=0Y+vZYqC9KDF9tp1jGOU delta 61 vcmbQqyoFgXC^*QO0ScHw^hQAeMmbg>g9(V0Kq5c@k^zZ<=+wN)DvYH7$A1OK diff --git a/gui/translation/text.es.translation b/gui/translation/text.es.translation index fb702b0567af0dbd2ac3412ec4af690bc615cd0a..04d0495f169ac21a23e085a62b67d835c0508025 100644 GIT binary patch delta 32 gcmdnNyoOmYC^*QO0ScIbG~-4=0Y*la$$E@k09f<{-T(jq delta 44 mcmZ3(yn|UVC^*QO0ScHw^hQAeMqXARg9(V0Kq8Zs7`p(4t_1=B diff --git a/gui/translation/text.ja.translation b/gui/translation/text.ja.translation index ecc28096cdb8b682ffcd5bb6d1a0dc9d326879d4..0e6e4a224d3c5d25bc95ba6767337cfb467d9879 100644 GIT binary patch delta 32 gcmdnPyn$ITC^*QO0ScIbG~-4=0Y*la$$E@^09o(^>Hq)$ delta 44 mcmdnMyoXsZC^*QO0ScHw^hQAeMqXARg9(V0Kq8Zs82bQ+3Iz@T diff --git a/mono/DodgeTheCreepsCS/Main.tscn b/mono/DodgeTheCreepsCS/Main.tscn index 8c170544..f7a0948d 100644 --- a/mono/DodgeTheCreepsCS/Main.tscn +++ b/mono/DodgeTheCreepsCS/Main.tscn @@ -8,103 +8,48 @@ [ext_resource path="res://art/gameover.wav" type="AudioStream" id=6] [sub_resource type="Curve2D" id=1] - -bake_interval = 5.0 _data = { "points": PoolVector2Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 480, 720, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0 ) } -[node name="Main" type="Node" index="0"] - +[node name="Main" type="Node"] script = ExtResource( 1 ) Mob = ExtResource( 2 ) -[node name="ColorRect" type="ColorRect" parent="." index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ColorRect" type="ColorRect" parent="."] margin_right = 480.0 margin_bottom = 720.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 1 color = Color( 0.253451, 0.425288, 0.429412, 1 ) -[node name="Player" parent="." index="1" instance=ExtResource( 3 )] +[node name="Player" parent="." instance=ExtResource( 3 )] -[node name="MobTimer" type="Timer" parent="." index="2"] - -process_mode = 1 +[node name="MobTimer" type="Timer" parent="."] wait_time = 0.5 -one_shot = false -autostart = false -[node name="ScoreTimer" type="Timer" parent="." index="3"] +[node name="ScoreTimer" type="Timer" parent="."] -process_mode = 1 -wait_time = 1.0 -one_shot = false -autostart = false - -[node name="StartTimer" type="Timer" parent="." index="4"] - -process_mode = 1 +[node name="StartTimer" type="Timer" parent="."] wait_time = 2.0 one_shot = true -autostart = false - -[node name="StartPosition" type="Position2D" parent="." index="5"] +[node name="StartPosition" type="Position2D" parent="."] position = Vector2( 240, 450 ) -[node name="MobPath" type="Path2D" parent="." index="6"] - -self_modulate = Color( 0.5, 0.6, 1, 0.7 ) +[node name="MobPath" type="Path2D" parent="."] curve = SubResource( 1 ) -[node name="MobSpawnLocation" type="PathFollow2D" parent="MobPath" index="0"] +[node name="MobSpawnLocation" type="PathFollow2D" parent="MobPath"] -offset = 0.0 -h_offset = 0.0 -v_offset = 0.0 -rotate = true -cubic_interp = true -loop = true -lookahead = 4.0 - -[node name="HUD" parent="." index="7" instance=ExtResource( 4 )] - -[node name="Music" type="AudioStreamPlayer" parent="." index="8"] +[node name="HUD" parent="." instance=ExtResource( 4 )] +[node name="Music" type="AudioStreamPlayer" parent="."] stream = ExtResource( 5 ) -volume_db = 0.0 -pitch_scale = 1.0 -autoplay = false -mix_target = 0 -bus = "Master" - -[node name="DeathSound" type="AudioStreamPlayer" parent="." index="9"] +[node name="DeathSound" type="AudioStreamPlayer" parent="."] stream = ExtResource( 6 ) -volume_db = 0.0 -pitch_scale = 1.0 -autoplay = false -mix_target = 0 -bus = "Master" [connection signal="Hit" from="Player" to="." method="GameOver"] - [connection signal="timeout" from="MobTimer" to="." method="OnMobTimerTimeout"] - [connection signal="timeout" from="ScoreTimer" to="." method="OnScoreTimerTimeout"] - [connection signal="timeout" from="StartTimer" to="." method="OnStartTimerTimeout"] - [connection signal="StartGame" from="HUD" to="." method="NewGame"] - - diff --git a/mono/DodgeTheCreepsCS/Player.cs b/mono/DodgeTheCreepsCS/Player.cs index f98f6085..c18697d1 100644 --- a/mono/DodgeTheCreepsCS/Player.cs +++ b/mono/DodgeTheCreepsCS/Player.cs @@ -78,13 +78,15 @@ public class Player : Area2D { Position = pos; Show(); - GetNode("CollisionShape2D").Disabled = false; + // Must be deferred as we can't change physics properties on a physics callback + GetNode("CollisionShape2D").SetDeferred("Disabled", false); } public void OnPlayerBodyEntered(PhysicsBody2D body) { Hide(); // Player disappears after being hit. EmitSignal("Hit"); - GetNode("CollisionShape2D").Disabled = true; + // Must be deferred as we can't change physics properties on a physics callback + GetNode("CollisionShape2D").SetDeferred("Disabled", true); } } diff --git a/mono/DodgeTheCreepsCS/default_env.tres b/mono/DodgeTheCreepsCS/default_env.tres index b433439a..60c2c1b7 100644 --- a/mono/DodgeTheCreepsCS/default_env.tres +++ b/mono/DodgeTheCreepsCS/default_env.tres @@ -1,101 +1,12 @@ [gd_resource type="Environment" load_steps=2 format=2] [sub_resource type="ProceduralSky" id=1] - -radiance_size = 4 sky_top_color = Color( 0.647059, 0.839216, 0.945098, 1 ) sky_horizon_color = Color( 0.839216, 0.917647, 0.980392, 1 ) -sky_curve = 0.09 -sky_energy = 1.0 ground_bottom_color = Color( 0.156863, 0.184314, 0.211765, 1 ) ground_horizon_color = Color( 0.423529, 0.396078, 0.372549, 1 ) -ground_curve = 0.02 -ground_energy = 1.0 -sun_color = Color( 1, 1, 1, 1 ) -sun_latitude = 35.0 -sun_longitude = 0.0 -sun_angle_min = 1.0 -sun_angle_max = 100.0 -sun_curve = 0.05 -sun_energy = 16.0 -texture_size = 2 [resource] - background_mode = 2 background_sky = SubResource( 1 ) -background_sky_custom_fov = 0.0 -background_color = Color( 0, 0, 0, 1 ) -background_energy = 1.0 -background_canvas_max_layer = 0 -ambient_light_color = Color( 0, 0, 0, 1 ) -ambient_light_energy = 1.0 -ambient_light_sky_contribution = 1.0 -fog_enabled = false -fog_color = Color( 0.5, 0.6, 0.7, 1 ) -fog_sun_color = Color( 1, 0.9, 0.7, 1 ) -fog_sun_amount = 0.0 -fog_depth_enabled = true -fog_depth_begin = 10.0 -fog_depth_curve = 1.0 -fog_transmit_enabled = false -fog_transmit_curve = 1.0 -fog_height_enabled = false -fog_height_min = 0.0 -fog_height_max = 100.0 -fog_height_curve = 1.0 -tonemap_mode = 0 -tonemap_exposure = 1.0 -tonemap_white = 1.0 -auto_exposure_enabled = false -auto_exposure_scale = 0.4 -auto_exposure_min_luma = 0.05 -auto_exposure_max_luma = 8.0 -auto_exposure_speed = 0.5 -ss_reflections_enabled = false -ss_reflections_max_steps = 64 -ss_reflections_fade_in = 0.15 -ss_reflections_fade_out = 2.0 -ss_reflections_depth_tolerance = 0.2 -ss_reflections_roughness = true -ssao_enabled = false -ssao_radius = 1.0 -ssao_intensity = 1.0 -ssao_radius2 = 0.0 -ssao_intensity2 = 1.0 -ssao_bias = 0.01 -ssao_light_affect = 0.0 -ssao_color = Color( 0, 0, 0, 1 ) -ssao_quality = 0 -ssao_blur = 3 -ssao_edge_sharpness = 4.0 -dof_blur_far_enabled = false -dof_blur_far_distance = 10.0 -dof_blur_far_transition = 5.0 -dof_blur_far_amount = 0.1 -dof_blur_far_quality = 1 -dof_blur_near_enabled = false -dof_blur_near_distance = 2.0 -dof_blur_near_transition = 1.0 -dof_blur_near_amount = 0.1 -dof_blur_near_quality = 1 -glow_enabled = false -glow_levels/1 = false -glow_levels/2 = false -glow_levels/3 = true -glow_levels/4 = false -glow_levels/5 = true -glow_levels/6 = false -glow_levels/7 = false -glow_intensity = 0.8 -glow_strength = 1.0 -glow_bloom = 0.0 -glow_blend_mode = 2 -glow_hdr_threshold = 1.0 -glow_hdr_scale = 2.0 -glow_bicubic_upscale = false -adjustment_enabled = false -adjustment_brightness = 1.0 -adjustment_contrast = 1.0 -adjustment_saturation = 1.0 diff --git a/mono/DodgeTheCreepsCS/project.godot b/mono/DodgeTheCreepsCS/project.godot index cc251d67..2c437f2e 100644 --- a/mono/DodgeTheCreepsCS/project.godot +++ b/mono/DodgeTheCreepsCS/project.godot @@ -6,7 +6,7 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=3 +config_version=4 _global_script_classes=[ ] _global_script_class_icons={ diff --git a/mono/monkey_pong/pong.tscn b/mono/monkey_pong/pong.tscn index ae24cec6..c7238acc 100644 --- a/mono/monkey_pong/pong.tscn +++ b/mono/monkey_pong/pong.tscn @@ -10,177 +10,86 @@ [ext_resource path="res://CeilingFloor.cs" type="Script" id=8] [sub_resource type="RectangleShape2D" id=1] - -custom_solver_bias = 0.0 extents = Vector2( 4, 16 ) [sub_resource type="RectangleShape2D" id=2] - -custom_solver_bias = 0.0 extents = Vector2( 4, 4 ) [sub_resource type="RectangleShape2D" id=3] - -custom_solver_bias = 0.0 extents = Vector2( 10, 200 ) [sub_resource type="RectangleShape2D" id=4] - -custom_solver_bias = 0.0 extents = Vector2( 320, 10 ) [node name="game" type="Node2D"] [node name="left" type="Area2D" parent="."] - position = Vector2( 67.6285, 192.594 ) -input_pickable = true -gravity_vec = Vector2( 0, 1 ) -gravity = 98.0 -linear_damp = 0.1 -angular_damp = 1.0 -audio_bus_override = false -audio_bus_name = "Master" script = ExtResource( 1 ) -ballDir = 1 [node name="sprite" type="Sprite" parent="left"] - texture = ExtResource( 2 ) -_sections_unfolded = [ "Transform" ] [node name="collision" type="CollisionShape2D" parent="left"] - shape = SubResource( 1 ) [node name="right" type="Area2D" parent="."] - position = Vector2( 563.815, 188.919 ) -input_pickable = true -gravity_vec = Vector2( 0, 1 ) -gravity = 98.0 -linear_damp = 0.1 -angular_damp = 1.0 -audio_bus_override = false -audio_bus_name = "Master" script = ExtResource( 1 ) ballDir = -1 [node name="sprite" type="Sprite" parent="right"] - texture = ExtResource( 3 ) -_sections_unfolded = [ "Transform" ] [node name="collision" type="CollisionShape2D" parent="right"] - shape = SubResource( 1 ) [node name="ball" type="Area2D" parent="."] - position = Vector2( 320.5, 191.124 ) -input_pickable = true -gravity_vec = Vector2( 0, 1 ) -gravity = 98.0 -linear_damp = 0.1 -angular_damp = 1.0 -audio_bus_override = false -audio_bus_name = "Master" script = ExtResource( 4 ) [node name="sprite" type="Sprite" parent="ball"] - texture = ExtResource( 5 ) -_sections_unfolded = [ "Transform" ] [node name="collision" type="CollisionShape2D" parent="ball"] - shape = SubResource( 2 ) [node name="separator" type="Sprite" parent="."] - position = Vector2( 320, 200 ) texture = ExtResource( 6 ) [node name="left_wall" type="Area2D" parent="."] - position = Vector2( -10, 200 ) -input_pickable = true -gravity_vec = Vector2( 0, 1 ) -gravity = 98.0 -linear_damp = 0.1 -angular_damp = 1.0 -audio_bus_override = false -audio_bus_name = "Master" script = ExtResource( 7 ) -_sections_unfolded = [ "Transform" ] [node name="collision" type="CollisionShape2D" parent="left_wall"] - shape = SubResource( 3 ) [node name="right_wall" type="Area2D" parent="."] - position = Vector2( 650, 200 ) -input_pickable = true -gravity_vec = Vector2( 0, 1 ) -gravity = 98.0 -linear_damp = 0.1 -angular_damp = 1.0 -audio_bus_override = false -audio_bus_name = "Master" script = ExtResource( 7 ) -_sections_unfolded = [ "Transform" ] [node name="collision" type="CollisionShape2D" parent="right_wall"] - shape = SubResource( 3 ) [node name="ceiling" type="Area2D" parent="."] - position = Vector2( 320, -10 ) -input_pickable = true -gravity_vec = Vector2( 0, 1 ) -gravity = 98.0 -linear_damp = 0.1 -angular_damp = 1.0 -audio_bus_override = false -audio_bus_name = "Master" script = ExtResource( 8 ) -_sections_unfolded = [ "Transform" ] -yDirection = 1 [node name="collision" type="CollisionShape2D" parent="ceiling"] - shape = SubResource( 4 ) [node name="floor" type="Area2D" parent="."] - position = Vector2( 320, 410 ) -input_pickable = true -gravity_vec = Vector2( 0, 1 ) -gravity = 98.0 -linear_damp = 0.1 -angular_damp = 1.0 -audio_bus_override = false -audio_bus_name = "Master" script = ExtResource( 8 ) -_sections_unfolded = [ "Transform" ] yDirection = -1 [node name="collision" type="CollisionShape2D" parent="floor"] - shape = SubResource( 4 ) [connection signal="area_entered" from="left" to="left" method="OnAreaEntered"] - [connection signal="area_entered" from="right" to="right" method="OnAreaEntered"] - [connection signal="area_entered" from="left_wall" to="left_wall" method="OnWallAreaEntered"] - [connection signal="area_entered" from="right_wall" to="right_wall" method="OnWallAreaEntered"] - [connection signal="area_entered" from="ceiling" to="ceiling" method="OnAreaEntered"] - [connection signal="area_entered" from="floor" to="floor" method="OnAreaEntered"] - - diff --git a/mono/monkey_pong/project.godot b/mono/monkey_pong/project.godot index dfb2bfd5..62fd8168 100644 --- a/mono/monkey_pong/project.godot +++ b/mono/monkey_pong/project.godot @@ -6,7 +6,12 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=3 +config_version=4 + +_global_script_classes=[ ] +_global_script_class_icons={ + +} [application] @@ -19,6 +24,7 @@ config/icon="res://icon.png" window/size/width=640 window/size/height=400 window/stretch/mode="2d" +window/stretch/aspect="keep" [gdnative] @@ -26,14 +32,26 @@ singletons=[ ] [input] -left_move_down=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":90,"unicode":0,"echo":false,"script":null) +left_move_down={ +"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":90,"unicode":0,"echo":false,"script":null) ] -left_move_up=[ 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) +} +left_move_up={ +"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) ] -right_move_down=[ 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) +} +right_move_down={ +"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":16777234,"unicode":0,"echo":false,"script":null) ] -right_move_up=[ 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) +} +right_move_up={ +"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":16777232,"unicode":0,"echo":false,"script":null) ] +} [rendering] diff --git a/networking/multiplayer_bomber/bomb.tscn b/networking/multiplayer_bomber/bomb.tscn index 10a9ffb7..90c4a8fe 100644 --- a/networking/multiplayer_bomber/bomb.tscn +++ b/networking/multiplayer_bomber/bomb.tscn @@ -5,74 +5,32 @@ [ext_resource path="res://explosion.png" type="Texture" id=3] [sub_resource type="RectangleShape2D" id=1] - -custom_solver_bias = 0.0 extents = Vector2( 8, 96 ) [sub_resource type="RectangleShape2D" id=2] - -custom_solver_bias = 0.0 extents = Vector2( 96, 8 ) [sub_resource type="Curve" id=3] - -min_value = 0.0 max_value = 2.0 -bake_resolution = 100 _data = [ Vector2( 0.00150494, 0.398437 ), 0.0, 0.0, 0, 0, Vector2( 0.0152287, 1.42969 ), 0.0, 0.0, 0, 0, Vector2( 0.478607, 1.30078 ), 0.0, 0.0, 0, 0, Vector2( 1, 0.291016 ), 0.0, 0.0, 0, 0 ] [sub_resource type="CurveTexture" id=4] - -flags = 4 -width = 2048 curve = SubResource( 3 ) [sub_resource type="ParticlesMaterial" id=5] - -render_priority = 0 -trail_divisor = 1 emission_shape = 2 emission_box_extents = Vector3( 80, 1, 1 ) -flag_align_y = false -flag_rotate_y = false flag_disable_z = true -spread = 45.0 -flatness = 0.0 gravity = Vector3( 0, 0, 0 ) initial_velocity = 1.0 -initial_velocity_random = 0.0 angular_velocity = 187.85 angular_velocity_random = 1.0 orbit_velocity = 0.0 orbit_velocity_random = 0.0 -linear_accel = 0.0 -linear_accel_random = 0.0 -radial_accel = 0.0 -radial_accel_random = 0.0 -tangential_accel = 0.0 -tangential_accel_random = 0.0 -damping = 0.0 -damping_random = 0.0 -angle = 0.0 -angle_random = 0.0 -scale = 1.0 -scale_random = 0.0 scale_curve = SubResource( 4 ) -color = Color( 1, 1, 1, 1 ) -hue_variation = 0.0 -hue_variation_random = 0.0 -anim_speed = 0.0 -anim_speed_random = 0.0 -anim_offset = 0.0 -anim_offset_random = 0.0 -anim_loop = false -_sections_unfolded = [ "Angular Velocity", "Emission Shape", "Gravity", "Scale" ] [sub_resource type="Animation" id=6] - length = 4.0 -loop = false -step = 0.1 tracks/0/type = "value" tracks/0/path = NodePath("sprite:self_modulate") tracks/0/interp = 1 @@ -128,90 +86,39 @@ tracks/3/keys = { } [node name="bomb" type="Area2D"] - -input_pickable = true -gravity_vec = Vector2( 0, 1 ) -gravity = 98.0 -linear_damp = 0.1 -angular_damp = 1.0 -audio_bus_override = false -audio_bus_name = "Master" script = ExtResource( 1 ) -[node name="sprite" type="Sprite" parent="." index="0"] - +[node name="sprite" type="Sprite" parent="."] position = Vector2( -2.92606, -2.92606 ) texture = ExtResource( 2 ) region_enabled = true region_rect = Rect2( 144, 0, 48, 48 ) -_sections_unfolded = [ "Region" ] - -[node name="shape1" type="CollisionShape2D" parent="." index="1"] +[node name="shape1" type="CollisionShape2D" parent="."] shape = SubResource( 1 ) -[node name="shape2" type="CollisionShape2D" parent="." index="2"] - +[node name="shape2" type="CollisionShape2D" parent="."] shape = SubResource( 2 ) -[node name="explosion1" type="Particles2D" parent="." index="3"] - +[node name="explosion1" type="Particles2D" parent="."] emitting = false -amount = 8 lifetime = 0.5 one_shot = true -preprocess = 0.0 -speed_scale = 1.0 explosiveness = 0.95 -randomness = 0.0 -fixed_fps = 0 -fract_delta = true -visibility_rect = Rect2( -100, -100, 200, 200 ) -local_coords = true -draw_order = 0 process_material = SubResource( 5 ) texture = ExtResource( 3 ) -normal_map = null -h_frames = 1 -v_frames = 1 -_sections_unfolded = [ "Process Material", "Textures", "Time" ] - -[node name="explosion2" type="Particles2D" parent="." index="4"] +[node name="explosion2" type="Particles2D" parent="."] rotation = 1.57162 emitting = false -amount = 8 -lifetime = 1.0 one_shot = true -preprocess = 0.0 -speed_scale = 1.0 explosiveness = 0.95 -randomness = 0.0 -fixed_fps = 0 -fract_delta = true -visibility_rect = Rect2( -100, -100, 200, 200 ) -local_coords = true -draw_order = 0 process_material = SubResource( 5 ) texture = ExtResource( 3 ) -normal_map = null -h_frames = 1 -v_frames = 1 -_sections_unfolded = [ "Process Material", "Textures", "Time" ] -[node name="anim" type="AnimationPlayer" parent="." index="5"] - -root_node = NodePath("..") +[node name="anim" type="AnimationPlayer" parent="."] autoplay = "anim" -playback_process_mode = 1 -playback_default_blend_time = 0.0 -playback_speed = 1.0 anims/anim = SubResource( 6 ) -blend_times = [ ] -autoplay = "anim" [connection signal="body_entered" from="." to="." method="_on_bomb_body_enter"] - [connection signal="body_exited" from="." to="." method="_on_bomb_body_exit"] - - diff --git a/networking/multiplayer_bomber/brickfloor.png.import b/networking/multiplayer_bomber/brickfloor.png.import index 63b624c8..a4897e66 100644 --- a/networking/multiplayer_bomber/brickfloor.png.import +++ b/networking/multiplayer_bomber/brickfloor.png.import @@ -7,16 +7,14 @@ path="res://.import/brickfloor.png-bab1cbace80ab627972eea565951db9e.stex" [deps] source_file="res://brickfloor.png" -source_md5="58c8113a4c6cb037376fd4c1530b797a" - dest_files=[ "res://.import/brickfloor.png-bab1cbace80ab627972eea565951db9e.stex" ] -dest_md5="59f392610dd24df206fe041c44ddcdb0" [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 @@ -26,6 +24,7 @@ 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 diff --git a/networking/multiplayer_bomber/charwalk.png.import b/networking/multiplayer_bomber/charwalk.png.import index d70884a3..43756e6e 100644 --- a/networking/multiplayer_bomber/charwalk.png.import +++ b/networking/multiplayer_bomber/charwalk.png.import @@ -7,16 +7,14 @@ path="res://.import/charwalk.png-a9f067962a6454cc2f52a6e82832cbc5.stex" [deps] source_file="res://charwalk.png" -source_md5="7dbd87a40f60dd5882f23731d13e9798" - dest_files=[ "res://.import/charwalk.png-a9f067962a6454cc2f52a6e82832cbc5.stex" ] -dest_md5="fe50c0fcfde8daf5b933d4e84ae31a9c" [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 @@ -26,6 +24,7 @@ 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 diff --git a/networking/multiplayer_bomber/explosion.png.import b/networking/multiplayer_bomber/explosion.png.import index a0eb93e0..6e8c5f0e 100644 --- a/networking/multiplayer_bomber/explosion.png.import +++ b/networking/multiplayer_bomber/explosion.png.import @@ -7,16 +7,14 @@ path="res://.import/explosion.png-730076d88b39dbfd5c22ad71f1135b01.stex" [deps] source_file="res://explosion.png" -source_md5="9c7f3018d72fd9e82c868eb5c3fbf0d7" - dest_files=[ "res://.import/explosion.png-730076d88b39dbfd5c22ad71f1135b01.stex" ] -dest_md5="f279883906fff65cae8669c1489e6336" [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 @@ -26,6 +24,7 @@ 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 diff --git a/networking/multiplayer_bomber/gamestate.gd b/networking/multiplayer_bomber/gamestate.gd index 43ea7bf5..8bd6f452 100644 --- a/networking/multiplayer_bomber/gamestate.gd +++ b/networking/multiplayer_bomber/gamestate.gd @@ -20,7 +20,7 @@ signal game_ended() signal game_error(what) # Callback from SceneTree -func _player_connected(id): +func _player_connected(_id): # This is not used in this demo, because _connected_ok is called for clients # on success and will do the job. pass diff --git a/networking/multiplayer_bomber/lobby.gd b/networking/multiplayer_bomber/lobby.gd index 780f4036..c6872458 100644 --- a/networking/multiplayer_bomber/lobby.gd +++ b/networking/multiplayer_bomber/lobby.gd @@ -53,7 +53,6 @@ func _on_game_ended(): get_node("connect").show() get_node("players").hide() get_node("connect/host").disabled = false - get_node("connect/join").disabled func _on_game_error(errtxt): get_node("error").dialog_text = errtxt diff --git a/networking/multiplayer_bomber/lobby.tscn b/networking/multiplayer_bomber/lobby.tscn index 648fd30b..23f50174 100644 --- a/networking/multiplayer_bomber/lobby.tscn +++ b/networking/multiplayer_bomber/lobby.tscn @@ -2,298 +2,126 @@ [ext_resource path="res://lobby.gd" type="Script" id=1] -[node name="lobby" type="Control" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 +[node name="lobby" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 script = ExtResource( 1 ) -[node name="players" type="Panel" parent="." index="0"] - +[node name="players" type="Panel" parent="."] visible = false -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 393.0 margin_top = 113.0 margin_right = 645.0 margin_bottom = 468.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -[node name="label" type="Label" parent="players" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="label" type="Label" parent="players"] margin_left = 26.0 margin_top = 18.0 margin_right = 142.0 margin_bottom = 32.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Awaiting Players..." -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="start" type="Button" parent="players" index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="start" type="Button" parent="players"] margin_left = 68.0 margin_top = 307.0 margin_right = 193.0 margin_bottom = 336.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "START!" -flat = false -align = 1 -[node name="list" type="ItemList" parent="players" index="2"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="list" type="ItemList" parent="players"] margin_left = 25.0 margin_top = 37.0 margin_right = 229.0 margin_bottom = 296.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = true -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -items = [ ] -select_mode = 0 -icon_mode = 1 -fixed_icon_size = Vector2( 0, 0 ) -[node name="connect" type="Panel" parent="." index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="connect" type="Panel" parent="."] margin_left = 370.0 margin_top = 157.0 margin_right = 647.0 margin_bottom = 324.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -[node name="name_label" type="Label" parent="connect" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="name_label" type="Label" parent="connect"] margin_left = 14.0 margin_top = 11.0 margin_right = 56.0 margin_bottom = 25.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Name:" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="name" type="LineEdit" parent="connect" index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="name" type="LineEdit" parent="connect"] margin_left = 17.0 margin_top = 30.0 margin_right = 173.0 margin_bottom = 54.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 1 size_flags_horizontal = 2 size_flags_vertical = 2 text = "The Warrior" -focus_mode = 2 -context_menu_enabled = true -placeholder_alpha = 0.6 -caret_blink = false -caret_blink_speed = 0.65 -caret_position = 0 -[node name="ip_label" type="Label" parent="connect" index="2"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ip_label" type="Label" parent="connect"] margin_left = 15.0 margin_top = 66.0 margin_right = 57.0 margin_bottom = 80.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 text = "IP:" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="ip" type="LineEdit" parent="connect" index="3"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="ip" type="LineEdit" parent="connect"] margin_left = 17.0 margin_top = 85.0 margin_right = 173.0 margin_bottom = 109.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 1 size_flags_horizontal = 2 size_flags_vertical = 2 text = "127.0.0.1" -focus_mode = 2 -context_menu_enabled = true -placeholder_alpha = 0.6 -caret_blink = false -caret_blink_speed = 0.65 -caret_position = 0 -[node name="host" type="Button" parent="connect" index="4"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="host" type="Button" parent="connect"] margin_left = 181.0 margin_top = 31.0 margin_right = 246.0 margin_bottom = 51.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "Host" -flat = false -align = 1 -[node name="join" type="Button" parent="connect" index="5"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="join" type="Button" parent="connect"] margin_left = 181.0 margin_top = 87.0 margin_right = 246.0 margin_bottom = 107.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "Join" -flat = false -align = 1 -[node name="error_label" type="Label" parent="connect" index="6"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="error_label" type="Label" parent="connect"] margin_left = 15.0 margin_top = 125.0 margin_right = 257.0 margin_bottom = 139.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 custom_colors/font_color = Color( 0.820312, 0.291595, 0.291595, 1 ) align = 1 -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="error" type="AcceptDialog" parent="." index="2"] - -visible = false -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="error" type="AcceptDialog" parent="."] margin_right = 55.0 margin_bottom = 58.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -popup_exclusive = false -window_title = "Alert!" -resizable = false -dialog_hide_on_ok = true [connection signal="pressed" from="players/start" to="." method="_on_start_pressed"] - [connection signal="pressed" from="connect/host" to="." method="_on_host_pressed"] - [connection signal="pressed" from="connect/join" to="." method="_on_join_pressed"] - - diff --git a/networking/multiplayer_bomber/player.gd b/networking/multiplayer_bomber/player.gd index 06f5a5ee..05dfd37c 100644 --- a/networking/multiplayer_bomber/player.gd +++ b/networking/multiplayer_bomber/player.gd @@ -2,8 +2,8 @@ extends KinematicBody2D const MOTION_SPEED = 90.0 -slave var slave_pos = Vector2() -slave var slave_motion = Vector2() +puppet var puppet_pos = Vector2() +puppet var puppet_motion = Vector2() export var stunned = false @@ -20,7 +20,7 @@ var current_anim = "" var prev_bombing = false var bomb_index = 0 -func _physics_process(delta): +func _physics_process(_delta): var motion = Vector2() if is_network_master(): @@ -46,11 +46,11 @@ func _physics_process(delta): prev_bombing = bombing - rset("slave_motion", motion) - rset("slave_pos", position) + rset("puppet_motion", motion) + rset("puppet_pos", position) else: - position = slave_pos - motion = slave_motion + position = puppet_pos + motion = puppet_motion var new_anim = "standing" if motion.y < 0: @@ -72,15 +72,15 @@ func _physics_process(delta): # FIXME: Use move_and_slide move_and_slide(motion * MOTION_SPEED) if not is_network_master(): - slave_pos = position # To avoid jitter + puppet_pos = position # To avoid jitter -slave func stun(): +puppet func stun(): stunned = true -master func exploded(by_who): +master func exploded(_by_who): if stunned: return - rpc("stun") # Stun slaves + rpc("stun") # Stun puppets stun() # Stun master - could use sync to do both at once func set_player_name(new_name): @@ -88,4 +88,4 @@ func set_player_name(new_name): func _ready(): stunned = false - slave_pos = position + puppet_pos = position diff --git a/networking/multiplayer_bomber/player.tscn b/networking/multiplayer_bomber/player.tscn index 791988e0..4f2ff35d 100644 --- a/networking/multiplayer_bomber/player.tscn +++ b/networking/multiplayer_bomber/player.tscn @@ -5,21 +5,18 @@ [ext_resource path="res://montserrat.otf" type="DynamicFontData" id=3] [sub_resource type="CircleShape2D" id=1] - -custom_solver_bias = 0.0 radius = 20.0 [sub_resource type="Animation" id=2] - resource_name = "standing" length = 0.8 loop = true -step = 0.1 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false +tracks/0/enabled = true tracks/0/keys = { "times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), "transitions": PoolRealArray( 1, 1, 1, 1 ), @@ -28,16 +25,14 @@ tracks/0/keys = { } [sub_resource type="Animation" id=3] - resource_name = "stunned" length = 1.2 -loop = false -step = 0.1 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false +tracks/0/enabled = true tracks/0/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), @@ -49,6 +44,7 @@ tracks/1/path = NodePath("sprite:rotation_degrees") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/imported = false +tracks/1/enabled = true tracks/1/keys = { "times": PoolRealArray( 0, 1, 1.1 ), "transitions": PoolRealArray( 1, 0, 1 ), @@ -60,6 +56,7 @@ tracks/2/path = NodePath(".:stunned") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/imported = false +tracks/2/enabled = true tracks/2/keys = { "times": PoolRealArray( 1 ), "transitions": PoolRealArray( 1 ), @@ -68,15 +65,14 @@ tracks/2/keys = { } [sub_resource type="Animation" id=4] - length = 0.8 loop = true -step = 0.1 tracks/0/type = "value" tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false +tracks/0/enabled = true tracks/0/keys = { "times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), "transitions": PoolRealArray( 1, 1, 1, 1 ), @@ -85,7 +81,6 @@ tracks/0/keys = { } [sub_resource type="Animation" id=5] - length = 0.8 loop = true step = 0.2 @@ -94,6 +89,7 @@ tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false +tracks/0/enabled = true tracks/0/keys = { "times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), "transitions": PoolRealArray( 1, 1, 1, 1 ), @@ -102,7 +98,6 @@ tracks/0/keys = { } [sub_resource type="Animation" id=6] - length = 0.8 loop = true step = 0.2 @@ -111,6 +106,7 @@ tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false +tracks/0/enabled = true tracks/0/keys = { "times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), "transitions": PoolRealArray( 1, 1, 1, 1 ), @@ -119,7 +115,6 @@ tracks/0/keys = { } [sub_resource type="Animation" id=7] - length = 0.8 loop = true step = 0.2 @@ -128,6 +123,7 @@ tracks/0/path = NodePath("sprite:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false +tracks/0/enabled = true tracks/0/keys = { "times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), "transitions": PoolRealArray( 1, 1, 1, 1 ), @@ -136,23 +132,13 @@ tracks/0/keys = { } [sub_resource type="DynamicFont" id=8] - size = 14 -use_mipmaps = false -use_filter = false font_data = ExtResource( 3 ) [node name="player" type="KinematicBody2D"] - -input_pickable = false -collision_layer = 1 -collision_mask = 1 -collision/safe_margin = 0.08 script = ExtResource( 1 ) -stunned = false [node name="sprite" type="Sprite" parent="."] - position = Vector2( 0.0750351, 6.23615 ) texture = ExtResource( 2 ) offset = Vector2( -0.0750351, -6.23615 ) @@ -160,40 +146,24 @@ vframes = 4 hframes = 4 [node name="shape" type="CollisionShape2D" parent="."] - shape = SubResource( 1 ) [node name="anim" type="AnimationPlayer" parent="."] - -playback_process_mode = 1 -playback_default_blend_time = 0.0 -root_node = NodePath("..") anims/standing = SubResource( 2 ) anims/stunned = SubResource( 3 ) anims/walk_down = SubResource( 4 ) anims/walk_left = SubResource( 5 ) anims/walk_right = SubResource( 6 ) anims/walk_up = SubResource( 7 ) -playback/active = true -playback/speed = 1.0 -blend_times = [ ] -autoplay = "" [node name="label" type="Label" parent="."] - margin_left = -82.0 margin_top = -35.0 margin_right = 85.0 margin_bottom = -14.0 -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 custom_fonts/font = SubResource( 8 ) text = "Player 1" align = 1 -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 - diff --git a/networking/multiplayer_bomber/project.godot b/networking/multiplayer_bomber/project.godot index 7281cd9f..2502b607 100644 --- a/networking/multiplayer_bomber/project.godot +++ b/networking/multiplayer_bomber/project.godot @@ -6,7 +6,12 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=3 +config_version=4 + +_global_script_classes=[ ] +_global_script_class_icons={ + +} [application] @@ -17,6 +22,10 @@ run/main_scene="res://lobby.tscn" gamestate="*res://gamestate.gd" +[debug] + +gdscript/warnings/return_value_discarded=false + [gdnative] singletons=[ ] @@ -28,13 +37,28 @@ gen_mipmaps=false [input] -move_down=[ 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) +move_down={ +"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":16777234,"unicode":0,"echo":false,"script":null) ] -move_left=[ 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) +} +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":16777231,"unicode":0,"echo":false,"script":null) ] -move_right=[ 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) +} +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":16777233,"unicode":0,"echo":false,"script":null) ] -move_up=[ 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) +} +move_up={ +"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":16777232,"unicode":0,"echo":false,"script":null) ] -set_bomb=[ 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) +} +set_bomb={ +"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) ] +} diff --git a/networking/multiplayer_bomber/rock.gd b/networking/multiplayer_bomber/rock.gd index b7683267..83a9f653 100644 --- a/networking/multiplayer_bomber/rock.gd +++ b/networking/multiplayer_bomber/rock.gd @@ -1,11 +1,11 @@ extends KinematicBody2D # Sent to everyone else -slave func do_explosion(): +puppet func do_explosion(): get_node("anim").play("explode") # Received by owner of the rock master func exploded(by_who): - rpc("do_explosion") # Re-sent to slave rocks + rpc("do_explosion") # Re-sent to puppet rocks get_node("../../score").rpc("increase_score", by_who) do_explosion() diff --git a/networking/multiplayer_bomber/rock.tscn b/networking/multiplayer_bomber/rock.tscn index 19d37dd0..30c6d4cd 100644 --- a/networking/multiplayer_bomber/rock.tscn +++ b/networking/multiplayer_bomber/rock.tscn @@ -4,16 +4,10 @@ [ext_resource path="res://brickfloor.png" type="Texture" id=2] [sub_resource type="RectangleShape2D" id=1] - -custom_solver_bias = 0.0 extents = Vector2( 24, 24 ) [sub_resource type="Animation" id=2] - resource_name = "explode" -length = 1.0 -loop = false -step = 0.1 tracks/0/type = "method" tracks/0/path = NodePath(".") tracks/0/interp = 1 @@ -42,33 +36,16 @@ tracks/1/keys = { } [node name="rock" type="KinematicBody2D"] - -input_pickable = false -collision_layer = 1 -collision_mask = 1 -collision/safe_margin = 0.08 script = ExtResource( 1 ) -[node name="sprite" type="Sprite" parent="." index="0"] - +[node name="sprite" type="Sprite" parent="."] texture = ExtResource( 2 ) region_enabled = true region_rect = Rect2( 96, 0, 48, 48 ) -_sections_unfolded = [ "Region" ] - -[node name="shape" type="CollisionShape2D" parent="." index="1"] +[node name="shape" type="CollisionShape2D" parent="."] shape = SubResource( 1 ) -[node name="anim" type="AnimationPlayer" parent="." index="2"] - -root_node = NodePath("..") -autoplay = "" -playback_process_mode = 1 -playback_default_blend_time = 0.0 -playback_speed = 1.0 +[node name="anim" type="AnimationPlayer" parent="."] anims/explode = SubResource( 2 ) -blend_times = [ ] -autoplay = "" - diff --git a/networking/multiplayer_bomber/rock_bit.png.import b/networking/multiplayer_bomber/rock_bit.png.import index 0374acac..1fbebcad 100644 --- a/networking/multiplayer_bomber/rock_bit.png.import +++ b/networking/multiplayer_bomber/rock_bit.png.import @@ -7,16 +7,14 @@ path="res://.import/rock_bit.png-cd30ec3dce7edf848ee632b29d4d0c95.stex" [deps] source_file="res://rock_bit.png" -source_md5="72daee59795a6b17ee21df81b712631f" - dest_files=[ "res://.import/rock_bit.png-cd30ec3dce7edf848ee632b29d4d0c95.stex" ] -dest_md5="81cad6adf308b35e7495206306476fce" [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 @@ -26,6 +24,7 @@ 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 diff --git a/networking/multiplayer_bomber/score.gd b/networking/multiplayer_bomber/score.gd index d146c8b6..28347106 100644 --- a/networking/multiplayer_bomber/score.gd +++ b/networking/multiplayer_bomber/score.gd @@ -2,7 +2,7 @@ extends HBoxContainer var player_labels = {} -func _process(delta): +func _process(_delta): var rocks_left = get_node("../rocks").get_child_count() if rocks_left == 0: var winner_name = "" diff --git a/networking/multiplayer_bomber/tile_scene.tscn b/networking/multiplayer_bomber/tile_scene.tscn index 0e6aeac6..3e389213 100644 --- a/networking/multiplayer_bomber/tile_scene.tscn +++ b/networking/multiplayer_bomber/tile_scene.tscn @@ -3,36 +3,22 @@ [ext_resource path="res://brickfloor.png" type="Texture" id=1] [sub_resource type="RectangleShape2D" id=1] - -custom_solver_bias = 0.0 extents = Vector2( 24, 24 ) [node name="Node2D" type="Node2D"] -[node name="wall" type="Sprite" parent="." index="0"] - +[node name="wall" type="Sprite" parent="."] position = Vector2( 24, 24 ) texture = ExtResource( 1 ) region_rect = Rect2( 0, 0, 48, 48 ) -[node name="col" type="StaticBody2D" parent="wall" index="0"] - -input_pickable = false -collision_layer = 1 -collision_mask = 1 -constant_linear_velocity = Vector2( 0, 0 ) -constant_angular_velocity = 0.0 -friction = 1.0 -bounce = 0.0 - -[node name="CollisionShape2D" type="CollisionShape2D" parent="wall/col" index="0"] +[node name="col" type="StaticBody2D" parent="wall"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="wall/col"] shape = SubResource( 1 ) -[node name="floor" type="Sprite" parent="." index="1"] - +[node name="floor" type="Sprite" parent="."] position = Vector2( 72, 24 ) texture = ExtResource( 1 ) region_rect = Rect2( 48, 0, 48, 48 ) - diff --git a/networking/multiplayer_bomber/world.tscn b/networking/multiplayer_bomber/world.tscn index d4479a98..77aaba1a 100644 --- a/networking/multiplayer_bomber/world.tscn +++ b/networking/multiplayer_bomber/world.tscn @@ -6,400 +6,283 @@ [ext_resource path="res://montserrat.otf" type="DynamicFontData" id=4] [sub_resource type="DynamicFont" id=1] - size = 44 -use_mipmaps = false -use_filter = false font_data = ExtResource( 4 ) [node name="world" type="Node2D"] -[node name="map" type="TileMap" parent="." index="0"] - -mode = 0 +[node name="map" type="TileMap" parent="."] tile_set = ExtResource( 1 ) cell_size = Vector2( 48, 48 ) -cell_quadrant_size = 16 -cell_custom_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) -cell_half_offset = 2 -cell_tile_origin = 0 -cell_y_sort = false -cell_clip_uv = false -collision_use_kinematic = false -collision_friction = 1.0 -collision_bounce = 0.0 -collision_layer = 1 -collision_mask = 1 -occluder_light_mask = 1 format = 1 tile_data = PoolIntArray( 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 13, 0, 0, 14, 0, 0, 15, 0, 0, 16, 0, 0, 17, 0, 0, 18, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, 0, 65536, 0, 0, 65537, 1, 0, 65538, 1, 0, 65539, 1, 0, 65540, 1, 0, 65541, 1, 0, 65542, 1, 0, 65543, 1, 0, 65544, 1, 0, 65545, 1, 0, 65546, 1, 0, 65547, 1, 0, 65548, 1, 0, 65549, 1, 0, 65550, 1, 0, 65551, 1, 0, 65552, 1, 0, 65553, 1, 0, 65554, 1, 0, 65555, 1, 0, 65556, 0, 0, 65557, 0, 0, 131072, 0, 0, 131073, 1, 0, 131074, 0, 0, 131075, 1, 0, 131076, 0, 0, 131077, 1, 0, 131078, 0, 0, 131079, 1, 0, 131080, 0, 0, 131081, 1, 0, 131082, 0, 0, 131083, 0, 0, 131084, 0, 0, 131085, 0, 0, 131086, 0, 0, 131087, 1, 0, 131088, 0, 0, 131089, 1, 0, 131090, 0, 0, 131091, 1, 0, 131092, 0, 0, 131093, 0, 0, 196608, 0, 0, 196609, 1, 0, 196610, 1, 0, 196611, 1, 0, 196612, 0, 0, 196613, 1, 0, 196614, 1, 0, 196615, 1, 0, 196616, 1, 0, 196617, 1, 0, 196618, 0, 0, 196619, 1, 0, 196620, 1, 0, 196621, 1, 0, 196622, 1, 0, 196623, 1, 0, 196624, 1, 0, 196625, 1, 0, 196626, 1, 0, 196627, 1, 0, 196628, 0, 0, 196629, 0, 0, 262144, 0, 0, 262145, 1, 0, 262146, 0, 0, 262147, 1, 0, 262148, 0, 0, 262149, 1, 0, 262150, 0, 0, 262151, 1, 0, 262152, 0, 0, 262153, 1, 0, 262154, 0, 0, 262155, 1, 0, 262156, 0, 0, 262157, 1, 0, 262158, 0, 0, 262159, 1, 0, 262160, 0, 0, 262161, 1, 0, 262162, 0, 0, 262163, 1, 0, 262164, 0, 0, 262165, 0, 0, 327680, 0, 0, 327681, 1, 0, 327682, 1, 0, 327683, 1, 0, 327684, 1, 0, 327685, 1, 0, 327686, 0, 0, 327687, 1, 0, 327688, 1, 0, 327689, 1, 0, 327690, 1, 0, 327691, 1, 0, 327692, 1, 0, 327693, 1, 0, 327694, 1, 0, 327695, 1, 0, 327696, 1, 0, 327697, 1, 0, 327698, 0, 0, 327699, 1, 0, 327700, 0, 0, 327701, 0, 0, 393216, 0, 0, 393217, 1, 0, 393218, 0, 0, 393219, 1, 0, 393220, 0, 0, 393221, 1, 0, 393222, 0, 0, 393223, 1, 0, 393224, 0, 0, 393225, 1, 0, 393226, 0, 0, 393227, 1, 0, 393228, 0, 0, 393229, 0, 0, 393230, 0, 0, 393231, 0, 0, 393232, 0, 0, 393233, 1, 0, 393234, 0, 0, 393235, 1, 0, 393236, 0, 0, 393237, 0, 0, 458752, 0, 0, 458753, 1, 0, 458754, 1, 0, 458755, 1, 0, 458756, 1, 0, 458757, 1, 0, 458758, 1, 0, 458759, 1, 0, 458760, 1, 0, 458761, 1, 0, 458762, 1, 0, 458763, 1, 0, 458764, 1, 0, 458765, 1, 0, 458766, 1, 0, 458767, 1, 0, 458768, 1, 0, 458769, 1, 0, 458770, 1, 0, 458771, 1, 0, 458772, 0, 0, 458773, 0, 0, 524288, 0, 0, 524289, 1, 0, 524290, 0, 0, 524291, 0, 0, 524292, 0, 0, 524293, 1, 0, 524294, 0, 0, 524295, 1, 0, 524296, 0, 0, 524297, 1, 0, 524298, 0, 0, 524299, 1, 0, 524300, 0, 0, 524301, 0, 0, 524302, 0, 0, 524303, 1, 0, 524304, 0, 0, 524305, 1, 0, 524306, 0, 0, 524307, 1, 0, 524308, 0, 0, 524309, 0, 0, 589824, 0, 0, 589825, 1, 0, 589826, 1, 0, 589827, 1, 0, 589828, 1, 0, 589829, 1, 0, 589830, 1, 0, 589831, 1, 0, 589832, 0, 0, 589833, 1, 0, 589834, 1, 0, 589835, 1, 0, 589836, 0, 0, 589837, 1, 0, 589838, 1, 0, 589839, 1, 0, 589840, 1, 0, 589841, 1, 0, 589842, 1, 0, 589843, 1, 0, 589844, 0, 0, 589845, 0, 0, 655360, 0, 0, 655361, 1, 0, 655362, 0, 0, 655363, 1, 0, 655364, 0, 0, 655365, 1, 0, 655366, 0, 0, 655367, 1, 0, 655368, 0, 0, 655369, 1, 0, 655370, 0, 0, 655371, 1, 0, 655372, 0, 0, 655373, 1, 0, 655374, 0, 0, 655375, 1, 0, 655376, 0, 0, 655377, 1, 0, 655378, 0, 0, 655379, 1, 0, 655380, 0, 0, 655381, 0, 0, 720896, 0, 0, 720897, 1, 0, 720898, 1, 0, 720899, 1, 0, 720900, 1, 0, 720901, 1, 0, 720902, 1, 0, 720903, 1, 0, 720904, 1, 0, 720905, 1, 0, 720906, 1, 0, 720907, 1, 0, 720908, 1, 0, 720909, 1, 0, 720910, 1, 0, 720911, 1, 0, 720912, 1, 0, 720913, 1, 0, 720914, 1, 0, 720915, 1, 0, 720916, 0, 0, 720917, 0, 0, 786432, 0, 0, 786433, 0, 0, 786434, 0, 0, 786435, 0, 0, 786436, 0, 0, 786437, 0, 0, 786438, 0, 0, 786439, 0, 0, 786440, 0, 0, 786441, 0, 0, 786442, 0, 0, 786443, 0, 0, 786444, 0, 0, 786445, 0, 0, 786446, 0, 0, 786447, 0, 0, 786448, 0, 0, 786449, 0, 0, 786450, 0, 0, 786451, 0, 0, 786452, 0, 0, 786453, 0, 0 ) __meta__ = { "_edit_lock_": true } -[node name="spawn_points" type="Node2D" parent="." index="1"] - +[node name="spawn_points" type="Node2D" parent="."] editor/display_folded = true -[node name="0" type="Position2D" parent="spawn_points" index="0"] - +[node name="0" type="Position2D" parent="spawn_points"] position = Vector2( 72, 72 ) -[node name="1" type="Position2D" parent="spawn_points" index="1"] - +[node name="1" type="Position2D" parent="spawn_points"] position = Vector2( 264, 216 ) -[node name="2" type="Position2D" parent="spawn_points" index="2"] - +[node name="2" type="Position2D" parent="spawn_points"] position = Vector2( 72, 456 ) -[node name="3" type="Position2D" parent="spawn_points" index="3"] - +[node name="3" type="Position2D" parent="spawn_points"] position = Vector2( 360, 552 ) -[node name="4" type="Position2D" parent="spawn_points" index="4"] - +[node name="4" type="Position2D" parent="spawn_points"] position = Vector2( 840, 360 ) -[node name="5" type="Position2D" parent="spawn_points" index="5"] - +[node name="5" type="Position2D" parent="spawn_points"] position = Vector2( 456, 264 ) -[node name="6" type="Position2D" parent="spawn_points" index="6"] - +[node name="6" type="Position2D" parent="spawn_points"] position = Vector2( 696, 264 ) -[node name="7" type="Position2D" parent="spawn_points" index="7"] - +[node name="7" type="Position2D" parent="spawn_points"] position = Vector2( 744, 456 ) -[node name="8" type="Position2D" parent="spawn_points" index="8"] - +[node name="8" type="Position2D" parent="spawn_points"] position = Vector2( 312, 456 ) -[node name="9" type="Position2D" parent="spawn_points" index="9"] - +[node name="9" type="Position2D" parent="spawn_points"] position = Vector2( 696, 72 ) -[node name="10" type="Position2D" parent="spawn_points" index="10"] - +[node name="10" type="Position2D" parent="spawn_points"] position = Vector2( 504, 72 ) -[node name="11" type="Position2D" parent="spawn_points" index="11"] - +[node name="11" type="Position2D" parent="spawn_points"] position = Vector2( 936, 72 ) -[node name="rocks" type="Node2D" parent="." index="2"] - -[node name="rock" parent="rocks" index="0" instance=ExtResource( 2 )] +[node name="rocks" type="Node2D" parent="."] +[node name="rock" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 120, 72 ) -[node name="rock1" parent="rocks" index="1" instance=ExtResource( 2 )] - +[node name="rock1" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 264, 168 ) -[node name="rock2" parent="rocks" index="2" instance=ExtResource( 2 )] - +[node name="rock2" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 264, 120 ) -[node name="rock3" parent="rocks" index="3" instance=ExtResource( 2 )] - +[node name="rock3" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 216, 72 ) -[node name="rock4" parent="rocks" index="4" instance=ExtResource( 2 )] - +[node name="rock4" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 264, 72 ) -[node name="rock5" parent="rocks" index="5" instance=ExtResource( 2 )] - +[node name="rock5" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 312, 72 ) -[node name="rock6" parent="rocks" index="6" instance=ExtResource( 2 )] - +[node name="rock6" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 552, 168 ) -[node name="rock7" parent="rocks" index="7" instance=ExtResource( 2 )] - +[node name="rock7" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 600, 168 ) -[node name="rock8" parent="rocks" index="8" instance=ExtResource( 2 )] - +[node name="rock8" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 552, 216 ) -[node name="rock9" parent="rocks" index="9" instance=ExtResource( 2 )] - +[node name="rock9" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 264, 312 ) -[node name="rock10" parent="rocks" index="10" instance=ExtResource( 2 )] - +[node name="rock10" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 120, 360 ) -[node name="rock11" parent="rocks" index="11" instance=ExtResource( 2 )] - +[node name="rock11" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 168, 360 ) -[node name="rock12" parent="rocks" index="12" instance=ExtResource( 2 )] - +[node name="rock12" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 216, 360 ) -[node name="rock13" parent="rocks" index="13" instance=ExtResource( 2 )] - +[node name="rock13" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 120, 264 ) -[node name="rock14" parent="rocks" index="14" instance=ExtResource( 2 )] - +[node name="rock14" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 168, 216 ) -[node name="rock15" parent="rocks" index="15" instance=ExtResource( 2 )] - +[node name="rock15" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 72, 360 ) -[node name="rock16" parent="rocks" index="16" instance=ExtResource( 2 )] - +[node name="rock16" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 72, 312 ) -[node name="rock17" parent="rocks" index="17" instance=ExtResource( 2 )] - +[node name="rock17" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 72, 264 ) -[node name="rock18" parent="rocks" index="18" instance=ExtResource( 2 )] - +[node name="rock18" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 360, 360 ) -[node name="rock19" parent="rocks" index="19" instance=ExtResource( 2 )] - +[node name="rock19" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 408, 360 ) -[node name="rock20" parent="rocks" index="20" instance=ExtResource( 2 )] - +[node name="rock20" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 504, 360 ) -[node name="rock21" parent="rocks" index="21" instance=ExtResource( 2 )] - +[node name="rock21" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 600, 360 ) -[node name="rock22" parent="rocks" index="22" instance=ExtResource( 2 )] - +[node name="rock22" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 648, 360 ) -[node name="rock23" parent="rocks" index="23" instance=ExtResource( 2 )] - +[node name="rock23" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 504, 456 ) -[node name="rock24" parent="rocks" index="24" instance=ExtResource( 2 )] - +[node name="rock24" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 552, 456 ) -[node name="rock25" parent="rocks" index="25" instance=ExtResource( 2 )] - +[node name="rock25" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 552, 408 ) -[node name="rock26" parent="rocks" index="26" instance=ExtResource( 2 )] - +[node name="rock26" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 360, 456 ) -[node name="rock27" parent="rocks" index="27" instance=ExtResource( 2 )] - +[node name="rock27" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 360, 504 ) -[node name="rock28" parent="rocks" index="28" instance=ExtResource( 2 )] - +[node name="rock28" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 264, 504 ) -[node name="rock29" parent="rocks" index="29" instance=ExtResource( 2 )] - +[node name="rock29" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 264, 552 ) -[node name="rock30" parent="rocks" index="30" instance=ExtResource( 2 )] - +[node name="rock30" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 168, 456 ) -[node name="rock31" parent="rocks" index="31" instance=ExtResource( 2 )] - +[node name="rock31" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 168, 504 ) -[node name="rock32" parent="rocks" index="32" instance=ExtResource( 2 )] - +[node name="rock32" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 72, 552 ) -[node name="rock33" parent="rocks" index="33" instance=ExtResource( 2 )] - +[node name="rock33" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 120, 552 ) -[node name="rock34" parent="rocks" index="34" instance=ExtResource( 2 )] - +[node name="rock34" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 504, 552 ) -[node name="rock35" parent="rocks" index="35" instance=ExtResource( 2 )] - +[node name="rock35" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 600, 552 ) -[node name="rock36" parent="rocks" index="36" instance=ExtResource( 2 )] - +[node name="rock36" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 648, 552 ) -[node name="rock37" parent="rocks" index="37" instance=ExtResource( 2 )] - +[node name="rock37" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 648, 504 ) -[node name="rock38" parent="rocks" index="38" instance=ExtResource( 2 )] - +[node name="rock38" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 456, 216 ) -[node name="rock39" parent="rocks" index="39" instance=ExtResource( 2 )] - +[node name="rock39" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 360, 216 ) -[node name="rock40" parent="rocks" index="40" instance=ExtResource( 2 )] - +[node name="rock40" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 360, 168 ) -[node name="rock41" parent="rocks" index="41" instance=ExtResource( 2 )] - +[node name="rock41" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 456, 120 ) -[node name="rock42" parent="rocks" index="42" instance=ExtResource( 2 )] - +[node name="rock42" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 456, 408 ) -[node name="rock43" parent="rocks" index="43" instance=ExtResource( 2 )] - +[node name="rock43" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 456, 456 ) -[node name="rock44" parent="rocks" index="44" instance=ExtResource( 2 )] - +[node name="rock44" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 456, 504 ) -[node name="rock45" parent="rocks" index="45" instance=ExtResource( 2 )] - +[node name="rock45" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 600, 264 ) -[node name="rock46" parent="rocks" index="46" instance=ExtResource( 2 )] - +[node name="rock46" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 600, 72 ) -[node name="rock47" parent="rocks" index="47" instance=ExtResource( 2 )] - +[node name="rock47" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 408, 72 ) -[node name="rock48" parent="rocks" index="48" instance=ExtResource( 2 )] - +[node name="rock48" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 792, 168 ) -[node name="rock49" parent="rocks" index="49" instance=ExtResource( 2 )] - +[node name="rock49" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 744, 168 ) -[node name="rock50" parent="rocks" index="50" instance=ExtResource( 2 )] - +[node name="rock50" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 744, 264 ) -[node name="rock51" parent="rocks" index="51" instance=ExtResource( 2 )] - +[node name="rock51" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 792, 264 ) -[node name="rock52" parent="rocks" index="52" instance=ExtResource( 2 )] - +[node name="rock52" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 744, 360 ) -[node name="rock53" parent="rocks" index="53" instance=ExtResource( 2 )] - +[node name="rock53" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 744, 408 ) -[node name="rock54" parent="rocks" index="54" instance=ExtResource( 2 )] - +[node name="rock54" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 792, 552 ) -[node name="rock55" parent="rocks" index="55" instance=ExtResource( 2 )] - +[node name="rock55" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 840, 552 ) -[node name="rock56" parent="rocks" index="56" instance=ExtResource( 2 )] - +[node name="rock56" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 840, 504 ) -[node name="rock57" parent="rocks" index="57" instance=ExtResource( 2 )] - +[node name="rock57" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 840, 312 ) -[node name="rock58" parent="rocks" index="58" instance=ExtResource( 2 )] - +[node name="rock58" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 840, 264 ) -[node name="rock59" parent="rocks" index="59" instance=ExtResource( 2 )] - +[node name="rock59" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 840, 216 ) -[node name="rock60" parent="rocks" index="60" instance=ExtResource( 2 )] - +[node name="rock60" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 840, 120 ) -[node name="rock61" parent="rocks" index="61" instance=ExtResource( 2 )] - +[node name="rock61" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 792, 72 ) -[node name="rock62" parent="rocks" index="62" instance=ExtResource( 2 )] - +[node name="rock62" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 840, 72 ) -[node name="rock63" parent="rocks" index="63" instance=ExtResource( 2 )] - +[node name="rock63" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 936, 216 ) -[node name="rock64" parent="rocks" index="64" instance=ExtResource( 2 )] - +[node name="rock64" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 936, 264 ) -[node name="rock65" parent="rocks" index="65" instance=ExtResource( 2 )] - +[node name="rock65" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 936, 408 ) -[node name="rock66" parent="rocks" index="66" instance=ExtResource( 2 )] - +[node name="rock66" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 888, 456 ) -[node name="rock67" parent="rocks" index="67" instance=ExtResource( 2 )] - +[node name="rock67" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 936, 456 ) -[node name="rock68" parent="rocks" index="68" instance=ExtResource( 2 )] - +[node name="rock68" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 792, 456 ) -[node name="rock69" parent="rocks" index="69" instance=ExtResource( 2 )] - +[node name="rock69" parent="rocks" instance=ExtResource( 2 )] position = Vector2( 840, 456 ) -[node name="players" type="Node2D" parent="." index="3"] +[node name="players" type="Node2D" parent="."] -[node name="score" type="HBoxContainer" parent="." index="4"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="score" type="HBoxContainer" parent="."] margin_right = 1024.0 margin_bottom = 40.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 1 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -alignment = 0 script = ExtResource( 3 ) -[node name="winner" type="Label" parent="." index="5"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="winner" type="Label" parent="."] margin_right = 1031.0 margin_bottom = 617.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 0 custom_fonts/font = SubResource( 1 ) @@ -411,35 +294,15 @@ text = "THE WINNER IS: YOU" align = 1 valign = 1 -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -[node name="exit_game" type="Button" parent="winner" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="exit_game" type="Button" parent="winner"] margin_left = 384.0 margin_top = 408.0 margin_right = 649.0 margin_bottom = 469.0 -rect_pivot_offset = Vector2( 0, 0 ) -focus_mode = 2 -mouse_filter = 0 -mouse_default_cursor_shape = 0 size_flags_horizontal = 2 size_flags_vertical = 2 custom_fonts/font = SubResource( 1 ) -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "EXIT GAME" -flat = false -align = 1 [connection signal="pressed" from="winner/exit_game" to="score" method="_on_exit_game_pressed"] - - diff --git a/networking/multiplayer_pong/ball.gd b/networking/multiplayer_pong/ball.gd index 885a32f1..50b7e12c 100644 --- a/networking/multiplayer_pong/ball.gd +++ b/networking/multiplayer_pong/ball.gd @@ -47,7 +47,7 @@ func _process(delta): get_parent().rpc("update_score", false) rpc("_reset_ball", false) else: - # only the slave will decide when the ball is out in the right side (it's own side) + # only the puppet will decide when the ball is out in the right side (it's own side) # this makes the game playable even if latency is high and ball is going fast # otherwise ball might be out in the other player's screen but not this one diff --git a/networking/multiplayer_pong/ball.png.import b/networking/multiplayer_pong/ball.png.import index 5dee293b..90e1c1f0 100644 --- a/networking/multiplayer_pong/ball.png.import +++ b/networking/multiplayer_pong/ball.png.import @@ -7,16 +7,14 @@ path="res://.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex" [deps] source_file="res://ball.png" -source_md5="4219e9084f5485c8d1812297700f317d" - dest_files=[ "res://.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex" ] -dest_md5="c23684a1fd10063a69ecc18f7ccca4c3" [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 @@ -26,6 +24,7 @@ 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 diff --git a/networking/multiplayer_pong/ball.tscn b/networking/multiplayer_pong/ball.tscn index 70190ffc..a8b53e92 100644 --- a/networking/multiplayer_pong/ball.tscn +++ b/networking/multiplayer_pong/ball.tscn @@ -4,27 +4,14 @@ [ext_resource path="res://ball.png" type="Texture" id=2] [sub_resource type="CircleShape2D" id=1] - -custom_solver_bias = 0.0 radius = 5.11969 [node name="ball" type="Area2D"] - -input_pickable = true -gravity_vec = Vector2( 0, 1 ) -gravity = 98.0 -linear_damp = 0.1 -angular_damp = 1.0 -audio_bus_override = false -audio_bus_name = "Master" script = ExtResource( 1 ) [node name="sprite" type="Sprite" parent="."] - texture = ExtResource( 2 ) [node name="shape" type="CollisionShape2D" parent="."] - shape = SubResource( 1 ) - diff --git a/networking/multiplayer_pong/icon.png.import b/networking/multiplayer_pong/icon.png.import index d09f9c2c..45ee6af7 100644 --- a/networking/multiplayer_pong/icon.png.import +++ b/networking/multiplayer_pong/icon.png.import @@ -7,16 +7,14 @@ path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" [deps] source_file="res://icon.png" -source_md5="9be177e863d37787c0836d64924b3503" - dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] -dest_md5="6339016da0f704252e68ba6dd6477388" [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 @@ -26,6 +24,7 @@ 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 diff --git a/networking/multiplayer_pong/lobby.gd b/networking/multiplayer_pong/lobby.gd index 8e913b12..33d50df6 100644 --- a/networking/multiplayer_pong/lobby.gd +++ b/networking/multiplayer_pong/lobby.gd @@ -5,7 +5,7 @@ const DEFAULT_PORT = 8910 # some random number, pick your port properly #### Network callbacks from SceneTree #### # callback from SceneTree -func _player_connected(id): +func _player_connected(_id): #someone connected, start the game! var pong = load("res://pong.tscn").instance() pong.connect("game_finished", self, "_end_game", [], CONNECT_DEFERRED) # connect deferred so we can safely erase it from the callback @@ -13,7 +13,7 @@ func _player_connected(id): get_tree().get_root().add_child(pong) hide() -func _player_disconnected(id): +func _player_disconnected(_id): if get_tree().is_network_server(): _end_game("Client disconnected") diff --git a/networking/multiplayer_pong/lobby.tscn b/networking/multiplayer_pong/lobby.tscn index 53a03136..a1de8d05 100644 --- a/networking/multiplayer_pong/lobby.tscn +++ b/networking/multiplayer_pong/lobby.tscn @@ -3,188 +3,86 @@ [ext_resource path="res://lobby.gd" type="Script" id=1] [node name="lobby" type="Control"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_right = 40.0 margin_bottom = 40.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 size_flags_horizontal = 2 size_flags_vertical = 2 script = ExtResource( 1 ) [node name="title" type="Label" parent="."] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 210.0 margin_top = 40.0 margin_right = 430.0 margin_bottom = 80.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Multiplayer Pong" align = 1 valign = 1 -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 [node name="panel" type="Panel" parent="."] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 210.0 margin_top = 160.0 margin_right = 430.0 margin_bottom = 270.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 size_flags_horizontal = 2 size_flags_vertical = 2 [node name="address_label" type="Label" parent="panel"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 10.0 margin_top = 10.0 margin_right = 62.0 margin_bottom = 24.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 text = "Address" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 [node name="address" type="LineEdit" parent="panel"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 10.0 margin_top = 30.0 margin_right = 210.0 margin_bottom = 54.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 size_flags_horizontal = 2 size_flags_vertical = 2 text = "127.0.0.1" -expand_to_len = false -focus_mode = 2 -placeholder_alpha = 0.6 -caret_blink = false -caret_blink_speed = 0.65 [node name="host" type="Button" parent="panel"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 10.0 margin_top = 60.0 margin_right = 90.0 margin_bottom = 80.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "Host" -flat = false [node name="join" type="Button" parent="panel"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 130.0 margin_top = 60.0 margin_right = 210.0 margin_bottom = 80.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "Join" -flat = false [node name="status_ok" type="Label" parent="panel"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 10.0 margin_top = 90.0 margin_right = 210.0 margin_bottom = 104.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 custom_colors/font_color = Color( 0, 1, 0.015625, 1 ) align = 1 -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 [node name="status_fail" type="Label" parent="panel"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 10.0 margin_top = 90.0 margin_right = 210.0 margin_bottom = 104.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 custom_colors/font_color = Color( 1, 0, 0, 1 ) align = 1 -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 [connection signal="pressed" from="panel/host" to="." method="_on_host_pressed"] - [connection signal="pressed" from="panel/join" to="." method="_on_join_pressed"] - - diff --git a/networking/multiplayer_pong/paddle.gd b/networking/multiplayer_pong/paddle.gd index a64ae820..18dedd85 100644 --- a/networking/multiplayer_pong/paddle.gd +++ b/networking/multiplayer_pong/paddle.gd @@ -10,7 +10,7 @@ var you_hidden = false onready var screen_size = get_viewport_rect().size #synchronize position and speed to the other peers -slave func set_pos_and_motion(p_pos, p_motion): +puppet func set_pos_and_motion(p_pos, p_motion): position = p_pos motion = p_motion diff --git a/networking/multiplayer_pong/paddle.png.import b/networking/multiplayer_pong/paddle.png.import index bad21c4c..4ee95b53 100644 --- a/networking/multiplayer_pong/paddle.png.import +++ b/networking/multiplayer_pong/paddle.png.import @@ -7,16 +7,14 @@ path="res://.import/paddle.png-0e798fb0912613386507c9904d5cc01a.stex" [deps] source_file="res://paddle.png" -source_md5="946d462749230c01dcc1c69371ed119b" - dest_files=[ "res://.import/paddle.png-0e798fb0912613386507c9904d5cc01a.stex" ] -dest_md5="ed1295225d73ba25982010781ff03d09" [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 @@ -26,6 +24,7 @@ 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 diff --git a/networking/multiplayer_pong/paddle.tscn b/networking/multiplayer_pong/paddle.tscn index 5522411c..57f35d98 100644 --- a/networking/multiplayer_pong/paddle.tscn +++ b/networking/multiplayer_pong/paddle.tscn @@ -4,52 +4,26 @@ [ext_resource path="res://paddle.png" type="Texture" id=2] [sub_resource type="CapsuleShape2D" id=1] - -custom_solver_bias = 0.0 radius = 4.78568 height = 23.6064 [node name="paddle" type="Area2D"] - -input_pickable = true -gravity_vec = Vector2( 0, 1 ) -gravity = 98.0 -linear_damp = 0.1 -angular_damp = 1.0 -audio_bus_override = false -audio_bus_name = "Master" script = ExtResource( 1 ) -left = false [node name="sprite" type="Sprite" parent="."] - texture = ExtResource( 2 ) [node name="shape" type="CollisionShape2D" parent="."] - shape = SubResource( 1 ) [node name="you" type="Label" parent="."] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = -26.0 margin_top = -33.0 margin_right = 27.0 margin_bottom = -19.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 text = "You" align = 1 -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 [connection signal="area_entered" from="." to="." method="_on_paddle_area_enter"] - - diff --git a/networking/multiplayer_pong/pong.gd b/networking/multiplayer_pong/pong.gd index 564da26a..19391bf4 100644 --- a/networking/multiplayer_pong/pong.gd +++ b/networking/multiplayer_pong/pong.gd @@ -34,7 +34,7 @@ func _on_exit_game_pressed(): func _ready(): # by default, all nodes in server inherit from master - # while all nodes in clients inherit from slave + # while all nodes in clients inherit from puppet if get_tree().is_network_server(): #if in the server, get control of player 2 to the other peeer, this function is tree recursive by default get_node("player2").set_network_master(get_tree().get_network_connected_peers()[0]) diff --git a/networking/multiplayer_pong/pong.tscn b/networking/multiplayer_pong/pong.tscn index 24a7b650..ba99a818 100644 --- a/networking/multiplayer_pong/pong.tscn +++ b/networking/multiplayer_pong/pong.tscn @@ -6,143 +6,79 @@ [ext_resource path="res://ball.tscn" type="PackedScene" id=4] [node name="pong" type="Node2D"] - script = ExtResource( 1 ) [node name="separator" type="Sprite" parent="."] - position = Vector2( 320, 200 ) texture = ExtResource( 2 ) [node name="player1" parent="." instance=ExtResource( 3 )] - position = Vector2( 32.49, 188.622 ) -[node name="sprite" parent="player1"] - +[node name="sprite" parent="player1" index="0"] self_modulate = Color( 1, 0, 0.960938, 1 ) [node name="player2" parent="." instance=ExtResource( 3 )] - position = Vector2( 608.88, 188.622 ) -[node name="sprite" parent="player2"] - +[node name="sprite" parent="player2" index="0"] self_modulate = Color( 0, 0.929688, 1, 1 ) [node name="ball" parent="." instance=ExtResource( 4 )] - position = Vector2( 320.387, 189.525 ) [node name="score_left" type="Label" parent="."] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 240.0 margin_top = 10.0 margin_right = 280.0 margin_bottom = 30.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 text = "0" align = 1 -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 [node name="score_right" type="Label" parent="."] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 360.0 margin_top = 10.0 margin_right = 400.0 margin_bottom = 30.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 text = "0" align = 1 -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 [node name="winner_left" type="Label" parent="."] - visible = false -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 190.0 margin_top = 170.0 margin_right = 267.0 margin_bottom = 184.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 text = "The Winner!" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 [node name="winner_right" type="Label" parent="."] - visible = false -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 380.0 margin_top = 170.0 margin_right = 457.0 margin_bottom = 184.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 2 size_flags_horizontal = 2 size_flags_vertical = 0 text = "The Winner!" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 [node name="exit_game" type="Button" parent="."] - visible = false -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 margin_left = 280.0 margin_top = 340.0 margin_right = 360.0 margin_bottom = 360.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 size_flags_horizontal = 2 size_flags_vertical = 2 -toggle_mode = false -enabled_focus_mode = 2 -shortcut = null -group = null text = "Exit Game" -flat = false [connection signal="pressed" from="exit_game" to="." method="_on_exit_game_pressed"] - [editable path="player1"] + [editable path="player2"] diff --git a/networking/multiplayer_pong/project.godot b/networking/multiplayer_pong/project.godot index 5d740665..4fa5561e 100644 --- a/networking/multiplayer_pong/project.godot +++ b/networking/multiplayer_pong/project.godot @@ -6,7 +6,12 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=3 +config_version=4 + +_global_script_classes=[ ] +_global_script_class_icons={ + +} [application] @@ -14,6 +19,10 @@ config/name="Pong Multiplayer" run/main_scene="res://lobby.tscn" config/icon="res://icon.png" +[debug] + +gdscript/warnings/return_value_discarded=false + [display] window/size/width=640 @@ -26,10 +35,16 @@ singletons=[ ] [input] -move_down=[ 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) +move_down={ +"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":16777234,"unicode":0,"echo":false,"script":null) ] -move_up=[ 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) +} +move_up={ +"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":16777232,"unicode":0,"echo":false,"script":null) ] +} [rendering] diff --git a/networking/multiplayer_pong/separator.png.import b/networking/multiplayer_pong/separator.png.import index 6b9b1ad4..c4710ca5 100644 --- a/networking/multiplayer_pong/separator.png.import +++ b/networking/multiplayer_pong/separator.png.import @@ -7,16 +7,14 @@ path="res://.import/separator.png-f981c8489b9148e2e1dc63398273da74.stex" [deps] source_file="res://separator.png" -source_md5="b6234b89455156532bbe1256249fcfd4" - dest_files=[ "res://.import/separator.png-f981c8489b9148e2e1dc63398273da74.stex" ] -dest_md5="6e27251839594842494c6cd51e3b86cb" [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 @@ -26,6 +24,7 @@ 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 diff --git a/viewport/2d_in_3d/2D_in_3D.tscn b/viewport/2d_in_3d/2D_in_3D.tscn index 3de15302..99ccbc78 100644 --- a/viewport/2d_in_3d/2D_in_3D.tscn +++ b/viewport/2d_in_3d/2D_in_3D.tscn @@ -9,12 +9,7 @@ [sub_resource type="PlaneMesh" id=1] -size = Vector2( 2, 2 ) -subdivide_width = 0 -subdivide_depth = 0 - [sub_resource type="GDScript" id=2] - script/source = "tool extends Object func e(): @@ -22,80 +17,18 @@ func e(): " [sub_resource type="SpatialMaterial" id=3] - -render_priority = 0 -flags_transparent = false -flags_unshaded = false -flags_vertex_lighting = false -flags_no_depth_test = false -flags_use_point_size = false -flags_world_triplanar = false -flags_fixed_size = false -flags_albedo_tex_force_srgb = false -vertex_color_use_as_albedo = false -vertex_color_is_srgb = false -params_diffuse_mode = 0 -params_specular_mode = 0 -params_blend_mode = 0 -params_cull_mode = 0 -params_depth_draw_mode = 0 -params_line_width = 1.0 -params_point_size = 1.0 -params_billboard_mode = 0 -params_grow = false -params_use_alpha_scissor = false -albedo_color = Color( 1, 1, 1, 1 ) -metallic = 0.0 -metallic_specular = 0.5 -metallic_texture_channel = 0 roughness = 0.7 -roughness_texture_channel = 0 -emission_enabled = false -normal_enabled = false -rim_enabled = false -clearcoat_enabled = false -anisotropy_enabled = false -ao_enabled = false -depth_enabled = false -subsurf_scatter_enabled = false -transmission_enabled = false -refraction_enabled = false -detail_enabled = false -uv1_scale = Vector3( 1, 1, 1 ) -uv1_offset = Vector3( 0, 0, 0 ) -uv1_triplanar = false -uv1_triplanar_sharpness = 1.0 -uv2_scale = Vector3( 1, 1, 1 ) -uv2_offset = Vector3( 0, 0, 0 ) -uv2_triplanar = false -uv2_triplanar_sharpness = 1.0 -proximity_fade_enable = false -distance_fade_enable = false script = SubResource( 2 ) -_sections_unfolded = [ "Roughness" ] [sub_resource type="ProceduralSky" id=4] - -radiance_size = 4 sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 ) sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 ) sky_curve = 0.25 -sky_energy = 1.0 ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 ) ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 ) ground_curve = 0.01 -ground_energy = 1.0 -sun_color = Color( 1, 1, 1, 1 ) -sun_latitude = 35.0 -sun_longitude = 0.0 -sun_angle_min = 1.0 -sun_angle_max = 100.0 -sun_curve = 0.05 -sun_energy = 16.0 -texture_size = 2 [sub_resource type="GDScript" id=5] - script/source = "tool extends Object func e(): @@ -103,147 +36,21 @@ func e(): " [sub_resource type="Environment" id=6] - background_mode = 2 background_sky = SubResource( 4 ) -background_sky_custom_fov = 0.0 background_color = Color( 0.445312, 0.445312, 0.445312, 1 ) -background_energy = 1.0 -background_canvas_max_layer = 0 ambient_light_color = Color( 0.511719, 0.511719, 0.511719, 1 ) -ambient_light_energy = 1.0 ambient_light_sky_contribution = 0.4 -fog_enabled = false -fog_color = Color( 0.5, 0.6, 0.7, 1 ) -fog_sun_color = Color( 1, 0.9, 0.7, 1 ) -fog_sun_amount = 0.0 -fog_depth_enabled = true -fog_depth_begin = 10.0 -fog_depth_curve = 1.0 -fog_transmit_enabled = false -fog_transmit_curve = 1.0 -fog_height_enabled = false -fog_height_min = 0.0 -fog_height_max = 100.0 -fog_height_curve = 1.0 -tonemap_mode = 0 -tonemap_exposure = 1.0 -tonemap_white = 1.0 -auto_exposure_enabled = false -auto_exposure_scale = 0.4 -auto_exposure_min_luma = 0.05 -auto_exposure_max_luma = 8.0 -auto_exposure_speed = 0.5 -ss_reflections_enabled = false -ss_reflections_max_steps = 64 -ss_reflections_fade_in = 0.15 -ss_reflections_fade_out = 2.0 -ss_reflections_depth_tolerance = 0.2 -ss_reflections_roughness = true -ssao_enabled = false -ssao_radius = 1.0 -ssao_intensity = 1.0 -ssao_radius2 = 0.0 -ssao_intensity2 = 1.0 -ssao_bias = 0.01 -ssao_light_affect = 0.0 -ssao_color = Color( 0, 0, 0, 1 ) -ssao_quality = 0 ssao_blur = 1 -ssao_edge_sharpness = 4.0 -dof_blur_far_enabled = false -dof_blur_far_distance = 10.0 -dof_blur_far_transition = 5.0 -dof_blur_far_amount = 0.1 -dof_blur_far_quality = 1 -dof_blur_near_enabled = false -dof_blur_near_distance = 2.0 -dof_blur_near_transition = 1.0 -dof_blur_near_amount = 0.1 -dof_blur_near_quality = 1 -glow_enabled = false -glow_levels/1 = false -glow_levels/2 = false -glow_levels/3 = true -glow_levels/4 = false -glow_levels/5 = true -glow_levels/6 = false -glow_levels/7 = false -glow_intensity = 0.8 -glow_strength = 1.0 -glow_bloom = 0.0 -glow_blend_mode = 2 -glow_hdr_threshold = 1.0 -glow_hdr_scale = 2.0 -glow_bicubic_upscale = false -adjustment_enabled = false -adjustment_brightness = 1.0 -adjustment_contrast = 1.0 -adjustment_saturation = 1.0 script = SubResource( 5 ) -_sections_unfolded = [ "Ambient Light", "Background" ] [sub_resource type="CubeMesh" id=7] -size = Vector3( 2, 2, 2 ) -subdivide_width = 0 -subdivide_height = 0 -subdivide_depth = 0 - [sub_resource type="SpatialMaterial" id=8] - -render_priority = 0 -flags_transparent = false -flags_unshaded = false -flags_vertex_lighting = false -flags_no_depth_test = false -flags_use_point_size = false -flags_world_triplanar = false -flags_fixed_size = false -flags_albedo_tex_force_srgb = false -vertex_color_use_as_albedo = false -vertex_color_is_srgb = false -params_diffuse_mode = 0 -params_specular_mode = 0 -params_blend_mode = 0 -params_cull_mode = 0 -params_depth_draw_mode = 0 -params_line_width = 1.0 -params_point_size = 1.0 -params_billboard_mode = 0 -params_grow = false -params_use_alpha_scissor = false albedo_color = Color( 0.652344, 0.652344, 0.652344, 1 ) -metallic = 0.0 -metallic_specular = 0.5 -metallic_texture_channel = 0 roughness = 0.0 -roughness_texture_channel = 0 -emission_enabled = false -normal_enabled = false -rim_enabled = false -clearcoat_enabled = false -anisotropy_enabled = false -ao_enabled = false -depth_enabled = false -subsurf_scatter_enabled = false -transmission_enabled = false -refraction_enabled = false -detail_enabled = false -uv1_scale = Vector3( 1, 1, 1 ) -uv1_offset = Vector3( 0, 0, 0 ) -uv1_triplanar = false -uv1_triplanar_sharpness = 1.0 -uv2_scale = Vector3( 1, 1, 1 ) -uv2_offset = Vector3( 0, 0, 0 ) -uv2_triplanar = false -uv2_triplanar_sharpness = 1.0 -proximity_fade_enable = false -distance_fade_enable = false -_sections_unfolded = [ "Albedo" ] [sub_resource type="GDScript" id=9] - script/source = "tool extends Object func e(): @@ -251,7 +58,6 @@ func e(): " [sub_resource type="GDScript" id=10] - script/source = "tool extends Object func e(): @@ -259,7 +65,6 @@ func e(): " [sub_resource type="GDScript" id=11] - script/source = "tool extends Object func e(): @@ -267,353 +72,115 @@ func e(): " [sub_resource type="CubeMesh" id=12] - size = Vector3( 1.1, 0.8, 0.1 ) -subdivide_width = 0 -subdivide_height = 0 -subdivide_depth = 0 script = SubResource( 11 ) [sub_resource type="SpatialMaterial" id=13] -render_priority = 0 -flags_transparent = false -flags_unshaded = false -flags_vertex_lighting = false -flags_no_depth_test = false -flags_use_point_size = false -flags_world_triplanar = false -flags_fixed_size = false -flags_albedo_tex_force_srgb = false -vertex_color_use_as_albedo = false -vertex_color_is_srgb = false -params_diffuse_mode = 0 -params_specular_mode = 0 -params_blend_mode = 0 -params_cull_mode = 0 -params_depth_draw_mode = 0 -params_line_width = 1.0 -params_point_size = 1.0 -params_billboard_mode = 0 -params_grow = false -params_use_alpha_scissor = false -albedo_color = Color( 1, 1, 1, 1 ) -metallic = 0.0 -metallic_specular = 0.5 -metallic_texture_channel = 0 -roughness = 1.0 -roughness_texture_channel = 0 -emission_enabled = false -normal_enabled = false -rim_enabled = false -clearcoat_enabled = false -anisotropy_enabled = false -ao_enabled = false -depth_enabled = false -subsurf_scatter_enabled = false -transmission_enabled = false -refraction_enabled = false -detail_enabled = false -uv1_scale = Vector3( 1, 1, 1 ) -uv1_offset = Vector3( 0, 0, 0 ) -uv1_triplanar = false -uv1_triplanar_sharpness = 1.0 -uv2_scale = Vector3( 1, 1, 1 ) -uv2_offset = Vector3( 0, 0, 0 ) -uv2_triplanar = false -uv2_triplanar_sharpness = 1.0 -proximity_fade_enable = false -distance_fade_enable = false - -[node name="2D_in_3D" type="Spatial" index="0"] - +[node name="2D_in_3D" type="Spatial"] script = ExtResource( 1 ) -[node name="Camera" type="Camera" parent="." index="0"] - +[node name="Camera" type="Camera" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.26906, -1.2526 ) -keep_aspect = 1 -cull_mask = 1048575 -environment = null -h_offset = 0.0 -v_offset = 0.0 -doppler_tracking = 0 -projection = 0 -current = false fov = 74.0 -size = 1.0 near = 0.1 -far = 100.0 - -[node name="Floor" type="MeshInstance" parent="." index="1"] +[node name="Floor" type="MeshInstance" parent="."] transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, -1, -4 ) -layers = 1 -material_override = null -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 mesh = SubResource( 1 ) -skeleton = NodePath("..") material/0 = SubResource( 3 ) -_sections_unfolded = [ "Geometry", "Transform", "material" ] - -[node name="WorldEnvironment" type="WorldEnvironment" parent="." index="2"] +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource( 6 ) -[node name="Pillar" type="Spatial" parent="." index="3"] - +[node name="Pillar" type="Spatial" parent="."] editor/display_folded = true transform = Transform( 0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, -3, -0.255171, -5 ) -_sections_unfolded = [ "Transform" ] - -[node name="Pillar_bottom" type="MeshInstance" parent="Pillar" index="0"] +[node name="Pillar_bottom" type="MeshInstance" parent="Pillar"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.242229, 0 ) -layers = 1 -material_override = null -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 mesh = SubResource( 7 ) -skeleton = NodePath("..") material/0 = SubResource( 8 ) script = SubResource( 9 ) -_sections_unfolded = [ "Transform", "material" ] - -[node name="Pillar_top" type="MeshInstance" parent="Pillar" index="1"] +[node name="Pillar_top" type="MeshInstance" parent="Pillar"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5.48747, 0 ) -layers = 1 -material_override = null -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 mesh = SubResource( 7 ) -skeleton = NodePath("..") material/0 = SubResource( 8 ) script = SubResource( 9 ) -_sections_unfolded = [ "Transform", "material" ] - -[node name="Pillar_middle" type="MeshInstance" parent="Pillar" index="2"] +[node name="Pillar_middle" type="MeshInstance" parent="Pillar"] transform = Transform( 0.7, 0, 0, 0, 2, 0, 0, 0, 0.7, 0, 2.65279, 0 ) -layers = 1 -material_override = null -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 mesh = SubResource( 7 ) -skeleton = NodePath("..") material/0 = SubResource( 8 ) script = SubResource( 10 ) -_sections_unfolded = [ "Transform", "material" ] - -[node name="Pillar2" type="Spatial" parent="." index="4"] +[node name="Pillar2" type="Spatial" parent="."] editor/display_folded = true transform = Transform( 0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, 3, -0.255171, -5 ) -_sections_unfolded = [ "Transform" ] - -[node name="Pillar_bottom" type="MeshInstance" parent="Pillar2" index="0"] +[node name="Pillar_bottom" type="MeshInstance" parent="Pillar2"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.242229, 0 ) -layers = 1 -material_override = null -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 mesh = SubResource( 7 ) -skeleton = NodePath("..") material/0 = SubResource( 8 ) script = SubResource( 9 ) -_sections_unfolded = [ "Transform", "material" ] - -[node name="Pillar_top" type="MeshInstance" parent="Pillar2" index="1"] +[node name="Pillar_top" type="MeshInstance" parent="Pillar2"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5.48747, 0 ) -layers = 1 -material_override = null -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 mesh = SubResource( 7 ) -skeleton = NodePath("..") material/0 = SubResource( 8 ) script = SubResource( 9 ) -_sections_unfolded = [ "Transform", "material" ] - -[node name="Pillar_middle" type="MeshInstance" parent="Pillar2" index="2"] +[node name="Pillar_middle" type="MeshInstance" parent="Pillar2"] transform = Transform( 0.7, 0, 0, 0, 2, 0, 0, 0, 0.7, 0, 2.65279, 0 ) -layers = 1 -material_override = null -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 mesh = SubResource( 7 ) -skeleton = NodePath("..") material/0 = SubResource( 8 ) script = SubResource( 10 ) -_sections_unfolded = [ "Transform", "material" ] - -[node name="Pillar_back" type="MeshInstance" parent="." index="5"] +[node name="Pillar_back" type="MeshInstance" parent="."] transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 1.22418, -5.48399 ) -layers = 1 -material_override = null -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 mesh = SubResource( 12 ) -skeleton = NodePath("..") material/0 = SubResource( 8 ) -_sections_unfolded = [ "Transform", "material" ] - -[node name="DirectionalLight" type="DirectionalLight" parent="." index="6"] +[node name="DirectionalLight" type="DirectionalLight" parent="."] transform = Transform( 0.623013, -0.733525, 0.271654, 0.321394, 0.55667, 0.766044, -0.713134, -0.389948, 0.582563, 9.02684, 0, 1.28613 ) -layers = 1 -light_color = Color( 1, 1, 1, 1 ) -light_energy = 1.0 -light_indirect_energy = 1.0 -light_negative = false -light_specular = 0.5 -light_bake_mode = 1 -light_cull_mask = -1 shadow_enabled = true -shadow_color = Color( 0, 0, 0, 1 ) -shadow_bias = 0.1 -shadow_contact = 0.0 -shadow_reverse_cull_face = false -editor_only = false -directional_shadow_mode = 2 -directional_shadow_split_1 = 0.1 -directional_shadow_split_2 = 0.2 -directional_shadow_split_3 = 0.5 directional_shadow_blend_splits = true directional_shadow_normal_bias = 0.2 -directional_shadow_bias_split_scale = 0.25 -directional_shadow_depth_range = 0 -directional_shadow_max_distance = 200.0 -_sections_unfolded = [ "Directional Shadow" ] - -[node name="Viewport_quad" type="MeshInstance" parent="." index="7"] +[node name="Viewport_quad" type="MeshInstance" parent="."] transform = Transform( -2, 8.74228e-08, 0, 7.64274e-15, 4.37114e-08, 1.333, 1.74846e-07, 1, -5.82673e-08, 0, 1.20996, -5.25875 ) -layers = 1 material_override = SubResource( 13 ) -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 mesh = SubResource( 1 ) -skeleton = NodePath("..") material/0 = null -_sections_unfolded = [ "Geometry", "Transform", "material" ] -[node name="Viewport" type="Viewport" parent="." index="8"] - -arvr = false +[node name="Viewport" type="Viewport" parent="."] size = Vector2( 600, 400 ) -own_world = false -world = null -transparent_bg = false -msaa = 0 hdr = false -disable_3d = false usage = 0 -debug_draw = 0 render_target_v_flip = true -render_target_clear_mode = 0 -render_target_update_mode = 2 -audio_listener_enable_2d = false -audio_listener_enable_3d = false -physics_object_picking = false -gui_disable_input = false -gui_snap_controls_to_pixels = true -shadow_atlas_size = 0 -shadow_atlas_quad_0 = 2 -shadow_atlas_quad_1 = 2 -shadow_atlas_quad_2 = 3 -shadow_atlas_quad_3 = 4 -_sections_unfolded = [ "Render Target" ] - -[node name="2D_World" type="Node2D" parent="Viewport" index="0"] +[node name="2D_World" type="Node2D" parent="Viewport"] editor/display_folded = true script = ExtResource( 2 ) -[node name="BG" type="Panel" parent="Viewport/2D_World" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 +[node name="BG" type="Panel" parent="Viewport/2D_World"] margin_right = 600.0 margin_bottom = 400.0 -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 0 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 1 - -[node name="ball" type="Sprite" parent="Viewport/2D_World" index="1"] +[node name="ball" type="Sprite" parent="Viewport/2D_World"] position = Vector2( 300, 200 ) texture = ExtResource( 3 ) -_sections_unfolded = [ "Transform" ] - -[node name="left" type="Sprite" parent="Viewport/2D_World" index="2"] +[node name="left" type="Sprite" parent="Viewport/2D_World"] position = Vector2( 20, 200 ) texture = ExtResource( 4 ) -_sections_unfolded = [ "Transform" ] - -[node name="right" type="Sprite" parent="Viewport/2D_World" index="3"] +[node name="right" type="Sprite" parent="Viewport/2D_World"] position = Vector2( 580, 200 ) texture = ExtResource( 5 ) -_sections_unfolded = [ "Transform" ] - -[node name="separator" type="Sprite" parent="Viewport/2D_World" index="4"] +[node name="separator" type="Sprite" parent="Viewport/2D_World"] position = Vector2( 298, 200 ) texture = ExtResource( 6 ) -_sections_unfolded = [ "Transform" ] + diff --git a/viewport/2d_in_3d/ball.png.import b/viewport/2d_in_3d/ball.png.import index 6485817e..0f50261c 100644 --- a/viewport/2d_in_3d/ball.png.import +++ b/viewport/2d_in_3d/ball.png.import @@ -7,16 +7,14 @@ path="res://.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex" [deps] source_file="res://ball.png" -source_md5="4219e9084f5485c8d1812297700f317d" - dest_files=[ "res://.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex" ] -dest_md5="91f57141ffceed4f9c2aadd8d8fd5ca0" [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=false @@ -26,6 +24,7 @@ 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 diff --git a/viewport/2d_in_3d/default_env.tres b/viewport/2d_in_3d/default_env.tres index 2aeff64a..02de4365 100644 --- a/viewport/2d_in_3d/default_env.tres +++ b/viewport/2d_in_3d/default_env.tres @@ -1,101 +1,15 @@ [gd_resource type="Environment" load_steps=2 format=2] [sub_resource type="ProceduralSky" id=1] - -radiance_size = 4 sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 ) sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 ) sky_curve = 0.25 -sky_energy = 1.0 ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 ) ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 ) ground_curve = 0.01 -ground_energy = 1.0 -sun_color = Color( 1, 1, 1, 1 ) -sun_latitude = 35.0 -sun_longitude = 0.0 -sun_angle_min = 1.0 -sun_angle_max = 100.0 -sun_curve = 0.05 -sun_energy = 16.0 -texture_size = 2 [resource] - background_mode = 2 background_sky = SubResource( 1 ) -background_sky_custom_fov = 0.0 -background_color = Color( 0, 0, 0, 1 ) -background_energy = 1.0 -background_canvas_max_layer = 0 -ambient_light_color = Color( 0, 0, 0, 1 ) -ambient_light_energy = 1.0 -ambient_light_sky_contribution = 1.0 -fog_enabled = false -fog_color = Color( 0.5, 0.6, 0.7, 1 ) -fog_sun_color = Color( 1, 0.9, 0.7, 1 ) -fog_sun_amount = 0.0 -fog_depth_enabled = true -fog_depth_begin = 10.0 -fog_depth_curve = 1.0 -fog_transmit_enabled = false -fog_transmit_curve = 1.0 -fog_height_enabled = false -fog_height_min = 0.0 -fog_height_max = 100.0 -fog_height_curve = 1.0 -tonemap_mode = 0 -tonemap_exposure = 1.0 -tonemap_white = 1.0 -auto_exposure_enabled = false -auto_exposure_scale = 0.4 -auto_exposure_min_luma = 0.05 -auto_exposure_max_luma = 8.0 -auto_exposure_speed = 0.5 -ss_reflections_enabled = false -ss_reflections_max_steps = 64 -ss_reflections_fade_in = 0.15 -ss_reflections_fade_out = 2.0 -ss_reflections_depth_tolerance = 0.2 -ss_reflections_roughness = true -ssao_enabled = false -ssao_radius = 1.0 -ssao_intensity = 1.0 -ssao_radius2 = 0.0 -ssao_intensity2 = 1.0 -ssao_bias = 0.01 -ssao_light_affect = 0.0 -ssao_color = Color( 0, 0, 0, 1 ) -ssao_quality = 0 ssao_blur = 1 -ssao_edge_sharpness = 4.0 -dof_blur_far_enabled = false -dof_blur_far_distance = 10.0 -dof_blur_far_transition = 5.0 -dof_blur_far_amount = 0.1 -dof_blur_far_quality = 1 -dof_blur_near_enabled = false -dof_blur_near_distance = 2.0 -dof_blur_near_transition = 1.0 -dof_blur_near_amount = 0.1 -dof_blur_near_quality = 1 -glow_enabled = false -glow_levels/1 = false -glow_levels/2 = false -glow_levels/3 = true -glow_levels/4 = false -glow_levels/5 = true -glow_levels/6 = false -glow_levels/7 = false -glow_intensity = 0.8 -glow_strength = 1.0 -glow_bloom = 0.0 -glow_blend_mode = 2 -glow_hdr_threshold = 1.0 -glow_hdr_scale = 2.0 -glow_bicubic_upscale = false -adjustment_enabled = false -adjustment_brightness = 1.0 -adjustment_contrast = 1.0 -adjustment_saturation = 1.0 diff --git a/viewport/2d_in_3d/icon.png.import b/viewport/2d_in_3d/icon.png.import index ca809504..45ee6af7 100644 --- a/viewport/2d_in_3d/icon.png.import +++ b/viewport/2d_in_3d/icon.png.import @@ -7,16 +7,14 @@ path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" [deps] source_file="res://icon.png" -source_md5="e7ac148f851212c3a05eef07783e1c0f" - dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] -dest_md5="52b37083b9086ccbd84d6c0c418662ad" [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 @@ -26,6 +24,7 @@ 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 diff --git a/viewport/2d_in_3d/left_pallete.png.import b/viewport/2d_in_3d/left_pallete.png.import index d480098b..ea713f99 100644 --- a/viewport/2d_in_3d/left_pallete.png.import +++ b/viewport/2d_in_3d/left_pallete.png.import @@ -7,16 +7,14 @@ path="res://.import/left_pallete.png-bc33611074a0f886142e37c77bd2545a.stex" [deps] source_file="res://left_pallete.png" -source_md5="df76627349499ad47ebf48a7ca947cca" - dest_files=[ "res://.import/left_pallete.png-bc33611074a0f886142e37c77bd2545a.stex" ] -dest_md5="d6c1a2e71044d865ecf599009c3535f9" [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=false @@ -26,6 +24,7 @@ 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 diff --git a/viewport/2d_in_3d/project.godot b/viewport/2d_in_3d/project.godot index b83a3bac..f9d990fc 100644 --- a/viewport/2d_in_3d/project.godot +++ b/viewport/2d_in_3d/project.godot @@ -6,7 +6,12 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=3 +config_version=4 + +_global_script_classes=[ ] +_global_script_class_icons={ + +} [application] @@ -20,14 +25,26 @@ singletons=[ ] [input] -left_move_up=[ 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) +left_move_up={ +"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) ] -left_move_down=[ 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) +} +left_move_down={ +"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) ] -right_move_up=[ 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) +} +right_move_up={ +"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":16777232,"unicode":0,"echo":false,"script":null) ] -right_move_down=[ 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) +} +right_move_down={ +"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":16777234,"unicode":0,"echo":false,"script":null) ] +} [rendering] diff --git a/viewport/2d_in_3d/right_pallete.png.import b/viewport/2d_in_3d/right_pallete.png.import index 5b723ebb..085342db 100644 --- a/viewport/2d_in_3d/right_pallete.png.import +++ b/viewport/2d_in_3d/right_pallete.png.import @@ -7,16 +7,14 @@ path="res://.import/right_pallete.png-fc6e4a6a7c8197834656482b94708e47.stex" [deps] source_file="res://right_pallete.png" -source_md5="d46f647d3f045dbee4d786089c309868" - dest_files=[ "res://.import/right_pallete.png-fc6e4a6a7c8197834656482b94708e47.stex" ] -dest_md5="7117a0b411d33197a041e42b2248a0fb" [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=false @@ -26,6 +24,7 @@ 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 diff --git a/viewport/2d_in_3d/separator.png.import b/viewport/2d_in_3d/separator.png.import index 65e5412d..bbec42ca 100644 --- a/viewport/2d_in_3d/separator.png.import +++ b/viewport/2d_in_3d/separator.png.import @@ -7,16 +7,14 @@ path="res://.import/separator.png-f981c8489b9148e2e1dc63398273da74.stex" [deps] source_file="res://separator.png" -source_md5="b6234b89455156532bbe1256249fcfd4" - dest_files=[ "res://.import/separator.png-f981c8489b9148e2e1dc63398273da74.stex" ] -dest_md5="c0b4370815bb5757200fc92c71e46313" [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=false @@ -26,6 +24,7 @@ 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 diff --git a/viewport/3d_in_2d/3D_in_2D.tscn b/viewport/3d_in_2d/3D_in_2D.tscn index 26b53452..db006fdd 100644 --- a/viewport/3d_in_2d/3D_in_2D.tscn +++ b/viewport/3d_in_2d/3D_in_2D.tscn @@ -4,77 +4,31 @@ [ext_resource path="res://robot_demo.png" type="Texture" id=2] [ext_resource path="res://player.scn" type="PackedScene" id=3] -[node name="3D_in_2D" type="Node2D" index="0"] - +[node name="3D_in_2D" type="Node2D"] script = ExtResource( 1 ) -[node name="Sprite" type="Sprite" parent="." index="0"] - +[node name="Sprite" type="Sprite" parent="."] position = Vector2( 339.942, 311.204 ) scale = Vector2( 3, 3 ) texture = ExtResource( 2 ) vframes = 2 hframes = 16 frame = 4 -_sections_unfolded = [ "Animation", "Transform" ] - -[node name="Viewport_Sprite" type="Sprite" parent="." index="1"] +[node name="Viewport_Sprite" type="Sprite" parent="."] position = Vector2( 600, 320 ) rotation = 3.14159 -_sections_unfolded = [ "Transform" ] -[node name="Viewport" type="Viewport" parent="." index="2"] - -arvr = false +[node name="Viewport" type="Viewport" parent="."] size = Vector2( 300, 300 ) own_world = true -world = null transparent_bg = true -msaa = 0 hdr = false -disable_3d = false -usage = 2 -debug_draw = 0 -render_target_v_flip = false -render_target_clear_mode = 0 -render_target_update_mode = 2 -audio_listener_enable_2d = false -audio_listener_enable_3d = false -physics_object_picking = false -gui_disable_input = false -gui_snap_controls_to_pixels = true -shadow_atlas_size = 0 -shadow_atlas_quad_0 = 2 -shadow_atlas_quad_1 = 2 -shadow_atlas_quad_2 = 3 -shadow_atlas_quad_3 = 4 -_sections_unfolded = [ "Rendering" ] -[node name="player" parent="Viewport" index="0" instance=ExtResource( 3 )] - -axis_lock_linear_x = false -axis_lock_linear_y = false -axis_lock_linear_z = false -axis_lock_angular_x = false -axis_lock_angular_y = false -axis_lock_angular_z = false +[node name="player" parent="Viewport" instance=ExtResource( 3 )] [node name="Camera" parent="Viewport/player" index="1"] - -doppler_tracking = 0 current = true -size = 1.0 - -[node name="OmniLight" parent="Viewport/player" index="2"] - -light_indirect_energy = 1.0 -light_bake_mode = 1 - -[node name="OmniLight2" parent="Viewport/player" index="3"] - -light_indirect_energy = 1.0 -light_bake_mode = 1 [editable path="Viewport/player"] diff --git a/viewport/3d_in_2d/default_env.tres b/viewport/3d_in_2d/default_env.tres index e47e9993..ff3a41bd 100644 --- a/viewport/3d_in_2d/default_env.tres +++ b/viewport/3d_in_2d/default_env.tres @@ -1,103 +1,15 @@ [gd_resource type="Environment" load_steps=2 format=2] [sub_resource type="ProceduralSky" id=1] - -radiance_size = 4 sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 ) sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 ) sky_curve = 0.25 -sky_energy = 1.0 ground_bottom_color = Color( 0.34375, 0.287406, 0.167847, 1 ) ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 ) ground_curve = 0.01 -ground_energy = 1.0 -sun_color = Color( 1, 1, 1, 1 ) -sun_latitude = 35.0 -sun_longitude = 0.0 -sun_angle_min = 1.0 -sun_angle_max = 100.0 -sun_curve = 0.05 -sun_energy = 16.0 -texture_size = 2 -_sections_unfolded = [ "Ground" ] [resource] - background_mode = 2 background_sky = SubResource( 1 ) -background_sky_custom_fov = 0.0 -background_color = Color( 0, 0, 0, 1 ) -background_energy = 1.0 -background_canvas_max_layer = 0 -ambient_light_color = Color( 0, 0, 0, 1 ) -ambient_light_energy = 1.0 -ambient_light_sky_contribution = 1.0 -fog_enabled = false -fog_color = Color( 0.5, 0.6, 0.7, 1 ) -fog_sun_color = Color( 1, 0.9, 0.7, 1 ) -fog_sun_amount = 0.0 -fog_depth_enabled = true -fog_depth_begin = 10.0 -fog_depth_curve = 1.0 -fog_transmit_enabled = false -fog_transmit_curve = 1.0 -fog_height_enabled = false -fog_height_min = 0.0 -fog_height_max = 100.0 -fog_height_curve = 1.0 -tonemap_mode = 0 -tonemap_exposure = 1.0 -tonemap_white = 1.0 -auto_exposure_enabled = false -auto_exposure_scale = 0.4 -auto_exposure_min_luma = 0.05 -auto_exposure_max_luma = 8.0 -auto_exposure_speed = 0.5 -ss_reflections_enabled = false -ss_reflections_max_steps = 64 -ss_reflections_fade_in = 0.15 -ss_reflections_fade_out = 2.0 -ss_reflections_depth_tolerance = 0.2 -ss_reflections_roughness = true -ssao_enabled = false -ssao_radius = 1.0 -ssao_intensity = 1.0 -ssao_radius2 = 0.0 -ssao_intensity2 = 1.0 -ssao_bias = 0.01 -ssao_light_affect = 0.0 -ssao_color = Color( 0, 0, 0, 1 ) -ssao_quality = 0 ssao_blur = 1 -ssao_edge_sharpness = 4.0 -dof_blur_far_enabled = false -dof_blur_far_distance = 10.0 -dof_blur_far_transition = 5.0 -dof_blur_far_amount = 0.1 -dof_blur_far_quality = 1 -dof_blur_near_enabled = false -dof_blur_near_distance = 2.0 -dof_blur_near_transition = 1.0 -dof_blur_near_amount = 0.1 -dof_blur_near_quality = 1 -glow_enabled = false -glow_levels/1 = false -glow_levels/2 = false -glow_levels/3 = true -glow_levels/4 = false -glow_levels/5 = true -glow_levels/6 = false -glow_levels/7 = false -glow_intensity = 0.8 -glow_strength = 1.0 -glow_bloom = 0.0 -glow_blend_mode = 2 -glow_hdr_threshold = 1.0 -glow_hdr_scale = 2.0 -glow_bicubic_upscale = false -adjustment_enabled = false -adjustment_brightness = 1.0 -adjustment_contrast = 1.0 -adjustment_saturation = 1.0 -_sections_unfolded = [ "Background" ] diff --git a/viewport/3d_in_2d/icon.png.import b/viewport/3d_in_2d/icon.png.import index b393f883..45ee6af7 100644 --- a/viewport/3d_in_2d/icon.png.import +++ b/viewport/3d_in_2d/icon.png.import @@ -7,16 +7,14 @@ path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" [deps] source_file="res://icon.png" -source_md5="f40bb4b4a5a2bb0fb17a9fe2ffaf7dbc" - dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] -dest_md5="c5c5c8e2efdfcc4a75ef8be0cb5f4a0f" [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 @@ -26,6 +24,7 @@ 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 diff --git a/viewport/3d_in_2d/player.scn b/viewport/3d_in_2d/player.scn index ad8528f226a8431a819b2d6d53f1421104bcf04c..ff739e10765b6815dbec1f63514aa06989ea29fe 100644 GIT binary patch literal 25703 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

odaK7?{rpZI94Fl_3+*l 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 literal 26876 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