Compare commits

...

17 Commits

Author SHA1 Message Date
b792e8721c mantle system fix amazing
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 22s
Create tag and build when new code gets to main / Export (push) Successful in 8m19s
2025-12-19 18:59:34 +01:00
2e2df4ff50 new broken mantle system and fixed lots of gamefeel regarding wall hugs and jumps and coyote time
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 8m51s
2025-12-17 16:39:10 +01:00
a84e0ecfb3 Merge branch 'main' of https://git.game-dev.space/minimata/MovementTests
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 8m25s
2025-12-15 11:20:39 +01:00
f828c1d786 added a coyote time for wall jumps 2025-12-15 11:20:17 +01:00
a98785abec Update .gitea/workflows/main.yaml
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 8m49s
2025-12-10 21:26:25 +00:00
7c4e541446 fixed input mapping context issue
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 6m5s
2025-12-10 17:10:41 +01:00
7d31d17034 tuto fixes
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 6m7s
2025-12-10 10:04:05 +01:00
2ff8cc74cc camera incline on wall run and normal run
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 21s
Create tag and build when new code gets to main / Export (push) Successful in 6m17s
2025-12-08 12:23:36 +01:00
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
c895dfe9a0 made a dedicated scene for simple on-screen tutorials
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 6m11s
2025-11-08 10:56:35 +01:00
1ea3945cf6 final tutorial setup and UI fix
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 6m9s
2025-11-06 09:29:05 +01:00
47 changed files with 2212 additions and 710 deletions

View File

@@ -69,11 +69,11 @@ jobs:
# mkdir -v -p build/linux
# godot --headless --verbose --export-release "Linux/X11" build/linux/${{ env.GAME_NAME }}.x86_64
# zip -r Linux.zip build/linux
# - name: Mac Build
# run: |
# mkdir -v -p build/mac
# godot --headless --verbose --export-release "macOS" build/mac/${{ env.GAME_NAME }}.zip
# zip -r Mac.zip build/mac
- name: Mac Build
run: |
mkdir -v -p build/mac
godot --headless --verbose --export-release "macOS" build/mac/${{ env.GAME_NAME }}.zip
zip -r Mac.zip build/mac
- name: Upload to Itch
uses: KikimoraGames/itch-publish@v0.0.3
@@ -102,12 +102,12 @@ jobs:
# buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
# gameData: Linux.zip
# buildChannel: linux
# - name: Upload to Itch
# uses: KikimoraGames/itch-publish@v0.0.3
# with:
# butlerApiKey: ${{ secrets.BUTLER_TOKEN }}
# itchUsername: ${{ env.ITCHIO_USERNAME }}
# itchGameId: ${{ env.ITCHIO_GAMEID }}
# buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
# gameData: Mac.zip
# buildChannel: mac
- name: Upload to Itch
uses: KikimoraGames/itch-publish@v0.0.3
with:
butlerApiKey: ${{ secrets.BUTLER_TOKEN }}
itchUsername: ${{ env.ITCHIO_USERNAME }}
itchGameId: ${{ env.ITCHIO_GAMEID }}
buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
gameData: Mac.zip
buildChannel: mac

View File

@@ -6,11 +6,15 @@ extends Control
@export var options_packed_scene : PackedScene
@export var credits_packed_scene : PackedScene
@export var menu_context : GUIDEMappingContext
@export var back_action : GUIDEAction
var options_scene
var credits_scene
var sub_menu
func load_game_scene() -> void:
GUIDE.disable_mapping_context(menu_context)
SceneLoader.load_scene(game_scene_path)
func new_game() -> void:
@@ -73,7 +77,12 @@ func _ready() -> void:
_add_or_hide_options()
_add_or_hide_credits()
_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:
new_game()

View File

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

View File

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

View File

@@ -12,3 +12,11 @@ extends OverlaidMenu
if menu_scene:
var _instance = menu_scene.instantiate()
%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.
@export var pause_menu_packed : PackedScene
@export var focused_viewport : Viewport
@export var player : CharacterBody3D
@export_group("Inputs")
@export var base_mode:GUIDEMappingContext
@export var pause:GUIDEAction
var menu_already_open = false
func _ready() -> void:
# GUIDE.enable_mapping_context(base_mode)
pause.triggered.connect(on_input_pause)
func on_input_pause():
if menu_already_open:
return
menu_already_open = true
if not focused_viewport:
focused_viewport = get_viewport()
var _initial_focus_control = focused_viewport.gui_get_focus_owner()
var current_menu = pause_menu_packed.instantiate()
current_menu.menu_closing.connect(player.LoadSettings)
get_tree().current_scene.call_deferred("add_child", current_menu)
await current_menu.tree_exited
menu_already_open = false
if is_inside_tree() and _initial_focus_control:
_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="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"]
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")]
script = ExtResource("2_v6lxe")
collision_layer = 3
@@ -2825,6 +2843,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_198/Cube_198_col2" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2832,6 +2853,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_199/Cube_199_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2839,6 +2863,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_200/Cube_200_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2846,6 +2873,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_201/Cube_201_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2853,6 +2883,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_202/Cube_202_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2860,6 +2893,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_203/Cube_203_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2867,6 +2903,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_204/Cube_204_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2874,6 +2913,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_205/Cube_205_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2881,6 +2923,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_206/Cube_206_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2888,6 +2933,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_207/Cube_207_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2895,6 +2943,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_208/Cube_208_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2902,6 +2953,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_209/Cube_209_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2909,6 +2963,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_210/Cube_210_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2916,6 +2973,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_211/Cube_211_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2923,6 +2983,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_212/Cube_212_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2930,6 +2993,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_213/Cube_213_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2937,6 +3003,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_214/Cube_214_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2944,6 +3013,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_215/Cube_215_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2951,6 +3023,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_216/Cube_216_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2958,6 +3033,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_218/Cube_218_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2965,6 +3043,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_219/Cube_219_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2972,6 +3053,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_220/Cube_220_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2979,6 +3063,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_221/Cube_221_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2986,6 +3073,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_217/Cube_217_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -2993,6 +3083,10 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_222/Cube_222_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3000,6 +3094,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_223/Cube_223_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3007,6 +3104,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_224/Cube_224_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3014,6 +3114,10 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_225/Cube_225_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3021,6 +3125,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_226/Cube_226_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3028,6 +3135,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_227/Cube_227_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3035,6 +3145,10 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_228/Cube_228_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3042,6 +3156,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_229/Cube_229_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3049,6 +3166,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_230/Cube_230_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3056,6 +3176,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_231/Cube_231_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3063,6 +3186,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_232/Cube_232_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3070,6 +3196,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_233/Cube_233_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3077,6 +3206,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_235/Cube_235_col2" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3084,6 +3216,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_237/Cube_237_col2" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3091,6 +3226,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_234/Cube_234_col2" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3098,6 +3236,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_236/Cube_236_col2" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3119,6 +3260,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_240/Cube_240_col2" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3126,6 +3270,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_241/Cube_241_col2" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3133,6 +3280,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_242/Cube_242_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3140,6 +3290,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_243/Cube_243_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3147,6 +3300,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_244/Cube_244_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3154,6 +3310,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_245/Cube_245_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3161,6 +3320,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_246/Cube_246_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3168,6 +3330,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_247/Cube_247_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3175,6 +3340,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_248/Cube_248_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3182,6 +3350,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_249/Cube_249_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3189,6 +3360,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_250/Cube_250_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3196,6 +3370,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_251/Cube_251_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3203,6 +3380,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_252/Cube_252_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3210,6 +3390,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_253/Cube_253_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3217,6 +3400,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_254/Cube_254_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3224,6 +3410,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_255/Cube_255_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3231,6 +3420,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_256/Cube_256_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3238,6 +3430,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_257/Cube_257_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3245,6 +3440,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_258/Cube_258_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3252,6 +3450,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_259/Cube_259_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3259,6 +3460,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_260/Cube_260_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3266,6 +3470,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_262/Cube_262_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3280,6 +3487,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_264/Cube_264_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3287,6 +3497,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_265/Cube_265_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3294,6 +3507,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_266/Cube_266_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3301,6 +3517,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_267/Cube_267_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3308,6 +3527,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_268/Cube_268_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3315,6 +3537,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_269/Cube_269_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3322,6 +3547,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_270/Cube_270_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3329,6 +3557,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_271/Cube_271_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3336,6 +3567,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_272/Cube_272_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3343,6 +3577,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_273/Cube_273_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3350,6 +3587,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_274/Cube_274_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3357,6 +3597,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_275/Cube_275_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3364,6 +3607,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_276/Cube_276_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3371,6 +3617,9 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_277/Cube_277_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
@@ -3378,9 +3627,72 @@ collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cylinder/Cylinder_col" index="0"]
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"]
collision_layer = 3
collision_mask = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube_278/Cube_278_col" index="0"]
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
var player : CharacterBody3D
func finished_climbing() -> void:
player.SetAllowedInputsAll()
func start_climbing() -> void:
var elevator_tween = get_tree().create_tween()
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)
var player_start_location = player.global_position
var height_difference = end_location - global_position
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:
if lift_already_used:
return
if is_instance_of(body, CharacterBody3D):
player = body
player.SetAllowedInputsMoveCamera()
lift_already_used = true
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")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1.5)
TutorialDone = true
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_1bvp3")
@@ -49,7 +50,7 @@ collision_layer = 3
collision_mask = 5
[node name="CSGBox3D" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.09619, -0.472656, -46.3293)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.096, -0.5, -46.329)
use_collision = true
size = Vector3(100, 1, 190.741)
material = ExtResource("3_vvhq3")
@@ -399,3 +400,205 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 4.5, -11.5)
use_collision = true
size = Vector3(1, 0.5, 5)
material = ExtResource("3_vvhq3")
[node name="Mantles" type="CSGCombiner3D" parent="Greybox"]
[node name="Label3D22" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, -5.5, 0.1, 11)
text = "0.5m"
[node name="Label3D35" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, -8.5, 0.1, 11)
text = "0.25m"
[node name="Label3D23" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, -2, 0.1, 11)
text = "1m"
[node name="Label3D27" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, -11, 0.1, 12.5)
text = "1m"
[node name="Label3D28" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, 13, 0.1, 12.5)
text = "1m"
[node name="Label3D29" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, 13, 0.1, 21)
text = "2m"
[node name="Label3D30" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, 13, 0.1, 28.5)
text = "3m"
[node name="Label3D31" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, -11, 0.1, 21)
text = "2m"
[node name="Label3D32" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, -11, 0.1, 28.5)
text = "3m"
[node name="Label3D24" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, 2, 0.1, 11)
text = "1.5m"
[node name="Label3D25" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, 6, 0.1, 11)
text = "2m"
[node name="Label3D26" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, 10, 0.1, 11)
text = "4m"
[node name="CSGBox3D33" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0.5, 12.5)
use_collision = true
size = Vector3(4, 1, 1)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D34" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5, 0.5, 12.25)
use_collision = true
size = Vector3(3, 1, 0.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D35" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0.5, 12.75)
use_collision = true
size = Vector3(4, 1, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D36" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0.5, 13)
use_collision = true
size = Vector3(4, 1, 2)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D37" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0.5, 14)
use_collision = true
size = Vector3(4, 1, 4)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D38" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 1, 20.5)
use_collision = true
size = Vector3(4, 2, 1)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D39" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5, 1, 20.25)
use_collision = true
size = Vector3(3, 2, 0.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D40" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 1, 20.75)
use_collision = true
size = Vector3(4, 2, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D41" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 1, 21)
use_collision = true
size = Vector3(4, 2, 2)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D42" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 1, 22)
use_collision = true
size = Vector3(4, 2, 4)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D43" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 1.5, 28.5)
use_collision = true
size = Vector3(4, 3, 1)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D44" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5, 1.5, 28.25)
use_collision = true
size = Vector3(3, 3, 0.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D45" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 1.5, 28.75)
use_collision = true
size = Vector3(4, 3, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D46" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 1.5, 29)
use_collision = true
size = Vector3(4, 3, 2)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D47" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 1.5, 30)
use_collision = true
size = Vector3(4, 3, 4)
material = ExtResource("3_vvhq3")
[node name="Label3D33" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, 13, 0.1, 36.5)
text = "4m"
[node name="Label3D34" type="Label3D" parent="Greybox/Mantles"]
transform = Transform3D(-5, 4.3711395e-07, 1.9106861e-14, 0, -2.18557e-07, 5, 4.3711395e-07, 5, 2.18557e-07, -11, 0.1, 36.5)
text = "4m"
[node name="CSGBox3D48" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 2, 36.5)
use_collision = true
size = Vector3(4, 4, 1)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D49" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5, 2, 36.25)
use_collision = true
size = Vector3(3, 4, 0.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D53" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.5, 0.5, 12.125)
use_collision = true
size = Vector3(3, 1, 0.25)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D54" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.5, 1, 20.125)
use_collision = true
size = Vector3(3, 2, 0.25)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D55" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.5, 1.5, 28.125)
use_collision = true
size = Vector3(3, 3, 0.25)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D56" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.5, 2, 36.125)
use_collision = true
size = Vector3(3, 4, 0.25)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D50" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 36.75)
use_collision = true
size = Vector3(4, 4, 1.5)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D51" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 2, 37)
use_collision = true
size = Vector3(4, 4, 2)
material = ExtResource("3_vvhq3")
[node name="CSGBox3D52" type="CSGBox3D" parent="Greybox/Mantles"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 2, 38)
use_collision = true
size = Vector3(4, 4, 4)
material = ExtResource("3_vvhq3")

View File

@@ -1,12 +1,11 @@
[gd_scene load_steps=37 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="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="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="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="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"]
@@ -18,11 +17,48 @@
[ext_resource type="Texture2D" uid="uid://dl73t0kxkaxp0" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_button_a_outline.svg" id="16_2k3fr"]
[ext_resource type="Texture2D" uid="uid://blfc13splpcld" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_stick_l.svg" id="16_crf87"]
[ext_resource type="Script" uid="uid://dvieq1o7ci70y" path="res://systems/ui/tutorial_controller.gd" id="16_efsse"]
[ext_resource type="PackedScene" uid="uid://b8aet6m4m2i83" path="res://scenes/tuto_trigger/TutoTrigger.tscn" id="16_qwuk2"]
[ext_resource type="Texture2D" uid="uid://com0lpfuol6vk" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_stick_r.svg" id="17_rmfv1"]
[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://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"]
[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, 10, 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"]
panorama = ExtResource("2_ruo5i")
@@ -40,6 +76,7 @@ ssao_enabled = true
ssil_enabled = true
sdfgi_enabled = true
sdfgi_use_occlusion = true
glow_enabled = true
fog_enabled = true
fog_light_color = Color(0.9955967, 0.83634025, 0.69151855, 1)
fog_sun_scatter = 0.5
@@ -48,181 +85,21 @@ fog_sky_affect = 0.184
volumetric_fog_density = 0.004
volumetric_fog_emission = Color(1, 1, 1, 1)
volumetric_fog_anisotropy = 0.6
adjustment_enabled = true
[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_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_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="LabelSettings" id="LabelSettings_2k3fr"]
font_size = 30
[sub_resource type="BoxMesh" id="BoxMesh_p287n"]
[node name="Main" type="Node3D"]
[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")
script = ExtResource("1_qwuk2")
[node name="BackgroundMusicPlayer" parent="." instance=ExtResource("9_i2xii")]
stream = ExtResource("10_eca4n")
[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 = 15.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="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="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="PauseMenuController" type="Node" parent="." node_paths=PackedStringArray("player")]
script = ExtResource("7_ukfuy")
pause_menu_packed = ExtResource("8_wctvs")
player = NodePath("../Player")
pause = ExtResource("10_0ari0")
[node name="TutorialController" type="Control" parent="."]
layout_mode = 3
@@ -231,6 +108,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 1
script = ExtResource("16_efsse")
tuto_got_sword_packed = ExtResource("17_t0d86")
@@ -261,6 +139,7 @@ theme_override_constants/margin_bottom = 10
[node name="TutoMoveAndLook" type="VBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
theme_override_constants/separation = 0
@@ -305,49 +184,6 @@ layout_mode = 2
text = "Mantle up"
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"]
unique_name_in_owner = true
visible = false
@@ -372,21 +208,6 @@ layout_mode = 2
text = "Wall jump"
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"]
unique_name_in_owner = true
visible = false
@@ -402,78 +223,233 @@ layout_mode = 2
text = "Dash towards sword"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoEmpoweredDash" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
[node name="TutoWeaponThrow" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
theme_override_constants/separation = 20
[node name="HBoxContainer" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer/TutoWeaponThrow"]
layout_mode = 2
theme_override_constants/separation = 0
[node name="TextureRect" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoWeaponThrow/HBoxContainer"]
layout_mode = 2
texture = ExtResource("23_p287n")
[node name="Label2" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoWeaponThrow/HBoxContainer"]
layout_mode = 2
text = "while aiming"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="Label3" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoWeaponThrow"]
layout_mode = 2
text = "Throw weapon"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TutoEnjoy" 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"]
[node name="label" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoEnjoy"]
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 = "+"
text = "Enjoy this little playground!"
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="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="Label3" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredDash"]
layout_mode = 2
text = "Empowered dash"
label_settings = SubResource("LabelSettings_2k3fr")
[node name="TriggerTutoMove" type="Area3D" parent="TutoTriggers"]
collision_layer = 0
collision_mask = 16
[node name="TutoEmpoweredJump" type="HBoxContainer" parent="TutorialController/PanelContainer/MarginContainer"]
unique_name_in_owner = true
[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("19_efsse")
complex_input_text = "against wall"
tuto_text = "Wall run"
[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, 9.75, -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
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="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="TextureRect" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredJump/HBoxContainer"]
layout_mode = 2
texture = ExtResource("21_rmfv1")
[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="Label2" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredJump/HBoxContainer"]
layout_mode = 2
text = "+"
label_settings = SubResource("LabelSettings_2k3fr")
[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="TextureRect2" type="TextureRect" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredJump/HBoxContainer"]
layout_mode = 2
texture = ExtResource("16_2k3fr")
[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="Label3" type="Label" parent="TutorialController/PanelContainer/MarginContainer/TutoEmpoweredJump"]
layout_mode = 2
text = "Empowered jump"
label_settings = SubResource("LabelSettings_2k3fr")
[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_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_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_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_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/TutorialDoneArea" to="Player" method="OnTutorialDone"]
[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_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_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_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="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="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="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"]
resource_name = "Intro"
@@ -352,6 +354,8 @@ graph_offset = Vector2(-180.277, 49)
script = ExtResource("2_nyjay")
level_select_packed_scene = null
game_scene_path = "uid://dmkw8cmalm5k"
menu_context = ExtResource("3_ytpwg")
back_action = ExtResource("4_8i6b8")
[node name="MenuAnimationPlayer" type="AnimationPlayer" parent="." index="1"]
libraries = {

View File

@@ -33,20 +33,38 @@ alignment = 1
[node name="LookSensitivityControl" parent="VBoxContainer/MarginContainer/VBoxContainer" instance=ExtResource("2_iyvrj")]
layout_mode = 2
option_name = "Look Sensitivity"
option_name = "Joystick Sensitivity"
option_section = 1
key = "LookSensitivity"
section = "InputSettings"
[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"]
min_value = 0.2
max_value = 2.0
step = 0.2
value = 2.0
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")]
layout_mode = 2
option_name = "Head Bobbing while walking"
@@ -76,5 +94,6 @@ step = 0.1
tick_count = 10
[editable path="VBoxContainer/MarginContainer/VBoxContainer/LookSensitivityControl"]
[editable path="VBoxContainer/MarginContainer/VBoxContainer/MouseSensitivityControl"]
[editable path="VBoxContainer/MarginContainer/VBoxContainer/HeadBobbingControl"]
[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="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://ceehkbh6emrdm" path="res://menus/scenes/menus/options_menu/input/input_extras_menu.tscn" id="4_grbel"]
[node name="MiniOptionsMenu" instance=ExtResource("1_gcivb")]
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
[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://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")]
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="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="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")]
top_level = true
script = ExtResource("2_ek1hy")
options_packed_scene = ExtResource("3_e0t2r")
main_menu_scene = "res://menus/scenes/menus/main_menu/main_menu_with_animations.tscn"
menu_context = ExtResource("4_nfx08")
back_action = ExtResource("5_su1bt")
[connection signal="tree_entered" from="." to="." method="on_enter_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
static func has_game_state() -> bool:
return false
return GlobalState.has_state(STATE_NAME)
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="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://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="Script" uid="uid://vuq8rjq3vegn" path="res://player_controller/Scripts/Stamina.cs" id="6_lxtc4"]
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://systems/inputs/base_mode/move_left.tres" id="5_q14ux"]
[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="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="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"]
@@ -64,6 +66,7 @@ AccelerationAir = 2.0
DecelerationAir = 0.1
Weight = 5.0
MantleTime = 0.2
CoyoteTime = 0.3
SimpleJumpStartVelocity = 8.0
SimpleJumpHangTimeInFrames = 1
SimpleJumpGravityLesseningFactor = 2.5
@@ -73,7 +76,7 @@ DoubleJumpGravityLesseningFactor = 1.5
MegaJumpStartVelocity = 30.0
MegaJumpHangTimeInFrames = 12
MegaJumpGravityLesseningFactor = 1.2
WallJumpStartVelocity = 8.0
WallJumpStartVelocity = 12.0
MaxNumberOfEmpoweredActions = 3
SimpleDashStrength = 15.0
PoweredDashStrength = 30.0
@@ -82,11 +85,23 @@ PostDashSpeed = 30.0
WallHugGravityLesseningFactor = 15.0
WallHugDownwardMaxSpeed = 8.0
WallHugHorizontalDeceleration = 0.5
WallRunAltitudeLossSpeed = 12.0
WallRunSpeedThreshold = 10.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="."]
script = ExtResource("16_v31n3")
base_mode = ExtResource("3_cresl")
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_floorplane = ExtResource("5_4u7i3")
aim_down = ExtResource("8_obsfv")
@@ -115,12 +130,13 @@ CapsuleDefaultHeight = 1.7
[node name="HeadSystem" parent="." instance=ExtResource("11_rxwoh")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0)
CameraInclineAcceleration = 20.0
GroundedCameraIncline = 3.0
[node name="HealthSystem" type="Node3D" parent="."]
script = ExtResource("5_umw0l")
[node name="Stamina" type="Node3D" parent="."]
script = ExtResource("6_lxtc4")
[node name="MantleSystem" parent="HeadSystem" instance=ExtResource("8_qu4wy")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.6, 0)
MantleEndLocationDistanceFromWall = 0.3
MantleHeightCastStart = 2.5
[node name="StairsSystem" type="Node3D" parent="."]
script = ExtResource("7_bmt5a")
@@ -132,10 +148,6 @@ target_position = Vector3(0, -0.55, 0)
[node name="StairsBelowRayCast3D" type="RayCast3D" parent="."]
target_position = Vector3(0, -0.75, 0)
[node name="MantleSystem" parent="." instance=ExtResource("8_qu4wy")]
MantleEndLocationDistanceFromWall = 0.3
MantleHeightCastStart = 2.0
[node name="Bobbing" type="Node3D" parent="."]
script = ExtResource("10_7wk1w")
@@ -143,6 +155,7 @@ script = ExtResource("10_7wk1w")
script = ExtResource("12_m2mxi")
[node name="HeadCollisionDetectors" type="Node3D" parent="."]
visible = false
[node name="HeadCollisionDetector0" type="RayCast3D" parent="HeadCollisionDetectors"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.4, -0.210707)
@@ -163,25 +176,45 @@ target_position = Vector3(0, 1, 0)
[node name="TweenQueueSystem" parent="." instance=ExtResource("22_rpwev")]
[node name="WallHugSystem" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
visible = false
script = ExtResource("27_n7qhm")
[node name="back" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(0, 0, 1)
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"]
target_position = Vector3(0, 0, -1)
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"]
target_position = Vector3(1, 0, 0)
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"]
target_position = Vector3(-1, 0, 0)
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")]
DashSpeed = 0.2
PostDashSpeed = 30.0
@@ -194,6 +227,7 @@ ThrowForce = 15.0
StraightThrowDuration = 0.05
[node name="DashIndicator" type="Node3D" parent="."]
visible = false
[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)
@@ -212,64 +246,76 @@ one_shot = true
ignore_time_scale = true
[node name="StateChartDebugger" parent="." instance=ExtResource("24_q5h8a")]
visible = false
offset_left = 1524.0
offset_top = 1.0
offset_right = -8.0
offset_bottom = 1.0
enabled = false
initial_node_to_watch = NodePath("../StateChart")
[node name="UI" type="CanvasLayer" parent="."]
script = ExtResource("30_2ghaa")
[node name="VBoxContainer" type="VBoxContainer" parent="UI"]
offset_right = 128.0
offset_bottom = 81.0
[node name="DashesLabel" type="Label" parent="UI/VBoxContainer"]
layout_mode = 2
text = "Dashes"
[node name="HBoxContainer" type="HBoxContainer" parent="UI/VBoxContainer"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
[node name="Dash1" type="TextureRect" parent="UI/VBoxContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("30_h23go")
expand_mode = 2
[node name="Dash2" type="TextureRect" parent="UI/VBoxContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("30_h23go")
expand_mode = 2
[node name="Dash3" type="TextureRect" parent="UI/VBoxContainer/HBoxContainer"]
layout_mode = 2
texture = ExtResource("30_h23go")
expand_mode = 2
[node name="DashCooldownIndicator" type="ColorRect" parent="UI"]
unique_name_in_owner = true
[node name="UI" type="Control" parent="."]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 910.0
offset_top = 549.0
offset_right = -910.0
offset_bottom = -521.0
grow_horizontal = 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_top = 50
theme_override_constants/margin_right = 50
theme_override_constants/margin_bottom = 50
[node name="VBoxContainer" type="VBoxContainer" parent="UI/MarginContainer"]
layout_mode = 2
size_flags_horizontal = 0
size_flags_vertical = 0
[node name="DashesLabel" type="Label" parent="UI/MarginContainer/VBoxContainer"]
layout_mode = 2
text = "Empowered actions"
[node name="HBoxContainer" type="HBoxContainer" parent="UI/MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
[node name="Dash1" type="TextureRect" parent="UI/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
texture = ExtResource("30_h23go")
expand_mode = 2
[node name="Dash2" type="TextureRect" parent="UI/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
texture = ExtResource("30_h23go")
expand_mode = 2
[node name="Dash3" type="TextureRect" parent="UI/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
texture = ExtResource("30_h23go")
expand_mode = 2
[node name="CenterContainer" type="CenterContainer" parent="UI"]
custom_minimum_size = Vector2(1920, 1080)
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = -1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="CenterIcon" type="TextureRect" parent="UI/CenterContainer"]
material = SubResource("CanvasItemMaterial_2q0ik")
@@ -278,6 +324,24 @@ layout_mode = 2
texture = ExtResource("32_lgpc8")
expand_mode = 1
[node name="CenterContainer2" type="CenterContainer" 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
[node name="MarginContainer" type="MarginContainer" parent="UI/CenterContainer2"]
layout_mode = 2
theme_override_constants/margin_top = 50
[node name="DashCooldownIndicator" type="ColorRect" parent="UI/CenterContainer2/MarginContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(100, 10)
layout_mode = 2
[node name="StateChart" type="Node" parent="."]
script = ExtResource("25_wv70j")
metadata/_custom_type_script = "uid://couw105c3bde4"
@@ -438,45 +502,45 @@ delay_in_seconds = "0.0"
script = ExtResource("26_infe6")
initial_state = NodePath("SimpleJump")
[node name="OnMantle" type="Node" parent="StateChart/Root/Movement/Jump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Mantling")
event = &"mantle"
delay_in_seconds = "0.0"
[node name="SimpleJump" type="Node" parent="StateChart/Root/Movement/Jump"]
script = ExtResource("27_34snm")
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/Jump/SimpleJump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../MegaJump")
event = &"megajump"
delay_in_seconds = "0.0"
[node name="OnJumpEnded" type="Node" parent="StateChart/Root/Movement/Jump/SimpleJump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Airborne/DoubleJumpEnabled")
event = &"jump_ended"
delay_in_seconds = "0.0"
[node name="DoubleJump" type="Node" parent="StateChart/Root/Movement/Jump"]
script = ExtResource("27_34snm")
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/Jump/DoubleJump"]
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/Jump/SimpleJump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../MegaJump")
event = &"megajump"
delay_in_seconds = "0.0"
[node name="DoubleJump" type="Node" parent="StateChart/Root/Movement/Jump"]
script = ExtResource("27_34snm")
[node name="OnJumpEnded" type="Node" parent="StateChart/Root/Movement/Jump/DoubleJump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Airborne/Falling")
event = &"jump_ended"
delay_in_seconds = "0.0"
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/Jump/DoubleJump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../MegaJump")
event = &"megajump"
delay_in_seconds = "0.0"
[node name="MegaJump" type="Node" parent="StateChart/Root/Movement/Jump"]
script = ExtResource("27_34snm")
[node name="OnJumpEnded" type="Node" parent="StateChart/Root/Movement/Jump/MegaJump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Airborne/Falling")
event = &"jump_ended"
delay_in_seconds = "0.0"
[node name="Dashing" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("26_infe6")
initial_state = NodePath("Dash")
@@ -540,10 +604,10 @@ initial_state = NodePath("CoyoteEnabled")
script = ExtResource("41_ruloh")
default_state = NodePath("../CoyoteEnabled")
[node name="OnWallHug" type="Node" parent="StateChart/Root/Movement/Airborne"]
[node name="OnWallRun" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("28_n7qhm")
to = NodePath("../../OnWall/Hugging")
event = &"wall_hug"
to = NodePath("../../OnWall/RunningCoyoteEnabled")
event = &"wall_run"
delay_in_seconds = "0.0"
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/Airborne"]
@@ -582,6 +646,12 @@ delay_in_seconds = "0.0"
[node name="DoubleJumpEnabled" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")
[node name="OnWallHug" type="Node" parent="StateChart/Root/Movement/Airborne/DoubleJumpEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../OnWall/HuggingCoyoteEnabled")
event = &"wall_hug"
delay_in_seconds = "0.0"
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/Airborne/DoubleJumpEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/MegaJump")
@@ -597,6 +667,12 @@ delay_in_seconds = "0.0"
[node name="Falling" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")
[node name="OnWallHug" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../OnWall/HuggingCoyoteEnabled")
event = &"wall_hug"
delay_in_seconds = "0.0"
[node name="ToDoubleJump" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
script = ExtResource("28_n7qhm")
to = NodePath("../../DoubleJumpEnabled")
@@ -607,61 +683,91 @@ delay_in_seconds = "0.0"
script = ExtResource("26_infe6")
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"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Grounded")
event = &"grounded"
delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Jump/SimpleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="OnMegajump" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Jump/MegaJump")
event = &"megajump"
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("28_n7qhm")
to = NodePath("../../Airborne/Reset")
event = &"start_falling"
delay_in_seconds = "0.0"
[node name="OnMantle" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Mantling")
event = &"mantle"
delay_in_seconds = "0.0"
[node name="HuggingCoyoteEnabled" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="ToHanging" type="Node" parent="StateChart/Root/Movement/OnWall/HugCanceled"]
[node name="OnExpiration" type="Node" parent="StateChart/Root/Movement/OnWall/HuggingCoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Hanging")
event = &"oh_hit_wall"
to = NodePath("../../Hugging")
event = &"coyote_expired"
delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/HuggingCoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/DoubleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="Hugging" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="OnGrounded" type="Node" parent="StateChart/Root/Movement/OnWall/Hugging"]
[node name="OnJump" 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"
to = NodePath("../../../Jump/SimpleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="Hanging" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="OnDrop" type="Node" parent="StateChart/Root/Movement/OnWall/Hanging"]
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/Hanging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Hugging")
event = &"dash"
to = NodePath("../../../Jump/SimpleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="RunningCoyoteEnabled" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/RunningCoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/DoubleJump")
event = &"jump"
delay_in_seconds = "0.0"
[node name="OnExpiration" type="Node" parent="StateChart/Root/Movement/OnWall/RunningCoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Running")
event = &"coyote_expired"
delay_in_seconds = "0.0"
[node name="Running" type="Node" parent="StateChart/Root/Movement/OnWall"]
script = ExtResource("27_34snm")
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/Running"]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/SimpleJump")
event = &"jump"
delay_in_seconds = "0.0"
[connection signal="input_aim_canceled" from="InputController" to="." method="OnInputAimCanceled"]
@@ -669,6 +775,7 @@ delay_in_seconds = "0.0"
[connection signal="input_aim_pressed" from="InputController" to="." method="OnInputAimPressed"]
[connection signal="input_aim_released" from="InputController" to="." method="OnInputAimReleased"]
[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_released" from="InputController" to="." method="OnInputEmpowerReleased"]
[connection signal="input_hit" from="InputController" to="." method="OnInputHitPressed"]
@@ -676,6 +783,7 @@ delay_in_seconds = "0.0"
[connection signal="input_jump_ongoing" from="InputController" to="." method="OnInputJumpOngoing"]
[connection signal="input_jump_started" from="InputController" to="." method="OnInputJumpStarted"]
[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_y" from="InputController" to="." method="OnInputRotateY"]
[connection signal="input_throw" from="InputController" to="." method="OnInputThrowPressed"]

View File

@@ -1,7 +1,7 @@
using Godot;
using System;
public partial class PlayerUi : CanvasLayer
public partial class PlayerUi : Control
{
private TextureRect[] _dashIcons = new TextureRect[3];
@@ -9,9 +9,9 @@ public partial class PlayerUi : CanvasLayer
{
base._Ready();
_dashIcons[0] = GetNode<TextureRect>("VBoxContainer/HBoxContainer/Dash1");
_dashIcons[1] = GetNode<TextureRect>("VBoxContainer/HBoxContainer/Dash2");
_dashIcons[2] = GetNode<TextureRect>("VBoxContainer/HBoxContainer/Dash3");
_dashIcons[0] = GetNode<TextureRect>("%Dash1");
_dashIcons[1] = GetNode<TextureRect>("%Dash2");
_dashIcons[2] = GetNode<TextureRect>("%Dash3");
}
public void SetNumberOfDashesLeft(int numberOfDashes)

View File

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

View File

@@ -8,17 +8,22 @@ using RustyOptions;
public partial class PlayerController : CharacterBody3D
{
public enum AllowedInputs
{
All,
MoveCamera,
None,
}
private bool _isUsingGamepad;
// User API to important child nodes.
public HeadSystem HeadSystem;
public Bobbing Bobbing;
public FieldOfView FieldOfView;
public Stamina Stamina;
public StairsSystem StairsSystem;
public MantleSystem MantleSystem;
public DashSystem DashSystem;
public CapsuleCollider CapsuleCollider;
public HealthSystem HealthSystem;
public TweenQueueSystem TweenQueueSystem;
public Node3D WeaponRoot;
public WeaponSystem WeaponSystem;
public WallHugSystem WallHugSystem;
@@ -28,12 +33,15 @@ public partial class PlayerController : CharacterBody3D
public Node3D DashIndicatorNode;
public MeshInstance3D DashIndicatorMesh;
public CylinderMesh DashIndicatorMeshCylinder;
public RayCast3D WallRunSnapper;
private bool _movementEnabled = true;
private Vector3 _dashDirection = Vector3.Zero;
private bool _shouldMantle;
private Vector3 _mantleLocation = Vector3.Zero;
private Vector3 _dashDirection = Vector3.Zero;
private Vector3 _preMantleVelocity = Vector3.Zero;
private float _lastFrameWasOnFloor = -Mathf.Inf;
@@ -41,10 +49,11 @@ public partial class PlayerController : CharacterBody3D
private RayCast3D[] _headCollisionDetectors;
private Vector3 _inputMove = Vector3.Zero;
private Vector3 _inputMoveKeyboard = Vector3.Zero;
private float _inputRotateY;
private float _inputRotateFloorplane;
private int _framesSinceJumpAtApex = 0;
private int _framesSinceJumpAtApex;
// Timers
private Timer _timeScaleAimInAirTimer;
@@ -52,6 +61,7 @@ public partial class PlayerController : CharacterBody3D
private Timer _powerCooldownTimer;
[Export] public Marker3D TutorialWeaponTarget;
[Export] public bool TutorialDone { get; set; }
[ExportCategory("Movement")]
[ExportGroup("Ground")]
@@ -71,6 +81,8 @@ public partial class PlayerController : CharacterBody3D
[ExportGroup("Mantle")]
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
public float MantleTime { get; set; } = 0.1f;
[Export]
public PackedScene MantlePath { get; set; } = GD.Load<PackedScene>("res://scenes/path/Path.tscn");
// Jump
[ExportGroup("Jump")]
@@ -145,6 +157,16 @@ public partial class PlayerController : CharacterBody3D
[Export(PropertyHint.Range, "0.1,10,0.1,or_greater")]
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 _gravity;
@@ -158,12 +180,18 @@ public partial class PlayerController : CharacterBody3D
PlayerUi.SetNumberOfDashesLeft(value);
}
}
public bool TutorialDone { get; set; } = false;
public AllowedInputs CurrentlyAllowedInputs { get; set; } = AllowedInputs.All;
private bool _canDashAirborne = true;
private bool _isWallJumpAvailable = true;
private bool _canDash = true;
private bool _shouldMantleOnDashEnded = false;
private bool _shouldMantleOnDashEnded;
private Vector3 _wallHugStartLocation = Vector3.Zero;
private Vector3 _wallHugStartNormal = Vector3.Zero;
private Vector3 _wallHugStartProjectedVelocity = Vector3.Zero;
private Vector3 _currentWallContactPoint = Vector3.Zero;
private StateChart _playerState;
@@ -176,48 +204,46 @@ public partial class PlayerController : CharacterBody3D
private StateChartState _grounded;
private StateChartState _airborne;
private StateChartState _coyoteEnabled;
// private StateChartState _doubleJumpEnabled;
private StateChartState _simpleJump;
private StateChartState _doubleJump;
private StateChartState _megaJump;
private StateChartState _mantling;
private StateChartState _simpleDash;
private StateChartState _poweredDash;
private StateChartState _aimedDash;
private StateChartState _onWallHugCanceled;
private StateChartState _onWall;
private StateChartState _onWallHugging;
private StateChartState _onWallHuggingCoyoteEnabled;
private StateChartState _onWallHanging;
private Transition _onJumpFromWall;
private StateChartState _onWallRunning;
private StateChartState _onWallRunningCoyoteEnabled;
private Transition _onJumpFromWallCoyote;
private Transition _onJumpFromWallRunCoyote;
private Transition _onJumpFromWall1;
private Transition _onJumpFromWall2;
private Transition _onJumpFromWall3;
private Transition _onMegajumpFromWall;
private float _playerHeight;
private float _playerRadius;
private bool _isJumpInputPressed = false;
private float _lookSensitivityMultiplier = 1.0f;
private float _mouseSensitivityMultiplier = 1.0f;
private float _headBobbingMultiplier = 1.0f;
private float _fovChangeMultiplier = 1.0f;
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 /////
///////////////////////////
// General use stuff
TweenQueueSystem = GetNode<TweenQueueSystem>("TweenQueueSystem");
PlayerUi = GetNode<PlayerUi>("UI");
// DashIndicator = GetNode<TextureRect>("%DashIndicator");
PowerCooldownIndicator = GetNode<ColorRect>("%DashCooldownIndicator");
@@ -237,20 +263,16 @@ public partial class PlayerController : CharacterBody3D
FieldOfView = GetNode<FieldOfView>("FieldOfView");
Camera3D camera = GetNode<Camera3D>("HeadSystem/CameraSmooth/Camera3D");
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
WeaponRoot = GetNode<Node3D>("WeaponRoot");
WeaponRoot = GetNode<Node3D>("WeaponRoot");
WeaponSystem = GetNode<WeaponSystem>("WeaponRoot/WeaponSystem");
MantleSystem = GetNode<MantleSystem>("MantleSystem");
MantleSystem = GetNode<MantleSystem>("HeadSystem/MantleSystem");
CapsuleCollider = GetNode<CapsuleCollider>("CapsuleCollider");
DashSystem = GetNode<DashSystem>("DashSystem");
StairsSystem = GetNode<StairsSystem>("StairsSystem");
WallHugSystem = GetNode<WallHugSystem>("WallHugSystem");
WallRunSnapper = GetNode<RayCast3D>("%WallRunSnapper");
RayCast3D stairsBelowRayCast3D = GetNode<RayCast3D>("StairsBelowRayCast3D");
RayCast3D stairsAheadRayCast3D = GetNode<RayCast3D>("StairsAheadRayCast3D");
_headCollisionDetectors = new RayCast3D[NUM_OF_HEAD_COLLISION_DETECTORS];
@@ -264,11 +286,7 @@ public partial class PlayerController : CharacterBody3D
_playerHeight = playerShape!.Height;
_playerRadius = playerShape.Radius;
// RPG Stuff
Stamina = GetNode<Stamina>("Stamina");
HealthSystem = GetNode<HealthSystem>("HealthSystem");
// State management
// State managementb
_playerState = StateChart.Of(GetNode("StateChart"));
_aiming = StateChartState.Of(GetNode("StateChart/Root/Aim/On"));
@@ -279,19 +297,28 @@ public partial class PlayerController : CharacterBody3D
_empowerOn = StateChartState.Of(GetNode("StateChart/Root/Empower/On"));
_powerExpired = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/Expired"));
_powerRecharging = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/AtLeastOneCharge"));
_powerFull = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/Full"));
_powerFull = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/Full"));
_grounded = StateChartState.Of(GetNode("StateChart/Root/Movement/Grounded"));
_airborne = StateChartState.Of(GetNode("StateChart/Root/Movement/Airborne"));
_coyoteEnabled = StateChartState.Of(GetNode("StateChart/Root/Movement/Airborne/CoyoteEnabled"));
// _doubleJumpEnabled = StateChartState.Of(GetNode("StateChart/Root/Movement/Airborne/DoubleJumpEnabled"));
_simpleJump = StateChartState.Of(GetNode("StateChart/Root/Movement/Jump/SimpleJump"));
_doubleJump = StateChartState.Of(GetNode("StateChart/Root/Movement/Jump/DoubleJump"));
_megaJump = StateChartState.Of(GetNode("StateChart/Root/Movement/Jump/MegaJump"));
_onJumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnJump"));
_mantling = StateChartState.Of(GetNode("StateChart/Root/Movement/Mantling"));
_onJumpFromWallCoyote = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/HuggingCoyoteEnabled/OnJump"));
_onJumpFromWallRunCoyote = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/RunningCoyoteEnabled/OnJump"));
_onJumpFromWall1 = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/Hugging/OnJump"));
_onJumpFromWall2 = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/Hanging/OnJump"));
_onJumpFromWall3 = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/Running/OnJump"));
_onMegajumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnMegajump"));
_onWall = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall"));
_onWallHuggingCoyoteEnabled = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/HuggingCoyoteEnabled"));
_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"));
_onWallRunning = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Running"));
_onWallRunningCoyoteEnabled = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/RunningCoyoteEnabled"));
// State timers
_powerCooldownTimer = GetNode<Timer>("PowerCooldown");
_timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir");
@@ -300,9 +327,6 @@ public partial class PlayerController : CharacterBody3D
///////////////////////////
// Initialize components //
///////////////////////////
// General use stuff
TweenQueueSystem.Init(this);
// Camera stuff
HeadSystem.Init();
@@ -314,25 +338,15 @@ public partial class PlayerController : CharacterBody3D
_gravity = (float)ProjectSettings.GetSetting("physics/3d/default_gravity");
MantleSystem.Init();
StairsSystem.Init(stairsBelowRayCast3D, stairsAheadRayCast3D, cameraSmooth);
DashSystem.Init(HeadSystem, camera, TweenQueueSystem);
DashSystem.Init(HeadSystem, camera);
WeaponSystem.Init(HeadSystem, camera);
WallHugSystem.Init();
// 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;
PlaceWeaponForTutorial();
if (!TutorialDone)
PlaceWeaponForTutorial();
///////////////////////////
// Signal setup ///////////
@@ -345,6 +359,7 @@ public partial class PlayerController : CharacterBody3D
_grounded.StateEntered += OnGrounded;
_grounded.StatePhysicsProcessing += HandleGrounded;
_airborne.StatePhysicsProcessing += HandleAirborne;
_onWall.StatePhysicsProcessing += HandleOnWall;
_coyoteEnabled.StateEntered += StartCoyoteTime;
_timeScaleAimInAirTimer.Timeout += ResetTimeScale;
@@ -365,6 +380,9 @@ public partial class PlayerController : CharacterBody3D
_megaJump.StateEntered += OnMegaJumpStarted;
_megaJump.StatePhysicsProcessing += HandleMegaJump;
_mantling.StateEntered += OnMantleStarted;
_mantling.StatePhysicsProcessing += HandleMantling;
_simpleDash.StateEntered += OnSimpleDashStarted;
_simpleDash.StatePhysicsProcessing += HandleSimpleDash;
@@ -377,23 +395,59 @@ public partial class PlayerController : CharacterBody3D
_simpleDashCooldownTimer.Timeout += DashCooldownTimeout;
_onWallHugCanceled.StatePhysicsProcessing += HandleAirborne;
_onWall.StateEntered += OnWallStarted;
_onWall.StateExited += OnWallStopped;
_onWallHuggingCoyoteEnabled.StateEntered += OnWallHuggingStarted;
_onWallHuggingCoyoteEnabled.StatePhysicsProcessing += HandleWallHugging;
_onWallHugging.StatePhysicsProcessing += HandleWallHugging;
_onWallHanging.StatePhysicsProcessing += HandleWallHanging;
_onJumpFromWall.Taken += OnJumpFromWall;
_onWallRunningCoyoteEnabled.StateEntered += OnWallRunningStarted;
_onWallRunningCoyoteEnabled.StatePhysicsProcessing += HandleWallRunning;
_onWallRunning.StatePhysicsProcessing += HandleWallRunning;
_onJumpFromWallCoyote.Taken += OnJumpFromWallCoyote;
_onJumpFromWallRunCoyote.Taken += OnJumpFromWallCoyote;
_onJumpFromWall1.Taken += OnJumpFromWall;
_onJumpFromWall2.Taken += OnJumpFromWall;
_onJumpFromWall3.Taken += OnJumpFromWall;
_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 _)
{
TutorialDone = true;
GD.Print("tutorial done");
}
public void OnWallDetected()
{
FinishPoweredDash();
}
public void OnGrounded()
@@ -409,42 +463,160 @@ public partial class PlayerController : CharacterBody3D
{
_canDash = true;
}
public bool IsTryingToMantle()
{
return MantleSystem.IsMantlePossible && GetMoveInput().Z < -0.5f && _isJumpInputPressed;
}
public void HandleGrounded(float delta)
{
MoveOnGround(delta);
// if (IsTryingToMantle()) _playerState.SendEvent("mantle");
if (!isOnFloorCustom())
_playerState.SendEvent("start_falling");
}
public void HandleAirborne(float delta)
{
MoveInAir(delta);
if (isOnFloorCustom())
_playerState.SendEvent("grounded");
if (WallHugSystem.IsWallHugging() && Velocity.Y < 0)
if (IsTryingToMantle()) _playerState.SendEvent("mantle");
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");
}
}
public void HandleOnWall(float delta)
{
if (IsTryingToMantle()) _playerState.SendEvent("mantle");
}
public void OnWallHuggingStarted()
{
GetTree().CreateTimer(CoyoteTime).Timeout += CoyoteExpired;
}
public void OnWallRunningStarted()
{
GetTree().CreateTimer(CoyoteTime).Timeout += CoyoteExpired;
}
public void OnWallDetected()
{
FinishPoweredDash();
if (!_onWall.Active)
return;
var newWallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Up);
_wallHugStartNormal = newWallNormal;
}
public void OnWallStarted()
{
if (!WallHugSystem.IsWallHugging())
return;
_wallHugStartNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Up);
_currentWallContactPoint = WallHugSystem.WallHugLocation.UnwrapOr(Vector3.Zero);
_wallHugStartLocation = _currentWallContactPoint + _wallHugStartNormal * _playerRadius;
_wallHugStartProjectedVelocity = Velocity.Slide(_wallHugStartNormal);
}
public void OnWallStopped()
{
}
public void HandleWallHugging(float delta)
{
WallHug(delta);
if (isOnFloorCustom())
_playerState.SendEvent("grounded");
if (!WallHugSystem.IsWallHugging())
{
_playerState.SendEvent("start_falling");
}
}
public void HandleWallHanging(float 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;
_currentWallContactPoint = WallHugSystem.WallHugLocation.UnwrapOr(Vector3.Zero);
if (isOnFloorCustom())
_playerState.SendEvent("grounded");
if (!WallHugSystem.IsWallHugging() || Velocity.Length() < WallRunSpeedThreshold)
{
_playerState.SendEvent("start_falling");
}
}
private Option<Vector3> _plannedMantleLocation = Option<Vector3>.None;
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;
}
// Jump
public void OnInputJumpStarted()
{
if (CanMantle())
_isJumpInputPressed = true;
if (MantleSystem.IsMantlePossible)
{
MantleToLocation(_plannedMantleLocation.Unwrap());
_playerState.SendEvent("mantle");
return;
}
@@ -453,6 +625,11 @@ public partial class PlayerController : CharacterBody3D
_playerState.SendEvent("megajump");
return;
}
if (_onWallHuggingCoyoteEnabled.Active || _onWallRunningCoyoteEnabled.Active)
{
if (!_isWallJumpAvailable) return;
}
_playerState.SendEvent("jump");
}
@@ -462,6 +639,7 @@ public partial class PlayerController : CharacterBody3D
public void OnInputJumpEnded()
{
_isJumpInputPressed = false;
_playerState.SendEvent("jump_ended");
}
@@ -476,6 +654,8 @@ public partial class PlayerController : CharacterBody3D
}
public void OnDoubleJumpStarted()
{
_canDash = true;
_canDashAirborne = true;
OnJumpStarted(DoubleJumpStartVelocity);
}
public void OnMegaJumpStarted()
@@ -483,20 +663,6 @@ public partial class PlayerController : CharacterBody3D
PerformEmpoweredAction();
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)
{
@@ -505,11 +671,20 @@ public partial class PlayerController : CharacterBody3D
// _isWallJumpAvailable = false;
// var isLookingTowardsWall = HeadSystem.GetForwardHorizontalVector().Dot(wallNormal) > 0.5;
// var jumpDirection = isLookingTowardsWall ? Vector3.Up : wallNormal;
var wallNormal = WallHugSystem.GetWallNormal().UnwrapOr(Vector3.Up);
var wallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Up);
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 OnJumpFromWallCoyote()
{
_isWallJumpAvailable = false;
}
public void OnJumpFromWall()
{
ComputeJumpFromWallHSpeed(WallJumpStartVelocity);
@@ -519,9 +694,26 @@ public partial class PlayerController : CharacterBody3D
ComputeJumpFromWallHSpeed(WallMegajumpStartVelocity);
}
public void InputDeviceChanged(bool isUsingGamepad)
{
_isUsingGamepad = isUsingGamepad;
}
public Vector3 GetMoveInput()
{
if (_isUsingGamepad)
return _inputMove;
return _inputMoveKeyboard;
}
public Vector3 GetGlobalMoveInput()
{
return Transform.Basis * HeadSystem.Transform.Basis * GetMoveInput();
}
public Vector3 ComputeHVelocity(float delta, float accelerationFactor, float decelerationFactor, Vector3? direction = null)
{
var dir = direction ?? Transform.Basis * HeadSystem.Transform.Basis * _inputMove;
var dir = direction ?? GetGlobalMoveInput();
var acceleration = dir.Length() > 0 ? accelerationFactor : decelerationFactor;
@@ -553,8 +745,48 @@ public partial class PlayerController : CharacterBody3D
z: velocity.Y);
}
private Path _mantlePath;
public void OnMantleStarted()
{
HeadSystem.OnMantle();
_mantlePath = MantlePath.Instantiate() as Path;
if (_mantlePath == null)
{
GD.PrintErr("Failed to instantiate MantlePath");
return;
};
GetTree().GetRoot().AddChild(_mantlePath);
_mantlePath.Setup(MantleSystem.GlobalTransform, MantleSystem.MantleCurve);
var tween = GetTree().CreateTween();
tween.SetTrans(Tween.TransitionType.Linear);
tween.SetEase(Tween.EaseType.InOut);
tween.TweenProperty(_mantlePath.PathFollow, "progress_ratio", 1, MantleTime);
tween.Finished += MantleFinished;
}
public void HandleMantling(float delta)
{
GlobalPosition = _mantlePath.Target.GlobalPosition;
}
public void MantleFinished()
{
_mantlePath.Teardown();
var direction = GetInputGlobalHDirection();
if (direction.Length() > 0)
{
SetVelocity(direction * SimpleDashStrength);
}
_playerState.SendEvent("grounded");
}
public void HandleJump(float delta, float gravityFactor, int hangFrames)
{
if (IsTryingToMantle()) _playerState.SendEvent("mantle");
// Update horizontal velocity
var horizontalVelocity = ComputeHVelocityAir(delta);
Velocity = new Vector3(horizontalVelocity.X, Velocity.Y, horizontalVelocity.Z);
@@ -601,7 +833,7 @@ public partial class PlayerController : CharacterBody3D
public void PowerRecharging(float delta)
{
var progress = (float) (_powerCooldownTimer.TimeLeft / _powerCooldownTimer.WaitTime);
PowerCooldownIndicator.SetSize(new Vector2(100 * progress, 10));
PowerCooldownIndicator.SetCustomMinimumSize(new Vector2(100 * progress, 10));
}
public void StartPowerCooldown()
{
@@ -623,6 +855,12 @@ public partial class PlayerController : CharacterBody3D
///////////////////////////
// Input Management ///////
///////////////////////////
public void OnInputMoveKeyboard(Vector3 value)
{
_inputMoveKeyboard = value;
}
public void OnInputMove(Vector3 value)
{
_inputMove = value;
@@ -661,11 +899,11 @@ public partial class PlayerController : CharacterBody3D
}
public void OnInputEmpowerDown()
{
_playerState.SendEvent("empower_down");
// _playerState.SendEvent("empower_down");
}
public void OnInputEmpowerReleased()
{
_playerState.SendEvent("empower_released");
// _playerState.SendEvent("empower_released");
}
public void OnInputDashPressed()
{
@@ -747,11 +985,7 @@ public partial class PlayerController : CharacterBody3D
public void DashToFlyingWeaponTweenEnded()
{
// Get the weapon back
GetTree().GetRoot().RemoveChild(WeaponRoot);
AddChild(WeaponRoot);
WeaponRoot.SetGlobalPosition(GlobalPosition);
WeaponSystem.ResetWeapon();
RecoverWeapon();
var vel = _dashDirection * PostDashSpeed;
SetVelocity(vel);
@@ -771,9 +1005,20 @@ public partial class PlayerController : CharacterBody3D
if (WeaponSystem.IsPlantedUnderPlatform())
dashLocation += Vector3.Down * _playerHeight;
_wallHugStartNormal = WeaponSystem.PlantNormal;
_currentWallContactPoint = WeaponSystem.PlantLocation;
_wallHugStartLocation = dashLocation;
_wallHugStartProjectedVelocity = Velocity.Slide(_wallHugStartNormal);
var dashTween = CreatePositionTween(dashLocation, AimedDashTime);
dashTween.Finished += DashToPlantedWeaponTweenEnded;
}
public void RecoverWeapon()
{
RecoverChildNode(WeaponRoot);
WeaponSystem.ResetWeapon();
}
public void DashToPlantedWeaponTweenEnded()
{
@@ -782,16 +1027,14 @@ public partial class PlayerController : CharacterBody3D
var isPlantedUnderPlatform = WeaponSystem.IsPlantedUnderPlatform();
var shouldDashToHanging = isPlantedOnWall || isPlantedUnderPlatform;
// Get the weapon back
GetTree().GetRoot().RemoveChild(WeaponRoot);
AddChild(WeaponRoot);
WeaponRoot.SetGlobalPosition(GlobalPosition);
WeaponSystem.ResetWeapon();
var resultingEvent = shouldDashToHanging ? "to_planted" : "dash_finished";
RecoverWeapon();
var resultingEvent = shouldDashToHanging ? "dash_to_planted" : "dash_finished";
_playerState.SendEvent(resultingEvent);
}
private Vector3 _preDashVelocity = Vector3.Zero;
public void OnAimedDashStarted()
{
// Adjusting for player height, where the middle of the capsule should get to the dash location instead of the
@@ -799,6 +1042,9 @@ public partial class PlayerController : CharacterBody3D
var correction = DashSystem.CollisionNormal == Vector3.Down ? _playerHeight : DashSystem.DashCastRadius;
var correctedLocation = DashSystem.PlannedLocation + Vector3.Down * correction;
_preDashVelocity = Velocity;
_dashDirection = (correctedLocation - GlobalPosition).Normalized();
var dashTween = CreatePositionTween(correctedLocation, AimedDashTime);
// dashTween.TweenMethod(Callable.From<float>(AimedDashTweenOngoing), 0.0f, 1.0f, AimedDashTime);
dashTween.Finished += AimedDashTweenEnded;
@@ -825,19 +1071,33 @@ public partial class PlayerController : CharacterBody3D
public void PlaceWeaponForTutorial()
{
if (TutorialDone)
return;
RemoveChild(WeaponRoot);
GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, WeaponRoot);
WeaponRoot.CallDeferred(Node3D.MethodName.SetGlobalPosition, TutorialWeaponTarget.GlobalPosition);
WeaponSystem.CallDeferred(WeaponSystem.MethodName.PlaceWeaponForTutorial, TutorialWeaponTarget.GlobalPosition);
}
public void RemoveChildNode(Node3D node)
{
RemoveChild(node);
GetTree().GetRoot().AddChild(node);
node.SetGlobalPosition(GlobalPosition);
}
public void RecoverChildNode(Node3D node)
{
GetTree().GetRoot().RemoveChild(node);
AddChild(node);
node.SetGlobalPosition(GlobalPosition);
}
public void ThrowWeapon()
{
_playerState.SendEvent("cancel_aim");
RemoveChild(WeaponRoot);
GetTree().GetRoot().AddChild(WeaponRoot);
WeaponRoot.SetGlobalPosition(GlobalPosition);
RemoveChildNode(WeaponRoot);
var weaponTargetLocation = DashSystem.HasHit ? DashSystem.CollisionPoint : DashSystem.PlannedLocation;
WeaponSystem.ThrowWeapon(
@@ -849,8 +1109,15 @@ public partial class PlayerController : CharacterBody3D
public void OnAimedDashFinished()
{
var postDashVelocity = _preDashVelocity.Length() > PostDashSpeed ? PostDashSpeed : _preDashVelocity.Length();
Velocity = _dashDirection * postDashVelocity;
if (_shouldMantleOnDashEnded)
MantleToLocation(_mantleLocation);
{
// TODO update post dash mantle
// MantleToLocation(_mantleLocation);
GD.Print("update post dash mantle");
}
}
public void OnSimpleDashStarted()
@@ -872,13 +1139,13 @@ public partial class PlayerController : CharacterBody3D
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();
}
public Vector3 GetInputLocalHDirection()
{
var direction = _inputMove;
var direction = GetMoveInput();
return new Vector3(direction.X, 0, direction.Z).Normalized();
}
@@ -890,9 +1157,6 @@ public partial class PlayerController : CharacterBody3D
public void OnPoweredDashFinished()
{
// Try mantling but don't know if this is useful
if (CanMantle())
MantleToLocation(MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y).Unwrap());
}
public void FinishPoweredDash()
@@ -930,29 +1194,17 @@ public partial class PlayerController : CharacterBody3D
_playerState.SendEvent("coyote_expired");
}
// Mantling
public bool CanMantle()
{
var mantleLocationResult = MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y);
return mantleLocationResult.IsSome(out _);
}
public void MantleToLocation(Vector3 location)
{
var mantleTween = CreatePositionTween(location, MantleTime);
mantleTween.Finished += MantleFinished;
}
public void MantleFinished()
{
_playerState.SendEvent("grounded");
}
///////////////////////////
// Stateless logic ////////
///////////////////////////
private void LookAround()
private void LookAround(double delta)
{
Vector2 inputLookDir = new Vector2(_inputRotateY, _inputRotateFloorplane);
HeadSystem.LookAround(inputLookDir, _lookSensitivityMultiplier);
var lookSensitivity = _isUsingGamepad ? _lookSensitivityMultiplier : _mouseSensitivityMultiplier;
var wallHugContactPoint = _onWallRunning.Active || _onWallRunningCoyoteEnabled.Active ? _currentWallContactPoint : Vector3.Zero;
var playerVelocity = GetGlobalMoveInput();
HeadSystem.LookAround(delta, inputLookDir, playerVelocity, wallHugContactPoint, lookSensitivity);
}
public void MoveOnGround(double delta)
@@ -976,7 +1228,7 @@ public partial class PlayerController : CharacterBody3D
IsCapsuleHeightLessThanNormal = CapsuleCollider.IsCapsuleHeightLessThanNormal(),
CurrentSpeedGreaterThanWalkSpeed = false,
IsCrouchingHeight = CapsuleCollider.IsCrouchingHeight(),
Delta = (float)delta,
Delta = delta,
FloorMaxAngle = FloorMaxAngle,
GlobalPositionFromDriver = GlobalPosition,
Velocity = Velocity,
@@ -1030,7 +1282,7 @@ public partial class PlayerController : CharacterBody3D
Bobbing.CameraBobbingParams cameraBobbingParams = new Bobbing.CameraBobbingParams
{
Delta = delta,
IsOnFloorCustom = isOnFloorCustom(),
IsOnFloorCustom = isOnFloorCustom() || _onWallRunning.Active || _onWallRunningCoyoteEnabled.Active,
Velocity = Velocity,
SettingsMultiplier = _headBobbingMultiplier
};
@@ -1091,10 +1343,10 @@ public partial class PlayerController : CharacterBody3D
///////////////////////////
public override void _PhysicsProcess(double delta)
{
LookAround();
LookAround(delta);
CameraModifications((float) delta);
HandleStairs((float) delta);
_plannedMantleLocation = MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y);
MantleSystem.ProcessMantle(_grounded.Active);
if (WeaponSystem.InHandState.Active)
RotateWeaponWithPlayer();

25
scenes/path/Path.cs Normal file
View File

@@ -0,0 +1,25 @@
using Godot;
public partial class Path : Path3D
{
public PathFollow3D PathFollow { get; private set; }
public Marker3D Target { get; private set; }
public override void _Ready()
{
PathFollow = GetNode<PathFollow3D>("PathFollow");
Target = GetNode<Marker3D>("PathFollow/Target");
}
public void Setup(Transform3D globalTransform, Curve3D curve)
{
SetGlobalTransform(globalTransform);
SetCurve(curve);
PathFollow.ProgressRatio = 0;
}
public void Teardown()
{
QueueFree();
}
}

1
scenes/path/Path.cs.uid Normal file
View File

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

13
scenes/path/path.tscn Normal file
View File

@@ -0,0 +1,13 @@
[gd_scene load_steps=3 format=3 uid="uid://cf3rrgr1imvv4"]
[ext_resource type="Script" uid="uid://djdr5bvfc8f0x" path="res://scenes/path/Path.cs" id="1_kmlhi"]
[sub_resource type="Curve3D" id="Curve3D_u4rfr"]
[node name="Path" type="Path3D"]
curve = SubResource("Curve3D_u4rfr")
script = ExtResource("1_kmlhi")
[node name="PathFollow" type="PathFollow3D" parent="."]
[node name="Target" type="Marker3D" parent="PathFollow"]

View File

@@ -0,0 +1,70 @@
[gd_scene load_steps=4 format=3 uid="uid://b8aet6m4m2i83"]
[ext_resource type="Script" uid="uid://bnqhh6b5iusam" path="res://scenes/tuto_trigger/tuto_trigger.gd" id="1_w8mpv"]
[sub_resource type="LabelSettings" id="LabelSettings_4vbx1"]
font_size = 30
[sub_resource type="LabelSettings" id="LabelSettings_g04tr"]
font_size = 30
[node name="TutoTrigger" type="Area3D"]
collision_layer = 0
collision_mask = 16
script = ExtResource("1_w8mpv")
[node name="Control" type="Control" parent="."]
visible = false
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="PanelContainer" type="PanelContainer" parent="Control"]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.5
anchor_top = 0.7
anchor_right = 0.5
anchor_bottom = 0.7
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="Control/PanelContainer"]
layout_mode = 2
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="HBoxContainer" type="HBoxContainer" parent="Control/PanelContainer/MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="MultipleInputsContainer" type="HBoxContainer" parent="Control/PanelContainer/MarginContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
theme_override_constants/separation = 0
[node name="FirstInput" type="TextureRect" parent="Control/PanelContainer/MarginContainer/HBoxContainer/MultipleInputsContainer"]
unique_name_in_owner = true
layout_mode = 2
[node name="ComplexInputLabel" type="Label" parent="Control/PanelContainer/MarginContainer/HBoxContainer/MultipleInputsContainer"]
unique_name_in_owner = true
layout_mode = 2
label_settings = SubResource("LabelSettings_4vbx1")
[node name="SecondInput" type="TextureRect" parent="Control/PanelContainer/MarginContainer/HBoxContainer/MultipleInputsContainer"]
unique_name_in_owner = true
layout_mode = 2
[node name="TutoText" type="Label" parent="Control/PanelContainer/MarginContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
label_settings = SubResource("LabelSettings_g04tr")
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
[connection signal="body_exited" from="." to="." method="_on_body_exited"]

View File

@@ -0,0 +1,37 @@
extends Area3D
@onready var control: Control = $Control
@onready var multiple_inputs_container: HBoxContainer = %MultipleInputsContainer
@onready var first_input: TextureRect = %FirstInput
@onready var complex_input_label: Label = %ComplexInputLabel
@onready var second_input: TextureRect = %SecondInput
@onready var tuto_label: Label = %TutoText
@export var first_input_texture: CompressedTexture2D
@export var second_input_texture: CompressedTexture2D
@export var complex_input_text: String
@export var tuto_text: String
func _ready() -> void:
tuto_label.text = tuto_text
first_input.texture = first_input_texture
second_input.texture = second_input_texture
complex_input_label.text = complex_input_text
if second_input_texture != null:
complex_input_label.text = "+"
if second_input_texture == null and complex_input_text.is_empty():
complex_input_label.visible = false
second_input.visible = false
func _on_body_entered(body: Node3D) -> void:
control.visible = true
func _on_body_exited(body: Node3D) -> void:
control.visible = false

View File

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

View File

@@ -25,7 +25,6 @@ public partial class DashSystem: Node3D
private ShapeCast3D _dashCast3D;
private ShapeCast3D _playerCast3D;
private Camera3D _camera;
private TweenQueueSystem _tweenQueueSystem;
private Vector3 _dashDirection = Vector3.Zero;
private ShapeCast3D _dashCastDrop;
@@ -54,7 +53,7 @@ public partial class DashSystem: Node3D
public float DashCastRadius { get; set; }
public void Init(Node3D head, Camera3D camera, TweenQueueSystem tweenQueueSystem)
public void Init(Node3D head, Camera3D camera)
{
_dashCast3D = GetNode<ShapeCast3D>("DashCast3D");
var dashShape = _dashCast3D.GetShape() as SphereShape3D;
@@ -73,7 +72,6 @@ public partial class DashSystem: Node3D
_head = head;
_camera = camera;
_tweenQueueSystem = tweenQueueSystem;
_mantleSystem = GetNode<MantleSystem>("MantleSystem");
_mantleSystem.Init();

View File

@@ -33,6 +33,7 @@ debug_shape_custom_color = Color(0.863327, 0.636844, 0, 1)
[node name="DashCast3D" type="ShapeCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0)
visible = false
shape = SubResource("SphereShape3D_jngg2")
target_position = Vector3(0, 0, -12)
max_results = 1
@@ -41,6 +42,7 @@ debug_shape_custom_color = Color(0.911631, 0.11884, 0.656218, 1)
[node name="DashCastDrop" type="ShapeCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 1.6, 0)
visible = false
shape = SubResource("SphereShape3D_jngg2")
target_position = Vector3(0, 0, -50)
max_results = 1
@@ -52,6 +54,7 @@ mesh = SubResource("SphereMesh_qu4wy")
surface_material_override/0 = SubResource("StandardMaterial3D_v31n3")
[node name="MantleSystem" parent="." instance=ExtResource("2_pff7b")]
visible = false
MantleEndLocationDistanceFromWall = 0.25
MantleHeightCastStart = 2.0

View File

@@ -1,5 +1,6 @@
using System;
using Godot;
using RustyOptions;
namespace Movementtests.systems;
@@ -7,18 +8,34 @@ public partial class HeadSystem : Node3D
{
private Camera3D _camera;
private Marker3D _cameraAnchor;
private AnimationPlayer _animationPlayer;
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float LookSensitivity { get; set; } = 1f;
[Export(PropertyHint.Range, "0.1,50,0.1,or_greater")]
public double CameraInclineAcceleration { get; set; } = 10f;
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float WallRunCameraIncline { get; set; } = 5f;
[Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float GroundedCameraIncline { get; set; } = 5f;
public void Init()
{
Input.SetMouseMode(Input.MouseModeEnum.Captured);
_camera = GetNode<Camera3D>("CameraSmooth/Camera3D");
_cameraAnchor = GetNode<Marker3D>("CameraAnchor");
_animationPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
}
public void LookAround(Vector2 lookDir, float sensitivitMultiplier = 1f)
public void OnMantle()
{
_animationPlayer.Play("mantle");
}
public void LookAround(double delta, Vector2 lookDir, Vector3 playerVelocity, Vector3? wallContactPoint = null, float sensitivitMultiplier = 1f)
{
// Horizontal movement of head
float angleForHorizontalRotation = lookDir.X * LookSensitivity * sensitivitMultiplier;
@@ -28,11 +45,33 @@ public partial class HeadSystem : Node3D
Vector3 currentCameraRotation = _cameraAnchor.Rotation;
currentCameraRotation.X += Convert.ToSingle(lookDir.Y * LookSensitivity * sensitivitMultiplier);
currentCameraRotation.X = Mathf.Clamp(currentCameraRotation.X, Mathf.DegToRad(-90f), Mathf.DegToRad(90f));
var isWallRunning = wallContactPoint.HasValue && wallContactPoint.Value.Length() > Mathf.Epsilon;
var cameraIncline = 0f;
if (isWallRunning)
{
var directionToWall = (wallContactPoint.Value - GlobalPosition).Normalized();
var cameraInclineFactor = ComputeCameraInclineFactor(directionToWall);
cameraIncline = Mathf.DegToRad(WallRunCameraIncline * cameraInclineFactor);
}
else
{
var cameraInclineFactor = ComputeCameraInclineFactor(playerVelocity);
cameraIncline = Mathf.DegToRad(GroundedCameraIncline * cameraInclineFactor * -1.0f);
}
currentCameraRotation.Z = (float) Mathf.Lerp(currentCameraRotation.Z, cameraIncline, delta * CameraInclineAcceleration);
_cameraAnchor.Rotation = currentCameraRotation;
_camera.GlobalTransform = _cameraAnchor.GetGlobalTransformInterpolated();
}
public float ComputeCameraInclineFactor(Vector3 direction)
{
var forward = GetForwardHorizontalVector().Normalized();
var crossProduct = forward.Cross(direction);
return crossProduct.Length()*Mathf.Sign(crossProduct.Y);
}
public Vector3 GetForwardHorizontalVector()
{
return GetGlobalTransform().Basis.Z;

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="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"]
shader = ExtResource("4_ubhf8")
shader_parameter/limit = 0.0
shader_parameter/blur = 0.0
[sub_resource type="Animation" id="Animation_urko7"]
length = 0.001
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(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"]
script = ExtResource("1_8abgy")
@@ -16,46 +65,18 @@ script = ExtResource("1_8abgy")
[node name="CameraSmooth" type="Node3D" parent="."]
[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
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"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, -0.64723)
visible = false
[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="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://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://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://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://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://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="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="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"]
@@ -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://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="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"]
script = ExtResource("4_1rw8g")
@@ -73,10 +80,24 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_05q5j")
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"]
script = ExtResource("1_qmhk6")
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
[sub_resource type="Resource" id="Resource_pf0ii"]
@@ -98,10 +119,25 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_pf0ii")
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"]
script = ExtResource("1_qmhk6")
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
[sub_resource type="Resource" id="Resource_si4d4"]
@@ -116,10 +152,22 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_si4d4")
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"]
script = ExtResource("1_qmhk6")
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
[sub_resource type="Resource" id="Resource_llfhp"]
@@ -134,10 +182,22 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_llfhp")
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"]
script = ExtResource("1_qmhk6")
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"]
script = ExtResource("10_cvxqo")
@@ -151,10 +211,22 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_cqc4k")
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"]
script = ExtResource("1_qmhk6")
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
[sub_resource type="Resource" id="Resource_fykw6"]
@@ -221,10 +293,22 @@ input = SubResource("Resource_1fkas")
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_6pxii")])
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"]
script = ExtResource("1_qmhk6")
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"]
script = ExtResource("19_qkgmj")
@@ -234,10 +318,18 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_oapce")
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"]
script = ExtResource("1_qmhk6")
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"]
script = ExtResource("19_qkgmj")
@@ -251,10 +343,21 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_li5ak")
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"]
script = ExtResource("1_qmhk6")
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"]
script = ExtResource("19_qkgmj")
@@ -268,10 +371,46 @@ script = ExtResource("3_yp12v")
input = SubResource("Resource_g6bbx")
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"]
script = ExtResource("1_qmhk6")
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
[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")])
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]
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"

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 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_floorplane:GUIDEAction
@@ -25,9 +29,13 @@ class_name InputController
@export var dash:GUIDEAction
@export var throw:GUIDEAction
signal input_device_changed(is_gamepad: bool)
var _using_gamepad = false
signal input_move(value: Vector3)
signal input_rotate_y(value: float)
signal input_rotate_floorplane(value: float)
signal input_move_keyboard(value: Vector3)
# Jump
signal input_jump_started
@@ -100,7 +108,27 @@ func on_input_empower_released():
func on_input_aim_canceled():
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:
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_rotate_y.emit(rotate_y.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="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://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://dgluj0ql5vth7" path="res://systems/inputs/base_mode/pause.tres" id="16_scydb"]
[sub_resource type="Resource" id="Resource_tp5dr"]
script = ExtResource("4_q6ncx")
@@ -30,16 +29,11 @@ script = ExtResource("3_scydb")
input = SubResource("Resource_tp5dr")
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"]
script = ExtResource("7_m88dc")
[sub_resource type="Resource" id="Resource_23hmj"]
script = ExtResource("3_scydb")
input = SubResource("Resource_h2f8g")
triggers = Array[ExtResource("6_c647i")]([SubResource("Resource_17mt7")])
[sub_resource type="Resource" id="Resource_len71"]
@@ -225,48 +219,7 @@ script = ExtResource("1_xno0b")
action = ExtResource("15_2j2sf")
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]
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"

View File

@@ -14,27 +14,96 @@ public partial class MantleSystem: Node3D
private ShapeCast3D _wallInFrontCast3D;
private ShapeCast3D _mantleCast3D;
private RayCast3D _mantleCheckCast3D;
private ShapeCast3D _inAirWallDetect;
private ShapeCast3D _groundedWallDetect;
public Curve3D MantleCurve { get; private set; }
private Option<Vector3> _mantleLocation;
public bool IsMantlePossible { get; private set; } = false;
public const int WallProfileCastCount = 7;
private ShapeCast3D[] _wallProfileShapecasts = new ShapeCast3D[WallProfileCastCount];
public void Init()
{
_wallInFrontCast3D = GetNode<ShapeCast3D>("WallInFrontCast3D");
_mantleCast3D = GetNode<ShapeCast3D>("MantleCast3D");
_inAirWallDetect = GetNode<ShapeCast3D>("InAirWallDetect");
_groundedWallDetect = GetNode<ShapeCast3D>("GroundedWallDetect");
for (int i = 0; i < _wallProfileShapecasts.Length; i++)
{
_wallProfileShapecasts[i] = GetNode<ShapeCast3D>($"WallProfileShapeCasts/ShapeCast{i + 1}");
}
}
public Option<Vector3> FindMantleForHeadRotation(float rotation)
private void SetCastsEnabled(bool enabled)
{
_wallInFrontCast3D.SetRotation(new Vector3(
_wallInFrontCast3D.Rotation.X,
rotation,
_wallInFrontCast3D.Rotation.Z));
foreach (var wallProfileShapecast in _wallProfileShapecasts)
{
wallProfileShapecast.SetEnabled(enabled);
}
}
public void ProcessMantle(bool isGrounded)
{
_inAirWallDetect.SetEnabled(!isGrounded);
_groundedWallDetect.SetEnabled(isGrounded);
var isColliding = _inAirWallDetect.IsColliding() || _groundedWallDetect.IsColliding();
SetCastsEnabled(isColliding);
// Reset state
IsMantlePossible = false;
if (!isColliding) return;
// Check if collide with wall
var collisionNormal = isGrounded ? _groundedWallDetect.GetCollisionNormal(0) : _inAirWallDetect.GetCollisionNormal(0);
if (collisionNormal.Y > 0.9f) return;
MantleCurve = new Curve3D();
MantleCurve.AddPoint(Vector3.Zero);
var hasFirstProfileHit = false;
foreach (var wallProfileShapecast in _wallProfileShapecasts)
{
// Haven't met the wall yet
if (!wallProfileShapecast.IsColliding() && !hasFirstProfileHit) continue;
var globalTargetPosition = wallProfileShapecast.GlobalPosition + wallProfileShapecast.TargetPosition;
// Got to the other side of the wall, we stop there
if (!wallProfileShapecast.IsColliding())
{
MantleCurve.AddPoint(ToLocal(globalTargetPosition));
break;
}
var profilePoint = wallProfileShapecast.GetCollisionPoint(0);
var profileNormal = wallProfileShapecast.GetCollisionNormal(0);
// Check if we collided parallel to a wall
var isCollisionSameAsTarget = globalTargetPosition.IsEqualApprox(profilePoint);
var isCollidingWithWall = profileNormal.Y < 0.1f;
if (isCollisionSameAsTarget || isCollidingWithWall) continue;
// We have a valid collision
hasFirstProfileHit = true;
MantleCurve.AddPoint(ToLocal(profilePoint));
}
if (MantleCurve.PointCount == 1) return;
IsMantlePossible = true;
}
public Option<Vector3> FindMantle()
{
if (!_wallInFrontCast3D.IsColliding())
{
return Option<Vector3>.None;
}
if (_wallInFrontCast3D.GetCollisionNormal(0).Y > 0.8f)
{
return Option<Vector3>.None;
}
var collisionPoint = _wallInFrontCast3D.GetCollisionPoint(0);
var collisionNormal = _wallInFrontCast3D.GetCollisionNormal(0);

View File

@@ -0,0 +1,4 @@
[gd_resource type="SphereShape3D" format=3 uid="uid://dp2p8v7demb5j"]
[resource]
radius = 0.25

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=4 format=3 uid="uid://wq1okogkhc5l"]
[gd_scene load_steps=7 format=3 uid="uid://wq1okogkhc5l"]
[ext_resource type="Script" uid="uid://bja6tis1vaysu" path="res://systems/mantle/MantleSystem.cs" id="1_2oobp"]
@@ -8,12 +8,23 @@ height = 1.7
[sub_resource type="SphereShape3D" id="SphereShape3D_2oobp"]
radius = 0.75
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_2oobp"]
radius = 0.25
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_i32qj"]
radius = 0.25
height = 1.5
[sub_resource type="SphereShape3D" id="SphereShape3D_i32qj"]
radius = 0.125
[node name="MantleSystem" type="Node3D"]
script = ExtResource("1_2oobp")
MantleEndLocationDistanceFromWall = 0.2
MantleHeightCastStart = 3.0
[node name="MantleCast3D" type="ShapeCast3D" parent="."]
visible = false
shape = SubResource("CapsuleShape3D_4coqe")
target_position = Vector3(0, 0, 0)
max_results = 1
@@ -22,8 +33,72 @@ debug_shape_custom_color = Color(1, 0, 0, 1)
[node name="WallInFrontCast3D" type="ShapeCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
visible = false
shape = SubResource("SphereShape3D_2oobp")
target_position = Vector3(0, 0, -1.5)
max_results = 1
collision_mask = 2
debug_shape_custom_color = Color(0.911631, 0.11884, 0.656218, 1)
[node name="InAirWallDetect" type="ShapeCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.01, 0)
shape = SubResource("CapsuleShape3D_2oobp")
target_position = Vector3(0, 0, -2)
collision_mask = 2
[node name="GroundedWallDetect" type="ShapeCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.26, 0)
shape = SubResource("CapsuleShape3D_i32qj")
target_position = Vector3(0, 0, -2)
collision_mask = 2
[node name="WallProfileShapeCasts" type="Node3D" parent="."]
[node name="ShapeCast1" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -0.5)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.375, 0)
collision_mask = 2
[node name="ShapeCast2" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -0.75)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.375, 0)
collision_mask = 2
[node name="ShapeCast3" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -1)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.375, 0)
collision_mask = 2
[node name="ShapeCast4" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -1.25)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.375, 0)
collision_mask = 2
[node name="ShapeCast5" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -1.5)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.375, 0)
collision_mask = 2
[node name="ShapeCast6" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -1.75)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.375, 0)
collision_mask = 2
[node name="ShapeCast7" type="ShapeCast3D" parent="WallProfileShapeCasts"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, -2)
enabled = false
shape = SubResource("SphereShape3D_i32qj")
target_position = Vector3(0, -2.375, 0)
collision_mask = 2

View File

@@ -10,13 +10,10 @@ var active_tutorial: Control
@onready var tuto_move_and_look: VBoxContainer = %TutoMoveAndLook
@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_dash: HBoxContainer = %TutoDash
@onready var tuto_dash_weapon: HBoxContainer = %TutoDashWeapon
@onready var tuto_empowered_dash: HBoxContainer = %TutoEmpoweredDash
@onready var tuto_empowered_jump: HBoxContainer = %TutoEmpoweredJump
@onready var tuto_weapon_throw: HBoxContainer = %TutoWeaponThrow
@onready var tuto_enjoy: HBoxContainer = %TutoEnjoy
func _ready() -> void:
@@ -37,24 +34,21 @@ func handle_new_tutorial(tuto: Control) -> void:
func _on_tuto_mantle_body_entered(body: Node3D) -> void:
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:
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:
handle_new_tutorial(tuto_dash_weapon)
func _on_weapon_retrieved_body_entered(body: Node3D) -> void:
wait_to_show_blocking_tuto.start()
func _on_tuto_weapon_throw_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_weapon_throw)
func _on_tuto_enjoy_body_entered(body: Node3D) -> void:
handle_new_tutorial(tuto_enjoy)
func _show_weapon_tutorial() -> void:
if already_shown_weapon_tuto:
return

View File

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

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