Input prompts show during play after the player is idle for a few seconds

This commit is contained in:
Rob Kelly 2024-12-23 00:41:20 -07:00
parent b431c4715a
commit b3821b4156
10 changed files with 588 additions and 32 deletions

View File

@ -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

1 keys en
125 ACTION_ball_next Select next ball
126 ACTION_ball_previous Select previous ball
127
128 ACTION_FREE_CAMERA Free Camera
129 ACTION_AIM Aim
130 ACTION_ZOOM Zoom
131 ACTION_HOLD_MODIFIER (hold)
132 ACTION_SET_POWER Set Power Level
133 ACTION_SET_CURVE Set Shot Curve
134 ACTION_CHANGE_BALL Switch Ball
135 ACTION_CHANGE_CLUB Switch Club
136
137 CLUB_DRIVER Driver
138 CLUB_IRON Iron
139 CLUB_WEDGE Wedge

View File

@ -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

View File

@ -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()

View File

@ -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"]

View File

@ -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)

View File

@ -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 = {

View File

@ -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 = {

View File

@ -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

View File

@ -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`

View File

@ -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")