Compare commits

...

7 Commits

Author SHA1 Message Date
fabafbb35b small improvements on the wall run
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 5m54s
2025-11-14 16:39:17 +01:00
0b0163a0ac finally managed to pin down the in game UI and control issues for keyboard
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 5m43s
2025-11-14 12:32:03 +01:00
5b3d6c9f19 can quit menus using B button
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 6m5s
2025-11-14 11:41:11 +01:00
ac14352e7f wall run, keyboard controls, mouse sensitivity setting, and more
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 6m15s
2025-11-13 22:38:44 +01:00
27130257c9 small camera animation on mantle
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 6m0s
2025-11-11 11:38:49 +01:00
e70a2e7537 keeping more intertia after dashes and mantles
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 6m6s
2025-11-11 09:52:57 +01:00
6051588f24 lots of tutorial fixed
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 7m39s
2025-11-10 14:55:16 +01:00
36 changed files with 1341 additions and 672 deletions

View File

@@ -6,6 +6,9 @@ extends Control
@export var options_packed_scene : PackedScene @export var options_packed_scene : PackedScene
@export var credits_packed_scene : PackedScene @export var credits_packed_scene : PackedScene
@export var menu_context : GUIDEMappingContext
@export var back_action : GUIDEAction
var options_scene var options_scene
var credits_scene var credits_scene
var sub_menu var sub_menu
@@ -73,7 +76,12 @@ func _ready() -> void:
_add_or_hide_options() _add_or_hide_options()
_add_or_hide_credits() _add_or_hide_credits()
_hide_new_game_if_unset() _hide_new_game_if_unset()
_setup_inputs()
func _setup_inputs() -> void:
GUIDE.enable_mapping_context(menu_context)
back_action.triggered.connect(_on_back_button_pressed)
func _on_new_game_button_pressed() -> void: func _on_new_game_button_pressed() -> void:
new_game() new_game()

View File

@@ -9,16 +9,19 @@ extends OverlaidMenu
var popup_open : Node var popup_open : Node
var previous_mapping_contexts : Array var previous_mapping_contexts : Array
func on_enter_tree() -> void: var is_listening_to_inputs = true
pass
#previous_mapping_contexts = GUIDE.get_enabled_mapping_contexts() func _enter_tree() -> void:
#GUIDE.enable_mapping_context(menu_context) super._enter_tree()
previous_mapping_contexts = GUIDE.get_enabled_mapping_contexts()
for previous_context in previous_mapping_contexts:
GUIDE.disable_mapping_context(previous_context)
GUIDE.enable_mapping_context(menu_context)
func on_exit_tree() -> void: func _exit_tree() -> void:
pass GUIDE.disable_mapping_context(menu_context)
#GUIDE.disable_mapping_context(menu_context) for previous_context in previous_mapping_contexts:
#for previous_context in previous_mapping_contexts: GUIDE.enable_mapping_context(previous_context)
#GUIDE.enable_mapping_context(previous_context)
func close_popup() -> void: func close_popup() -> void:
if popup_open != null: if popup_open != null:
@@ -43,10 +46,15 @@ func open_options_menu() -> void:
var options_scene := options_packed_scene.instantiate() var options_scene := options_packed_scene.instantiate()
add_child(options_scene) add_child(options_scene)
_disable_focus.call_deferred() _disable_focus.call_deferred()
is_listening_to_inputs = false
await options_scene.tree_exiting await options_scene.tree_exiting
is_listening_to_inputs = true
_enable_focus.call_deferred() _enable_focus.call_deferred()
func _handle_cancel_input() -> void: func _handle_cancel_input() -> void:
if not is_listening_to_inputs:
return
if popup_open != null: if popup_open != null:
close_popup() close_popup()
else: else:
@@ -68,6 +76,8 @@ func _ready() -> void:
_hide_exit_for_web() _hide_exit_for_web()
_hide_options_if_unset() _hide_options_if_unset()
_hide_main_menu_if_unset() _hide_main_menu_if_unset()
back_action.triggered.connect(_handle_cancel_input)
func _on_restart_button_pressed() -> void: func _on_restart_button_pressed() -> void:
%ConfirmRestart.popup_centered() %ConfirmRestart.popup_centered()
@@ -93,3 +103,5 @@ func _on_confirm_main_menu_confirmed() -> void:
func _on_confirm_exit_confirmed() -> void: func _on_confirm_exit_confirmed() -> void:
get_tree().quit() get_tree().quit()

View File

@@ -11,6 +11,10 @@ extends Control
process_mode = PROCESS_MODE_INHERIT process_mode = PROCESS_MODE_INHERIT
@export var makes_mouse_visible : bool = true @export var makes_mouse_visible : bool = true
@export var back_action : GUIDEAction
signal menu_closing
var _initial_pause_state : bool = false var _initial_pause_state : bool = false
var _initial_focus_mode : FocusMode = FOCUS_ALL var _initial_focus_mode : FocusMode = FOCUS_ALL
var _initial_mouse_mode : Input.MouseMode var _initial_mouse_mode : Input.MouseMode
@@ -18,6 +22,7 @@ var _initial_focus_control
var _scene_tree : SceneTree var _scene_tree : SceneTree
func close() -> void: func close() -> void:
menu_closing.emit()
_scene_tree.paused = _initial_pause_state _scene_tree.paused = _initial_pause_state
Input.set_mouse_mode(_initial_mouse_mode) Input.set_mouse_mode(_initial_mouse_mode)
if is_instance_valid(_initial_focus_control) and _initial_focus_control.is_inside_tree(): if is_instance_valid(_initial_focus_control) and _initial_focus_control.is_inside_tree():
@@ -29,13 +34,14 @@ func _handle_cancel_input() -> void:
close() close()
func _unhandled_input(event : InputEvent) -> void: func _unhandled_input(event : InputEvent) -> void:
return
if event.is_action_pressed("ui_cancel"): if event.is_action_pressed("ui_cancel"):
_handle_cancel_input() _handle_cancel_input()
get_viewport().set_input_as_handled() get_viewport().set_input_as_handled()
func _on_close_button_pressed() -> void: func _on_close_button_pressed() -> void:
close() close()
func _enter_tree() -> void: func _enter_tree() -> void:
_scene_tree = get_tree() _scene_tree = get_tree()
_initial_pause_state = _scene_tree.paused _initial_pause_state = _scene_tree.paused

View File

@@ -12,3 +12,11 @@ extends OverlaidMenu
if menu_scene: if menu_scene:
var _instance = menu_scene.instantiate() var _instance = menu_scene.instantiate()
%MenuContainer.add_child(_instance) %MenuContainer.add_child(_instance)
func blocking_close() -> void:
get_viewport().set_input_as_handled()
super.close()
func _ready() -> void:
back_action.triggered.connect(blocking_close)

View File

@@ -4,26 +4,30 @@ extends Node
## Node for opening a pause menu when detecting a 'ui_cancel' event. ## Node for opening a pause menu when detecting a 'ui_cancel' event.
@export var pause_menu_packed : PackedScene @export var pause_menu_packed : PackedScene
@export var focused_viewport : Viewport @export var focused_viewport : Viewport
@export var player : CharacterBody3D
@export_group("Inputs") @export_group("Inputs")
@export var base_mode:GUIDEMappingContext
@export var pause:GUIDEAction @export var pause:GUIDEAction
var menu_already_open = false
func _ready() -> void: func _ready() -> void:
# GUIDE.enable_mapping_context(base_mode)
pause.triggered.connect(on_input_pause) pause.triggered.connect(on_input_pause)
func on_input_pause(): func on_input_pause():
if menu_already_open:
return
menu_already_open = true
if not focused_viewport: if not focused_viewport:
focused_viewport = get_viewport() focused_viewport = get_viewport()
var _initial_focus_control = focused_viewport.gui_get_focus_owner() var _initial_focus_control = focused_viewport.gui_get_focus_owner()
var current_menu = pause_menu_packed.instantiate() var current_menu = pause_menu_packed.instantiate()
current_menu.menu_closing.connect(player.LoadSettings)
get_tree().current_scene.call_deferred("add_child", current_menu) get_tree().current_scene.call_deferred("add_child", current_menu)
await current_menu.tree_exited await current_menu.tree_exited
menu_already_open = false
if is_inside_tree() and _initial_focus_control: if is_inside_tree() and _initial_focus_control:
_initial_focus_control.grab_focus() _initial_focus_control.grab_focus()
func _unhandled_input(event : InputEvent) -> void:
if event.is_action_pressed("ui_cancel"):
pass

Binary file not shown.

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=286 format=3 uid="uid://dip6cce5gtwi8"] [gd_scene load_steps=292 format=3 uid="uid://dip6cce5gtwi8"]
[ext_resource type="PackedScene" uid="uid://2huty67y1g5w" path="res://assets/greyboxing/Guard tower.glb" id="1_42k4c"] [ext_resource type="PackedScene" uid="uid://2huty67y1g5w" path="res://assets/greyboxing/Guard tower.glb" id="1_42k4c"]
[ext_resource type="Script" uid="uid://do8vihuwc4iib" path="res://tools/generate_collisions.gd" id="2_v6lxe"] [ext_resource type="Script" uid="uid://do8vihuwc4iib" path="res://tools/generate_collisions.gd" id="2_v6lxe"]
@@ -846,6 +846,24 @@ data = PackedVector3Array(0, -1, -1, 0.1951, 1, -0.9808, 0.1951, -1, -0.9808, 0,
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_71ic5"] [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_71ic5"]
data = PackedVector3Array(-1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1) data = PackedVector3Array(-1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_km2kb"]
data = PackedVector3Array(-1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_3pham"]
data = PackedVector3Array(-1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_qj6cm"]
data = PackedVector3Array(-1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_ojacj"]
data = PackedVector3Array(-1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_407rx"]
data = PackedVector3Array(-1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_feh6m"]
data = PackedVector3Array(-1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1)
[node name="Guard tower" instance=ExtResource("1_42k4c")] [node name="Guard tower" instance=ExtResource("1_42k4c")]
script = ExtResource("2_v6lxe") script = ExtResource("2_v6lxe")
collision_layer = 3 collision_layer = 3
@@ -2825,6 +2843,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_198/Cube_198_col2" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_198/Cube_198_col2" index="0"]
shape = SubResource("ConcavePolygonShape3D_j6rdm") shape = SubResource("ConcavePolygonShape3D_j6rdm")
[node name="Cube_199" parent="." index="200"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_199_col" type="StaticBody3D" parent="Cube_199" index="0"] [node name="Cube_199_col" type="StaticBody3D" parent="Cube_199" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2832,6 +2853,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_199/Cube_199_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_199/Cube_199_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_tisje") shape = SubResource("ConcavePolygonShape3D_tisje")
[node name="Cube_200" parent="." index="201"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_200_col" type="StaticBody3D" parent="Cube_200" index="0"] [node name="Cube_200_col" type="StaticBody3D" parent="Cube_200" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2839,6 +2863,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_200/Cube_200_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_200/Cube_200_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_jbf0o") shape = SubResource("ConcavePolygonShape3D_jbf0o")
[node name="Cube_201" parent="." index="202"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_201_col" type="StaticBody3D" parent="Cube_201" index="0"] [node name="Cube_201_col" type="StaticBody3D" parent="Cube_201" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2846,6 +2873,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_201/Cube_201_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_201/Cube_201_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ja2b6") shape = SubResource("ConcavePolygonShape3D_ja2b6")
[node name="Cube_202" parent="." index="203"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_202_col" type="StaticBody3D" parent="Cube_202" index="0"] [node name="Cube_202_col" type="StaticBody3D" parent="Cube_202" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2853,6 +2883,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_202/Cube_202_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_202/Cube_202_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_uvn8w") shape = SubResource("ConcavePolygonShape3D_uvn8w")
[node name="Cube_203" parent="." index="204"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_203_col" type="StaticBody3D" parent="Cube_203" index="0"] [node name="Cube_203_col" type="StaticBody3D" parent="Cube_203" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2860,6 +2893,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_203/Cube_203_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_203/Cube_203_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_o174y") shape = SubResource("ConcavePolygonShape3D_o174y")
[node name="Cube_204" parent="." index="205"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_204_col" type="StaticBody3D" parent="Cube_204" index="0"] [node name="Cube_204_col" type="StaticBody3D" parent="Cube_204" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2867,6 +2903,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_204/Cube_204_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_204/Cube_204_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_2xrvc") shape = SubResource("ConcavePolygonShape3D_2xrvc")
[node name="Cube_205" parent="." index="206"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_205_col" type="StaticBody3D" parent="Cube_205" index="0"] [node name="Cube_205_col" type="StaticBody3D" parent="Cube_205" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2874,6 +2913,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_205/Cube_205_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_205/Cube_205_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_3q82a") shape = SubResource("ConcavePolygonShape3D_3q82a")
[node name="Cube_206" parent="." index="207"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_206_col" type="StaticBody3D" parent="Cube_206" index="0"] [node name="Cube_206_col" type="StaticBody3D" parent="Cube_206" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2881,6 +2923,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_206/Cube_206_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_206/Cube_206_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_jjfjy") shape = SubResource("ConcavePolygonShape3D_jjfjy")
[node name="Cube_207" parent="." index="208"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_207_col" type="StaticBody3D" parent="Cube_207" index="0"] [node name="Cube_207_col" type="StaticBody3D" parent="Cube_207" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2888,6 +2933,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_207/Cube_207_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_207/Cube_207_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_na4d7") shape = SubResource("ConcavePolygonShape3D_na4d7")
[node name="Cube_208" parent="." index="209"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_208_col" type="StaticBody3D" parent="Cube_208" index="0"] [node name="Cube_208_col" type="StaticBody3D" parent="Cube_208" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2895,6 +2943,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_208/Cube_208_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_208/Cube_208_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_o4hf7") shape = SubResource("ConcavePolygonShape3D_o4hf7")
[node name="Cube_209" parent="." index="210"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_209_col" type="StaticBody3D" parent="Cube_209" index="0"] [node name="Cube_209_col" type="StaticBody3D" parent="Cube_209" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2902,6 +2953,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_209/Cube_209_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_209/Cube_209_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_vm6m2") shape = SubResource("ConcavePolygonShape3D_vm6m2")
[node name="Cube_210" parent="." index="211"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_210_col" type="StaticBody3D" parent="Cube_210" index="0"] [node name="Cube_210_col" type="StaticBody3D" parent="Cube_210" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2909,6 +2963,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_210/Cube_210_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_210/Cube_210_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_wit6h") shape = SubResource("ConcavePolygonShape3D_wit6h")
[node name="Cube_211" parent="." index="212"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_211_col" type="StaticBody3D" parent="Cube_211" index="0"] [node name="Cube_211_col" type="StaticBody3D" parent="Cube_211" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2916,6 +2973,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_211/Cube_211_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_211/Cube_211_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_hoel6") shape = SubResource("ConcavePolygonShape3D_hoel6")
[node name="Cube_212" parent="." index="213"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_212_col" type="StaticBody3D" parent="Cube_212" index="0"] [node name="Cube_212_col" type="StaticBody3D" parent="Cube_212" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2923,6 +2983,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_212/Cube_212_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_212/Cube_212_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ntaer") shape = SubResource("ConcavePolygonShape3D_ntaer")
[node name="Cube_213" parent="." index="214"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_213_col" type="StaticBody3D" parent="Cube_213" index="0"] [node name="Cube_213_col" type="StaticBody3D" parent="Cube_213" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2930,6 +2993,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_213/Cube_213_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_213/Cube_213_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_rnrvv") shape = SubResource("ConcavePolygonShape3D_rnrvv")
[node name="Cube_214" parent="." index="215"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_214_col" type="StaticBody3D" parent="Cube_214" index="0"] [node name="Cube_214_col" type="StaticBody3D" parent="Cube_214" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2937,6 +3003,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_214/Cube_214_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_214/Cube_214_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_mcjed") shape = SubResource("ConcavePolygonShape3D_mcjed")
[node name="Cube_215" parent="." index="216"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_215_col" type="StaticBody3D" parent="Cube_215" index="0"] [node name="Cube_215_col" type="StaticBody3D" parent="Cube_215" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2944,6 +3013,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_215/Cube_215_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_215/Cube_215_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_a4brb") shape = SubResource("ConcavePolygonShape3D_a4brb")
[node name="Cube_216" parent="." index="217"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_216_col" type="StaticBody3D" parent="Cube_216" index="0"] [node name="Cube_216_col" type="StaticBody3D" parent="Cube_216" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2951,6 +3023,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_216/Cube_216_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_216/Cube_216_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ihu35") shape = SubResource("ConcavePolygonShape3D_ihu35")
[node name="Cube_218" parent="." index="218"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_218_col" type="StaticBody3D" parent="Cube_218" index="0"] [node name="Cube_218_col" type="StaticBody3D" parent="Cube_218" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2958,6 +3033,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_218/Cube_218_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_218/Cube_218_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_3fs2m") shape = SubResource("ConcavePolygonShape3D_3fs2m")
[node name="Cube_219" parent="." index="219"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_219_col" type="StaticBody3D" parent="Cube_219" index="0"] [node name="Cube_219_col" type="StaticBody3D" parent="Cube_219" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2965,6 +3043,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_219/Cube_219_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_219/Cube_219_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ca8jc") shape = SubResource("ConcavePolygonShape3D_ca8jc")
[node name="Cube_220" parent="." index="220"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_220_col" type="StaticBody3D" parent="Cube_220" index="0"] [node name="Cube_220_col" type="StaticBody3D" parent="Cube_220" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2972,6 +3053,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_220/Cube_220_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_220/Cube_220_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_jcjs1") shape = SubResource("ConcavePolygonShape3D_jcjs1")
[node name="Cube_221" parent="." index="221"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_221_col" type="StaticBody3D" parent="Cube_221" index="0"] [node name="Cube_221_col" type="StaticBody3D" parent="Cube_221" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2979,6 +3063,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_221/Cube_221_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_221/Cube_221_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_dyajt") shape = SubResource("ConcavePolygonShape3D_dyajt")
[node name="Cube_217" parent="." index="222"]
material_override = ExtResource("4_7r3kr")
[node name="Cube_217_col" type="StaticBody3D" parent="Cube_217" index="0"] [node name="Cube_217_col" type="StaticBody3D" parent="Cube_217" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2986,6 +3073,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_217/Cube_217_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_217/Cube_217_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_4lqvp") shape = SubResource("ConcavePolygonShape3D_4lqvp")
[node name="Cube_222" parent="." index="223"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_222_col" type="StaticBody3D" parent="Cube_222" index="0"] [node name="Cube_222_col" type="StaticBody3D" parent="Cube_222" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -2993,6 +3083,10 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_222/Cube_222_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_222/Cube_222_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_bmhlm") shape = SubResource("ConcavePolygonShape3D_bmhlm")
[node name="Cube_223" parent="." index="224"]
material_override = ExtResource("3_xjmq6")
cast_shadow = 2
[node name="Cube_223_col" type="StaticBody3D" parent="Cube_223" index="0"] [node name="Cube_223_col" type="StaticBody3D" parent="Cube_223" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3000,6 +3094,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_223/Cube_223_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_223/Cube_223_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ql3pa") shape = SubResource("ConcavePolygonShape3D_ql3pa")
[node name="Cube_224" parent="." index="225"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_224_col" type="StaticBody3D" parent="Cube_224" index="0"] [node name="Cube_224_col" type="StaticBody3D" parent="Cube_224" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3007,6 +3104,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_224/Cube_224_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_224/Cube_224_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_u7c5v") shape = SubResource("ConcavePolygonShape3D_u7c5v")
[node name="Cube_225" parent="." index="226"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_225_col" type="StaticBody3D" parent="Cube_225" index="0"] [node name="Cube_225_col" type="StaticBody3D" parent="Cube_225" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3014,6 +3114,10 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_225/Cube_225_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_225/Cube_225_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_hvwfx") shape = SubResource("ConcavePolygonShape3D_hvwfx")
[node name="Cube_226" parent="." index="227"]
material_override = ExtResource("3_xjmq6")
cast_shadow = 2
[node name="Cube_226_col" type="StaticBody3D" parent="Cube_226" index="0"] [node name="Cube_226_col" type="StaticBody3D" parent="Cube_226" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3021,6 +3125,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_226/Cube_226_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_226/Cube_226_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_rrouw") shape = SubResource("ConcavePolygonShape3D_rrouw")
[node name="Cube_227" parent="." index="228"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_227_col" type="StaticBody3D" parent="Cube_227" index="0"] [node name="Cube_227_col" type="StaticBody3D" parent="Cube_227" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3028,6 +3135,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_227/Cube_227_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_227/Cube_227_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_h5aax") shape = SubResource("ConcavePolygonShape3D_h5aax")
[node name="Cube_228" parent="." index="229"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_228_col" type="StaticBody3D" parent="Cube_228" index="0"] [node name="Cube_228_col" type="StaticBody3D" parent="Cube_228" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3035,6 +3145,10 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_228/Cube_228_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_228/Cube_228_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_tc5np") shape = SubResource("ConcavePolygonShape3D_tc5np")
[node name="Cube_229" parent="." index="230"]
material_override = ExtResource("3_xjmq6")
cast_shadow = 2
[node name="Cube_229_col" type="StaticBody3D" parent="Cube_229" index="0"] [node name="Cube_229_col" type="StaticBody3D" parent="Cube_229" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3042,6 +3156,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_229/Cube_229_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_229/Cube_229_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_cdwgp") shape = SubResource("ConcavePolygonShape3D_cdwgp")
[node name="Cube_230" parent="." index="231"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_230_col" type="StaticBody3D" parent="Cube_230" index="0"] [node name="Cube_230_col" type="StaticBody3D" parent="Cube_230" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3049,6 +3166,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_230/Cube_230_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_230/Cube_230_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_2x4mk") shape = SubResource("ConcavePolygonShape3D_2x4mk")
[node name="Cube_231" parent="." index="232"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_231_col" type="StaticBody3D" parent="Cube_231" index="0"] [node name="Cube_231_col" type="StaticBody3D" parent="Cube_231" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3056,6 +3176,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_231/Cube_231_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_231/Cube_231_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_mdk7b") shape = SubResource("ConcavePolygonShape3D_mdk7b")
[node name="Cube_232" parent="." index="233"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_232_col" type="StaticBody3D" parent="Cube_232" index="0"] [node name="Cube_232_col" type="StaticBody3D" parent="Cube_232" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3063,6 +3186,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_232/Cube_232_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_232/Cube_232_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_aer1s") shape = SubResource("ConcavePolygonShape3D_aer1s")
[node name="Cube_233" parent="." index="234"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_233_col" type="StaticBody3D" parent="Cube_233" index="0"] [node name="Cube_233_col" type="StaticBody3D" parent="Cube_233" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3070,6 +3196,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_233/Cube_233_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_233/Cube_233_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_utk6k") shape = SubResource("ConcavePolygonShape3D_utk6k")
[node name="Cube_235" parent="." index="235"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_235_col2" type="StaticBody3D" parent="Cube_235" index="0"] [node name="Cube_235_col2" type="StaticBody3D" parent="Cube_235" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3077,6 +3206,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_235/Cube_235_col2" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_235/Cube_235_col2" index="0"]
shape = SubResource("ConcavePolygonShape3D_luap4") shape = SubResource("ConcavePolygonShape3D_luap4")
[node name="Cube_237" parent="." index="236"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_237_col2" type="StaticBody3D" parent="Cube_237" index="0"] [node name="Cube_237_col2" type="StaticBody3D" parent="Cube_237" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3084,6 +3216,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_237/Cube_237_col2" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_237/Cube_237_col2" index="0"]
shape = SubResource("ConcavePolygonShape3D_4vbsu") shape = SubResource("ConcavePolygonShape3D_4vbsu")
[node name="Cube_234" parent="." index="237"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_234_col2" type="StaticBody3D" parent="Cube_234" index="0"] [node name="Cube_234_col2" type="StaticBody3D" parent="Cube_234" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3091,6 +3226,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_234/Cube_234_col2" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_234/Cube_234_col2" index="0"]
shape = SubResource("ConcavePolygonShape3D_dy4v6") shape = SubResource("ConcavePolygonShape3D_dy4v6")
[node name="Cube_236" parent="." index="238"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_236_col2" type="StaticBody3D" parent="Cube_236" index="0"] [node name="Cube_236_col2" type="StaticBody3D" parent="Cube_236" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3098,6 +3236,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_236/Cube_236_col2" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_236/Cube_236_col2" index="0"]
shape = SubResource("ConcavePolygonShape3D_w0e4s") shape = SubResource("ConcavePolygonShape3D_w0e4s")
[node name="Cube_238" parent="." index="239"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_238_col2" type="StaticBody3D" parent="Cube_238" index="0"] [node name="Cube_238_col2" type="StaticBody3D" parent="Cube_238" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3119,6 +3260,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_240/Cube_240_col2" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_240/Cube_240_col2" index="0"]
shape = SubResource("ConcavePolygonShape3D_sq760") shape = SubResource("ConcavePolygonShape3D_sq760")
[node name="Cube_241" parent="." index="242"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_241_col2" type="StaticBody3D" parent="Cube_241" index="0"] [node name="Cube_241_col2" type="StaticBody3D" parent="Cube_241" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3126,6 +3270,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_241/Cube_241_col2" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_241/Cube_241_col2" index="0"]
shape = SubResource("ConcavePolygonShape3D_hp0ng") shape = SubResource("ConcavePolygonShape3D_hp0ng")
[node name="Cube_242" parent="." index="243"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_242_col" type="StaticBody3D" parent="Cube_242" index="0"] [node name="Cube_242_col" type="StaticBody3D" parent="Cube_242" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3133,6 +3280,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_242/Cube_242_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_242/Cube_242_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_nay3c") shape = SubResource("ConcavePolygonShape3D_nay3c")
[node name="Cube_243" parent="." index="244"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_243_col" type="StaticBody3D" parent="Cube_243" index="0"] [node name="Cube_243_col" type="StaticBody3D" parent="Cube_243" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3140,6 +3290,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_243/Cube_243_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_243/Cube_243_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ica5n") shape = SubResource("ConcavePolygonShape3D_ica5n")
[node name="Cube_244" parent="." index="245"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_244_col" type="StaticBody3D" parent="Cube_244" index="0"] [node name="Cube_244_col" type="StaticBody3D" parent="Cube_244" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3147,6 +3300,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_244/Cube_244_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_244/Cube_244_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_0q73m") shape = SubResource("ConcavePolygonShape3D_0q73m")
[node name="Cube_245" parent="." index="246"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_245_col" type="StaticBody3D" parent="Cube_245" index="0"] [node name="Cube_245_col" type="StaticBody3D" parent="Cube_245" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3154,6 +3310,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_245/Cube_245_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_245/Cube_245_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_qdctm") shape = SubResource("ConcavePolygonShape3D_qdctm")
[node name="Cube_246" parent="." index="247"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_246_col" type="StaticBody3D" parent="Cube_246" index="0"] [node name="Cube_246_col" type="StaticBody3D" parent="Cube_246" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3161,6 +3320,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_246/Cube_246_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_246/Cube_246_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_unbo4") shape = SubResource("ConcavePolygonShape3D_unbo4")
[node name="Cube_247" parent="." index="248"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_247_col" type="StaticBody3D" parent="Cube_247" index="0"] [node name="Cube_247_col" type="StaticBody3D" parent="Cube_247" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3168,6 +3330,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_247/Cube_247_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_247/Cube_247_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_oj7fa") shape = SubResource("ConcavePolygonShape3D_oj7fa")
[node name="Cube_248" parent="." index="249"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_248_col" type="StaticBody3D" parent="Cube_248" index="0"] [node name="Cube_248_col" type="StaticBody3D" parent="Cube_248" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3175,6 +3340,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_248/Cube_248_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_248/Cube_248_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_15qrl") shape = SubResource("ConcavePolygonShape3D_15qrl")
[node name="Cube_249" parent="." index="250"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_249_col" type="StaticBody3D" parent="Cube_249" index="0"] [node name="Cube_249_col" type="StaticBody3D" parent="Cube_249" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3182,6 +3350,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_249/Cube_249_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_249/Cube_249_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_u005s") shape = SubResource("ConcavePolygonShape3D_u005s")
[node name="Cube_250" parent="." index="251"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_250_col" type="StaticBody3D" parent="Cube_250" index="0"] [node name="Cube_250_col" type="StaticBody3D" parent="Cube_250" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3189,6 +3360,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_250/Cube_250_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_250/Cube_250_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ad03g") shape = SubResource("ConcavePolygonShape3D_ad03g")
[node name="Cube_251" parent="." index="252"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_251_col" type="StaticBody3D" parent="Cube_251" index="0"] [node name="Cube_251_col" type="StaticBody3D" parent="Cube_251" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3196,6 +3370,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_251/Cube_251_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_251/Cube_251_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_a1kuf") shape = SubResource("ConcavePolygonShape3D_a1kuf")
[node name="Cube_252" parent="." index="253"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_252_col" type="StaticBody3D" parent="Cube_252" index="0"] [node name="Cube_252_col" type="StaticBody3D" parent="Cube_252" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3203,6 +3380,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_252/Cube_252_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_252/Cube_252_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_dburb") shape = SubResource("ConcavePolygonShape3D_dburb")
[node name="Cube_253" parent="." index="254"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_253_col" type="StaticBody3D" parent="Cube_253" index="0"] [node name="Cube_253_col" type="StaticBody3D" parent="Cube_253" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3210,6 +3390,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_253/Cube_253_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_253/Cube_253_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ch54j") shape = SubResource("ConcavePolygonShape3D_ch54j")
[node name="Cube_254" parent="." index="255"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_254_col" type="StaticBody3D" parent="Cube_254" index="0"] [node name="Cube_254_col" type="StaticBody3D" parent="Cube_254" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3217,6 +3400,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_254/Cube_254_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_254/Cube_254_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ls8wx") shape = SubResource("ConcavePolygonShape3D_ls8wx")
[node name="Cube_255" parent="." index="256"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_255_col" type="StaticBody3D" parent="Cube_255" index="0"] [node name="Cube_255_col" type="StaticBody3D" parent="Cube_255" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3224,6 +3410,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_255/Cube_255_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_255/Cube_255_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_bsjv6") shape = SubResource("ConcavePolygonShape3D_bsjv6")
[node name="Cube_256" parent="." index="257"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_256_col" type="StaticBody3D" parent="Cube_256" index="0"] [node name="Cube_256_col" type="StaticBody3D" parent="Cube_256" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3231,6 +3420,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_256/Cube_256_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_256/Cube_256_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_qmvyf") shape = SubResource("ConcavePolygonShape3D_qmvyf")
[node name="Cube_257" parent="." index="258"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_257_col" type="StaticBody3D" parent="Cube_257" index="0"] [node name="Cube_257_col" type="StaticBody3D" parent="Cube_257" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3238,6 +3430,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_257/Cube_257_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_257/Cube_257_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_qwi3q") shape = SubResource("ConcavePolygonShape3D_qwi3q")
[node name="Cube_258" parent="." index="259"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_258_col" type="StaticBody3D" parent="Cube_258" index="0"] [node name="Cube_258_col" type="StaticBody3D" parent="Cube_258" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3245,6 +3440,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_258/Cube_258_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_258/Cube_258_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_xwxqi") shape = SubResource("ConcavePolygonShape3D_xwxqi")
[node name="Cube_259" parent="." index="260"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_259_col" type="StaticBody3D" parent="Cube_259" index="0"] [node name="Cube_259_col" type="StaticBody3D" parent="Cube_259" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3252,6 +3450,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_259/Cube_259_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_259/Cube_259_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ge4sn") shape = SubResource("ConcavePolygonShape3D_ge4sn")
[node name="Cube_260" parent="." index="261"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_260_col" type="StaticBody3D" parent="Cube_260" index="0"] [node name="Cube_260_col" type="StaticBody3D" parent="Cube_260" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3259,6 +3460,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_260/Cube_260_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_260/Cube_260_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_jnhds") shape = SubResource("ConcavePolygonShape3D_jnhds")
[node name="Cube_262" parent="." index="262"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_262_col" type="StaticBody3D" parent="Cube_262" index="0"] [node name="Cube_262_col" type="StaticBody3D" parent="Cube_262" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3266,6 +3470,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_262/Cube_262_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_262/Cube_262_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_687to") shape = SubResource("ConcavePolygonShape3D_687to")
[node name="Cube_263" parent="." index="263"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_263_col" type="StaticBody3D" parent="Cube_263" index="0"] [node name="Cube_263_col" type="StaticBody3D" parent="Cube_263" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3280,6 +3487,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_264/Cube_264_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_264/Cube_264_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ukbj5") shape = SubResource("ConcavePolygonShape3D_ukbj5")
[node name="Cube_265" parent="." index="265"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_265_col" type="StaticBody3D" parent="Cube_265" index="0"] [node name="Cube_265_col" type="StaticBody3D" parent="Cube_265" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3287,6 +3497,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_265/Cube_265_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_265/Cube_265_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_sf261") shape = SubResource("ConcavePolygonShape3D_sf261")
[node name="Cube_266" parent="." index="266"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_266_col" type="StaticBody3D" parent="Cube_266" index="0"] [node name="Cube_266_col" type="StaticBody3D" parent="Cube_266" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3294,6 +3507,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_266/Cube_266_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_266/Cube_266_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_7nwml") shape = SubResource("ConcavePolygonShape3D_7nwml")
[node name="Cube_267" parent="." index="267"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_267_col" type="StaticBody3D" parent="Cube_267" index="0"] [node name="Cube_267_col" type="StaticBody3D" parent="Cube_267" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3301,6 +3517,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_267/Cube_267_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_267/Cube_267_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_0lwqd") shape = SubResource("ConcavePolygonShape3D_0lwqd")
[node name="Cube_268" parent="." index="268"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_268_col" type="StaticBody3D" parent="Cube_268" index="0"] [node name="Cube_268_col" type="StaticBody3D" parent="Cube_268" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3308,6 +3527,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_268/Cube_268_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_268/Cube_268_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_1epph") shape = SubResource("ConcavePolygonShape3D_1epph")
[node name="Cube_269" parent="." index="269"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_269_col" type="StaticBody3D" parent="Cube_269" index="0"] [node name="Cube_269_col" type="StaticBody3D" parent="Cube_269" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3315,6 +3537,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_269/Cube_269_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_269/Cube_269_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_o2en4") shape = SubResource("ConcavePolygonShape3D_o2en4")
[node name="Cube_270" parent="." index="270"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_270_col" type="StaticBody3D" parent="Cube_270" index="0"] [node name="Cube_270_col" type="StaticBody3D" parent="Cube_270" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3322,6 +3547,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_270/Cube_270_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_270/Cube_270_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_nuj0k") shape = SubResource("ConcavePolygonShape3D_nuj0k")
[node name="Cube_271" parent="." index="271"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_271_col" type="StaticBody3D" parent="Cube_271" index="0"] [node name="Cube_271_col" type="StaticBody3D" parent="Cube_271" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3329,6 +3557,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_271/Cube_271_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_271/Cube_271_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_60b56") shape = SubResource("ConcavePolygonShape3D_60b56")
[node name="Cube_272" parent="." index="272"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_272_col" type="StaticBody3D" parent="Cube_272" index="0"] [node name="Cube_272_col" type="StaticBody3D" parent="Cube_272" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3336,6 +3567,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_272/Cube_272_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_272/Cube_272_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_50eql") shape = SubResource("ConcavePolygonShape3D_50eql")
[node name="Cube_273" parent="." index="273"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_273_col" type="StaticBody3D" parent="Cube_273" index="0"] [node name="Cube_273_col" type="StaticBody3D" parent="Cube_273" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3343,6 +3577,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_273/Cube_273_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_273/Cube_273_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ohrpm") shape = SubResource("ConcavePolygonShape3D_ohrpm")
[node name="Cube_274" parent="." index="274"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_274_col" type="StaticBody3D" parent="Cube_274" index="0"] [node name="Cube_274_col" type="StaticBody3D" parent="Cube_274" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3350,6 +3587,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_274/Cube_274_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_274/Cube_274_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_m4s8e") shape = SubResource("ConcavePolygonShape3D_m4s8e")
[node name="Cube_275" parent="." index="275"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_275_col" type="StaticBody3D" parent="Cube_275" index="0"] [node name="Cube_275_col" type="StaticBody3D" parent="Cube_275" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3357,6 +3597,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_275/Cube_275_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_275/Cube_275_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_uous6") shape = SubResource("ConcavePolygonShape3D_uous6")
[node name="Cube_276" parent="." index="276"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_276_col" type="StaticBody3D" parent="Cube_276" index="0"] [node name="Cube_276_col" type="StaticBody3D" parent="Cube_276" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3364,6 +3607,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_276/Cube_276_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_276/Cube_276_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_o0jxx") shape = SubResource("ConcavePolygonShape3D_o0jxx")
[node name="Cube_277" parent="." index="277"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_277_col" type="StaticBody3D" parent="Cube_277" index="0"] [node name="Cube_277_col" type="StaticBody3D" parent="Cube_277" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3371,6 +3617,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_277/Cube_277_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_277/Cube_277_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ild1s") shape = SubResource("ConcavePolygonShape3D_ild1s")
[node name="Cylinder" parent="." index="278"]
material_override = ExtResource("3_xjmq6")
[node name="Cylinder_col" type="StaticBody3D" parent="Cylinder" index="0"] [node name="Cylinder_col" type="StaticBody3D" parent="Cylinder" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
@@ -3378,9 +3627,72 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cylinder/Cylinder_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cylinder/Cylinder_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_6i64o") shape = SubResource("ConcavePolygonShape3D_6i64o")
[node name="Cube_278" parent="." index="279"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_278_col" type="StaticBody3D" parent="Cube_278" index="0"] [node name="Cube_278_col" type="StaticBody3D" parent="Cube_278" index="0"]
collision_layer = 3 collision_layer = 3
collision_mask = 5 collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_278/Cube_278_col" index="0"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_278/Cube_278_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_71ic5") shape = SubResource("ConcavePolygonShape3D_71ic5")
[node name="Cube_261" parent="." index="280"]
material_override = ExtResource("4_7r3kr")
[node name="Cube_261_col" type="StaticBody3D" parent="Cube_261" index="0"]
collision_layer = 3
collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_261/Cube_261_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_km2kb")
[node name="Cube_280" parent="." index="281"]
material_override = ExtResource("4_7r3kr")
[node name="Cube_280_col" type="StaticBody3D" parent="Cube_280" index="0"]
collision_layer = 3
collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_280/Cube_280_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_3pham")
[node name="Cube_281" parent="." index="282"]
material_override = ExtResource("4_7r3kr")
[node name="Cube_281_col" type="StaticBody3D" parent="Cube_281" index="0"]
collision_layer = 3
collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_281/Cube_281_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_qj6cm")
[node name="Cube_282" parent="." index="283"]
material_override = ExtResource("4_7r3kr")
[node name="Cube_282_col" type="StaticBody3D" parent="Cube_282" index="0"]
collision_layer = 3
collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_282/Cube_282_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_ojacj")
[node name="Cube_283" parent="." index="284"]
material_override = ExtResource("4_7r3kr")
[node name="Cube_283_col" type="StaticBody3D" parent="Cube_283" index="0"]
collision_layer = 3
collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_283/Cube_283_col" index="0"]
shape = SubResource("ConcavePolygonShape3D_407rx")
[node name="Cube_284" parent="." index="285"]
material_override = ExtResource("3_xjmq6")
[node name="Cube_284_col2" type="StaticBody3D" parent="Cube_284" index="0"]
collision_layer = 3
collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_284/Cube_284_col2" index="0"]
shape = SubResource("ConcavePolygonShape3D_feh6m")

View File

@@ -7,18 +7,32 @@ var lift_already_used : bool = false
@onready var button: MeshInstance3D = $Cylinder_001 @onready var button: MeshInstance3D = $Cylinder_001
var player : CharacterBody3D
func finished_climbing() -> void:
player.SetAllowedInputsAll()
func start_climbing() -> void: func start_climbing() -> void:
var elevator_tween = get_tree().create_tween() var player_start_location = player.global_position
elevator_tween.set_ease(Tween.EASE_IN_OUT) var height_difference = end_location - global_position
elevator_tween.set_trans(Tween.TRANS_CUBIC)
elevator_tween.tween_property(self, "global_position", end_location, lift_time) var elevator_tween = get_tree().create_tween()
elevator_tween.set_parallel(true)
elevator_tween.set_ease(Tween.EASE_IN_OUT)
elevator_tween.set_trans(Tween.TRANS_CUBIC)
elevator_tween.tween_property(self, "global_position", end_location, lift_time)
elevator_tween.tween_property(player, "global_position", player_start_location + height_difference, lift_time)
elevator_tween.tween_callback(finished_climbing)
func _on_area_3d_body_entered(body: Node3D) -> void: func _on_area_3d_body_entered(body: Node3D) -> void:
if lift_already_used: if lift_already_used:
return return
if is_instance_of(body, CharacterBody3D): if is_instance_of(body, CharacterBody3D):
player = body
player.SetAllowedInputsMoveCamera()
lift_already_used = true lift_already_used = true
var button_tween = get_tree().create_tween() var button_tween = get_tree().create_tween()

Binary file not shown.

Binary file not shown.

View File

@@ -30,6 +30,7 @@ glow_enabled = true
[node name="Player" parent="." instance=ExtResource("1_1s2y7")] [node name="Player" parent="." instance=ExtResource("1_1s2y7")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1.5)
TutorialDone = true
[node name="WorldEnvironment" type="WorldEnvironment" parent="."] [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_1bvp3") environment = SubResource("Environment_1bvp3")

View File

@@ -1,12 +1,11 @@
[gd_scene load_steps=44 format=3 uid="uid://dmkw8cmalm5k"] [gd_scene load_steps=40 format=3 uid="uid://dmkw8cmalm5k"]
[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_2vsi6"] [ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_2vsi6"]
[ext_resource type="Script" uid="uid://blenis2y55fmg" path="res://tools/city_helpers.gd" id="1_qwuk2"]
[ext_resource type="Texture2D" uid="uid://ca4kkq3w8cd4n" path="res://assets/sky/sky_15_2k.png" id="2_ruo5i"] [ext_resource type="Texture2D" uid="uid://ca4kkq3w8cd4n" path="res://assets/sky/sky_15_2k.png" id="2_ruo5i"]
[ext_resource type="PackedScene" uid="uid://dkr80d2pi0d41" path="res://addons/guide/debugger/guide_debugger.tscn" id="2_uet8a"] [ext_resource type="PackedScene" uid="uid://dkr80d2pi0d41" path="res://addons/guide/debugger/guide_debugger.tscn" id="2_uet8a"]
[ext_resource type="Texture2D" uid="uid://7kcmi16gedd0" path="res://assets/LD-0001.png" id="3_ruo5i"]
[ext_resource type="Script" uid="uid://cyh0d64pfygbl" path="res://addons/maaacks_game_template/base/scripts/pause_menu_controller.gd" id="7_ukfuy"] [ext_resource type="Script" uid="uid://cyh0d64pfygbl" path="res://addons/maaacks_game_template/base/scripts/pause_menu_controller.gd" id="7_ukfuy"]
[ext_resource type="PackedScene" uid="uid://ccqajqchiw4xu" path="res://menus/scenes/overlaid_menus/pause_menu.tscn" id="8_wctvs"] [ext_resource type="PackedScene" uid="uid://ccqajqchiw4xu" path="res://menus/scenes/overlaid_menus/pause_menu.tscn" id="8_wctvs"]
[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/base_mode/base_mode.tres" id="9_eca4n"]
[ext_resource type="PackedScene" uid="uid://bkcsjsk2ciff" path="res://addons/maaacks_game_template/base/scenes/music_players/background_music_player.tscn" id="9_i2xii"] [ext_resource type="PackedScene" uid="uid://bkcsjsk2ciff" path="res://addons/maaacks_game_template/base/scenes/music_players/background_music_player.tscn" id="9_i2xii"]
[ext_resource type="Resource" uid="uid://dgluj0ql5vth7" path="res://systems/inputs/base_mode/pause.tres" id="10_0ari0"] [ext_resource type="Resource" uid="uid://dgluj0ql5vth7" path="res://systems/inputs/base_mode/pause.tres" id="10_0ari0"]
[ext_resource type="AudioStream" uid="uid://f8cvr5s041ej" path="res://assets/audio/ambiance/637083__nox_sound__ambiance_nature_night_cricket_calm_loop_stereo.wav" id="10_eca4n"] [ext_resource type="AudioStream" uid="uid://f8cvr5s041ej" path="res://assets/audio/ambiance/637083__nox_sound__ambiance_nature_night_cricket_calm_loop_stereo.wav" id="10_eca4n"]
@@ -23,9 +22,44 @@
[ext_resource type="PackedScene" uid="uid://kktuyhbd5xgc" path="res://menus/scenes/overlaid_menus/tuto_got_sword.tscn" id="17_t0d86"] [ext_resource type="PackedScene" uid="uid://kktuyhbd5xgc" path="res://menus/scenes/overlaid_menus/tuto_got_sword.tscn" id="17_t0d86"]
[ext_resource type="Texture2D" uid="uid://cjh5cnvdbq5ku" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_button_b_outline.svg" id="19_efsse"] [ext_resource type="Texture2D" uid="uid://cjh5cnvdbq5ku" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_button_b_outline.svg" id="19_efsse"]
[ext_resource type="Texture2D" uid="uid://nrhxjdpuje3f" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lt_outline.svg" id="20_crf87"] [ext_resource type="Texture2D" uid="uid://nrhxjdpuje3f" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lt_outline.svg" id="20_crf87"]
[ext_resource type="Texture2D" uid="uid://bfkj4neu0m0rm" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_rt_outline.svg" id="21_rmfv1"]
[ext_resource type="Texture2D" uid="uid://dyjvbsvbriii4" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_rb_outline.svg" id="23_p287n"] [ext_resource type="Texture2D" uid="uid://dyjvbsvbriii4" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_rb_outline.svg" id="23_p287n"]
[sub_resource type="LabelSettings" id="LabelSettings_2k3fr"]
font_size = 30
[sub_resource type="BoxShape3D" id="BoxShape3D_t0d86"]
size = Vector3(14, 15.5, 26)
[sub_resource type="BoxShape3D" id="BoxShape3D_p287n"]
size = Vector3(8.5, 16.5, 11.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_5hbxb"]
size = Vector3(8, 13.5, 10)
[sub_resource type="BoxShape3D" id="BoxShape3D_6gj1x"]
size = Vector3(8, 13.5, 11.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_x7fl1"]
size = Vector3(8.5, 38.5, 46.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_3wccx"]
size = Vector3(12, 11.5, 5)
[sub_resource type="BoxShape3D" id="BoxShape3D_hmdts"]
size = Vector3(12, 13, 7)
[sub_resource type="BoxShape3D" id="BoxShape3D_lnjrw"]
size = Vector3(14, 15.5, 13.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_3w3wd"]
size = Vector3(13, 16.5, 11.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_lu3yt"]
size = Vector3(11.5, 9, 4.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_pxspk"]
size = Vector3(11.5, 9, 4.5)
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_feb1n"] [sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_feb1n"]
panorama = ExtResource("2_ruo5i") panorama = ExtResource("2_ruo5i")
@@ -42,6 +76,7 @@ ssao_enabled = true
ssil_enabled = true ssil_enabled = true
sdfgi_enabled = true sdfgi_enabled = true
sdfgi_use_occlusion = true sdfgi_use_occlusion = true
glow_enabled = true
fog_enabled = true fog_enabled = true
fog_light_color = Color(0.9955967, 0.83634025, 0.69151855, 1) fog_light_color = Color(0.9955967, 0.83634025, 0.69151855, 1)
fog_sun_scatter = 0.5 fog_sun_scatter = 0.5
@@ -50,250 +85,31 @@ fog_sky_affect = 0.184
volumetric_fog_density = 0.004 volumetric_fog_density = 0.004
volumetric_fog_emission = Color(1, 1, 1, 1) volumetric_fog_emission = Color(1, 1, 1, 1)
volumetric_fog_anisotropy = 0.6 volumetric_fog_anisotropy = 0.6
adjustment_enabled = true
[sub_resource type="BoxShape3D" id="BoxShape3D_t0d86"] [sub_resource type="BoxMesh" id="BoxMesh_p287n"]
size = Vector3(14, 15.5, 26)
[sub_resource type="BoxShape3D" id="BoxShape3D_p287n"]
size = Vector3(8.5, 16.5, 11.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_qwuk2"]
size = Vector3(8.5, 16.5, 8)
[sub_resource type="BoxShape3D" id="BoxShape3D_efsse"]
size = Vector3(12, 18, 8)
[sub_resource type="BoxShape3D" id="BoxShape3D_x7fl1"]
size = Vector3(8.5, 38.5, 46.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_3wccx"]
size = Vector3(12, 11.5, 5)
[sub_resource type="BoxShape3D" id="BoxShape3D_nrosh"]
size = Vector3(8, 16.5, 25.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_lnjrw"]
size = Vector3(14, 15.5, 13.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_lgco8"]
size = Vector3(12, 14.5, 11)
[sub_resource type="BoxShape3D" id="BoxShape3D_51ivn"]
size = Vector3(12, 14.5, 11)
[sub_resource type="BoxShape3D" id="BoxShape3D_3w3wd"]
size = Vector3(13, 16.5, 11.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_lu3yt"]
size = Vector3(11.5, 9, 4.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_pxspk"]
size = Vector3(11.5, 9, 4.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_5hbxb"]
size = Vector3(9.5, 2, 5.5)
[sub_resource type="LabelSettings" id="LabelSettings_2k3fr"]
font_size = 30
[node name="Main" type="Node3D"] [node name="Main" type="Node3D"]
script = ExtResource("1_qwuk2")
[node name="Player" parent="." node_paths=PackedStringArray("TutorialWeaponTarget") instance=ExtResource("1_2vsi6")]
transform = Transform3D(0.054514527, 0, -0.9985129, 0, 1, 0, 0.9985129, 0, 0.054514527, -1.2857323, -132.74933, 116.15933)
collision_layer = 17
TutorialWeaponTarget = NodePath("../PlacedTutorialWeapon/WeaponLocationTarget")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_1bvp3")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.78043425, 0.15240018, 0.60637933, 0.17673612, -0.8765135, 0.44775894, 0.5997381, 0.4566158, 0.6571267, 0, 0, 0)
light_color = Color(0.99999934, 0.76777613, 0.6549227, 1)
light_energy = 2.0
light_volumetric_fog_energy = 2.0
shadow_enabled = true
shadow_opacity = 0.95
shadow_blur = 2.435
[node name="DebugLayer" type="CanvasLayer" parent="."]
[node name="GuideDebugger" parent="DebugLayer" instance=ExtResource("2_uet8a")]
visible = false
[node name="Map" type="Sprite3D" parent="."]
transform = Transform3D(-3.278354e-07, -7.5, -3.278354e-08, 0, -3.278354e-07, 0.75, -7.5, 3.278354e-07, 1.4330142e-15, 7.1878185, 8.602432, -175.5159)
visible = false
texture = ExtResource("3_ruo5i")
[node name="Guard tower" parent="." instance=ExtResource("11_wctvs")]
transform = Transform3D(0.09033705, 0, 0.99591124, 0, 1, 0, -0.99591124, 0, 0.09033705, -4.6100636, 1.5, 0.5658741)
[node name="Water" parent="." instance=ExtResource("12_i2xii")]
transform = Transform3D(10000, 0, 0, 0, 1, 0, 0, 0, 10000, 0, 4.03932, -186.25941)
[node name="PauseMenuController" type="Node" parent="."]
script = ExtResource("7_ukfuy")
pause_menu_packed = ExtResource("8_wctvs")
base_mode = ExtResource("9_eca4n")
pause = ExtResource("10_0ari0")
[node name="BackgroundMusicPlayer" parent="." instance=ExtResource("9_i2xii")] [node name="BackgroundMusicPlayer" parent="." instance=ExtResource("9_i2xii")]
stream = ExtResource("10_eca4n") stream = ExtResource("10_eca4n")
[node name="Lift" parent="." instance=ExtResource("13_eca4n")] [node name="PauseMenuController" type="Node" parent="." node_paths=PackedStringArray("player")]
transform = Transform3D(0.9961947, 0, -0.08715573, 0, 1, 0, 0.08715573, 0, 0.9961947, -4.593, 1.618, 0.583) script = ExtResource("7_ukfuy")
end_location = Vector3(-4.593, 116.11, 0.583) pause_menu_packed = ExtResource("8_wctvs")
lift_time = 15.0 player = NodePath("../Player")
pause = ExtResource("10_0ari0")
[node name="PlacedTutorialWeapon" type="MeshInstance3D" parent="."]
transform = Transform3D(-2, 3.019916e-07, 0, -3.019916e-07, -2, 0, 0, 0, 2, -17.904, -79.265, 145.317)
mesh = ExtResource("14_0ari0")
script = ExtResource("15_165wb")
[node name="SpotLight3D" type="SpotLight3D" parent="PlacedTutorialWeapon"]
transform = Transform3D(1, -1.509958e-07, 6.600236e-15, 0, -4.371139e-08, -1, 1.509958e-07, 1, -4.371139e-08, 0, -2.3931274, 0)
spot_range = 9.85
spot_attenuation = 0.46
spot_angle = 15.0
[node name="WeaponLocationTarget" type="Marker3D" parent="PlacedTutorialWeapon"]
[node name="TutoTriggers" type="Node3D" parent="."]
transform = Transform3D(0.054514527, 0, -0.9985129, 0, 1, 0, 0.9985129, 0, 0.054514527, -0.78573227, -132.74933, 116.65933)
[node name="TriggerTutoMove" type="Area3D" parent="TutoTriggers"]
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoMove"]
transform = Transform3D(0.9961947, 0, -0.087155946, 0, 1, 0, 0.087155946, 0, 0.9961947, 1.1144943, 6.5, 1.6032357)
shape = SubResource("BoxShape3D_t0d86")
[node name="TriggerTutoMantle" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, -10.4557495, 0, -28.61254)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoMantle"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 0.19611359, 7, -2.241436)
shape = SubResource("BoxShape3D_p287n")
[node name="TriggerTutoJump" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, 3.1977234, 0, -49.399136)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoJump"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, -0.90906525, 6.5, -1.0833435)
shape = SubResource("BoxShape3D_qwuk2")
[node name="TriggerTutoDoubleJump" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, 23.476433, 0, -44.786793)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoDoubleJump"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, -2.0671844, 5.75, -2.1884613)
shape = SubResource("BoxShape3D_efsse")
[node name="TriggerTutoWallJump" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, 38.60766, 0, -28.437609)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoWallJump"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, -1.9546509, 20.75, 10.8709755)
shape = SubResource("BoxShape3D_x7fl1")
[node name="TriggerTutoWallJump2" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, 15.983452, 0, 37.426994)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoWallJump2"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 2.3256226, 21.75, 4.9715767)
shape = SubResource("BoxShape3D_3wccx")
[node name="TriggerTutoDash" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, 28.393105, 27.5, 21.07917)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoDash"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 1.0587616, 7.5, 5.1117268)
shape = SubResource("BoxShape3D_nrosh")
[node name="TriggerTutoWeaponThrow" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, 4.428787, 58, 19.770819)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoWeaponThrow"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 4.4208603, 7, -4.632329)
shape = SubResource("BoxShape3D_lnjrw")
[node name="TriggerTutoEmpoweredDash" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, -25.417572, 58, 16.138357)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoEmpoweredDash"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 3.4464645, 6.5, -4.9685373)
shape = SubResource("BoxShape3D_lgco8")
[node name="TriggerTutoEmpoweredJump" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, -59.648212, 58, 10.263556)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoEmpoweredJump"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 3.4464645, 6.5, -4.9685373)
shape = SubResource("BoxShape3D_51ivn")
[node name="TriggerTutoEnjoy" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, -120.81145, 214.5, 2.417603)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoEnjoy"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 3.9663503, 5.5, -5.174009)
shape = SubResource("BoxShape3D_3w3wd")
[node name="TutorialDoneArea" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.14133324, 0, 0.98996216, 0, 1, 0, -0.98996216, 0, 0.14133324, 7.9436035, 53.74933, 16.672102)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TutorialDoneArea"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7500105, 4, 0.7499695)
shape = SubResource("BoxShape3D_lu3yt")
[node name="WeaponRetrieved" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.14133324, 0, 0.98996216, 0, 1, 0, -0.98996216, 0, 0.14133324, 27.3601, 53.74933, 18.733648)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/WeaponRetrieved"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7500105, 4, 0.7499695)
shape = SubResource("BoxShape3D_pxspk")
[node name="TutoTrigger" parent="TutoTriggers" instance=ExtResource("16_qwuk2")]
transform = Transform3D(0.054514553, 0, 0.99851304, 0, 1, 0, -0.99851304, 0, 0.054514553, -9.365448, -0.7506714, -14.818321)
first_input_texture = ExtResource("16_2k3fr")
complex_input_text = "while on wall"
tuto_text = "Jump"
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TutoTrigger"]
transform = Transform3D(0.9848077, 0, -0.17364818, 0, 1, 0, 0.17364818, 0, 0.9848077, 1.8592949, 0.5, 2.2158203)
shape = SubResource("BoxShape3D_5hbxb")
[node name="TutorialController" type="Control" parent="."] [node name="TutorialController" type="Control" parent="."]
visible = false
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 1
script = ExtResource("16_efsse") script = ExtResource("16_efsse")
tuto_got_sword_packed = ExtResource("17_t0d86") tuto_got_sword_packed = ExtResource("17_t0d86")
@@ -368,49 +184,6 @@ layout_mode = 2
text = "Mantle up" text = "Mantle up"
label_settings = SubResource("LabelSettings_2k3fr") label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoJump" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
theme_override_constants/separation = 15
[node name="TextureRect" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoJump"]
layout_mode = 2
texture = ExtResource("16_2k3fr")
[node name="Label" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoJump"]
layout_mode = 2
text = "Jump"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoDoubleJump" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
theme_override_constants/separation = 15
[node name="HBoxContainer" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer/TutoDoubleJump"]
layout_mode = 2
theme_override_constants/separation = 0
[node name="TextureRect" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoDoubleJump/HBoxContainer"]
layout_mode = 2
texture = ExtResource("16_2k3fr")
[node name="Label2" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoDoubleJump/HBoxContainer"]
layout_mode = 2
text = "+"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TextureRect2" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoDoubleJump/HBoxContainer"]
layout_mode = 2
texture = ExtResource("16_2k3fr")
[node name="Label3" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoDoubleJump"]
layout_mode = 2
text = "Double jump"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoWallJump" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"] [node name="TutoWallJump" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
@@ -435,21 +208,6 @@ layout_mode = 2
text = "Wall jump" text = "Wall jump"
label_settings = SubResource("LabelSettings_2k3fr") label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoDash" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
theme_override_constants/separation = 15
[node name="TextureRect" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoDash"]
layout_mode = 2
texture = ExtResource("19_efsse")
[node name="Label" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoDash"]
layout_mode = 2
text = "Dash (both in air and on ground)"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoDashWeapon" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"] [node name="TutoDashWeapon" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
@@ -489,62 +247,6 @@ layout_mode = 2
text = "Throw weapon" text = "Throw weapon"
label_settings = SubResource("LabelSettings_2k3fr") label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoEmpoweredDash" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
theme_override_constants/separation = 15
[node name="HBoxContainer" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredDash"]
layout_mode = 2
theme_override_constants/separation = 0
[node name="TextureRect" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredDash/HBoxContainer"]
layout_mode = 2
texture = ExtResource("21_rmfv1")
[node name="Label2" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredDash/HBoxContainer"]
layout_mode = 2
text = "+"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TextureRect2" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredDash/HBoxContainer"]
layout_mode = 2
texture = ExtResource("19_efsse")
[node name="Label3" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredDash"]
layout_mode = 2
text = "Empowered dash"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoEmpoweredJump" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
theme_override_constants/separation = 15
[node name="HBoxContainer" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredJump"]
layout_mode = 2
theme_override_constants/separation = 0
[node name="TextureRect" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredJump/HBoxContainer"]
layout_mode = 2
texture = ExtResource("21_rmfv1")
[node name="Label2" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredJump/HBoxContainer"]
layout_mode = 2
text = "+"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TextureRect2" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredJump/HBoxContainer"]
layout_mode = 2
texture = ExtResource("16_2k3fr")
[node name="Label3" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredJump"]
layout_mode = 2
text = "Empowered jump"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoEnjoy" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"] [node name="TutoEnjoy" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
@@ -556,30 +258,199 @@ layout_mode = 2
text = "Enjoy this little playground!" text = "Enjoy this little playground!"
label_settings = SubResource("LabelSettings_2k3fr") label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoTriggers" type="Node3D" parent="."]
transform = Transform3D(0.054514527, 0, -0.9985129, 0, 1, 0, 0.9985129, 0, 0.054514527, -0.78573227, -132.74933, 116.65933)
[node name="TriggerTutoMove" type="Area3D" parent="TutoTriggers"]
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoMove"]
transform = Transform3D(0.9961947, 0, -0.087155946, 0, 1, 0, 0.087155946, 0, 0.9961947, 1.1144943, 6.5, 1.6032357)
shape = SubResource("BoxShape3D_t0d86")
[node name="TriggerTutoMantle" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, -10.4557495, 0, -28.61254)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoMantle"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 0.19611359, 7, -2.241436)
shape = SubResource("BoxShape3D_p287n")
[node name="TutoJump" parent="TutoTriggers" instance=ExtResource("16_qwuk2")]
transform = Transform3D(0.14133328, 0, 0.98996216, 0, 1, 0, -0.98996216, 0, 0.14133328, -0.32653046, 1.2493286, -50.374645)
first_input_texture = ExtResource("16_2k3fr")
second_input_texture = ExtResource("16_2k3fr")
tuto_text = "Double jump"
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TutoJump"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.49998856, 6.25, 3.499977)
shape = SubResource("BoxShape3D_5hbxb")
[node name="TutoDash" parent="TutoTriggers" instance=ExtResource("16_qwuk2")]
transform = Transform3D(0.14133328, 0, 0.98996216, 0, 1, 0, -0.98996216, 0, 0.14133328, 19.967693, 1.2493286, -47.47731)
first_input_texture = ExtResource("16_crf87")
second_input_texture = ExtResource("19_efsse")
tuto_text = "Dash"
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TutoDash"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.49999237, 6.25, 4.2500153)
shape = SubResource("BoxShape3D_6gj1x")
[node name="TriggerTutoWallJump" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, 38.60766, 0, -28.437609)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoWallJump"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, -1.9546509, 20.75, 10.8709755)
shape = SubResource("BoxShape3D_x7fl1")
[node name="TriggerTutoWallJump2" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, 15.983452, 0, 37.426994)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoWallJump2"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 2.3256226, 21.75, 4.9715767)
shape = SubResource("BoxShape3D_3wccx")
[node name="TutoDash2" parent="TutoTriggers" instance=ExtResource("16_qwuk2")]
transform = Transform3D(0.14133325, 0, 0.98996216, 0, 1, 0, -0.98996216, 0, 0.14133325, 28.885735, 27.749329, 25.360323)
first_input_texture = ExtResource("16_crf87")
second_input_texture = ExtResource("19_efsse")
complex_input_text = "in air"
tuto_text = "Dash"
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TutoDash2"]
transform = Transform3D(1.0000031, 0, -4.917383e-07, 0, 1, 0, 4.917383e-07, 0, 1.0000031, 5.500023, 5, 0)
shape = SubResource("BoxShape3D_hmdts")
[node name="TriggerTutoWeaponThrow" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, 4.428787, 58, 19.770819)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoWeaponThrow"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 4.4208603, 7, -4.632329)
shape = SubResource("BoxShape3D_lnjrw")
[node name="TriggerTutoEnjoy" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.9961947, 0, -0.087155744, 0, 1, 0, 0.087155744, 0, 0.9961947, -120.81145, 214.5, 2.417603)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TriggerTutoEnjoy"]
transform = Transform3D(0.9961947, 0, -0.08715595, 0, 1, 0, 0.08715595, 0, 0.9961947, 3.9663503, 5.5, -5.174009)
shape = SubResource("BoxShape3D_3w3wd")
[node name="TutorialDoneArea" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.14133324, 0, 0.98996216, 0, 1, 0, -0.98996216, 0, 0.14133324, 7.9436035, 53.74933, 16.672102)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/TutorialDoneArea"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7500105, 4, 0.7499695)
shape = SubResource("BoxShape3D_lu3yt")
[node name="WeaponRetrieved" type="Area3D" parent="TutoTriggers"]
transform = Transform3D(0.14133324, 0, 0.98996216, 0, 1, 0, -0.98996216, 0, 0.14133324, 27.3601, 53.74933, 18.733648)
collision_layer = 0
collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="TutoTriggers/WeaponRetrieved"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7500105, 4, 0.7499695)
shape = SubResource("BoxShape3D_pxspk")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_1bvp3")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.7804346, 0.15240021, 0.60637945, 0.1767362, -0.87651366, 0.4477591, 0.5997384, 0.4566159, 0.6571269, 0, 0, 0)
light_color = Color(0.99999934, 0.76777613, 0.6549227, 1)
light_energy = 2.0
light_volumetric_fog_energy = 2.0
shadow_enabled = true
shadow_opacity = 0.95
shadow_blur = 2.435
[node name="Player" parent="." node_paths=PackedStringArray("TutorialWeaponTarget") instance=ExtResource("1_2vsi6")]
transform = Transform3D(0.054514527, 0, -0.9985129, 0, 1, 0, 0.9985129, 0, 0.054514527, -6, 75.5, -13.5)
collision_layer = 17
TutorialWeaponTarget = NodePath("../PlacedTutorialWeapon/WeaponLocationTarget")
TutorialDone = true
AccelerationAir = 1.5
[node name="DebugLayer" type="CanvasLayer" parent="."]
[node name="GuideDebugger" parent="DebugLayer" instance=ExtResource("2_uet8a")]
visible = false
[node name="Guard tower" parent="." instance=ExtResource("11_wctvs")]
transform = Transform3D(0.09033705, 0, 0.99591124, 0, 1, 0, -0.99591124, 0, 0.09033705, -4.6100636, 1.5, 0.5658741)
[node name="Water" parent="." instance=ExtResource("12_i2xii")]
transform = Transform3D(10000, 0, 0, 0, 1, 0, 0, 0, 10000, 0, 4.03932, -186.25941)
[node name="Lift" parent="." instance=ExtResource("13_eca4n")]
transform = Transform3D(0.9961947, 0, -0.08715573, 0, 1, 0, 0.08715573, 0, 0.9961947, -4.593, 1.618, 0.583)
end_location = Vector3(-4.593, 116.11, 0.583)
lift_time = 8.0
[node name="PlacedTutorialWeapon" type="MeshInstance3D" parent="."]
transform = Transform3D(-2, 3.019916e-07, 0, -3.019916e-07, -2, 0, 0, 0, 2, -17.904, -79.265, 145.317)
mesh = ExtResource("14_0ari0")
script = ExtResource("15_165wb")
[node name="SpotLight3D" type="SpotLight3D" parent="PlacedTutorialWeapon"]
transform = Transform3D(1, -1.509958e-07, 6.600236e-15, 0, -4.371139e-08, -1, 1.509958e-07, 1, -4.371139e-08, 0, -2.3931274, 0)
spot_range = 9.85
spot_attenuation = 0.46
spot_angle = 15.0
[node name="WeaponLocationTarget" type="Marker3D" parent="PlacedTutorialWeapon"]
[node name="LightLeakBlockers" type="Node3D" parent="."]
[node name="MeshInstance3D" type="MeshInstance3D" parent="LightLeakBlockers"]
transform = Transform3D(200, 0, 0, 0, 200, 0, 0, 0, 10, 0, -116, 178.82)
mesh = SubResource("BoxMesh_p287n")
skeleton = NodePath("../..")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="LightLeakBlockers"]
transform = Transform3D(34.729645, 0, 9.848078, 0, 200, 0, -196.96153, 0, 1.7364821, 57.5, -119, 178.82)
mesh = SubResource("BoxMesh_p287n")
skeleton = NodePath("../..")
[node name="MeshInstance3D3" type="MeshInstance3D" parent="LightLeakBlockers"]
transform = Transform3D(5.00679e-06, -200.00002, -2.3841858e-07, 0, -5.635115e-06, 10.000002, -200, 9.936228e-07, 2.3841858e-07, 1.5, -17, 114.82001)
mesh = SubResource("BoxMesh_p287n")
skeleton = NodePath("../..")
[node name="TutoLights" type="Node3D" parent="."]
[node name="SpotLight3D" type="SpotLight3D" parent="TutoLights"]
transform = Transform3D(1, 9.942504e-09, -4.395368e-08, 4.4703484e-08, -0.3420201, 0.9396927, -5.690144e-09, -0.9396927, -0.3420201, -11.5, -70.5, 106.5)
light_energy = 500.0
spot_range = 47.233
spot_angle = 18.85
spot_angle_attenuation = 10.556052
[connection signal="timeout" from="TutorialController/WaitToShowBlockingTuto" to="TutorialController" method="_show_weapon_tutorial"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoMove" to="TutorialController" method="hide_tutorials"] [connection signal="body_exited" from="TutoTriggers/TriggerTutoMove" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoMantle" to="TutorialController" method="_on_tuto_mantle_body_entered"] [connection signal="body_entered" from="TutoTriggers/TriggerTutoMantle" to="TutorialController" method="_on_tuto_mantle_body_entered"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoMantle" to="TutorialController" method="hide_tutorials"] [connection signal="body_exited" from="TutoTriggers/TriggerTutoMantle" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoJump" to="TutorialController" method="_on_tuto_jump_body_entered"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoJump" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoDoubleJump" to="TutorialController" method="_on_tuto_double_jump_body_entered"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoDoubleJump" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoWallJump" to="TutorialController" method="_on_tuto_wall_jump_body_entered"] [connection signal="body_entered" from="TutoTriggers/TriggerTutoWallJump" to="TutorialController" method="_on_tuto_wall_jump_body_entered"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoWallJump" to="TutorialController" method="hide_tutorials"] [connection signal="body_exited" from="TutoTriggers/TriggerTutoWallJump" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoWallJump2" to="TutorialController" method="_on_tuto_wall_jump_body_entered"] [connection signal="body_entered" from="TutoTriggers/TriggerTutoWallJump2" to="TutorialController" method="_on_tuto_wall_jump_body_entered"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoWallJump2" to="TutorialController" method="hide_tutorials"] [connection signal="body_exited" from="TutoTriggers/TriggerTutoWallJump2" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoDash" to="TutorialController" method="_on_tuto_dash_body_entered"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoDash" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoWeaponThrow" to="TutorialController" method="_on_tuto_weapon_throw_body_entered"] [connection signal="body_entered" from="TutoTriggers/TriggerTutoWeaponThrow" to="TutorialController" method="_on_tuto_weapon_throw_body_entered"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoWeaponThrow" to="TutorialController" method="hide_tutorials"] [connection signal="body_exited" from="TutoTriggers/TriggerTutoWeaponThrow" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoEmpoweredDash" to="TutorialController" method="_on_tuto_empowered_dash_body_entered"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoEmpoweredDash" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoEmpoweredJump" to="TutorialController" method="_on_tuto_empowered_jump_body_entered"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoEmpoweredJump" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TriggerTutoEnjoy" to="TutorialController" method="_on_tuto_enjoy_body_entered"] [connection signal="body_entered" from="TutoTriggers/TriggerTutoEnjoy" to="TutorialController" method="_on_tuto_enjoy_body_entered"]
[connection signal="body_exited" from="TutoTriggers/TriggerTutoEnjoy" to="TutorialController" method="hide_tutorials"] [connection signal="body_exited" from="TutoTriggers/TriggerTutoEnjoy" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/TutorialDoneArea" to="Player" method="OnTutorialDone"]
[connection signal="body_entered" from="TutoTriggers/TutorialDoneArea" to="TutorialController" method="_on_tuto_done_area_body_entered"] [connection signal="body_entered" from="TutoTriggers/TutorialDoneArea" to="TutorialController" method="_on_tuto_done_area_body_entered"]
[connection signal="body_entered" from="TutoTriggers/TutorialDoneArea" to="Player" method="OnTutorialDone"]
[connection signal="body_exited" from="TutoTriggers/TutorialDoneArea" to="TutorialController" method="hide_tutorials"] [connection signal="body_exited" from="TutoTriggers/TutorialDoneArea" to="TutorialController" method="hide_tutorials"]
[connection signal="body_entered" from="TutoTriggers/WeaponRetrieved" to="PlacedTutorialWeapon" method="_on_weapon_retrieved_body_entered"]
[connection signal="body_entered" from="TutoTriggers/WeaponRetrieved" to="TutorialController" method="_on_weapon_retrieved_body_entered"] [connection signal="body_entered" from="TutoTriggers/WeaponRetrieved" to="TutorialController" method="_on_weapon_retrieved_body_entered"]
[connection signal="timeout" from="TutorialController/WaitToShowBlockingTuto" to="TutorialController" method="_show_weapon_tutorial"] [connection signal="body_entered" from="TutoTriggers/WeaponRetrieved" to="PlacedTutorialWeapon" method="_on_weapon_retrieved_body_entered"]

View File

@@ -1,8 +1,10 @@
[gd_scene load_steps=17 format=3 uid="uid://vm22i5sv3p3s"] [gd_scene load_steps=19 format=3 uid="uid://vm22i5sv3p3s"]
[ext_resource type="PackedScene" uid="uid://c6k5nnpbypshi" path="res://addons/maaacks_game_template/base/scenes/menus/main_menu/main_menu.tscn" id="1_my8ii"] [ext_resource type="PackedScene" uid="uid://c6k5nnpbypshi" path="res://addons/maaacks_game_template/base/scenes/menus/main_menu/main_menu.tscn" id="1_my8ii"]
[ext_resource type="Script" uid="uid://c0ntfmiuw4ttg" path="res://menus/scenes/menus/main_menu/main_menu_with_animations.gd" id="2_nyjay"] [ext_resource type="Script" uid="uid://c0ntfmiuw4ttg" path="res://menus/scenes/menus/main_menu/main_menu_with_animations.gd" id="2_nyjay"]
[ext_resource type="AudioStream" uid="uid://f8cvr5s041ej" path="res://assets/audio/ambiance/637083__nox_sound__ambiance_nature_night_cricket_calm_loop_stereo.wav" id="3_tvvjd"] [ext_resource type="AudioStream" uid="uid://f8cvr5s041ej" path="res://assets/audio/ambiance/637083__nox_sound__ambiance_nature_night_cricket_calm_loop_stereo.wav" id="3_tvvjd"]
[ext_resource type="Resource" uid="uid://c2hpxkcujyc13" path="res://systems/inputs/menu_mode/menu_mode.tres" id="3_ytpwg"]
[ext_resource type="Resource" uid="uid://ck43v3q5ype3f" path="res://systems/inputs/menu_mode/back.tres" id="4_8i6b8"]
[sub_resource type="Animation" id="1"] [sub_resource type="Animation" id="1"]
resource_name = "Intro" resource_name = "Intro"
@@ -352,6 +354,8 @@ graph_offset = Vector2(-180.277, 49)
script = ExtResource("2_nyjay") script = ExtResource("2_nyjay")
level_select_packed_scene = null level_select_packed_scene = null
game_scene_path = "uid://dmkw8cmalm5k" game_scene_path = "uid://dmkw8cmalm5k"
menu_context = ExtResource("3_ytpwg")
back_action = ExtResource("4_8i6b8")
[node name="MenuAnimationPlayer" type="AnimationPlayer" parent="." index="1"] [node name="MenuAnimationPlayer" type="AnimationPlayer" parent="." index="1"]
libraries = { libraries = {

View File

@@ -33,20 +33,38 @@ alignment = 1
[node name="LookSensitivityControl" parent="VBoxContainer/MarginContainer/VBoxContainer" instance=ExtResource("2_iyvrj")] [node name="LookSensitivityControl" parent="VBoxContainer/MarginContainer/VBoxContainer" instance=ExtResource("2_iyvrj")]
layout_mode = 2 layout_mode = 2
option_name = "Look Sensitivity" option_name = "Joystick Sensitivity"
option_section = 1 option_section = 1
key = "LookSensitivity" key = "LookSensitivity"
section = "InputSettings" section = "InputSettings"
[node name="OptionLabel" parent="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl" index="0"] [node name="OptionLabel" parent="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl" index="0"]
text = "Look Sensitivity :" text = "Joystick Sensitivity :"
[node name="HSlider" parent="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl" index="1"] [node name="HSlider" parent="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl" index="1"]
min_value = 0.2 min_value = 0.2
max_value = 2.0 max_value = 2.0
step = 0.2 step = 0.2
value = 2.0
tick_count = 10 tick_count = 10
[node name="MouseSensitivityControl" parent="VBoxContainer/MarginContainer/VBoxContainer" instance=ExtResource("2_iyvrj")]
layout_mode = 2
option_name = "Mouse Sensitivity"
option_section = 1
key = "MouseSensitivity"
section = "InputSettings"
[node name="OptionLabel" parent="VBoxContainer/MarginContainer/VBoxContainer/MouseSensitivityControl" index="0"]
text = "Mouse Sensitivity :"
[node name="HSlider" parent="VBoxContainer/MarginContainer/VBoxContainer/MouseSensitivityControl" index="1"]
min_value = 1.0
max_value = 20.0
step = 1.0
value = 5.0
tick_count = 20
[node name="HeadBobbingControl" parent="VBoxContainer/MarginContainer/VBoxContainer" instance=ExtResource("2_iyvrj")] [node name="HeadBobbingControl" parent="VBoxContainer/MarginContainer/VBoxContainer" instance=ExtResource("2_iyvrj")]
layout_mode = 2 layout_mode = 2
option_name = "Head Bobbing while walking" option_name = "Head Bobbing while walking"
@@ -76,5 +94,6 @@ step = 0.1
tick_count = 10 tick_count = 10
[editable path="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl"] [editable path="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl"]
[editable path="VBoxContainer/MarginContainer/VBoxContainer/MouseSensitivityControl"]
[editable path="VBoxContainer/MarginContainer/VBoxContainer/HeadBobbingControl"] [editable path="VBoxContainer/MarginContainer/VBoxContainer/HeadBobbingControl"]
[editable path="VBoxContainer/MarginContainer/VBoxContainer/FOVChangeControl"] [editable path="VBoxContainer/MarginContainer/VBoxContainer/FOVChangeControl"]

View File

@@ -1,13 +1,17 @@
[gd_scene load_steps=4 format=3 uid="uid://foajscu2dqkk"] [gd_scene load_steps=5 format=3 uid="uid://foajscu2dqkk"]
[ext_resource type="PackedScene" uid="uid://vh1ucj2rfbby" path="res://addons/maaacks_game_template/base/scenes/menus/options_menu/mini_options_menu.tscn" id="1_gcivb"] [ext_resource type="PackedScene" uid="uid://vh1ucj2rfbby" path="res://addons/maaacks_game_template/base/scenes/menus/options_menu/mini_options_menu.tscn" id="1_gcivb"]
[ext_resource type="Script" uid="uid://ceg0gjjapg77k" path="res://menus/scenes/menus/options_menu/mini_options_menu_with_reset.gd" id="2_oof6u"] [ext_resource type="Script" uid="uid://ceg0gjjapg77k" path="res://menus/scenes/menus/options_menu/mini_options_menu_with_reset.gd" id="2_oof6u"]
[ext_resource type="PackedScene" uid="uid://dfjkn4yl3q1am" path="res://menus/scenes/menus/options_menu/game/reset_game_control/reset_game_control.tscn" id="3_gss4d"] [ext_resource type="PackedScene" uid="uid://dfjkn4yl3q1am" path="res://menus/scenes/menus/options_menu/game/reset_game_control/reset_game_control.tscn" id="3_gss4d"]
[ext_resource type="PackedScene" uid="uid://ceehkbh6emrdm" path="res://menus/scenes/menus/options_menu/input/input_extras_menu.tscn" id="4_grbel"]
[node name="MiniOptionsMenu" instance=ExtResource("1_gcivb")] [node name="MiniOptionsMenu" instance=ExtResource("1_gcivb")]
script = ExtResource("2_oof6u") script = ExtResource("2_oof6u")
[node name="ResetGameControl" parent="." index="3" instance=ExtResource("3_gss4d")] [node name="Inputs" parent="." index="0" instance=ExtResource("4_grbel")]
layout_mode = 2
[node name="ResetGameControl" parent="." index="4" instance=ExtResource("3_gss4d")]
layout_mode = 2 layout_mode = 2
[connection signal="reset_confirmed" from="ResetGameControl" to="." method="_on_reset_game_control_reset_confirmed"] [connection signal="reset_confirmed" from="ResetGameControl" to="." method="_on_reset_game_control_reset_confirmed"]

View File

@@ -1,7 +1,9 @@
[gd_scene load_steps=3 format=3 uid="uid://dim045la3mijk"] [gd_scene load_steps=4 format=3 uid="uid://dim045la3mijk"]
[ext_resource type="PackedScene" uid="uid://cikf3o5omnunl" path="res://addons/maaacks_game_template/base/scenes/overlaid_menu/menus/mini_options_overlaid_menu.tscn" id="1_5piya"] [ext_resource type="PackedScene" uid="uid://cikf3o5omnunl" path="res://addons/maaacks_game_template/base/scenes/overlaid_menu/menus/mini_options_overlaid_menu.tscn" id="1_5piya"]
[ext_resource type="PackedScene" uid="uid://foajscu2dqkk" path="res://menus/scenes/menus/options_menu/mini_options_menu_with_reset.tscn" id="2_3u5po"] [ext_resource type="PackedScene" uid="uid://foajscu2dqkk" path="res://menus/scenes/menus/options_menu/mini_options_menu_with_reset.tscn" id="2_3u5po"]
[ext_resource type="Resource" uid="uid://ck43v3q5ype3f" path="res://systems/inputs/menu_mode/back.tres" id="3_i7tty"]
[node name="MiniOptionsOverlaidMenu" instance=ExtResource("1_5piya")] [node name="MiniOptionsOverlaidMenu" instance=ExtResource("1_5piya")]
menu_scene = ExtResource("2_3u5po") menu_scene = ExtResource("2_3u5po")
back_action = ExtResource("3_i7tty")

View File

@@ -1,15 +1,18 @@
[gd_scene load_steps=5 format=3 uid="uid://ccqajqchiw4xu"] [gd_scene load_steps=6 format=3 uid="uid://ccqajqchiw4xu"]
[ext_resource type="PackedScene" uid="uid://b5cd6sa8qq4vc" path="res://addons/maaacks_game_template/base/scenes/overlaid_menu/menus/pause_menu.tscn" id="1_0paax"] [ext_resource type="PackedScene" uid="uid://b5cd6sa8qq4vc" path="res://addons/maaacks_game_template/base/scenes/overlaid_menu/menus/pause_menu.tscn" id="1_0paax"]
[ext_resource type="Script" uid="uid://bwvomv4eww4fg" path="res://menus/scenes/overlaid_menus/pause_menu.gd" id="2_ek1hy"] [ext_resource type="Script" uid="uid://bwvomv4eww4fg" path="res://menus/scenes/overlaid_menus/pause_menu.gd" id="2_ek1hy"]
[ext_resource type="PackedScene" uid="uid://dim045la3mijk" path="res://menus/scenes/overlaid_menus/mini_options_overlaid_menu.tscn" id="3_e0t2r"] [ext_resource type="PackedScene" uid="uid://dim045la3mijk" path="res://menus/scenes/overlaid_menus/mini_options_overlaid_menu.tscn" id="3_e0t2r"]
[ext_resource type="Resource" uid="uid://c2hpxkcujyc13" path="res://systems/inputs/menu_mode/menu_mode.tres" id="4_nfx08"] [ext_resource type="Resource" uid="uid://c2hpxkcujyc13" path="res://systems/inputs/menu_mode/menu_mode.tres" id="4_nfx08"]
[ext_resource type="Resource" uid="uid://ck43v3q5ype3f" path="res://systems/inputs/menu_mode/back.tres" id="5_su1bt"]
[node name="PauseMenu" instance=ExtResource("1_0paax")] [node name="PauseMenu" instance=ExtResource("1_0paax")]
top_level = true
script = ExtResource("2_ek1hy") script = ExtResource("2_ek1hy")
options_packed_scene = ExtResource("3_e0t2r") options_packed_scene = ExtResource("3_e0t2r")
main_menu_scene = "res://menus/scenes/menus/main_menu/main_menu_with_animations.tscn" main_menu_scene = "res://menus/scenes/menus/main_menu/main_menu_with_animations.tscn"
menu_context = ExtResource("4_nfx08") menu_context = ExtResource("4_nfx08")
back_action = ExtResource("5_su1bt")
[connection signal="tree_entered" from="." to="." method="on_enter_tree"] [connection signal="tree_entered" from="." to="." method="on_enter_tree"]
[connection signal="tree_exited" from="." to="." method="on_exit_tree"] [connection signal="tree_exited" from="." to="." method="on_exit_tree"]

View File

@@ -20,7 +20,6 @@ static func get_level_state(level_state_key : String) -> LevelState:
return new_level_state return new_level_state
static func has_game_state() -> bool: static func has_game_state() -> bool:
return false
return GlobalState.has_state(STATE_NAME) return GlobalState.has_state(STATE_NAME)
static func get_game_state() -> GameState: static func get_game_state() -> GameState:

View File

@@ -1,12 +1,14 @@
[gd_scene load_steps=45 format=3 uid="uid://bei4nhkf8lwdo"] [gd_scene load_steps=47 format=3 uid="uid://bei4nhkf8lwdo"]
[ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://player_controller/Scripts/PlayerController.cs" id="1_poq2x"] [ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://player_controller/Scripts/PlayerController.cs" id="1_poq2x"]
[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/base_mode/base_mode.tres" id="3_cresl"] [ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/base_mode/base_mode.tres" id="3_cresl"]
[ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/base_mode/rotate_y.tres" id="4_rxwoh"] [ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/base_mode/rotate_y.tres" id="4_rxwoh"]
[ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://systems/inputs/base_mode/rotate_floorplane.tres" id="5_4u7i3"] [ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://systems/inputs/base_mode/rotate_floorplane.tres" id="5_4u7i3"]
[ext_resource type="Script" uid="uid://dv7v1ywmbvvcd" path="res://player_controller/Scripts/HealthSystem.cs" id="5_umw0l"] [ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://systems/inputs/base_mode/move_left.tres" id="5_q14ux"]
[ext_resource type="Script" uid="uid://vuq8rjq3vegn" path="res://player_controller/Scripts/Stamina.cs" id="6_lxtc4"] [ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://systems/inputs/base_mode/move_right.tres" id="6_q7bng"]
[ext_resource type="Script" uid="uid://cwbvxlfvmocc1" path="res://player_controller/Scripts/StairsSystem.cs" id="7_bmt5a"] [ext_resource type="Script" uid="uid://cwbvxlfvmocc1" path="res://player_controller/Scripts/StairsSystem.cs" id="7_bmt5a"]
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://systems/inputs/base_mode/move_front.tres" id="7_m8gvy"]
[ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://systems/inputs/base_mode/move_back.tres" id="8_jb43f"]
[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/base_mode/aim_release.tres" id="8_lhb11"] [ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/base_mode/aim_release.tres" id="8_lhb11"]
[ext_resource type="Script" uid="uid://dd1yrt7eiiyf4" path="res://player_controller/Scripts/CapsuleCollider.cs" id="8_lmtjd"] [ext_resource type="Script" uid="uid://dd1yrt7eiiyf4" path="res://player_controller/Scripts/CapsuleCollider.cs" id="8_lmtjd"]
[ext_resource type="Resource" uid="uid://c3e0ivgaxrsyb" path="res://systems/inputs/base_mode/aim_down.tres" id="8_obsfv"] [ext_resource type="Resource" uid="uid://c3e0ivgaxrsyb" path="res://systems/inputs/base_mode/aim_down.tres" id="8_obsfv"]
@@ -63,7 +65,7 @@ WalkSpeed = 7.5
AccelerationAir = 2.0 AccelerationAir = 2.0
DecelerationAir = 0.1 DecelerationAir = 0.1
Weight = 5.0 Weight = 5.0
MantleTime = 0.2 MantleTime = 0.3
SimpleJumpStartVelocity = 8.0 SimpleJumpStartVelocity = 8.0
SimpleJumpHangTimeInFrames = 1 SimpleJumpHangTimeInFrames = 1
SimpleJumpGravityLesseningFactor = 2.5 SimpleJumpGravityLesseningFactor = 2.5
@@ -73,7 +75,7 @@ DoubleJumpGravityLesseningFactor = 1.5
MegaJumpStartVelocity = 30.0 MegaJumpStartVelocity = 30.0
MegaJumpHangTimeInFrames = 12 MegaJumpHangTimeInFrames = 12
MegaJumpGravityLesseningFactor = 1.2 MegaJumpGravityLesseningFactor = 1.2
WallJumpStartVelocity = 8.0 WallJumpStartVelocity = 12.0
MaxNumberOfEmpoweredActions = 3 MaxNumberOfEmpoweredActions = 3
SimpleDashStrength = 15.0 SimpleDashStrength = 15.0
PoweredDashStrength = 30.0 PoweredDashStrength = 30.0
@@ -82,11 +84,23 @@ PostDashSpeed = 30.0
WallHugGravityLesseningFactor = 15.0 WallHugGravityLesseningFactor = 15.0
WallHugDownwardMaxSpeed = 8.0 WallHugDownwardMaxSpeed = 8.0
WallHugHorizontalDeceleration = 0.5 WallHugHorizontalDeceleration = 0.5
WallRunAltitudeLossSpeed = 12.0
WallRunSpeedThreshold = 5.0
[node name="WallRunSnapper" type="RayCast3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 0, 0, 0)
target_position = Vector3(0, 0, -5)
collision_mask = 2
[node name="InputController" type="Node3D" parent="."] [node name="InputController" type="Node3D" parent="."]
script = ExtResource("16_v31n3") script = ExtResource("16_v31n3")
base_mode = ExtResource("3_cresl") base_mode = ExtResource("3_cresl")
move = ExtResource("17_h6vvl") move = ExtResource("17_h6vvl")
move_left = ExtResource("5_q14ux")
move_right = ExtResource("6_q7bng")
move_front = ExtResource("7_m8gvy")
move_back = ExtResource("8_jb43f")
rotate_y = ExtResource("4_rxwoh") rotate_y = ExtResource("4_rxwoh")
rotate_floorplane = ExtResource("5_4u7i3") rotate_floorplane = ExtResource("5_4u7i3")
aim_down = ExtResource("8_obsfv") aim_down = ExtResource("8_obsfv")
@@ -116,12 +130,6 @@ CapsuleDefaultHeight = 1.7
[node name="HeadSystem" parent="." instance=ExtResource("11_rxwoh")] [node name="HeadSystem" parent="." instance=ExtResource("11_rxwoh")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0)
[node name="HealthSystem" type="Node3D" parent="."]
script = ExtResource("5_umw0l")
[node name="Stamina" type="Node3D" parent="."]
script = ExtResource("6_lxtc4")
[node name="StairsSystem" type="Node3D" parent="."] [node name="StairsSystem" type="Node3D" parent="."]
script = ExtResource("7_bmt5a") script = ExtResource("7_bmt5a")
@@ -163,25 +171,44 @@ target_position = Vector3(0, 1, 0)
[node name="TweenQueueSystem" parent="." instance=ExtResource("22_rpwev")] [node name="TweenQueueSystem" parent="." instance=ExtResource("22_rpwev")]
[node name="WallHugSystem" type="Node3D" parent="."] [node name="WallHugSystem" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
script = ExtResource("27_n7qhm") script = ExtResource("27_n7qhm")
[node name="back" type="RayCast3D" parent="WallHugSystem"] [node name="back" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(0, 0, 1) target_position = Vector3(0, 0, 1)
collision_mask = 2 collision_mask = 2
[node name="back2" type="RayCast3D" parent="WallHugSystem"]
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, 0, 0, 0)
target_position = Vector3(0, 0, 1)
collision_mask = 2
[node name="front" type="RayCast3D" parent="WallHugSystem"] [node name="front" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(0, 0, -1) target_position = Vector3(0, 0, -1)
collision_mask = 2 collision_mask = 2
[node name="front2" type="RayCast3D" parent="WallHugSystem"]
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, 0, 0, 0)
target_position = Vector3(0, 0, -1)
collision_mask = 2
[node name="right" type="RayCast3D" parent="WallHugSystem"] [node name="right" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(1, 0, 0) target_position = Vector3(1, 0, 0)
collision_mask = 2 collision_mask = 2
[node name="right2" type="RayCast3D" parent="WallHugSystem"]
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, 0, 0, 0)
target_position = Vector3(1, 0, 0)
collision_mask = 2
[node name="left" type="RayCast3D" parent="WallHugSystem"] [node name="left" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(-1, 0, 0) target_position = Vector3(-1, 0, 0)
collision_mask = 2 collision_mask = 2
[node name="left2" type="RayCast3D" parent="WallHugSystem"]
transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, 0, 0, 0)
target_position = Vector3(-1, 0, 0)
collision_mask = 2
[node name="DashSystem" parent="." instance=ExtResource("18_q5h8a")] [node name="DashSystem" parent="." instance=ExtResource("18_q5h8a")]
DashSpeed = 0.2 DashSpeed = 0.2
PostDashSpeed = 30.0 PostDashSpeed = 30.0
@@ -194,6 +221,7 @@ ThrowForce = 15.0
StraightThrowDuration = 0.05 StraightThrowDuration = 0.05
[node name="DashIndicator" type="Node3D" parent="."] [node name="DashIndicator" type="Node3D" parent="."]
visible = false
[node name="DashIndicatorMesh" type="MeshInstance3D" parent="DashIndicator"] [node name="DashIndicatorMesh" type="MeshInstance3D" parent="DashIndicator"]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, -1) transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, -1)
@@ -220,15 +248,24 @@ offset_bottom = 1.0
enabled = false enabled = false
initial_node_to_watch = NodePath("../StateChart") initial_node_to_watch = NodePath("../StateChart")
[node name="UI" type="CanvasLayer" parent="."] [node name="UI" type="Control" parent="."]
script = ExtResource("30_2ghaa") layout_mode = 3
[node name="MarginContainer" type="MarginContainer" parent="UI"]
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 1
script = ExtResource("30_2ghaa")
[node name="MarginContainer" type="MarginContainer" parent="UI"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
theme_override_constants/margin_left = 50 theme_override_constants/margin_left = 50
theme_override_constants/margin_top = 50 theme_override_constants/margin_top = 50
theme_override_constants/margin_right = 50 theme_override_constants/margin_right = 50
@@ -241,7 +278,7 @@ size_flags_vertical = 0
[node name="DashesLabel" type="Label" parent="UI/MarginContainer/VBoxContainer"] [node name="DashesLabel" type="Label" parent="UI/MarginContainer/VBoxContainer"]
layout_mode = 2 layout_mode = 2
text = "Dashes" text = "Empowered actions"
[node name="HBoxContainer" type="HBoxContainer" parent="UI/MarginContainer/VBoxContainer"] [node name="HBoxContainer" type="HBoxContainer" parent="UI/MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 30) custom_minimum_size = Vector2(0, 30)
@@ -267,12 +304,14 @@ expand_mode = 2
[node name="CenterContainer" type="CenterContainer" parent="UI"] [node name="CenterContainer" type="CenterContainer" parent="UI"]
custom_minimum_size = Vector2(1920, 1080) custom_minimum_size = Vector2(1920, 1080)
layout_mode = 1
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_right = -1.0 offset_right = -1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2
[node name="CenterIcon" type="TextureRect" parent="UI/CenterContainer"] [node name="CenterIcon" type="TextureRect" parent="UI/CenterContainer"]
material = SubResource("CanvasItemMaterial_2q0ik") material = SubResource("CanvasItemMaterial_2q0ik")
@@ -282,11 +321,13 @@ texture = ExtResource("32_lgpc8")
expand_mode = 1 expand_mode = 1
[node name="CenterContainer2" type="CenterContainer" parent="UI"] [node name="CenterContainer2" type="CenterContainer" parent="UI"]
layout_mode = 1
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2
[node name="MarginContainer" type="MarginContainer" parent="UI/CenterContainer2"] [node name="MarginContainer" type="MarginContainer" parent="UI/CenterContainer2"]
layout_mode = 2 layout_mode = 2
@@ -565,6 +606,12 @@ to = NodePath("../../OnWall/Hugging")
event = &"wall_hug" event = &"wall_hug"
delay_in_seconds = "0.0" delay_in_seconds = "0.0"
[node name="OnWallRun" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("28_n7qhm")
to = NodePath("../../OnWall/Running")
event = &"wall_run"
delay_in_seconds = "0.0"
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/Airborne"] [node name="OnDash" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("28_n7qhm") script = ExtResource("28_n7qhm")
to = NodePath("../../Dashing/Dash") to = NodePath("../../Dashing/Dash")
@@ -626,6 +673,12 @@ delay_in_seconds = "0.0"
script = ExtResource("26_infe6") script = ExtResource("26_infe6")
initial_state = NodePath("Hugging") initial_state = NodePath("Hugging")
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Dashing/Dash")
event = &"dash"
delay_in_seconds = "0.0"
[node name="OnGrounded" type="Node" parent="StateChart/Root/Movement/OnWall"] [node name="OnGrounded" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm") script = ExtResource("28_n7qhm")
to = NodePath("../../Grounded") to = NodePath("../../Grounded")
@@ -644,50 +697,27 @@ to = NodePath("../../Jump/MegaJump")
event = &"megajump" event = &"megajump"
delay_in_seconds = "0.0" delay_in_seconds = "0.0"
[node name="HugCanceled" type="Node" parent="StateChart/Root/Movement/OnWall"] [node name="OnLeaveWall" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="ToHanging" type="Node" parent="StateChart/Root/Movement/OnWall/HugCanceled"]
script = ExtResource("28_n7qhm") script = ExtResource("28_n7qhm")
to = NodePath("../../Hanging") to = NodePath("../../Airborne/Reset")
event = &"oh_hit_wall" event = &"start_falling"
delay_in_seconds = "0.0" delay_in_seconds = "0.0"
[node name="Hugging" type="Node" parent="StateChart/Root/Movement/OnWall"] [node name="Hugging" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm") script = ExtResource("27_34snm")
[node name="OnGrounded" type="Node" parent="StateChart/Root/Movement/OnWall/Hugging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Grounded")
event = &"grounded"
delay_in_seconds = "0.0"
[node name="OnLeaveWall" type="Node" parent="StateChart/Root/Movement/OnWall/Hugging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Airborne/CoyoteEnabled")
event = &"start_falling"
delay_in_seconds = "0.0"
[node name="OnDrop" type="Node" parent="StateChart/Root/Movement/OnWall/Hugging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../HugCanceled")
event = &"dash"
delay_in_seconds = "0.0"
[node name="Hanging" type="Node" parent="StateChart/Root/Movement/OnWall"] [node name="Hanging" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm") script = ExtResource("27_34snm")
[node name="OnDrop" type="Node" parent="StateChart/Root/Movement/OnWall/Hanging"] [node name="Running" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm") script = ExtResource("27_34snm")
to = NodePath("../../Hugging")
event = &"dash"
delay_in_seconds = "0.0"
[connection signal="input_aim_canceled" from="InputController" to="." method="OnInputAimCanceled"] [connection signal="input_aim_canceled" from="InputController" to="." method="OnInputAimCanceled"]
[connection signal="input_aim_down" from="InputController" to="." method="OnInputAimDown"] [connection signal="input_aim_down" from="InputController" to="." method="OnInputAimDown"]
[connection signal="input_aim_pressed" from="InputController" to="." method="OnInputAimPressed"] [connection signal="input_aim_pressed" from="InputController" to="." method="OnInputAimPressed"]
[connection signal="input_aim_released" from="InputController" to="." method="OnInputAimReleased"] [connection signal="input_aim_released" from="InputController" to="." method="OnInputAimReleased"]
[connection signal="input_dash" from="InputController" to="." method="OnInputDashPressed"] [connection signal="input_dash" from="InputController" to="." method="OnInputDashPressed"]
[connection signal="input_device_changed" from="InputController" to="." method="InputDeviceChanged"]
[connection signal="input_empower_down" from="InputController" to="." method="OnInputEmpowerDown"] [connection signal="input_empower_down" from="InputController" to="." method="OnInputEmpowerDown"]
[connection signal="input_empower_released" from="InputController" to="." method="OnInputEmpowerReleased"] [connection signal="input_empower_released" from="InputController" to="." method="OnInputEmpowerReleased"]
[connection signal="input_hit" from="InputController" to="." method="OnInputHitPressed"] [connection signal="input_hit" from="InputController" to="." method="OnInputHitPressed"]
@@ -695,6 +725,7 @@ delay_in_seconds = "0.0"
[connection signal="input_jump_ongoing" from="InputController" to="." method="OnInputJumpOngoing"] [connection signal="input_jump_ongoing" from="InputController" to="." method="OnInputJumpOngoing"]
[connection signal="input_jump_started" from="InputController" to="." method="OnInputJumpStarted"] [connection signal="input_jump_started" from="InputController" to="." method="OnInputJumpStarted"]
[connection signal="input_move" from="InputController" to="." method="OnInputMove"] [connection signal="input_move" from="InputController" to="." method="OnInputMove"]
[connection signal="input_move_keyboard" from="InputController" to="." method="OnInputMoveKeyboard"]
[connection signal="input_rotate_floorplane" from="InputController" to="." method="OnInputRotateFloorplane"] [connection signal="input_rotate_floorplane" from="InputController" to="." method="OnInputRotateFloorplane"]
[connection signal="input_rotate_y" from="InputController" to="." method="OnInputRotateY"] [connection signal="input_rotate_y" from="InputController" to="." method="OnInputRotateY"]
[connection signal="input_throw" from="InputController" to="." method="OnInputThrowPressed"] [connection signal="input_throw" from="InputController" to="." method="OnInputThrowPressed"]

View File

@@ -1,7 +1,7 @@
using Godot; using Godot;
using System; using System;
public partial class PlayerUi : CanvasLayer public partial class PlayerUi : Control
{ {
private TextureRect[] _dashIcons = new TextureRect[3]; private TextureRect[] _dashIcons = new TextureRect[3];

View File

@@ -146,9 +146,6 @@ public partial class HealthSystem : Node3D
public CharacterBody3D Parent; public CharacterBody3D Parent;
public Camera3D Camera; public Camera3D Camera;
public Node3D Head; public Node3D Head;
public ColorRect VignetteRect;
public ColorRect DistortionRect;
public ColorRect BlurRect;
} }
public void Init(HealthSystemInitParams initParams) public void Init(HealthSystemInitParams initParams)
@@ -162,10 +159,6 @@ public partial class HealthSystem : Node3D
_camera = initParams.Camera; _camera = initParams.Camera;
_head = initParams.Head; _head = initParams.Head;
_vignetteMaterial = initParams.VignetteRect.Material as ShaderMaterial;
_distortionMaterial = initParams.DistortionRect.Material as ShaderMaterial;
_blurMaterial = initParams.BlurRect.Material as ShaderMaterial;
// Resetting shaders' parameters // Resetting shaders' parameters

View File

@@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using Godot; using Godot;
using GodotStateCharts; using GodotStateCharts;
using Movementtests.addons.godot_state_charts.csharp; using Movementtests.addons.godot_state_charts.csharp;
@@ -8,16 +9,22 @@ using RustyOptions;
public partial class PlayerController : CharacterBody3D public partial class PlayerController : CharacterBody3D
{ {
public enum AllowedInputs
{
All,
MoveCamera,
None,
}
private bool _isUsingGamepad = false;
// User API to important child nodes. // User API to important child nodes.
public HeadSystem HeadSystem; public HeadSystem HeadSystem;
public Bobbing Bobbing; public Bobbing Bobbing;
public FieldOfView FieldOfView; public FieldOfView FieldOfView;
public Stamina Stamina;
public StairsSystem StairsSystem; public StairsSystem StairsSystem;
public MantleSystem MantleSystem; public MantleSystem MantleSystem;
public DashSystem DashSystem; public DashSystem DashSystem;
public CapsuleCollider CapsuleCollider; public CapsuleCollider CapsuleCollider;
public HealthSystem HealthSystem;
public TweenQueueSystem TweenQueueSystem; public TweenQueueSystem TweenQueueSystem;
public Node3D WeaponRoot; public Node3D WeaponRoot;
public WeaponSystem WeaponSystem; public WeaponSystem WeaponSystem;
@@ -28,6 +35,7 @@ public partial class PlayerController : CharacterBody3D
public Node3D DashIndicatorNode; public Node3D DashIndicatorNode;
public MeshInstance3D DashIndicatorMesh; public MeshInstance3D DashIndicatorMesh;
public CylinderMesh DashIndicatorMeshCylinder; public CylinderMesh DashIndicatorMeshCylinder;
public RayCast3D WallRunSnapper;
private bool _movementEnabled = true; private bool _movementEnabled = true;
@@ -41,10 +49,11 @@ public partial class PlayerController : CharacterBody3D
private RayCast3D[] _headCollisionDetectors; private RayCast3D[] _headCollisionDetectors;
private Vector3 _inputMove = Vector3.Zero; private Vector3 _inputMove = Vector3.Zero;
private Vector3 _inputMoveKeyboard = Vector3.Zero;
private float _inputRotateY; private float _inputRotateY;
private float _inputRotateFloorplane; private float _inputRotateFloorplane;
private int _framesSinceJumpAtApex = 0; private int _framesSinceJumpAtApex;
// Timers // Timers
private Timer _timeScaleAimInAirTimer; private Timer _timeScaleAimInAirTimer;
@@ -52,6 +61,7 @@ public partial class PlayerController : CharacterBody3D
private Timer _powerCooldownTimer; private Timer _powerCooldownTimer;
[Export] public Marker3D TutorialWeaponTarget; [Export] public Marker3D TutorialWeaponTarget;
[Export] public bool TutorialDone { get; set; }
[ExportCategory("Movement")] [ExportCategory("Movement")]
[ExportGroup("Ground")] [ExportGroup("Ground")]
@@ -145,6 +155,16 @@ public partial class PlayerController : CharacterBody3D
[Export(PropertyHint.Range, "0.1,10,0.1,or_greater")] [Export(PropertyHint.Range, "0.1,10,0.1,or_greater")]
public float WallHugHorizontalDeceleration { get; set; } = 5f; public float WallHugHorizontalDeceleration { get; set; } = 5f;
// Wall run
[ExportGroup("Wall run")]
[Export(PropertyHint.Range, "1,20,0.1,or_greater")]
public float WallRunUpwardVelocity { get; set; } = 10f;
[Export(PropertyHint.Range, "1,20,0.1,or_greater")]
public float WallRunAltitudeLossSpeed { get; set; } = 10f;
[Export(PropertyHint.Range, "1,20,0.1,or_greater")]
public float WallRunSpeedThreshold { get; set; } = 8f;
private float _targetSpeed; private float _targetSpeed;
private float _gravity; private float _gravity;
@@ -158,12 +178,13 @@ public partial class PlayerController : CharacterBody3D
PlayerUi.SetNumberOfDashesLeft(value); PlayerUi.SetNumberOfDashesLeft(value);
} }
} }
public bool TutorialDone { get; set; } = false;
public AllowedInputs CurrentlyAllowedInputs { get; set; } = AllowedInputs.All;
private bool _canDashAirborne = true; private bool _canDashAirborne = true;
private bool _isWallJumpAvailable = true; private bool _isWallJumpAvailable = true;
private bool _canDash = true; private bool _canDash = true;
private bool _shouldMantleOnDashEnded = false; private bool _shouldMantleOnDashEnded;
private StateChart _playerState; private StateChart _playerState;
@@ -182,9 +203,10 @@ public partial class PlayerController : CharacterBody3D
private StateChartState _simpleDash; private StateChartState _simpleDash;
private StateChartState _poweredDash; private StateChartState _poweredDash;
private StateChartState _aimedDash; private StateChartState _aimedDash;
private StateChartState _onWallHugCanceled; private StateChartState _onWall;
private StateChartState _onWallHugging; private StateChartState _onWallHugging;
private StateChartState _onWallHanging; private StateChartState _onWallHanging;
private StateChartState _onWallRunning;
private Transition _onJumpFromWall; private Transition _onJumpFromWall;
private Transition _onMegajumpFromWall; private Transition _onMegajumpFromWall;
@@ -193,25 +215,14 @@ public partial class PlayerController : CharacterBody3D
private float _playerRadius; private float _playerRadius;
private float _lookSensitivityMultiplier = 1.0f; private float _lookSensitivityMultiplier = 1.0f;
private float _mouseSensitivityMultiplier = 1.0f;
private float _headBobbingMultiplier = 1.0f; private float _headBobbingMultiplier = 1.0f;
private float _fovChangeMultiplier = 1.0f; private float _fovChangeMultiplier = 1.0f;
public override void _Ready() public override void _Ready()
{ {
var config = new ConfigFile(); LoadSettings();
// Load data from a file.
Error err = config.Load("user://config.cfg");
// If the file didn't load, ignore it.
if (err != Error.Ok)
{
throw new Exception("Couldn't load config.cfg");
}
_lookSensitivityMultiplier = (float) config.GetValue("InputSettings", "LookSensitivity", 1.0f);
_headBobbingMultiplier = (float) config.GetValue("InputSettings", "HeadBobbingWhileWalking", 1.0f);
_fovChangeMultiplier = (float) config.GetValue("InputSettings", "FovChangeWithSpeed", 1.0f);
/////////////////////////// ///////////////////////////
// Getting components ///// // Getting components /////
/////////////////////////// ///////////////////////////
@@ -237,11 +248,6 @@ public partial class PlayerController : CharacterBody3D
FieldOfView = GetNode<FieldOfView>("FieldOfView"); FieldOfView = GetNode<FieldOfView>("FieldOfView");
Camera3D camera = GetNode<Camera3D>("HeadSystem/CameraSmooth/Camera3D"); Camera3D camera = GetNode<Camera3D>("HeadSystem/CameraSmooth/Camera3D");
Node3D cameraSmooth = GetNode<Node3D>("HeadSystem/CameraSmooth"); Node3D cameraSmooth = GetNode<Node3D>("HeadSystem/CameraSmooth");
ColorRect vignetteRect = GetNode<ColorRect>(
"HeadSystem/CameraSmooth/Camera3D/CLVignette(Layer_1)/HealthVignetteRect");
ColorRect distortionRect = GetNode<ColorRect>(
"HeadSystem/CameraSmooth/Camera3D/CLDistortion(Layer_2)/HealthDistortionRect");
ColorRect blurRect = GetNode<ColorRect>("HeadSystem/CameraSmooth/Camera3D/CLBlur(Layer_2)/BlurRect");
// Movement stuff // Movement stuff
WeaponRoot = GetNode<Node3D>("WeaponRoot"); WeaponRoot = GetNode<Node3D>("WeaponRoot");
@@ -251,6 +257,7 @@ public partial class PlayerController : CharacterBody3D
DashSystem = GetNode<DashSystem>("DashSystem"); DashSystem = GetNode<DashSystem>("DashSystem");
StairsSystem = GetNode<StairsSystem>("StairsSystem"); StairsSystem = GetNode<StairsSystem>("StairsSystem");
WallHugSystem = GetNode<WallHugSystem>("WallHugSystem"); WallHugSystem = GetNode<WallHugSystem>("WallHugSystem");
WallRunSnapper = GetNode<RayCast3D>("%WallRunSnapper");
RayCast3D stairsBelowRayCast3D = GetNode<RayCast3D>("StairsBelowRayCast3D"); RayCast3D stairsBelowRayCast3D = GetNode<RayCast3D>("StairsBelowRayCast3D");
RayCast3D stairsAheadRayCast3D = GetNode<RayCast3D>("StairsAheadRayCast3D"); RayCast3D stairsAheadRayCast3D = GetNode<RayCast3D>("StairsAheadRayCast3D");
_headCollisionDetectors = new RayCast3D[NUM_OF_HEAD_COLLISION_DETECTORS]; _headCollisionDetectors = new RayCast3D[NUM_OF_HEAD_COLLISION_DETECTORS];
@@ -264,11 +271,7 @@ public partial class PlayerController : CharacterBody3D
_playerHeight = playerShape!.Height; _playerHeight = playerShape!.Height;
_playerRadius = playerShape.Radius; _playerRadius = playerShape.Radius;
// RPG Stuff // State managementb
Stamina = GetNode<Stamina>("Stamina");
HealthSystem = GetNode<HealthSystem>("HealthSystem");
// State management
_playerState = StateChart.Of(GetNode("StateChart")); _playerState = StateChart.Of(GetNode("StateChart"));
_aiming = StateChartState.Of(GetNode("StateChart/Root/Aim/On")); _aiming = StateChartState.Of(GetNode("StateChart/Root/Aim/On"));
@@ -289,9 +292,10 @@ public partial class PlayerController : CharacterBody3D
_megaJump = StateChartState.Of(GetNode("StateChart/Root/Movement/Jump/MegaJump")); _megaJump = StateChartState.Of(GetNode("StateChart/Root/Movement/Jump/MegaJump"));
_onJumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnJump")); _onJumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnJump"));
_onMegajumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnMegajump")); _onMegajumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnMegajump"));
_onWall = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall"));
_onWallHugging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hugging")); _onWallHugging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hugging"));
_onWallHugCanceled = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/HugCanceled"));
_onWallHanging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hanging")); _onWallHanging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hanging"));
_onWallRunning = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Running"));
// State timers // State timers
_powerCooldownTimer = GetNode<Timer>("PowerCooldown"); _powerCooldownTimer = GetNode<Timer>("PowerCooldown");
_timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir"); _timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir");
@@ -319,20 +323,10 @@ public partial class PlayerController : CharacterBody3D
WallHugSystem.Init(); WallHugSystem.Init();
// RPG Stuff // RPG Stuff
HealthSystem.HealthSystemInitParams healthSystemParams = new HealthSystem.HealthSystemInitParams()
{
Parent = this,
Camera = camera,
Head = HeadSystem,
VignetteRect = vignetteRect,
DistortionRect = distortionRect,
BlurRect = blurRect,
};
HealthSystem.Init(healthSystemParams);
Stamina.SetSpeeds(WalkSpeed, WalkSpeed);
EmpoweredActionsLeft = MaxNumberOfEmpoweredActions; EmpoweredActionsLeft = MaxNumberOfEmpoweredActions;
PlaceWeaponForTutorial();
if (!TutorialDone)
PlaceWeaponForTutorial();
/////////////////////////// ///////////////////////////
// Signal setup /////////// // Signal setup ///////////
@@ -377,23 +371,51 @@ public partial class PlayerController : CharacterBody3D
_simpleDashCooldownTimer.Timeout += DashCooldownTimeout; _simpleDashCooldownTimer.Timeout += DashCooldownTimeout;
_onWallHugCanceled.StatePhysicsProcessing += HandleAirborne; _onWall.StateEntered += OnWallStarted;
_onWall.StateExited += OnWallStopped;
_onWallHugging.StatePhysicsProcessing += HandleWallHugging; _onWallHugging.StatePhysicsProcessing += HandleWallHugging;
_onWallHanging.StatePhysicsProcessing += HandleWallHanging; _onWallHanging.StatePhysicsProcessing += HandleWallHanging;
_onWallRunning.StatePhysicsProcessing += HandleWallRunning;
_onJumpFromWall.Taken += OnJumpFromWall; _onJumpFromWall.Taken += OnJumpFromWall;
_onMegajumpFromWall.Taken += OnMegajumpFromWall; _onMegajumpFromWall.Taken += OnMegajumpFromWall;
} }
public void SetAllowedInputsAll()
{
CurrentlyAllowedInputs = AllowedInputs.All;
}
public void SetAllowedInputsMoveCamera()
{
CurrentlyAllowedInputs = AllowedInputs.MoveCamera;
}
public void SetAllowedInputsNone()
{
CurrentlyAllowedInputs = AllowedInputs.None;
}
public void LoadSettings()
{
var config = new ConfigFile();
// Load data from a file.
Error err = config.Load("user://config.cfg");
// If the file didn't load, ignore it.
if (err != Error.Ok)
{
throw new Exception("Couldn't load config.cfg");
}
_lookSensitivityMultiplier = (float) config.GetValue("InputSettings", "LookSensitivity", 1.0f);
_mouseSensitivityMultiplier = (float) config.GetValue("InputSettings", "MouseSensitivity", 1.0f);
_headBobbingMultiplier = (float) config.GetValue("InputSettings", "HeadBobbingWhileWalking", 1.0f);
_fovChangeMultiplier = (float) config.GetValue("InputSettings", "FovChangeWithSpeed", 1.0f);
}
public void OnTutorialDone(Node3D _) public void OnTutorialDone(Node3D _)
{ {
TutorialDone = true; TutorialDone = true;
GD.Print("tutorial done");
}
public void OnWallDetected()
{
FinishPoweredDash();
} }
public void OnGrounded() public void OnGrounded()
@@ -416,26 +438,121 @@ public partial class PlayerController : CharacterBody3D
if (!isOnFloorCustom()) if (!isOnFloorCustom())
_playerState.SendEvent("start_falling"); _playerState.SendEvent("start_falling");
} }
public void HandleAirborne(float delta) public void HandleAirborne(float delta)
{ {
MoveInAir(delta); MoveInAir(delta);
if (isOnFloorCustom()) if (isOnFloorCustom())
_playerState.SendEvent("grounded"); _playerState.SendEvent("grounded");
if (WallHugSystem.IsWallHugging() && Velocity.Y < 0)
if (!WallHugSystem.IsWallHugging())
return;
// Going upwards, we stay simply airborne
if (Velocity.AngleTo(Vector3.Up) < Math.PI / 4)
return;
// Should we start a wall run
var wallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Zero);
var isIndeedWall = wallNormal.Y < 0.1;
var hvel = new Vector3(Velocity.X, 0, Velocity.Z);
var hvelProjected = hvel.Slide(_wallHugStartNormal);
var haveEnoughSpeed = hvelProjected.Length() > WallRunSpeedThreshold;
var isCoplanarEnough = Velocity.AngleTo(wallNormal) > Math.PI/4 && Velocity.AngleTo(wallNormal) < 3*Math.PI/4;
var isGoingDownwards = Velocity.AngleTo(Vector3.Down) < Math.PI/4;
if (haveEnoughSpeed && isCoplanarEnough && !isGoingDownwards && isIndeedWall && !_coyoteEnabled.Active)
{
SetVerticalVelocity(WallRunUpwardVelocity);
_playerState.SendEvent("wall_run");
return;
}
// If all else fail and we go down, we hug
if (Velocity.Y < 0 && !_coyoteEnabled.Active)
_playerState.SendEvent("wall_hug"); _playerState.SendEvent("wall_hug");
} }
private Vector3 _wallHugStartLocation = Vector3.Zero;
private Vector3 _wallHugStartNormal = Vector3.Zero;
private Vector3 _wallHugStartProjectedVelocity = Vector3.Zero;
public void OnWallDetected()
{
FinishPoweredDash();
if (!_onWall.Active)
return;
var newWallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Up);
_wallHugStartNormal = newWallNormal;
}
public void OnWallStarted()
{
_wallHugStartNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Up);
_wallHugStartLocation = WallHugSystem.WallHugLocation.UnwrapOr(Vector3.Zero) + _wallHugStartNormal * _playerRadius;
_wallHugStartProjectedVelocity = Velocity.Slide(_wallHugStartNormal);
}
public void OnWallStopped()
{
}
public void HandleWallHugging(float delta) public void HandleWallHugging(float delta)
{ {
WallHug(delta); WallHug(delta);
if (isOnFloorCustom()) if (isOnFloorCustom())
_playerState.SendEvent("grounded"); _playerState.SendEvent("grounded");
if (!WallHugSystem.IsWallHugging()) if (!WallHugSystem.IsWallHugging())
{
_playerState.SendEvent("start_falling"); _playerState.SendEvent("start_falling");
}
} }
public void HandleWallHanging(float delta) public void HandleWallHanging(float delta)
{ {
WallHang(delta); WallHang(delta);
} }
public void HandleWallRunning(float delta)
{
// Find horizontal velocity projected on the current wall
var hvel = new Vector3(Velocity.X, 0, Velocity.Z);
var hvelProjected = hvel.Slide(_wallHugStartNormal);
// Reorient horizontal velocity so we keep it coplanar with the wall without losing speed
var finalHVel = hvelProjected.Normalized() * hvel.Length();
// Adapt vertical speed
var verticalSpeed = Velocity.Y - WallRunAltitudeLossSpeed * delta;
Velocity = finalHVel + Vector3.Up*verticalSpeed;
Velocity *= 0.995f;
if (WallRunSnapper.IsColliding())
{
GD.Print((WallRunSnapper.GetCollisionPoint() - WallRunSnapper.GlobalPosition).Length());
}
if (!WallHugSystem.IsWallHugging() || Velocity.Length() < WallRunSpeedThreshold)
{
_playerState.SendEvent("start_falling");
}
}
public void WallHug(float delta)
{
var hvel = ComputeHVelocity(delta, WallHugHorizontalDeceleration, WallHugHorizontalDeceleration);
var hvelProjected = hvel.Slide(_wallHugStartNormal);
var vvel = Velocity.Y - (CalculateGravityForce() * delta / WallHugGravityLesseningFactor);
vvel = Math.Abs(vvel) > WallHugDownwardMaxSpeed ? -WallHugDownwardMaxSpeed : vvel;
Velocity = hvelProjected + vvel*Vector3.Up;
}
public void WallHang(float delta)
{
Velocity = Vector3.Zero;
GlobalPosition = _wallHugStartLocation;
}
private Option<Vector3> _plannedMantleLocation = Option<Vector3>.None; private Option<Vector3> _plannedMantleLocation = Option<Vector3>.None;
@@ -444,7 +561,10 @@ public partial class PlayerController : CharacterBody3D
{ {
if (CanMantle()) if (CanMantle())
{ {
MantleToLocation(_plannedMantleLocation.Unwrap()); var location = _plannedMantleLocation.UnwrapOr(Vector3.Zero);
if (location == Vector3.Zero)
return; // For some reason CanMantle can return an invalid location so fuck off I guess
MantleToLocation(location);
return; return;
} }
@@ -453,6 +573,7 @@ public partial class PlayerController : CharacterBody3D
_playerState.SendEvent("megajump"); _playerState.SendEvent("megajump");
return; return;
} }
_playerState.SendEvent("jump"); _playerState.SendEvent("jump");
} }
@@ -476,6 +597,8 @@ public partial class PlayerController : CharacterBody3D
} }
public void OnDoubleJumpStarted() public void OnDoubleJumpStarted()
{ {
_canDash = true;
_canDashAirborne = true;
OnJumpStarted(DoubleJumpStartVelocity); OnJumpStarted(DoubleJumpStartVelocity);
} }
public void OnMegaJumpStarted() public void OnMegaJumpStarted()
@@ -483,20 +606,6 @@ public partial class PlayerController : CharacterBody3D
PerformEmpoweredAction(); PerformEmpoweredAction();
OnJumpStarted(MegaJumpStartVelocity); OnJumpStarted(MegaJumpStartVelocity);
} }
public void WallHug(float delta)
{
var hvel = ComputeHVelocity(delta, WallHugHorizontalDeceleration, WallHugHorizontalDeceleration);
var vvel = Velocity.Y - (CalculateGravityForce() * delta / WallHugGravityLesseningFactor);
vvel = Math.Abs(vvel) > WallHugDownwardMaxSpeed ? -WallHugDownwardMaxSpeed : vvel;
Velocity = hvel + vvel*Vector3.Up;
}
public void WallHang(float delta)
{
Velocity = Vector3.Zero;
MoveAndSlide();
}
public void ComputeJumpFromWallHSpeed(float jumpStrength) public void ComputeJumpFromWallHSpeed(float jumpStrength)
{ {
@@ -505,10 +614,13 @@ public partial class PlayerController : CharacterBody3D
// _isWallJumpAvailable = false; // _isWallJumpAvailable = false;
// var isLookingTowardsWall = HeadSystem.GetForwardHorizontalVector().Dot(wallNormal) > 0.5; // var isLookingTowardsWall = HeadSystem.GetForwardHorizontalVector().Dot(wallNormal) > 0.5;
// var jumpDirection = isLookingTowardsWall ? Vector3.Up : wallNormal; // var jumpDirection = isLookingTowardsWall ? Vector3.Up : wallNormal;
var wallNormal = WallHugSystem.GetWallNormal().UnwrapOr(Vector3.Up); var wallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Up);
var jumpVector = wallNormal * jumpStrength; var jumpVector = wallNormal * jumpStrength;
SetHorizontalVelocity(new Vector2(jumpVector.X, jumpVector.Z)); var currentHorizontalVelocity = new Vector2(Velocity.X, Velocity.Z);
var wallJumpHorizontalVelocity = new Vector2(jumpVector.X, jumpVector.Z);
SetHorizontalVelocity(currentHorizontalVelocity + wallJumpHorizontalVelocity);;
} }
public void OnJumpFromWall() public void OnJumpFromWall()
{ {
@@ -519,9 +631,21 @@ public partial class PlayerController : CharacterBody3D
ComputeJumpFromWallHSpeed(WallMegajumpStartVelocity); ComputeJumpFromWallHSpeed(WallMegajumpStartVelocity);
} }
public void InputDeviceChanged(bool isUsingGamepad)
{
_isUsingGamepad = isUsingGamepad;
}
public Vector3 GetMoveInput()
{
if (_isUsingGamepad)
return _inputMove;
return _inputMoveKeyboard;
}
public Vector3 ComputeHVelocity(float delta, float accelerationFactor, float decelerationFactor, Vector3? direction = null) public Vector3 ComputeHVelocity(float delta, float accelerationFactor, float decelerationFactor, Vector3? direction = null)
{ {
var dir = direction ?? Transform.Basis * HeadSystem.Transform.Basis * _inputMove; var dir = direction ?? Transform.Basis * HeadSystem.Transform.Basis * GetMoveInput();
var acceleration = dir.Length() > 0 ? accelerationFactor : decelerationFactor; var acceleration = dir.Length() > 0 ? accelerationFactor : decelerationFactor;
@@ -623,6 +747,12 @@ public partial class PlayerController : CharacterBody3D
/////////////////////////// ///////////////////////////
// Input Management /////// // Input Management ///////
/////////////////////////// ///////////////////////////
public void OnInputMoveKeyboard(Vector3 value)
{
_inputMoveKeyboard = value;
}
public void OnInputMove(Vector3 value) public void OnInputMove(Vector3 value)
{ {
_inputMove = value; _inputMove = value;
@@ -661,11 +791,11 @@ public partial class PlayerController : CharacterBody3D
} }
public void OnInputEmpowerDown() public void OnInputEmpowerDown()
{ {
_playerState.SendEvent("empower_down"); // _playerState.SendEvent("empower_down");
} }
public void OnInputEmpowerReleased() public void OnInputEmpowerReleased()
{ {
_playerState.SendEvent("empower_released"); // _playerState.SendEvent("empower_released");
} }
public void OnInputDashPressed() public void OnInputDashPressed()
{ {
@@ -747,11 +877,7 @@ public partial class PlayerController : CharacterBody3D
public void DashToFlyingWeaponTweenEnded() public void DashToFlyingWeaponTweenEnded()
{ {
// Get the weapon back RecoverWeapon();
GetTree().GetRoot().RemoveChild(WeaponRoot);
AddChild(WeaponRoot);
WeaponRoot.SetGlobalPosition(GlobalPosition);
WeaponSystem.ResetWeapon();
var vel = _dashDirection * PostDashSpeed; var vel = _dashDirection * PostDashSpeed;
SetVelocity(vel); SetVelocity(vel);
@@ -774,6 +900,14 @@ public partial class PlayerController : CharacterBody3D
var dashTween = CreatePositionTween(dashLocation, AimedDashTime); var dashTween = CreatePositionTween(dashLocation, AimedDashTime);
dashTween.Finished += DashToPlantedWeaponTweenEnded; dashTween.Finished += DashToPlantedWeaponTweenEnded;
} }
public void RecoverWeapon()
{
GetTree().GetRoot().RemoveChild(WeaponRoot);
AddChild(WeaponRoot);
WeaponRoot.SetGlobalPosition(GlobalPosition);
WeaponSystem.ResetWeapon();
}
public void DashToPlantedWeaponTweenEnded() public void DashToPlantedWeaponTweenEnded()
{ {
@@ -782,16 +916,14 @@ public partial class PlayerController : CharacterBody3D
var isPlantedUnderPlatform = WeaponSystem.IsPlantedUnderPlatform(); var isPlantedUnderPlatform = WeaponSystem.IsPlantedUnderPlatform();
var shouldDashToHanging = isPlantedOnWall || isPlantedUnderPlatform; var shouldDashToHanging = isPlantedOnWall || isPlantedUnderPlatform;
// Get the weapon back RecoverWeapon();
GetTree().GetRoot().RemoveChild(WeaponRoot);
AddChild(WeaponRoot);
WeaponRoot.SetGlobalPosition(GlobalPosition);
WeaponSystem.ResetWeapon();
var resultingEvent = shouldDashToHanging ? "to_planted" : "dash_finished"; var resultingEvent = shouldDashToHanging ? "to_planted" : "dash_finished";
_playerState.SendEvent(resultingEvent); _playerState.SendEvent(resultingEvent);
} }
private Vector3 _preDashVelocity = Vector3.Zero;
public void OnAimedDashStarted() public void OnAimedDashStarted()
{ {
// Adjusting for player height, where the middle of the capsule should get to the dash location instead of the // Adjusting for player height, where the middle of the capsule should get to the dash location instead of the
@@ -799,6 +931,9 @@ public partial class PlayerController : CharacterBody3D
var correction = DashSystem.CollisionNormal == Vector3.Down ? _playerHeight : DashSystem.DashCastRadius; var correction = DashSystem.CollisionNormal == Vector3.Down ? _playerHeight : DashSystem.DashCastRadius;
var correctedLocation = DashSystem.PlannedLocation + Vector3.Down * correction; var correctedLocation = DashSystem.PlannedLocation + Vector3.Down * correction;
_preDashVelocity = Velocity;
_dashDirection = (correctedLocation - GlobalPosition).Normalized();
var dashTween = CreatePositionTween(correctedLocation, AimedDashTime); var dashTween = CreatePositionTween(correctedLocation, AimedDashTime);
// dashTween.TweenMethod(Callable.From<float>(AimedDashTweenOngoing), 0.0f, 1.0f, AimedDashTime); // dashTween.TweenMethod(Callable.From<float>(AimedDashTweenOngoing), 0.0f, 1.0f, AimedDashTime);
dashTween.Finished += AimedDashTweenEnded; dashTween.Finished += AimedDashTweenEnded;
@@ -825,6 +960,9 @@ public partial class PlayerController : CharacterBody3D
public void PlaceWeaponForTutorial() public void PlaceWeaponForTutorial()
{ {
if (TutorialDone)
return;
RemoveChild(WeaponRoot); RemoveChild(WeaponRoot);
GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, WeaponRoot); GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, WeaponRoot);
WeaponRoot.CallDeferred(Node3D.MethodName.SetGlobalPosition, TutorialWeaponTarget.GlobalPosition); WeaponRoot.CallDeferred(Node3D.MethodName.SetGlobalPosition, TutorialWeaponTarget.GlobalPosition);
@@ -849,6 +987,9 @@ public partial class PlayerController : CharacterBody3D
public void OnAimedDashFinished() public void OnAimedDashFinished()
{ {
var postDashVelocity = _preDashVelocity.Length() > PostDashSpeed ? PostDashSpeed : _preDashVelocity.Length();
Velocity = _dashDirection * postDashVelocity;
if (_shouldMantleOnDashEnded) if (_shouldMantleOnDashEnded)
MantleToLocation(_mantleLocation); MantleToLocation(_mantleLocation);
} }
@@ -872,13 +1013,13 @@ public partial class PlayerController : CharacterBody3D
public Vector3 GetInputGlobalHDirection() public Vector3 GetInputGlobalHDirection()
{ {
var direction = Transform.Basis * HeadSystem.Transform.Basis * _inputMove; var direction = Transform.Basis * HeadSystem.Transform.Basis * GetMoveInput();
return new Vector3(direction.X, 0, direction.Z).Normalized(); return new Vector3(direction.X, 0, direction.Z).Normalized();
} }
public Vector3 GetInputLocalHDirection() public Vector3 GetInputLocalHDirection()
{ {
var direction = _inputMove; var direction = GetMoveInput();
return new Vector3(direction.X, 0, direction.Z).Normalized(); return new Vector3(direction.X, 0, direction.Z).Normalized();
} }
@@ -891,8 +1032,8 @@ public partial class PlayerController : CharacterBody3D
public void OnPoweredDashFinished() public void OnPoweredDashFinished()
{ {
// Try mantling but don't know if this is useful // Try mantling but don't know if this is useful
if (CanMantle()) // if (CanMantle())
MantleToLocation(MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y).Unwrap()); // MantleToLocation(MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y).Unwrap());
} }
public void FinishPoweredDash() public void FinishPoweredDash()
@@ -936,13 +1077,19 @@ public partial class PlayerController : CharacterBody3D
var mantleLocationResult = MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y); var mantleLocationResult = MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y);
return mantleLocationResult.IsSome(out _); return mantleLocationResult.IsSome(out _);
} }
private Vector3 _preMantleVelocity = Vector3.Zero;
public void MantleToLocation(Vector3 location) public void MantleToLocation(Vector3 location)
{ {
HeadSystem.OnMantle();
_preMantleVelocity = Velocity;
var mantleTween = CreatePositionTween(location, MantleTime); var mantleTween = CreatePositionTween(location, MantleTime);
mantleTween.Finished += MantleFinished; mantleTween.Finished += MantleFinished;
} }
public void MantleFinished() public void MantleFinished()
{ {
Velocity = _preMantleVelocity;
_playerState.SendEvent("grounded"); _playerState.SendEvent("grounded");
} }
@@ -952,7 +1099,8 @@ public partial class PlayerController : CharacterBody3D
private void LookAround() private void LookAround()
{ {
Vector2 inputLookDir = new Vector2(_inputRotateY, _inputRotateFloorplane); Vector2 inputLookDir = new Vector2(_inputRotateY, _inputRotateFloorplane);
HeadSystem.LookAround(inputLookDir, _lookSensitivityMultiplier); var lookSensitivity = _isUsingGamepad ? _lookSensitivityMultiplier : _mouseSensitivityMultiplier;
HeadSystem.LookAround(inputLookDir, lookSensitivity);
} }
public void MoveOnGround(double delta) public void MoveOnGround(double delta)
@@ -976,7 +1124,7 @@ public partial class PlayerController : CharacterBody3D
IsCapsuleHeightLessThanNormal = CapsuleCollider.IsCapsuleHeightLessThanNormal(), IsCapsuleHeightLessThanNormal = CapsuleCollider.IsCapsuleHeightLessThanNormal(),
CurrentSpeedGreaterThanWalkSpeed = false, CurrentSpeedGreaterThanWalkSpeed = false,
IsCrouchingHeight = CapsuleCollider.IsCrouchingHeight(), IsCrouchingHeight = CapsuleCollider.IsCrouchingHeight(),
Delta = (float)delta, Delta = delta,
FloorMaxAngle = FloorMaxAngle, FloorMaxAngle = FloorMaxAngle,
GlobalPositionFromDriver = GlobalPosition, GlobalPositionFromDriver = GlobalPosition,
Velocity = Velocity, Velocity = Velocity,
@@ -1030,7 +1178,7 @@ public partial class PlayerController : CharacterBody3D
Bobbing.CameraBobbingParams cameraBobbingParams = new Bobbing.CameraBobbingParams Bobbing.CameraBobbingParams cameraBobbingParams = new Bobbing.CameraBobbingParams
{ {
Delta = delta, Delta = delta,
IsOnFloorCustom = isOnFloorCustom(), IsOnFloorCustom = isOnFloorCustom() || _onWallRunning.Active,
Velocity = Velocity, Velocity = Velocity,
SettingsMultiplier = _headBobbingMultiplier SettingsMultiplier = _headBobbingMultiplier
}; };

View File

@@ -7,6 +7,7 @@ public partial class HeadSystem : Node3D
{ {
private Camera3D _camera; private Camera3D _camera;
private Marker3D _cameraAnchor; private Marker3D _cameraAnchor;
private AnimationPlayer _animationPlayer;
[Export(PropertyHint.Range, "0,10,0.1,or_greater")] [Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float LookSensitivity { get; set; } = 1f; public float LookSensitivity { get; set; } = 1f;
@@ -16,6 +17,12 @@ public partial class HeadSystem : Node3D
Input.SetMouseMode(Input.MouseModeEnum.Captured); Input.SetMouseMode(Input.MouseModeEnum.Captured);
_camera = GetNode<Camera3D>("CameraSmooth/Camera3D"); _camera = GetNode<Camera3D>("CameraSmooth/Camera3D");
_cameraAnchor = GetNode<Marker3D>("CameraAnchor"); _cameraAnchor = GetNode<Marker3D>("CameraAnchor");
_animationPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
}
public void OnMantle()
{
_animationPlayer.Play("mantle");
} }
public void LookAround(Vector2 lookDir, float sensitivitMultiplier = 1f) public void LookAround(Vector2 lookDir, float sensitivitMultiplier = 1f)

View File

@@ -1,14 +1,63 @@
[gd_scene load_steps=6 format=3 uid="uid://0ysqmqphq6mq"] [gd_scene load_steps=5 format=3 uid="uid://0ysqmqphq6mq"]
[ext_resource type="Script" uid="uid://dtkdrnsmlwm67" path="res://systems/head/HeadSystem.cs" id="1_8abgy"] [ext_resource type="Script" uid="uid://dtkdrnsmlwm67" path="res://systems/head/HeadSystem.cs" id="1_8abgy"]
[ext_resource type="Material" uid="uid://dtq8i1ka1f2pn" path="res://player_controller/Assets/Materials/Health/CameraVignette.tres" id="2_urko7"]
[ext_resource type="Material" uid="uid://nyh5tn1yoxeu" path="res://player_controller/Assets/Materials/Health/CameraDistortion.tres" id="3_0hyrq"]
[ext_resource type="Shader" uid="uid://btw6vsb6sa7sn" path="res://player_controller/Shaders/Blur.gdshader" id="4_ubhf8"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_o1np4"] [sub_resource type="Animation" id="Animation_urko7"]
shader = ExtResource("4_ubhf8") length = 0.001
shader_parameter/limit = 0.0 tracks/0/type = "bezier"
shader_parameter/blur = 0.0 tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("..:rotation:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.15, 0, 0.15, 0),
"times": PackedFloat32Array(0)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("..:rotation:z")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.15, 0, 0.15, 0),
"times": PackedFloat32Array(0)
}
[sub_resource type="Animation" id="Animation_8abgy"]
resource_name = "mantle"
length = 0.3
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("..:rotation:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(2, 2, 2),
"points": PackedFloat32Array(0, 0, 0, 0.050000004, 0, -0.17453292, -0.050000004, 0, 0.050000004, 0, 0, -0.050000004, 0, 0, 0),
"times": PackedFloat32Array(0, 0.15, 0.3)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("..:rotation:z")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(2, 2, 2, 2),
"points": PackedFloat32Array(0.00011616433, 0, 0, 0.033333335, 0, -0.05235988, -0.033333335, 0, 0.033333335, 0, 0.05235988, -0.033333335, 0, 0.03333334, 0, 0, -0.03333334, 0, 0, 0),
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3)
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_0hyrq"]
_data = {
&"RESET": SubResource("Animation_urko7"),
&"mantle": SubResource("Animation_8abgy")
}
[node name="HeadSystem" type="Node3D"] [node name="HeadSystem" type="Node3D"]
script = ExtResource("1_8abgy") script = ExtResource("1_8abgy")
@@ -16,46 +65,18 @@ script = ExtResource("1_8abgy")
[node name="CameraSmooth" type="Node3D" parent="."] [node name="CameraSmooth" type="Node3D" parent="."]
[node name="Camera3D" type="Camera3D" parent="CameraSmooth"] [node name="Camera3D" type="Camera3D" parent="CameraSmooth"]
transform = Transform3D(1, 0, 0, 0, 0.99999994, 0, 0, 0, 0.99999994, 0, 0, 0)
current = true current = true
fov = 90.0 fov = 90.0
[node name="CLVignette(Layer_1)" type="CanvasLayer" parent="CameraSmooth/Camera3D"]
[node name="HealthVignetteRect" type="ColorRect" parent="CameraSmooth/Camera3D/CLVignette(Layer_1)"]
material = ExtResource("2_urko7")
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="CLDistortion(Layer_2)" type="CanvasLayer" parent="CameraSmooth/Camera3D"]
layer = 2
[node name="HealthDistortionRect" type="ColorRect" parent="CameraSmooth/Camera3D/CLDistortion(Layer_2)"]
material = ExtResource("3_0hyrq")
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="CLBlur(Layer_2)" type="CanvasLayer" parent="CameraSmooth/Camera3D"]
layer = 2
[node name="BlurRect" type="ColorRect" parent="CameraSmooth/Camera3D/CLBlur(Layer_2)"]
material = SubResource("ShaderMaterial_o1np4")
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="RayCast3D" type="RayCast3D" parent="CameraSmooth/Camera3D"] [node name="RayCast3D" type="RayCast3D" parent="CameraSmooth/Camera3D"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, -0.64723) transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, -0.64723)
visible = false visible = false
[node name="CameraAnchor" type="Marker3D" parent="."] [node name="CameraAnchor" type="Marker3D" parent="."]
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
root_node = NodePath("../CameraSmooth/Camera3D")
libraries = {
&"": SubResource("AnimationLibrary_0hyrq")
}

View File

@@ -1,4 +1,4 @@
[gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=102 format=3 uid="uid://bl5crtu1gkrtr"] [gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=155 format=3 uid="uid://bl5crtu1gkrtr"]
[ext_resource type="Script" uid="uid://cpplm41b5bt6m" path="res://addons/guide/guide_action_mapping.gd" id="1_qmhk6"] [ext_resource type="Script" uid="uid://cpplm41b5bt6m" path="res://addons/guide/guide_action_mapping.gd" id="1_qmhk6"]
[ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/base_mode/move.tres" id="2_g6bbx"] [ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/base_mode/move.tres" id="2_g6bbx"]
@@ -12,13 +12,16 @@
[ext_resource type="Script" uid="uid://bbhoxsiqwo07l" path="res://addons/guide/inputs/guide_input_joy_axis_1d.gd" id="10_cvxqo"] [ext_resource type="Script" uid="uid://bbhoxsiqwo07l" path="res://addons/guide/inputs/guide_input_joy_axis_1d.gd" id="10_cvxqo"]
[ext_resource type="Script" uid="uid://bjm4myqxg4phm" path="res://addons/guide/modifiers/guide_modifier_scale.gd" id="11_j3axn"] [ext_resource type="Script" uid="uid://bjm4myqxg4phm" path="res://addons/guide/modifiers/guide_modifier_scale.gd" id="11_j3axn"]
[ext_resource type="Script" uid="uid://ckggy40lm0vjc" path="res://addons/guide/modifiers/guide_modifier_negate.gd" id="12_kxb2c"] [ext_resource type="Script" uid="uid://ckggy40lm0vjc" path="res://addons/guide/modifiers/guide_modifier_negate.gd" id="12_kxb2c"]
[ext_resource type="Script" uid="uid://b6bwb7ie85kl1" path="res://addons/guide/inputs/guide_input_mouse_axis_1d.gd" id="13_j3axn"]
[ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://systems/inputs/base_mode/rotate_floorplane.tres" id="13_v2ywt"] [ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://systems/inputs/base_mode/rotate_floorplane.tres" id="13_v2ywt"]
[ext_resource type="Resource" uid="uid://c3e0ivgaxrsyb" path="res://systems/inputs/base_mode/aim_down.tres" id="14_yp12v"] [ext_resource type="Resource" uid="uid://c3e0ivgaxrsyb" path="res://systems/inputs/base_mode/aim_down.tres" id="14_yp12v"]
[ext_resource type="Script" uid="uid://b52rqq28tuqpg" path="res://addons/guide/triggers/guide_trigger_pressed.gd" id="15_fykw6"] [ext_resource type="Script" uid="uid://b52rqq28tuqpg" path="res://addons/guide/triggers/guide_trigger_pressed.gd" id="15_fykw6"]
[ext_resource type="Script" uid="uid://b4cdrn4paoj3i" path="res://addons/guide/triggers/guide_trigger_down.gd" id="15_g6bbx"] [ext_resource type="Script" uid="uid://b4cdrn4paoj3i" path="res://addons/guide/triggers/guide_trigger_down.gd" id="15_g6bbx"]
[ext_resource type="Script" uid="uid://cgy4anjdob2tp" path="res://addons/guide/modifiers/guide_modifier_window_relative.gd" id="15_rvpjj"]
[ext_resource type="Resource" uid="uid://b334rau1yxmm7" path="res://systems/inputs/base_mode/empower_down.tres" id="16_0qat1"] [ext_resource type="Resource" uid="uid://b334rau1yxmm7" path="res://systems/inputs/base_mode/empower_down.tres" id="16_0qat1"]
[ext_resource type="Resource" uid="uid://bebstkm608wxx" path="res://systems/inputs/base_mode/aim_pressed.tres" id="16_li5ak"] [ext_resource type="Resource" uid="uid://bebstkm608wxx" path="res://systems/inputs/base_mode/aim_pressed.tres" id="16_li5ak"]
[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/base_mode/aim_release.tres" id="16_rvpjj"] [ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/base_mode/aim_release.tres" id="16_rvpjj"]
[ext_resource type="Script" uid="uid://vgjlx6p007lp" path="res://addons/guide/inputs/guide_input_mouse_button.gd" id="17_kxb2c"]
[ext_resource type="Script" uid="uid://biiggjw6tv4uq" path="res://addons/guide/triggers/guide_trigger_released.gd" id="17_s8kjn"] [ext_resource type="Script" uid="uid://biiggjw6tv4uq" path="res://addons/guide/triggers/guide_trigger_released.gd" id="17_s8kjn"]
[ext_resource type="Resource" uid="uid://7wm8ywvujwf" path="res://systems/inputs/base_mode/aim_cancel.tres" id="18_vibkn"] [ext_resource type="Resource" uid="uid://7wm8ywvujwf" path="res://systems/inputs/base_mode/aim_cancel.tres" id="18_vibkn"]
[ext_resource type="Resource" uid="uid://bbce5wfwxpns1" path="res://systems/inputs/base_mode/empower_release.tres" id="19_li5ak"] [ext_resource type="Resource" uid="uid://bbce5wfwxpns1" path="res://systems/inputs/base_mode/empower_release.tres" id="19_li5ak"]
@@ -31,6 +34,10 @@
[ext_resource type="Resource" uid="uid://55b0dsvioj08" path="res://systems/inputs/base_mode/jump_pressed.tres" id="25_si4d4"] [ext_resource type="Resource" uid="uid://55b0dsvioj08" path="res://systems/inputs/base_mode/jump_pressed.tres" id="25_si4d4"]
[ext_resource type="Resource" uid="uid://dgluj0ql5vth7" path="res://systems/inputs/base_mode/pause.tres" id="29_q86qg"] [ext_resource type="Resource" uid="uid://dgluj0ql5vth7" path="res://systems/inputs/base_mode/pause.tres" id="29_q86qg"]
[ext_resource type="Script" uid="uid://cw71o87tvdx3q" path="res://addons/guide/inputs/guide_input_key.gd" id="30_cvxqo"] [ext_resource type="Script" uid="uid://cw71o87tvdx3q" path="res://addons/guide/inputs/guide_input_key.gd" id="30_cvxqo"]
[ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://systems/inputs/base_mode/move_back.tres" id="33_fykw6"]
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://systems/inputs/base_mode/move_front.tres" id="34_rvpjj"]
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://systems/inputs/base_mode/move_left.tres" id="35_s8kjn"]
[ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://systems/inputs/base_mode/move_right.tres" id="36_vibkn"]
[sub_resource type="Resource" id="Resource_vkvga"] [sub_resource type="Resource" id="Resource_vkvga"]
script = ExtResource("4_1rw8g") script = ExtResource("4_1rw8g")
@@ -73,10 +80,24 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_05q5j") input = SubResource("Resource_05q5j")
modifiers = Array[ExtResource("5_0qat1")]([SubResource("Resource_tn8ci"), SubResource("Resource_1koh7"), SubResource("Resource_eep0a")]) modifiers = Array[ExtResource("5_0qat1")]([SubResource("Resource_tn8ci"), SubResource("Resource_1koh7"), SubResource("Resource_eep0a")])
[sub_resource type="Resource" id="Resource_mfl87"]
script = ExtResource("13_j3axn")
[sub_resource type="Resource" id="Resource_1n4k0"]
script = ExtResource("15_rvpjj")
[sub_resource type="Resource" id="Resource_ukc1w"]
script = ExtResource("12_kxb2c")
[sub_resource type="Resource" id="Resource_4pf65"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_mfl87")
modifiers = Array[ExtResource("5_0qat1")]([SubResource("Resource_1n4k0"), SubResource("Resource_ukc1w")])
[sub_resource type="Resource" id="Resource_tgr2g"] [sub_resource type="Resource" id="Resource_tgr2g"]
script = ExtResource("1_qmhk6") script = ExtResource("1_qmhk6")
action = ExtResource("9_q86qg") action = ExtResource("9_q86qg")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_dew8i")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_dew8i"), SubResource("Resource_4pf65")])
metadata/_guide_input_mappings_collapsed = false metadata/_guide_input_mappings_collapsed = false
[sub_resource type="Resource" id="Resource_pf0ii"] [sub_resource type="Resource" id="Resource_pf0ii"]
@@ -98,10 +119,25 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_pf0ii") input = SubResource("Resource_pf0ii")
modifiers = Array[ExtResource("5_0qat1")]([SubResource("Resource_nh7x4"), SubResource("Resource_04n84"), SubResource("Resource_m3aj7")]) modifiers = Array[ExtResource("5_0qat1")]([SubResource("Resource_nh7x4"), SubResource("Resource_04n84"), SubResource("Resource_m3aj7")])
[sub_resource type="Resource" id="Resource_2ioub"]
script = ExtResource("13_j3axn")
axis = 1
[sub_resource type="Resource" id="Resource_fvpbi"]
script = ExtResource("12_kxb2c")
[sub_resource type="Resource" id="Resource_7l3h2"]
script = ExtResource("15_rvpjj")
[sub_resource type="Resource" id="Resource_fyd0i"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_2ioub")
modifiers = Array[ExtResource("5_0qat1")]([SubResource("Resource_fvpbi"), SubResource("Resource_7l3h2")])
[sub_resource type="Resource" id="Resource_iarn8"] [sub_resource type="Resource" id="Resource_iarn8"]
script = ExtResource("1_qmhk6") script = ExtResource("1_qmhk6")
action = ExtResource("13_v2ywt") action = ExtResource("13_v2ywt")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_qu2wi")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_qu2wi"), SubResource("Resource_fyd0i")])
metadata/_guide_input_mappings_collapsed = false metadata/_guide_input_mappings_collapsed = false
[sub_resource type="Resource" id="Resource_si4d4"] [sub_resource type="Resource" id="Resource_si4d4"]
@@ -116,10 +152,22 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_si4d4") input = SubResource("Resource_si4d4")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_2tfaw")]) triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_2tfaw")])
[sub_resource type="Resource" id="Resource_o031f"]
script = ExtResource("17_kxb2c")
button = 2
[sub_resource type="Resource" id="Resource_3s858"]
script = ExtResource("15_g6bbx")
[sub_resource type="Resource" id="Resource_wh232"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_o031f")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_3s858")])
[sub_resource type="Resource" id="Resource_cvxqo"] [sub_resource type="Resource" id="Resource_cvxqo"]
script = ExtResource("1_qmhk6") script = ExtResource("1_qmhk6")
action = ExtResource("14_yp12v") action = ExtResource("14_yp12v")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_q86qg")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_q86qg"), SubResource("Resource_wh232")])
metadata/_guide_input_mappings_collapsed = false metadata/_guide_input_mappings_collapsed = false
[sub_resource type="Resource" id="Resource_llfhp"] [sub_resource type="Resource" id="Resource_llfhp"]
@@ -134,10 +182,22 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_llfhp") input = SubResource("Resource_llfhp")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_ib0yi")]) triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_ib0yi")])
[sub_resource type="Resource" id="Resource_xh105"]
script = ExtResource("17_kxb2c")
button = 2
[sub_resource type="Resource" id="Resource_30oue"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_2supu"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_xh105")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_30oue")])
[sub_resource type="Resource" id="Resource_tb8ii"] [sub_resource type="Resource" id="Resource_tb8ii"]
script = ExtResource("1_qmhk6") script = ExtResource("1_qmhk6")
action = ExtResource("16_li5ak") action = ExtResource("16_li5ak")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_r6kml")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_r6kml"), SubResource("Resource_2supu")])
[sub_resource type="Resource" id="Resource_cqc4k"] [sub_resource type="Resource" id="Resource_cqc4k"]
script = ExtResource("10_cvxqo") script = ExtResource("10_cvxqo")
@@ -151,10 +211,22 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_cqc4k") input = SubResource("Resource_cqc4k")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_vanwy")]) triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_vanwy")])
[sub_resource type="Resource" id="Resource_omo75"]
script = ExtResource("17_kxb2c")
button = 2
[sub_resource type="Resource" id="Resource_npyga"]
script = ExtResource("17_s8kjn")
[sub_resource type="Resource" id="Resource_yxj6r"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_omo75")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_npyga")])
[sub_resource type="Resource" id="Resource_iihs4"] [sub_resource type="Resource" id="Resource_iihs4"]
script = ExtResource("1_qmhk6") script = ExtResource("1_qmhk6")
action = ExtResource("16_rvpjj") action = ExtResource("16_rvpjj")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_bkx7d")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_bkx7d"), SubResource("Resource_yxj6r")])
metadata/_guide_input_mappings_collapsed = false metadata/_guide_input_mappings_collapsed = false
[sub_resource type="Resource" id="Resource_fykw6"] [sub_resource type="Resource" id="Resource_fykw6"]
@@ -221,10 +293,22 @@ input = SubResource("Resource_1fkas")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_6pxii")]) triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_6pxii")])
metadata/_guide_triggers_collapsed = false metadata/_guide_triggers_collapsed = false
[sub_resource type="Resource" id="Resource_pv160"]
script = ExtResource("30_cvxqo")
key = 32
[sub_resource type="Resource" id="Resource_ra6lx"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_q44n6"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_pv160")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_ra6lx")])
[sub_resource type="Resource" id="Resource_d2r0d"] [sub_resource type="Resource" id="Resource_d2r0d"]
script = ExtResource("1_qmhk6") script = ExtResource("1_qmhk6")
action = ExtResource("25_si4d4") action = ExtResource("25_si4d4")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_jy4f1")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_jy4f1"), SubResource("Resource_q44n6")])
[sub_resource type="Resource" id="Resource_oapce"] [sub_resource type="Resource" id="Resource_oapce"]
script = ExtResource("19_qkgmj") script = ExtResource("19_qkgmj")
@@ -234,10 +318,18 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_oapce") input = SubResource("Resource_oapce")
metadata/_guide_triggers_collapsed = false metadata/_guide_triggers_collapsed = false
[sub_resource type="Resource" id="Resource_assli"]
script = ExtResource("30_cvxqo")
key = 32
[sub_resource type="Resource" id="Resource_x5v0d"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_assli")
[sub_resource type="Resource" id="Resource_xt1x5"] [sub_resource type="Resource" id="Resource_xt1x5"]
script = ExtResource("1_qmhk6") script = ExtResource("1_qmhk6")
action = ExtResource("21_818lq") action = ExtResource("21_818lq")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_8w5gu")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_8w5gu"), SubResource("Resource_x5v0d")])
[sub_resource type="Resource" id="Resource_li5ak"] [sub_resource type="Resource" id="Resource_li5ak"]
script = ExtResource("19_qkgmj") script = ExtResource("19_qkgmj")
@@ -251,10 +343,21 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_li5ak") input = SubResource("Resource_li5ak")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_paxxe")]) triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_paxxe")])
[sub_resource type="Resource" id="Resource_pdblu"]
script = ExtResource("17_kxb2c")
[sub_resource type="Resource" id="Resource_q0e5d"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_a8sqk"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_pdblu")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_q0e5d")])
[sub_resource type="Resource" id="Resource_ew1hw"] [sub_resource type="Resource" id="Resource_ew1hw"]
script = ExtResource("1_qmhk6") script = ExtResource("1_qmhk6")
action = ExtResource("22_2hs2y") action = ExtResource("22_2hs2y")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_500v3")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_500v3"), SubResource("Resource_a8sqk")])
[sub_resource type="Resource" id="Resource_g6bbx"] [sub_resource type="Resource" id="Resource_g6bbx"]
script = ExtResource("19_qkgmj") script = ExtResource("19_qkgmj")
@@ -268,10 +371,46 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_g6bbx") input = SubResource("Resource_g6bbx")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_yp12v")]) triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_yp12v")])
[sub_resource type="Resource" id="Resource_xbeov"]
script = ExtResource("30_cvxqo")
key = 4194325
[sub_resource type="Resource" id="Resource_rt8uw"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_hj46p"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_xbeov")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_rt8uw")])
[sub_resource type="Resource" id="Resource_jk2g8"]
script = ExtResource("30_cvxqo")
key = 70
[sub_resource type="Resource" id="Resource_wcvib"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_imjft"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_jk2g8")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_wcvib")])
[sub_resource type="Resource" id="Resource_kx31q"]
script = ExtResource("30_cvxqo")
key = 4194326
[sub_resource type="Resource" id="Resource_oux88"]
script = ExtResource("15_fykw6")
[sub_resource type="Resource" id="Resource_b7w5s"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_kx31q")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_oux88")])
[sub_resource type="Resource" id="Resource_0qat1"] [sub_resource type="Resource" id="Resource_0qat1"]
script = ExtResource("1_qmhk6") script = ExtResource("1_qmhk6")
action = ExtResource("23_g6bbx") action = ExtResource("23_g6bbx")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_1rw8g")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_1rw8g"), SubResource("Resource_hj46p"), SubResource("Resource_imjft"), SubResource("Resource_b7w5s")])
metadata/_guide_input_mappings_collapsed = false metadata/_guide_input_mappings_collapsed = false
[sub_resource type="Resource" id="Resource_j3axn"] [sub_resource type="Resource" id="Resource_j3axn"]
@@ -333,7 +472,59 @@ action = ExtResource("29_q86qg")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ai85f"), SubResource("Resource_1ycft"), SubResource("Resource_k8i2y")]) input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ai85f"), SubResource("Resource_1ycft"), SubResource("Resource_k8i2y")])
metadata/_guide_input_mappings_collapsed = false metadata/_guide_input_mappings_collapsed = false
[sub_resource type="Resource" id="Resource_kcylj"]
script = ExtResource("30_cvxqo")
key = 83
[sub_resource type="Resource" id="Resource_yq6lj"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_kcylj")
[sub_resource type="Resource" id="Resource_fjku4"]
script = ExtResource("1_qmhk6")
action = ExtResource("33_fykw6")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_yq6lj")])
[sub_resource type="Resource" id="Resource_wt677"]
script = ExtResource("30_cvxqo")
key = 87
[sub_resource type="Resource" id="Resource_ly2iy"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_wt677")
[sub_resource type="Resource" id="Resource_odnhd"]
script = ExtResource("1_qmhk6")
action = ExtResource("34_rvpjj")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ly2iy")])
[sub_resource type="Resource" id="Resource_i62p1"]
script = ExtResource("30_cvxqo")
key = 65
[sub_resource type="Resource" id="Resource_3d0gd"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_i62p1")
[sub_resource type="Resource" id="Resource_0eff7"]
script = ExtResource("1_qmhk6")
action = ExtResource("35_s8kjn")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_3d0gd")])
[sub_resource type="Resource" id="Resource_uqqnm"]
script = ExtResource("30_cvxqo")
key = 68
[sub_resource type="Resource" id="Resource_7io5e"]
script = ExtResource("3_yp12v")
input = SubResource("Resource_uqqnm")
[sub_resource type="Resource" id="Resource_gt77e"]
script = ExtResource("1_qmhk6")
action = ExtResource("36_vibkn")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_7io5e")])
[resource] [resource]
script = ExtResource("23_llfhp") script = ExtResource("23_llfhp")
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_cvxqo"), SubResource("Resource_tb8ii"), SubResource("Resource_iihs4"), SubResource("Resource_vibkn"), SubResource("Resource_2hs2y"), SubResource("Resource_0s4kt"), SubResource("Resource_d2r0d"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_0qat1"), SubResource("Resource_vtk18"), SubResource("Resource_weyro")]) mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_cvxqo"), SubResource("Resource_tb8ii"), SubResource("Resource_iihs4"), SubResource("Resource_vibkn"), SubResource("Resource_2hs2y"), SubResource("Resource_0s4kt"), SubResource("Resource_d2r0d"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_0qat1"), SubResource("Resource_vtk18"), SubResource("Resource_weyro"), SubResource("Resource_fjku4"), SubResource("Resource_odnhd"), SubResource("Resource_0eff7"), SubResource("Resource_gt77e")])
metadata/_custom_type_script = "uid://dsa1dnifd6w32" metadata/_custom_type_script = "uid://dsa1dnifd6w32"

View File

@@ -0,0 +1,8 @@
[gd_resource type="Resource" script_class="GUIDEAction" load_steps=2 format=3 uid="uid://s1l0n1iitc6m"]
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_7ljxs"]
[resource]
script = ExtResource("1_7ljxs")
action_value_type = 1
metadata/_custom_type_script = "uid://cluhc11vixkf1"

View File

@@ -0,0 +1,8 @@
[gd_resource type="Resource" script_class="GUIDEAction" load_steps=2 format=3 uid="uid://brswsknpgwal2"]
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_6kcci"]
[resource]
script = ExtResource("1_6kcci")
action_value_type = 1
metadata/_custom_type_script = "uid://cluhc11vixkf1"

View File

@@ -0,0 +1,8 @@
[gd_resource type="Resource" script_class="GUIDEAction" load_steps=2 format=3 uid="uid://f3vs6l4m623s"]
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_u1qdq"]
[resource]
script = ExtResource("1_u1qdq")
action_value_type = 1
metadata/_custom_type_script = "uid://cluhc11vixkf1"

View File

@@ -0,0 +1,8 @@
[gd_resource type="Resource" script_class="GUIDEAction" load_steps=2 format=3 uid="uid://t612lts1wi1s"]
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_gd7dq"]
[resource]
script = ExtResource("1_gd7dq")
action_value_type = 1
metadata/_custom_type_script = "uid://cluhc11vixkf1"

View File

@@ -6,6 +6,10 @@ class_name InputController
@export_group("Move actions") @export_group("Move actions")
@export var move:GUIDEAction @export var move:GUIDEAction
@export var move_left:GUIDEAction
@export var move_right:GUIDEAction
@export var move_front:GUIDEAction
@export var move_back:GUIDEAction
@export var rotate_y:GUIDEAction @export var rotate_y:GUIDEAction
@export var rotate_floorplane:GUIDEAction @export var rotate_floorplane:GUIDEAction
@@ -25,9 +29,13 @@ class_name InputController
@export var dash:GUIDEAction @export var dash:GUIDEAction
@export var throw:GUIDEAction @export var throw:GUIDEAction
signal input_device_changed(is_gamepad: bool)
var _using_gamepad = false
signal input_move(value: Vector3) signal input_move(value: Vector3)
signal input_rotate_y(value: float) signal input_rotate_y(value: float)
signal input_rotate_floorplane(value: float) signal input_rotate_floorplane(value: float)
signal input_move_keyboard(value: Vector3)
# Jump # Jump
signal input_jump_started signal input_jump_started
@@ -100,7 +108,27 @@ func on_input_empower_released():
func on_input_aim_canceled(): func on_input_aim_canceled():
input_aim_canceled.emit() input_aim_canceled.emit()
func _input(event: InputEvent) -> void:
if event is InputEventKey:
if _using_gamepad:
_using_gamepad = false
input_device_changed.emit(_using_gamepad)
elif event is InputEventJoypadMotion:
if !_using_gamepad:
if abs(event.axis_value) > 0.5:
_using_gamepad = true
input_device_changed.emit(_using_gamepad)
elif event is InputEventJoypadButton:
if !_using_gamepad:
_using_gamepad = true
input_device_changed.emit(_using_gamepad)
func _process(_delta: float) -> void: func _process(_delta: float) -> void:
var value_horizontal = -move_left.value_axis_1d + move_right.value_axis_1d
var value_vertical = -move_front.value_axis_1d + move_back.value_axis_1d
var keyboard_input_vector = Vector3(value_horizontal, 0, value_vertical)
input_move_keyboard.emit(keyboard_input_vector)
input_move.emit(move.value_axis_3d) input_move.emit(move.value_axis_3d)
input_rotate_y.emit(rotate_y.value_axis_1d) input_rotate_y.emit(rotate_y.value_axis_1d)
input_rotate_floorplane.emit(rotate_floorplane.value_axis_1d) input_rotate_floorplane.emit(rotate_floorplane.value_axis_1d)

View File

@@ -1,4 +1,4 @@
[gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=78 format=3 uid="uid://c2hpxkcujyc13"] [gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=66 format=3 uid="uid://c2hpxkcujyc13"]
[ext_resource type="Script" uid="uid://cpplm41b5bt6m" path="res://addons/guide/guide_action_mapping.gd" id="1_xno0b"] [ext_resource type="Script" uid="uid://cpplm41b5bt6m" path="res://addons/guide/guide_action_mapping.gd" id="1_xno0b"]
[ext_resource type="Resource" uid="uid://ck43v3q5ype3f" path="res://systems/inputs/menu_mode/back.tres" id="2_6sfub"] [ext_resource type="Resource" uid="uid://ck43v3q5ype3f" path="res://systems/inputs/menu_mode/back.tres" id="2_6sfub"]
@@ -16,7 +16,6 @@
[ext_resource type="Resource" uid="uid://by80bubgg0dpx" path="res://systems/inputs/menu_mode/left.tres" id="13_sy651"] [ext_resource type="Resource" uid="uid://by80bubgg0dpx" path="res://systems/inputs/menu_mode/left.tres" id="13_sy651"]
[ext_resource type="Resource" uid="uid://bmef0jo6o41ic" path="res://systems/inputs/menu_mode/next.tres" id="14_2sr1w"] [ext_resource type="Resource" uid="uid://bmef0jo6o41ic" path="res://systems/inputs/menu_mode/next.tres" id="14_2sr1w"]
[ext_resource type="Resource" uid="uid://c3n6ww58cmbbk" path="res://systems/inputs/menu_mode/previous.tres" id="15_2j2sf"] [ext_resource type="Resource" uid="uid://c3n6ww58cmbbk" path="res://systems/inputs/menu_mode/previous.tres" id="15_2j2sf"]
[ext_resource type="Resource" uid="uid://dgluj0ql5vth7" path="res://systems/inputs/base_mode/pause.tres" id="16_scydb"]
[sub_resource type="Resource" id="Resource_tp5dr"] [sub_resource type="Resource" id="Resource_tp5dr"]
script = ExtResource("4_q6ncx") script = ExtResource("4_q6ncx")
@@ -30,16 +29,11 @@ script = ExtResource("3_scydb")
input = SubResource("Resource_tp5dr") input = SubResource("Resource_tp5dr")
triggers = Array[ExtResource("6_c647i")]([SubResource("Resource_lvbl0")]) triggers = Array[ExtResource("6_c647i")]([SubResource("Resource_lvbl0")])
[sub_resource type="Resource" id="Resource_h2f8g"]
script = ExtResource("8_yfqfy")
key = 4194305
[sub_resource type="Resource" id="Resource_17mt7"] [sub_resource type="Resource" id="Resource_17mt7"]
script = ExtResource("7_m88dc") script = ExtResource("7_m88dc")
[sub_resource type="Resource" id="Resource_23hmj"] [sub_resource type="Resource" id="Resource_23hmj"]
script = ExtResource("3_scydb") script = ExtResource("3_scydb")
input = SubResource("Resource_h2f8g")
triggers = Array[ExtResource("6_c647i")]([SubResource("Resource_17mt7")]) triggers = Array[ExtResource("6_c647i")]([SubResource("Resource_17mt7")])
[sub_resource type="Resource" id="Resource_len71"] [sub_resource type="Resource" id="Resource_len71"]
@@ -225,48 +219,7 @@ script = ExtResource("1_xno0b")
action = ExtResource("15_2j2sf") action = ExtResource("15_2j2sf")
input_mappings = Array[ExtResource("3_scydb")]([SubResource("Resource_3owmx")]) input_mappings = Array[ExtResource("3_scydb")]([SubResource("Resource_3owmx")])
[sub_resource type="Resource" id="Resource_q6ncx"]
script = ExtResource("4_q6ncx")
button = 4
[sub_resource type="Resource" id="Resource_vnf02"]
script = ExtResource("7_m88dc")
[sub_resource type="Resource" id="Resource_c647i"]
script = ExtResource("3_scydb")
input = SubResource("Resource_q6ncx")
triggers = Array[ExtResource("6_c647i")]([SubResource("Resource_vnf02")])
[sub_resource type="Resource" id="Resource_m88dc"]
script = ExtResource("4_q6ncx")
button = 6
[sub_resource type="Resource" id="Resource_yfqfy"]
script = ExtResource("7_m88dc")
[sub_resource type="Resource" id="Resource_dsdj3"]
script = ExtResource("3_scydb")
input = SubResource("Resource_m88dc")
triggers = Array[ExtResource("6_c647i")]([SubResource("Resource_yfqfy")])
[sub_resource type="Resource" id="Resource_q44ew"]
script = ExtResource("8_yfqfy")
key = 4194305
[sub_resource type="Resource" id="Resource_as826"]
script = ExtResource("7_m88dc")
[sub_resource type="Resource" id="Resource_erftc"]
script = ExtResource("3_scydb")
input = SubResource("Resource_q44ew")
triggers = Array[ExtResource("6_c647i")]([SubResource("Resource_as826")])
[sub_resource type="Resource" id="Resource_sy651"]
script = ExtResource("1_xno0b")
action = ExtResource("16_scydb")
input_mappings = Array[ExtResource("3_scydb")]([SubResource("Resource_c647i"), SubResource("Resource_dsdj3"), SubResource("Resource_erftc")])
[resource] [resource]
script = ExtResource("2_w5wm7") script = ExtResource("2_w5wm7")
mappings = Array[ExtResource("1_xno0b")]([SubResource("Resource_len71"), SubResource("Resource_ruq4f"), SubResource("Resource_5hp22"), SubResource("Resource_7i3b3"), SubResource("Resource_6ptcp"), SubResource("Resource_xked7"), SubResource("Resource_qjv8h"), SubResource("Resource_p0ahg"), SubResource("Resource_sy651")]) mappings = Array[ExtResource("1_xno0b")]([SubResource("Resource_len71"), SubResource("Resource_ruq4f"), SubResource("Resource_5hp22"), SubResource("Resource_7i3b3"), SubResource("Resource_6ptcp"), SubResource("Resource_xked7"), SubResource("Resource_qjv8h"), SubResource("Resource_p0ahg")])
metadata/_custom_type_script = "uid://dsa1dnifd6w32" metadata/_custom_type_script = "uid://dsa1dnifd6w32"

View File

@@ -15,8 +15,6 @@ public partial class MantleSystem: Node3D
private ShapeCast3D _wallInFrontCast3D; private ShapeCast3D _wallInFrontCast3D;
private ShapeCast3D _mantleCast3D; private ShapeCast3D _mantleCast3D;
private RayCast3D _mantleCheckCast3D; private RayCast3D _mantleCheckCast3D;
private Option<Vector3> _mantleLocation;
public void Init() public void Init()
{ {

View File

@@ -10,14 +10,9 @@ var active_tutorial: Control
@onready var tuto_move_and_look: VBoxContainer = %TutoMoveAndLook @onready var tuto_move_and_look: VBoxContainer = %TutoMoveAndLook
@onready var tuto_mantle_up: HBoxContainer = %TutoMantleUp @onready var tuto_mantle_up: HBoxContainer = %TutoMantleUp
@onready var tuto_jump: HBoxContainer = %TutoJump
@onready var tuto_double_jump: HBoxContainer = %TutoDoubleJump
@onready var tuto_wall_jump: HBoxContainer = %TutoWallJump @onready var tuto_wall_jump: HBoxContainer = %TutoWallJump
@onready var tuto_dash: HBoxContainer = %TutoDash
@onready var tuto_dash_weapon: HBoxContainer = %TutoDashWeapon @onready var tuto_dash_weapon: HBoxContainer = %TutoDashWeapon
@onready var tuto_weapon_throw: HBoxContainer = %TutoWeaponThrow @onready var tuto_weapon_throw: HBoxContainer = %TutoWeaponThrow
@onready var tuto_empowered_dash: HBoxContainer = %TutoEmpoweredDash
@onready var tuto_empowered_jump: HBoxContainer = %TutoEmpoweredJump
@onready var tuto_enjoy: HBoxContainer = %TutoEnjoy @onready var tuto_enjoy: HBoxContainer = %TutoEnjoy
@@ -39,18 +34,9 @@ func handle_new_tutorial(tuto: Control) -> void:
func _on_tuto_mantle_body_entered(body: Node3D) -> void: func _on_tuto_mantle_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_mantle_up) handle_new_tutorial(tuto_mantle_up)
func _on_tuto_jump_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_jump)
func _on_tuto_double_jump_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_double_jump)
func _on_tuto_wall_jump_body_entered(body: Node3D) -> void: func _on_tuto_wall_jump_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_wall_jump) handle_new_tutorial(tuto_wall_jump)
func _on_tuto_dash_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_dash)
func _on_tuto_done_area_body_entered(body: Node3D) -> void: func _on_tuto_done_area_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_dash_weapon) handle_new_tutorial(tuto_dash_weapon)
@@ -60,12 +46,6 @@ func _on_weapon_retrieved_body_entered(body: Node3D) -> void:
func _on_tuto_weapon_throw_body_entered(body: Node3D) -> void: func _on_tuto_weapon_throw_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_weapon_throw) handle_new_tutorial(tuto_weapon_throw)
func _on_tuto_empowered_dash_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_empowered_dash)
func _on_tuto_empowered_jump_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_empowered_jump)
func _on_tuto_enjoy_body_entered(body: Node3D) -> void: func _on_tuto_enjoy_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_enjoy) handle_new_tutorial(tuto_enjoy)

View File

@@ -12,44 +12,47 @@ public partial class WallHugSystem : Node3D
public delegate void WallDetectedEventHandler(); public delegate void WallDetectedEventHandler();
private List<RayCast3D> _raycasts; private List<RayCast3D> _raycasts;
public Option<Vector3> WallHugLocation { get; private set; } = Option<Vector3>.None;
public Option<Vector3> WallHugNormal { get; private set; } = Option<Vector3>.None;
public void Init() public void Init()
{ {
_raycasts = new List<RayCast3D>(); _raycasts = new List<RayCast3D>();
_raycasts.Add(GetNode<RayCast3D>("front")); _raycasts.Add(GetNode<RayCast3D>("front"));
_raycasts.Add(GetNode<RayCast3D>("front2"));
_raycasts.Add(GetNode<RayCast3D>("back")); _raycasts.Add(GetNode<RayCast3D>("back"));
_raycasts.Add(GetNode<RayCast3D>("back2"));
_raycasts.Add(GetNode<RayCast3D>("left")); _raycasts.Add(GetNode<RayCast3D>("left"));
_raycasts.Add(GetNode<RayCast3D>("left2"));
_raycasts.Add(GetNode<RayCast3D>("right")); _raycasts.Add(GetNode<RayCast3D>("right"));
_raycasts.Add(GetNode<RayCast3D>("right2"));
} }
public override void _PhysicsProcess(double delta) public override void _PhysicsProcess(double delta)
{ {
base._PhysicsProcess(delta); base._PhysicsProcess(delta);
CheckWallHugging();
if (IsWallHugging()) if (IsWallHugging())
EmitSignal(SignalName.WallDetected); EmitSignal(SignalName.WallDetected);
} }
public bool IsWallHugging() public void CheckWallHugging()
{ {
foreach (RayCast3D raycast in _raycasts) foreach (RayCast3D raycast in _raycasts)
{ {
if (raycast.IsColliding()) if (raycast.IsColliding())
{ {
return true; WallHugLocation = raycast.GetCollisionPoint().Some();
WallHugNormal = raycast.GetCollisionNormal().Some();
return;
} }
} }
return false; WallHugLocation = Option<Vector3>.None;
WallHugNormal = Option<Vector3>.None;
} }
public Option<Vector3> GetWallNormal() public bool IsWallHugging()
{ {
foreach (RayCast3D raycast in _raycasts) return !WallHugLocation.IsNone;
{
if (raycast.IsColliding())
{
return raycast.GetCollisionNormal().Some();
}
}
return Option<Vector3>.None;
} }
} }

16
tools/city_helpers.gd Normal file
View File

@@ -0,0 +1,16 @@
@tool
extends Node3D
@export_group("Place player")
@export_tool_button("Tuto start", "Callable") var player_tuto_start = place_player_tuto_start
@export_tool_button("Playground", "Callable") var player_playground = place_player_playground
@onready var player: CharacterBody3D = $Player
func place_player_tuto_start():
player.position = Vector3(0, -132.75, 118)
func place_player_playground():
player.position = Vector3(-6.0, 75.5, -13.5)

View File

@@ -0,0 +1 @@
uid://blenis2y55fmg