From b3821b41562712c0aa4c460ec4cd094b163182ed Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Mon, 23 Dec 2024 00:41:20 -0700 Subject: [PATCH] Input prompts show during play after the player is idle for a few seconds --- assets/text/text.csv | 9 + src/game/game.tscn | 1 + src/player/shot_setup/shot_setup.gd | 19 +- src/player/shot_setup/shot_setup.tscn | 42 +- src/ui/decorations/fader.gd | 47 ++ .../deathmatch_setup/deathmatch_setup.tscn | 2 +- .../practice_setup/practice_setup.tscn | 2 +- src/ui/menus/title_screen/title_screen.tscn | 2 +- src/ui/shot_hud/shot_hud.gd | 56 +++ src/ui/shot_hud/shot_hud.tscn | 440 +++++++++++++++++- 10 files changed, 588 insertions(+), 32 deletions(-) create mode 100644 src/ui/decorations/fader.gd diff --git a/assets/text/text.csv b/assets/text/text.csv index cebdbd8..37ceec2 100644 --- a/assets/text/text.csv +++ b/assets/text/text.csv @@ -125,6 +125,15 @@ ACTION_pause,Pause ACTION_ball_next,"Select next ball" ACTION_ball_previous,"Select previous ball" , +ACTION_FREE_CAMERA,"Free Camera" +ACTION_AIM,Aim +ACTION_ZOOM,Zoom +ACTION_HOLD_MODIFIER,(hold) +ACTION_SET_POWER,"Set Power Level" +ACTION_SET_CURVE,"Set Shot Curve" +ACTION_CHANGE_BALL,"Switch Ball" +ACTION_CHANGE_CLUB,"Switch Club" +, CLUB_DRIVER,Driver CLUB_IRON,Iron CLUB_WEDGE,Wedge diff --git a/src/game/game.tscn b/src/game/game.tscn index 6e09999..8bb2df8 100644 --- a/src/game/game.tscn +++ b/src/game/game.tscn @@ -119,6 +119,7 @@ _data = { [node name="Game" type="Node" groups=["GameGroup"]] process_mode = 3 script = ExtResource("1_4qa87") +start_scene = "res://src/world/world.tscn" [node name="RootControl" type="Control" parent="."] unique_name_in_owner = true diff --git a/src/player/shot_setup/shot_setup.gd b/src/player/shot_setup/shot_setup.gd index c14fa85..9759f24 100644 --- a/src/player/shot_setup/shot_setup.gd +++ b/src/player/shot_setup/shot_setup.gd @@ -161,6 +161,7 @@ var _tracking_camera: OrbitalCamera @onready var downswing_timer: Timer = %DownswingTimer @onready var ball_return_timer: Timer = %BallReturnTimer @onready var reset_prompt_timer: Timer = %ResetPromptTimer +@onready var idle_prompt_timer: Timer = %IdlePromptTimer @onready var explosion_animation: AnimationPlayer = %ExplosionAnimation @onready var player_label: Label3D = %PlayerLabel @@ -217,6 +218,10 @@ func _set_camera_distance(value: float) -> void: func _unhandled_input(event: InputEvent) -> void: + # Hide idle prompts if shown & reset timer + hud.hide_idle_prompts() + idle_prompt_timer.start() + if event is InputEventMouseButton: Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) elif event is InputEventMouseMotion: @@ -471,6 +476,9 @@ func _on_phase_change(new_phase: Phase) -> void: reset_prompt_timer.stop() reset_enabled = false + idle_prompt_timer.start() + hud.hide_idle_prompts() + match new_phase: Phase.AIM: hud.show_hud() @@ -483,7 +491,6 @@ func _on_phase_change(new_phase: Phase) -> void: character.reset() Phase.POWER_ADJUST: hud.curve_bar.hide() - hud.power_bar.show() hud.reset_power_bar() # Reset if needed Phase.CURVE_ADJUST: @@ -705,3 +712,13 @@ static func create(_player: WorldPlayer) -> ShotSetup: var instance: ShotSetup = ShotSetup.scene.instantiate() instance.player = _player return instance + + +func _on_idle_prompt_timer_timeout() -> void: + match phase: + Phase.AIM: + hud.show_aim_prompt() + Phase.POWER_ADJUST: + hud.show_power_prompt() + Phase.CURVE_ADJUST: + hud.show_curve_prompt() diff --git a/src/player/shot_setup/shot_setup.tscn b/src/player/shot_setup/shot_setup.tscn index 77a9918..14af001 100644 --- a/src/player/shot_setup/shot_setup.tscn +++ b/src/player/shot_setup/shot_setup.tscn @@ -589,20 +589,6 @@ libraries = { "": SubResource("AnimationLibrary_u78hq") } -[node name="DownswingTimer" type="Timer" parent="."] -unique_name_in_owner = true -wait_time = 0.42 -one_shot = true - -[node name="BallReturnTimer" type="Timer" parent="."] -unique_name_in_owner = true -one_shot = true - -[node name="ResetPromptTimer" type="Timer" parent="."] -unique_name_in_owner = true -wait_time = 45.0 -one_shot = true - [node name="Hitbox" type="Area3D" parent="."] script = ExtResource("7_uh8kn") @@ -648,10 +634,32 @@ line_spacing = -16.0 autowrap_mode = 2 width = 120.0 +[node name="Timers" type="Node" parent="."] + +[node name="DownswingTimer" type="Timer" parent="Timers"] +unique_name_in_owner = true +wait_time = 0.42 +one_shot = true + +[node name="BallReturnTimer" type="Timer" parent="Timers"] +unique_name_in_owner = true +one_shot = true + +[node name="ResetPromptTimer" type="Timer" parent="Timers"] +unique_name_in_owner = true +wait_time = 45.0 +one_shot = true + +[node name="IdlePromptTimer" type="Timer" parent="Timers"] +unique_name_in_owner = true +wait_time = 5.0 +one_shot = true + [connection signal="tree_exiting" from="." to="." method="_on_tree_exiting"] [connection signal="ball_changed" from="BallPoint" to="." method="_on_game_ball_changed"] -[connection signal="timeout" from="DownswingTimer" to="." method="finish_downswing"] -[connection signal="timeout" from="BallReturnTimer" to="." method="_on_ball_return_timer_timeout"] -[connection signal="timeout" from="ResetPromptTimer" to="." method="_on_reset_prompt_timer_timeout"] [connection signal="ball_collision" from="Hitbox" to="." method="_on_hitbox_ball_collision"] [connection signal="body_entered" from="Hitbox" to="Hitbox" method="_on_body_entered"] +[connection signal="timeout" from="Timers/DownswingTimer" to="." method="finish_downswing"] +[connection signal="timeout" from="Timers/BallReturnTimer" to="." method="_on_ball_return_timer_timeout"] +[connection signal="timeout" from="Timers/ResetPromptTimer" to="." method="_on_reset_prompt_timer_timeout"] +[connection signal="timeout" from="Timers/IdlePromptTimer" to="." method="_on_idle_prompt_timer_timeout"] diff --git a/src/ui/decorations/fader.gd b/src/ui/decorations/fader.gd new file mode 100644 index 0000000..d05b417 --- /dev/null +++ b/src/ui/decorations/fader.gd @@ -0,0 +1,47 @@ +class_name Fader extends Control +## A UI container which fades between child elements +## I don't want to write logic to check for non CanvasItems here so don't try it. + +## Time in seconds for which an element will be shown before fading out. +@export var show_time := 2.0 + +## Time in seconds for an element to fade in or out. +@export var fade_time := 0.4 + +## Time in seconds for which an element will be hidden before fading in. +@export var hidden_time := 0.0 + +## Modulate color when fully visible +@export var visible_modulate := Color.WHITE + +## Modulate color when fully hidden +@export var hidden_modulate := Color.TRANSPARENT + +var _index := -1 + + +func _ready() -> void: + if get_child_count() == 0: + return + + # Hide all children initially + for child: Node in get_children(): + var canvas_item: CanvasItem = child + canvas_item.hide() + canvas_item.modulate = hidden_modulate + + # Start animation cycle + _fade_next_child() + + +func _fade_next_child() -> void: + _index = wrapi(_index + 1, 0, get_child_count()) + var child: CanvasItem = get_children()[_index] + child.show() + var tween := create_tween() + tween.tween_property(child, "modulate", visible_modulate, fade_time) + tween.tween_interval(show_time) + tween.tween_property(child, "modulate", hidden_modulate, fade_time) + tween.tween_interval(hidden_time) + tween.tween_callback(child.hide) + tween.tween_callback(_fade_next_child) diff --git a/src/ui/menus/title_screen/deathmatch_setup/deathmatch_setup.tscn b/src/ui/menus/title_screen/deathmatch_setup/deathmatch_setup.tscn index a9ff4b0..9101fd8 100644 --- a/src/ui/menus/title_screen/deathmatch_setup/deathmatch_setup.tscn +++ b/src/ui/menus/title_screen/deathmatch_setup/deathmatch_setup.tscn @@ -50,7 +50,7 @@ tracks/0/keys = { tracks/1/type = "method" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("../../..") +tracks/1/path = NodePath("../../../..") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { diff --git a/src/ui/menus/title_screen/practice_setup/practice_setup.tscn b/src/ui/menus/title_screen/practice_setup/practice_setup.tscn index 86de938..5b5d003 100644 --- a/src/ui/menus/title_screen/practice_setup/practice_setup.tscn +++ b/src/ui/menus/title_screen/practice_setup/practice_setup.tscn @@ -69,7 +69,7 @@ tracks/0/keys = { tracks/1/type = "method" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("../../..") +tracks/1/path = NodePath("../../../..") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { diff --git a/src/ui/menus/title_screen/title_screen.tscn b/src/ui/menus/title_screen/title_screen.tscn index 0948307..d92d47c 100644 --- a/src/ui/menus/title_screen/title_screen.tscn +++ b/src/ui/menus/title_screen/title_screen.tscn @@ -1482,7 +1482,7 @@ grow_horizontal = 2 grow_vertical = 2 [node name="PressStart" type="Label" parent="Menu"] -modulate = Color(1, 1, 1, 0.976854) +modulate = Color(1, 1, 1, 0.974307) layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 diff --git a/src/ui/shot_hud/shot_hud.gd b/src/ui/shot_hud/shot_hud.gd index 2ce23cf..19317c5 100644 --- a/src/ui/shot_hud/shot_hud.gd +++ b/src/ui/shot_hud/shot_hud.gd @@ -14,6 +14,10 @@ const LIFE_BAR_HEAL_TIME := 1.0 var player: WorldPlayer +var _aim_prompt_shown := false +var _power_prompt_shown := false +var _curve_prompt_shown := false + @onready var power_bar: TextureProgressBar = %PowerBar @onready var curve_bar: CurveBar = %CurveBar @@ -36,6 +40,10 @@ var player: WorldPlayer @onready var _player_name: Label = %PlayerName @onready var _reset_prompt_animation: AnimationPlayer = %ResetPromptAnimation +@onready var _aim_equip_prompt_animation: AnimationPlayer = %AimEquipPromptAnimation +@onready var _aim_prompt_animation: AnimationPlayer = %AimPromptAnimation +@onready var _power_prompt_animation: AnimationPlayer = %PowerPromptAnimation +@onready var _curve_prompt_animation: AnimationPlayer = %CurvePromptAnimation @onready var _life_bar_rumbler: Rumbler = %LifeBarRumbler @@ -118,6 +126,54 @@ func hide_reset_prompt() -> void: _reset_prompt_animation.play_backwards("show") +func _is_animation_at_neutral(player: AnimationPlayer) -> bool: + return player.current_animation and false + + +func show_aim_prompt() -> void: + if not _aim_prompt_shown: + _aim_prompt_shown = true + _aim_equip_prompt_animation.play("show") + _aim_prompt_animation.play("show") + + +func hide_aim_prompt() -> void: + if _aim_prompt_shown: + _aim_prompt_shown = false + _aim_equip_prompt_animation.play_backwards("show") + _aim_prompt_animation.play_backwards("show") + + +func show_power_prompt() -> void: + if not _power_prompt_shown: + _power_prompt_shown = true + _power_prompt_animation.play("show") + + +func hide_power_prompt() -> void: + if _power_prompt_shown: + _power_prompt_shown = false + _power_prompt_animation.play_backwards("show") + + +func show_curve_prompt() -> void: + if not _curve_prompt_shown: + _curve_prompt_shown = true + _curve_prompt_animation.play("show") + + +func hide_curve_prompt() -> void: + if _curve_prompt_shown: + _curve_prompt_shown = false + _curve_prompt_animation.play_backwards("show") + + +func hide_idle_prompts() -> void: + hide_aim_prompt() + hide_power_prompt() + hide_curve_prompt() + + ## Set the value of the life bar, potentially playing some kind of effect in response. ## ## To set the life bar without triggering an effect, set it directly with `life_bar.value` diff --git a/src/ui/shot_hud/shot_hud.tscn b/src/ui/shot_hud/shot_hud.tscn index c23e864..29f45db 100644 --- a/src/ui/shot_hud/shot_hud.tscn +++ b/src/ui/shot_hud/shot_hud.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=47 format=3 uid="uid://c4ifdiohng830"] +[gd_scene load_steps=51 format=3 uid="uid://c4ifdiohng830"] [ext_resource type="Script" path="res://src/ui/shot_hud/shot_hud.gd" id="1_x5b4c"] [ext_resource type="Shader" path="res://src/shaders/canvas_retro.gdshader" id="1_ybxxp"] @@ -18,6 +18,7 @@ [ext_resource type="PackedScene" uid="uid://b47goj32i6sdh" path="res://src/ui/elements/input_prompt/input_prompt.tscn" id="14_ik4gg"] [ext_resource type="Texture2D" uid="uid://y07v10c8r1s6" path="res://assets/sprites/particles/health.png" id="15_eyqdi"] [ext_resource type="AudioStream" uid="uid://csbrinugqepk3" path="res://assets/sound/sfx/player/heal.wav" id="16_pub5c"] +[ext_resource type="Script" path="res://src/ui/decorations/fader.gd" id="19_vn2m0"] [sub_resource type="Animation" id="Animation_2gt87"] resource_name = "RESET" @@ -477,17 +478,52 @@ _data = { "idle": SubResource("Animation_ornnh") } +[sub_resource type="Animation" id="Animation_i0y3d"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:offset_bottom") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.2, 0, 0.2, 0), +"times": PackedFloat32Array(0) +} + +[sub_resource type="Animation" id="Animation_2o53u"] +resource_name = "show" +length = 0.4 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:offset_bottom") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0, -0.2, 0, 0.2, 0, 55, -0.2, 0, 0.2, 0), +"times": PackedFloat32Array(0, 0.4) +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_e82k6"] +_data = { +"RESET": SubResource("Animation_i0y3d"), +"show": SubResource("Animation_2o53u") +} + [sub_resource type="Animation" id="Animation_qjs4v"] length = 0.001 tracks/0/type = "bezier" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath(".:position:y") +tracks/0/path = NodePath(".:offset_bottom") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(-55, -0.25, 0, 0.25, 0), +"points": PackedFloat32Array(55, -0.2, 0, 0.2, 0), "times": PackedFloat32Array(0) } @@ -497,12 +533,12 @@ length = 0.4 tracks/0/type = "bezier" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath(".:position:y") +tracks/0/path = NodePath(".:offset_bottom") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "handle_modes": PackedInt32Array(0, 0), -"points": PackedFloat32Array(-55, -0.25, 0, 0.0709939, 50.4391, 0, -0.251647, 15.8692, 0.2, 0), +"points": PackedFloat32Array(55, -0.2, 0, 0.2, 0, 0, -0.2, 0, 0.2, 0), "times": PackedFloat32Array(0, 0.4) } @@ -784,25 +820,33 @@ libraries = { "": SubResource("AnimationLibrary_c3i4w") } -[node name="ResetPrompt" type="MarginContainer" parent="."] +[node name="Prompts" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ResetPrompt" type="MarginContainer" parent="Prompts"] layout_mode = 1 anchors_preset = -1 anchor_left = 0.5 anchor_right = 0.5 offset_left = -237.5 -offset_top = -55.0 offset_right = 237.5 grow_horizontal = 2 +grow_vertical = 0 theme_override_constants/margin_top = 16 -[node name="ResetInputPrompt" parent="ResetPrompt" instance=ExtResource("14_ik4gg")] +[node name="ResetInputPrompt" parent="Prompts/ResetPrompt" instance=ExtResource("14_ik4gg")] clip_children = 2 layout_mode = 2 text = "❓ - ACTION_shot_reset" uppercase = true action = &"shot_reset" -[node name="Glint" type="TextureRect" parent="ResetPrompt/ResetInputPrompt"] +[node name="Glint" type="TextureRect" parent="Prompts/ResetPrompt/ResetInputPrompt"] layout_mode = 1 anchors_preset = -1 anchor_left = -1.0 @@ -811,13 +855,387 @@ grow_horizontal = 2 grow_vertical = 2 texture = SubResource("GradientTexture2D_q43a6") -[node name="GlintAnimation" type="AnimationPlayer" parent="ResetPrompt/ResetInputPrompt"] +[node name="GlintAnimation" type="AnimationPlayer" parent="Prompts/ResetPrompt/ResetInputPrompt"] libraries = { "": SubResource("AnimationLibrary_bdkm3") } autoplay = "idle" -[node name="ResetPromptAnimation" type="AnimationPlayer" parent="ResetPrompt"] +[node name="ResetPromptAnimation" type="AnimationPlayer" parent="Prompts/ResetPrompt"] +unique_name_in_owner = true +libraries = { +"": SubResource("AnimationLibrary_e82k6") +} + +[node name="AimEquipPrompts" type="MarginContainer" parent="Prompts"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_right = 0.5 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_right = 16 + +[node name="HBoxContainer" type="HBoxContainer" parent="Prompts/AimEquipPrompts"] +layout_mode = 2 +theme_override_constants/separation = 64 + +[node name="ChangeClubPrompt" type="HBoxContainer" parent="Prompts/AimEquipPrompts/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"InputPromptContainer" + +[node name="ClubControlFader" type="Control" parent="Prompts/AimEquipPrompts/HBoxContainer/ChangeClubPrompt"] +custom_minimum_size = Vector2(32, 0) +layout_mode = 2 +size_flags_horizontal = 4 +script = ExtResource("19_vn2m0") +show_time = 1.0 +fade_time = 0.2 + +[node name="InputPrompt" parent="Prompts/AimEquipPrompts/HBoxContainer/ChangeClubPrompt/ClubControlFader" instance=ExtResource("14_ik4gg")] +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -19.5 +offset_bottom = 19.5 +grow_horizontal = 0 +text = "❓" +action = &"club_next" +show_name = false + +[node name="InputPrompt2" parent="Prompts/AimEquipPrompts/HBoxContainer/ChangeClubPrompt/ClubControlFader" instance=ExtResource("14_ik4gg")] +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -19.5 +offset_bottom = 19.5 +grow_horizontal = 0 +text = "❓" +action = &"club_previous" +show_name = false + +[node name="Label" type="Label" parent="Prompts/AimEquipPrompts/HBoxContainer/ChangeClubPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "-" + +[node name="Label2" type="Label" parent="Prompts/AimEquipPrompts/HBoxContainer/ChangeClubPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "ACTION_CHANGE_CLUB" + +[node name="ChangeBallPrompt" type="HBoxContainer" parent="Prompts/AimEquipPrompts/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"InputPromptContainer" + +[node name="BallControlFader" type="Control" parent="Prompts/AimEquipPrompts/HBoxContainer/ChangeBallPrompt"] +custom_minimum_size = Vector2(32, 0) +layout_mode = 2 +size_flags_horizontal = 4 +script = ExtResource("19_vn2m0") +show_time = 1.0 +fade_time = 0.2 + +[node name="InputPrompt" parent="Prompts/AimEquipPrompts/HBoxContainer/ChangeBallPrompt/BallControlFader" instance=ExtResource("14_ik4gg")] +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -19.5 +offset_bottom = 19.5 +grow_horizontal = 0 +text = "❓" +action = &"ball_next" +show_name = false + +[node name="InputPrompt2" parent="Prompts/AimEquipPrompts/HBoxContainer/ChangeBallPrompt/BallControlFader" instance=ExtResource("14_ik4gg")] +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -19.5 +offset_bottom = 19.5 +grow_horizontal = 0 +text = "❓" +action = &"ball_previous" +show_name = false + +[node name="Label" type="Label" parent="Prompts/AimEquipPrompts/HBoxContainer/ChangeBallPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "-" + +[node name="Label2" type="Label" parent="Prompts/AimEquipPrompts/HBoxContainer/ChangeBallPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "ACTION_CHANGE_BALL" + +[node name="AimEquipPromptAnimation" type="AnimationPlayer" parent="Prompts/AimEquipPrompts"] +unique_name_in_owner = true +libraries = { +"": SubResource("AnimationLibrary_e82k6") +} + +[node name="AimPrompts" type="MarginContainer" parent="Prompts"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_top = 60.0 +offset_bottom = 55.0 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_constants/margin_right = 16 +theme_override_constants/margin_bottom = 16 + +[node name="HBoxContainer" type="HBoxContainer" parent="Prompts/AimPrompts"] +layout_mode = 2 +theme_override_constants/separation = 64 + +[node name="AcceptPrompt" parent="Prompts/AimPrompts/HBoxContainer" instance=ExtResource("14_ik4gg")] +layout_mode = 2 +text = "❓ - ACTION_shot_accept" +action = &"shot_accept" + +[node name="FreeCameraPrompt" type="HBoxContainer" parent="Prompts/AimPrompts/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"InputPromptContainer" + +[node name="FreeCamControlFader" type="Control" parent="Prompts/AimPrompts/HBoxContainer/FreeCameraPrompt"] +custom_minimum_size = Vector2(32, 0) +layout_mode = 2 +size_flags_horizontal = 4 +script = ExtResource("19_vn2m0") +show_time = 1.0 +fade_time = 0.2 + +[node name="InputPrompt" parent="Prompts/AimPrompts/HBoxContainer/FreeCameraPrompt/FreeCamControlFader" instance=ExtResource("14_ik4gg")] +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -19.5 +offset_bottom = 19.5 +grow_horizontal = 0 +text = "❓" +action = &"camera_forward" +show_name = false + +[node name="InputPrompt2" parent="Prompts/AimPrompts/HBoxContainer/FreeCameraPrompt/FreeCamControlFader" instance=ExtResource("14_ik4gg")] +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -19.5 +offset_bottom = 19.5 +grow_horizontal = 0 +text = "❓" +action = &"camera_left" +show_name = false + +[node name="InputPrompt3" parent="Prompts/AimPrompts/HBoxContainer/FreeCameraPrompt/FreeCamControlFader" instance=ExtResource("14_ik4gg")] +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -19.5 +offset_bottom = 19.5 +grow_horizontal = 0 +text = "❓" +action = &"camera_back" +show_name = false + +[node name="InputPrompt4" parent="Prompts/AimPrompts/HBoxContainer/FreeCameraPrompt/FreeCamControlFader" instance=ExtResource("14_ik4gg")] +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -19.5 +offset_bottom = 19.5 +grow_horizontal = 0 +text = "❓" +action = &"camera_right" +show_name = false + +[node name="Label" type="Label" parent="Prompts/AimPrompts/HBoxContainer/FreeCameraPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "-" + +[node name="Label2" type="Label" parent="Prompts/AimPrompts/HBoxContainer/FreeCameraPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "ACTION_FREE_CAMERA" + +[node name="ZoomPrompt" type="HBoxContainer" parent="Prompts/AimPrompts/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"InputPromptContainer" + +[node name="ZoomControlFader" type="Control" parent="Prompts/AimPrompts/HBoxContainer/ZoomPrompt"] +custom_minimum_size = Vector2(32, 0) +layout_mode = 2 +size_flags_horizontal = 4 +script = ExtResource("19_vn2m0") +show_time = 1.0 +fade_time = 0.2 + +[node name="InputPrompt" parent="Prompts/AimPrompts/HBoxContainer/ZoomPrompt/ZoomControlFader" instance=ExtResource("14_ik4gg")] +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -19.5 +offset_bottom = 19.5 +grow_horizontal = 0 +text = "❓" +action = &"shot_zoom_in" +show_name = false + +[node name="InputPrompt2" parent="Prompts/AimPrompts/HBoxContainer/ZoomPrompt/ZoomControlFader" instance=ExtResource("14_ik4gg")] +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -19.5 +offset_bottom = 19.5 +grow_horizontal = 0 +text = "❓" +action = &"shot_zoom_out" +show_name = false + +[node name="Label" type="Label" parent="Prompts/AimPrompts/HBoxContainer/ZoomPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "-" + +[node name="Label2" type="Label" parent="Prompts/AimPrompts/HBoxContainer/ZoomPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "ACTION_ZOOM" + +[node name="AimPrompt" type="HBoxContainer" parent="Prompts/AimPrompts/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"InputPromptContainer" + +[node name="Label" type="Label" parent="Prompts/AimPrompts/HBoxContainer/AimPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "⟺ -" + +[node name="Label2" type="Label" parent="Prompts/AimPrompts/HBoxContainer/AimPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "ACTION_AIM" + +[node name="AimPromptAnimation" type="AnimationPlayer" parent="Prompts/AimPrompts"] +unique_name_in_owner = true +libraries = { +"": SubResource("AnimationLibrary_o70c6") +} + +[node name="PowerPrompt" type="MarginContainer" parent="Prompts"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_bottom = 55.0 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_constants/margin_right = 16 +theme_override_constants/margin_bottom = 16 + +[node name="HBoxContainer" type="HBoxContainer" parent="Prompts/PowerPrompt"] +layout_mode = 2 +theme_type_variation = &"InputPromptContainer" + +[node name="InputPrompt" parent="Prompts/PowerPrompt/HBoxContainer" instance=ExtResource("14_ik4gg")] +layout_mode = 2 +text = "❓" +action = &"shot_accept" +show_name = false + +[node name="Label" type="Label" parent="Prompts/PowerPrompt/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "ACTION_HOLD_MODIFIER" + +[node name="Label2" type="Label" parent="Prompts/PowerPrompt/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "-" + +[node name="Label3" type="Label" parent="Prompts/PowerPrompt/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "ACTION_SET_POWER" + +[node name="PowerPromptAnimation" type="AnimationPlayer" parent="Prompts/PowerPrompt"] +unique_name_in_owner = true +libraries = { +"": SubResource("AnimationLibrary_o70c6") +} + +[node name="CurvePrompt" type="MarginContainer" parent="Prompts"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_bottom = 55.0 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_constants/margin_right = 16 +theme_override_constants/margin_bottom = 16 + +[node name="HBoxContainer" type="HBoxContainer" parent="Prompts/CurvePrompt"] +layout_mode = 2 +theme_type_variation = &"InputPromptContainer" + +[node name="InputPrompt" parent="Prompts/CurvePrompt/HBoxContainer" instance=ExtResource("14_ik4gg")] +layout_mode = 2 +text = "❓" +action = &"shot_accept" +show_name = false + +[node name="Label2" type="Label" parent="Prompts/CurvePrompt/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "-" + +[node name="Label3" type="Label" parent="Prompts/CurvePrompt/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"InputPrompt" +text = "ACTION_SET_CURVE" + +[node name="CurvePromptAnimation" type="AnimationPlayer" parent="Prompts/CurvePrompt"] unique_name_in_owner = true libraries = { "": SubResource("AnimationLibrary_o70c6")