generated from krampus/template-godot4
HUD starts hidden & fewer redundant initializations
This commit is contained in:
parent
db78cec5a5
commit
0952cd7486
|
@ -103,7 +103,8 @@ var club: Club:
|
||||||
var ball_type: GameBall.Type:
|
var ball_type: GameBall.Type:
|
||||||
set(value):
|
set(value):
|
||||||
if value != ball_type:
|
if value != ball_type:
|
||||||
hud.ball_selector.value = value
|
if hud:
|
||||||
|
hud.ball_selector.value = value
|
||||||
ball_point.spawn_ball(value)
|
ball_point.spawn_ball(value)
|
||||||
ball_type = value
|
ball_type = value
|
||||||
|
|
||||||
|
@ -180,10 +181,11 @@ func _ready() -> void:
|
||||||
player.on_life_changed.connect(_on_life_changed)
|
player.on_life_changed.connect(_on_life_changed)
|
||||||
|
|
||||||
# Create & set up HUD
|
# Create & set up HUD
|
||||||
hud = ShotHUD.create(player)
|
|
||||||
world.ui.add_player_hud(hud)
|
|
||||||
ball_type = initial_ball
|
ball_type = initial_ball
|
||||||
club_type = initial_club_type
|
club_type = initial_club_type
|
||||||
|
|
||||||
|
hud = ShotHUD.create(player)
|
||||||
|
world.ui.add_player_hud(hud)
|
||||||
character.set_color(player.color)
|
character.set_color(player.color)
|
||||||
|
|
||||||
# Set up player 3D label
|
# Set up player 3D label
|
||||||
|
@ -191,7 +193,7 @@ func _ready() -> void:
|
||||||
player_label.modulate = player.color
|
player_label.modulate = player.color
|
||||||
player_label.outline_modulate = ColorTools.get_bg_color(player.color)
|
player_label.outline_modulate = ColorTools.get_bg_color(player.color)
|
||||||
|
|
||||||
_on_phase_change(phase)
|
#_on_phase_change(phase)
|
||||||
|
|
||||||
|
|
||||||
func _on_tree_exiting() -> void:
|
func _on_tree_exiting() -> void:
|
||||||
|
@ -443,7 +445,8 @@ func _set_club_type(new_club_type: Club.Type) -> void:
|
||||||
wedge_arrow.hide()
|
wedge_arrow.hide()
|
||||||
iron_arrow.hide()
|
iron_arrow.hide()
|
||||||
putt_arrow.hide()
|
putt_arrow.hide()
|
||||||
hud.club_selector.value = new_club_type
|
if hud:
|
||||||
|
hud.club_selector.value = new_club_type
|
||||||
# TODO club change animation
|
# TODO club change animation
|
||||||
character.hold_right(new_club.get_model())
|
character.hold_right(new_club.get_model())
|
||||||
match new_club_type:
|
match new_club_type:
|
||||||
|
|
|
@ -28,6 +28,7 @@ var _force_visible := false
|
||||||
|
|
||||||
func _init(force_visible_signal: Variant = null) -> void:
|
func _init(force_visible_signal: Variant = null) -> void:
|
||||||
if force_visible_signal is Signal:
|
if force_visible_signal is Signal:
|
||||||
|
@warning_ignore("unsafe_cast")
|
||||||
(force_visible_signal as Signal).connect(_set_force_visible)
|
(force_visible_signal as Signal).connect(_set_force_visible)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
class_name ShotHUD extends Control
|
class_name ShotHUD extends Control
|
||||||
## HUD for main gameplay loop
|
## HUD for main gameplay loop
|
||||||
|
|
||||||
const NICE_ALERT_SCENE := preload("res://src/ui/shot_hud/nice_alert.tscn")
|
|
||||||
|
|
||||||
## Scale factor for the life bar rumble intensity on taking damage
|
## Scale factor for the life bar rumble intensity on taking damage
|
||||||
const LIFE_BAR_DAMAGE_RUMBLE_SCALE := 0.2
|
const LIFE_BAR_DAMAGE_RUMBLE_SCALE := 0.2
|
||||||
## Time it takes to dampen the life bar rumble on taking damage, in seconds
|
## Time it takes to dampen the life bar rumble on taking damage, in seconds
|
||||||
|
@ -12,6 +10,8 @@ const LIFE_BAR_HEAL_DELAY := 0.8
|
||||||
## Time it takes the life bar to fill when restoring life, in seconds
|
## Time it takes the life bar to fill when restoring life, in seconds
|
||||||
const LIFE_BAR_HEAL_TIME := 1.0
|
const LIFE_BAR_HEAL_TIME := 1.0
|
||||||
|
|
||||||
|
@export var nice_alert_scene: PackedScene
|
||||||
|
|
||||||
var player: WorldPlayer
|
var player: WorldPlayer
|
||||||
|
|
||||||
@onready var power_bar: TextureProgressBar = %PowerBar
|
@onready var power_bar: TextureProgressBar = %PowerBar
|
||||||
|
@ -103,7 +103,7 @@ func gauge_flourish() -> void:
|
||||||
|
|
||||||
|
|
||||||
func play_nice_animation() -> void:
|
func play_nice_animation() -> void:
|
||||||
_alert_container.add_child(NICE_ALERT_SCENE.instantiate())
|
_alert_container.add_child(nice_alert_scene.instantiate())
|
||||||
|
|
||||||
|
|
||||||
func play_wasted_animation() -> void:
|
func play_wasted_animation() -> void:
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
[gd_scene load_steps=46 format=3 uid="uid://c4ifdiohng830"]
|
[gd_scene load_steps=47 format=3 uid="uid://c4ifdiohng830"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://src/ui/shot_hud/shot_hud.gd" id="1_x5b4c"]
|
[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"]
|
[ext_resource type="Shader" path="res://src/shaders/canvas_retro.gdshader" id="1_ybxxp"]
|
||||||
[ext_resource type="PackedScene" uid="uid://445qd7m4qe2j" path="res://src/ui/shot_hud/club_selector/club_selector.tscn" id="2_1hdub"]
|
[ext_resource type="PackedScene" uid="uid://445qd7m4qe2j" path="res://src/ui/shot_hud/club_selector/club_selector.tscn" id="2_1hdub"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://g8yw4bersece" path="res://src/ui/shot_hud/nice_alert.tscn" id="2_rnndf"]
|
||||||
[ext_resource type="Script" path="res://src/ui/decorations/rumbler.gd" id="3_6groq"]
|
[ext_resource type="Script" path="res://src/ui/decorations/rumbler.gd" id="3_6groq"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b5812y3pmmgg5" path="res://assets/ui/gauge_patch.png" id="4_5kcpe"]
|
[ext_resource type="Texture2D" uid="uid://b5812y3pmmgg5" path="res://assets/ui/gauge_patch.png" id="4_5kcpe"]
|
||||||
[ext_resource type="Texture2D" uid="uid://76fjx2ukavqe" path="res://assets/ui/power_gauge_fill.png" id="5_3i1yq"]
|
[ext_resource type="Texture2D" uid="uid://76fjx2ukavqe" path="res://assets/ui/power_gauge_fill.png" id="5_3i1yq"]
|
||||||
|
@ -266,7 +267,7 @@ tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0),
|
"times": PackedFloat32Array(0),
|
||||||
"transitions": PackedFloat32Array(1),
|
"transitions": PackedFloat32Array(1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [0.0]
|
"values": [-1.5708]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_w7dmn"]
|
[sub_resource type="Animation" id="Animation_w7dmn"]
|
||||||
|
@ -334,26 +335,14 @@ length = 0.001
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
tracks/0/imported = false
|
tracks/0/imported = false
|
||||||
tracks/0/enabled = true
|
tracks/0/enabled = true
|
||||||
tracks/0/path = NodePath("SouthWest:visible")
|
tracks/0/path = NodePath("SouthWest:offset_top")
|
||||||
tracks/0/interp = 1
|
tracks/0/interp = 2
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0),
|
"times": PackedFloat32Array(0),
|
||||||
"transitions": PackedFloat32Array(1),
|
"transitions": PackedFloat32Array(1),
|
||||||
"update": 1,
|
|
||||||
"values": [true]
|
|
||||||
}
|
|
||||||
tracks/1/type = "value"
|
|
||||||
tracks/1/imported = false
|
|
||||||
tracks/1/enabled = true
|
|
||||||
tracks/1/path = NodePath("SouthWest:offset_top")
|
|
||||||
tracks/1/interp = 2
|
|
||||||
tracks/1/loop_wrap = true
|
|
||||||
tracks/1/keys = {
|
|
||||||
"times": PackedFloat32Array(0),
|
|
||||||
"transitions": PackedFloat32Array(1),
|
|
||||||
"update": 0,
|
"update": 0,
|
||||||
"values": [-98.0]
|
"values": [20.0]
|
||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_yis4x"]
|
[sub_resource type="Animation" id="Animation_yis4x"]
|
||||||
|
@ -363,22 +352,10 @@ step = 0.02
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
tracks/0/imported = false
|
tracks/0/imported = false
|
||||||
tracks/0/enabled = true
|
tracks/0/enabled = true
|
||||||
tracks/0/path = NodePath("SouthWest:visible")
|
tracks/0/path = NodePath("SouthWest:offset_top")
|
||||||
tracks/0/interp = 1
|
tracks/0/interp = 2
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0.4),
|
|
||||||
"transitions": PackedFloat32Array(1),
|
|
||||||
"update": 1,
|
|
||||||
"values": [false]
|
|
||||||
}
|
|
||||||
tracks/1/type = "value"
|
|
||||||
tracks/1/imported = false
|
|
||||||
tracks/1/enabled = true
|
|
||||||
tracks/1/path = NodePath("SouthWest:offset_top")
|
|
||||||
tracks/1/interp = 2
|
|
||||||
tracks/1/loop_wrap = true
|
|
||||||
tracks/1/keys = {
|
|
||||||
"times": PackedFloat32Array(0, 0.1, 0.4),
|
"times": PackedFloat32Array(0, 0.1, 0.4),
|
||||||
"transitions": PackedFloat32Array(1.618, 1.618, 1),
|
"transitions": PackedFloat32Array(1.618, 1.618, 1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
|
@ -392,22 +369,10 @@ step = 0.02
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
tracks/0/imported = false
|
tracks/0/imported = false
|
||||||
tracks/0/enabled = true
|
tracks/0/enabled = true
|
||||||
tracks/0/path = NodePath("SouthWest:visible")
|
tracks/0/path = NodePath("SouthWest:offset_top")
|
||||||
tracks/0/interp = 1
|
tracks/0/interp = 1
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0, 2.4),
|
|
||||||
"transitions": PackedFloat32Array(1, 1),
|
|
||||||
"update": 1,
|
|
||||||
"values": [true, false]
|
|
||||||
}
|
|
||||||
tracks/1/type = "value"
|
|
||||||
tracks/1/imported = false
|
|
||||||
tracks/1/enabled = true
|
|
||||||
tracks/1/path = NodePath("SouthWest:offset_top")
|
|
||||||
tracks/1/interp = 1
|
|
||||||
tracks/1/loop_wrap = true
|
|
||||||
tracks/1/keys = {
|
|
||||||
"times": PackedFloat32Array(0, 0.1, 2.3, 2.4),
|
"times": PackedFloat32Array(0, 0.1, 2.3, 2.4),
|
||||||
"transitions": PackedFloat32Array(1.618, 1, 1.618, 1),
|
"transitions": PackedFloat32Array(1.618, 1, 1.618, 1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
|
@ -421,22 +386,10 @@ step = 0.02
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
tracks/0/imported = false
|
tracks/0/imported = false
|
||||||
tracks/0/enabled = true
|
tracks/0/enabled = true
|
||||||
tracks/0/path = NodePath("SouthWest:visible")
|
tracks/0/path = NodePath("SouthWest:offset_top")
|
||||||
tracks/0/interp = 1
|
tracks/0/interp = 2
|
||||||
tracks/0/loop_wrap = true
|
tracks/0/loop_wrap = true
|
||||||
tracks/0/keys = {
|
tracks/0/keys = {
|
||||||
"times": PackedFloat32Array(0),
|
|
||||||
"transitions": PackedFloat32Array(1),
|
|
||||||
"update": 1,
|
|
||||||
"values": [true]
|
|
||||||
}
|
|
||||||
tracks/1/type = "value"
|
|
||||||
tracks/1/imported = false
|
|
||||||
tracks/1/enabled = true
|
|
||||||
tracks/1/path = NodePath("SouthWest:offset_top")
|
|
||||||
tracks/1/interp = 2
|
|
||||||
tracks/1/loop_wrap = true
|
|
||||||
tracks/1/keys = {
|
|
||||||
"times": PackedFloat32Array(0, 0.34, 0.4),
|
"times": PackedFloat32Array(0, 0.34, 0.4),
|
||||||
"transitions": PackedFloat32Array(1.618, 1.618, 1),
|
"transitions": PackedFloat32Array(1.618, 1.618, 1),
|
||||||
"update": 0,
|
"update": 0,
|
||||||
|
@ -568,6 +521,7 @@ grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
mouse_filter = 2
|
mouse_filter = 2
|
||||||
script = ExtResource("1_x5b4c")
|
script = ExtResource("1_x5b4c")
|
||||||
|
nice_alert_scene = ExtResource("2_rnndf")
|
||||||
|
|
||||||
[node name="WastedFeedback" type="RichTextLabel" parent="."]
|
[node name="WastedFeedback" type="RichTextLabel" parent="."]
|
||||||
visible = false
|
visible = false
|
||||||
|
@ -642,6 +596,7 @@ script = ExtResource("3_6groq")
|
||||||
|
|
||||||
[node name="PowerBar" type="TextureProgressBar" parent="ShotGauges/PowerGauge/Rumbler"]
|
[node name="PowerBar" type="TextureProgressBar" parent="ShotGauges/PowerGauge/Rumbler"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
texture_filter = 5
|
texture_filter = 5
|
||||||
custom_minimum_size = Vector2(64, 0)
|
custom_minimum_size = Vector2(64, 0)
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
|
@ -691,6 +646,7 @@ mouse_filter = 1
|
||||||
|
|
||||||
[node name="CurveBar" parent="ShotGauges/CurveGauge" instance=ExtResource("7_kqi7w")]
|
[node name="CurveBar" parent="ShotGauges/CurveGauge" instance=ExtResource("7_kqi7w")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
|
|
||||||
[node name="CurveAnimation" type="AnimationPlayer" parent="ShotGauges/CurveGauge"]
|
[node name="CurveAnimation" type="AnimationPlayer" parent="ShotGauges/CurveGauge"]
|
||||||
|
@ -712,6 +668,7 @@ offset_right = 50.0
|
||||||
offset_bottom = 50.0
|
offset_bottom = 50.0
|
||||||
grow_horizontal = 1
|
grow_horizontal = 1
|
||||||
grow_vertical = 1
|
grow_vertical = 1
|
||||||
|
rotation = 4.71239
|
||||||
pivot_offset = Vector2(-400, 0)
|
pivot_offset = Vector2(-400, 0)
|
||||||
|
|
||||||
[node name="ClubSelectorAnimation" type="AnimationPlayer" parent="ClubSelector"]
|
[node name="ClubSelectorAnimation" type="AnimationPlayer" parent="ClubSelector"]
|
||||||
|
@ -756,7 +713,7 @@ anchors_preset = -1
|
||||||
anchor_top = 1.0
|
anchor_top = 1.0
|
||||||
anchor_right = 0.333
|
anchor_right = 0.333
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
offset_top = -98.0
|
offset_top = 20.0
|
||||||
offset_right = 40.0
|
offset_right = 40.0
|
||||||
offset_bottom = 278.665
|
offset_bottom = 278.665
|
||||||
grow_vertical = 0
|
grow_vertical = 0
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
class_name PlayManager extends Resource
|
class_name PlayManager extends Resource
|
||||||
## Abstract base type for strategies to manage the flow of gameplay
|
## Abstract base type for strategies to manage the flow of gameplay
|
||||||
|
|
||||||
|
## Emitted when a player should be spawned in the world
|
||||||
|
@warning_ignore("unused_signal")
|
||||||
|
signal spawning(player: WorldPlayer)
|
||||||
|
|
||||||
## Emitted at the start of each new turn
|
## Emitted at the start of each new turn
|
||||||
@warning_ignore("unused_signal")
|
@warning_ignore("unused_signal")
|
||||||
signal turn_started(player: WorldPlayer)
|
signal turn_started(player: WorldPlayer)
|
||||||
|
|
|
@ -9,15 +9,18 @@ var player: WorldPlayer:
|
||||||
|
|
||||||
|
|
||||||
func on_initialization() -> void:
|
func on_initialization() -> void:
|
||||||
|
# Spawn practice player
|
||||||
|
spawning.emit(player)
|
||||||
|
|
||||||
# Set first player as active
|
# Set first player as active
|
||||||
player.shot_setup.phase = ShotSetup.Phase.AIM
|
player.shot_setup.phase = ShotSetup.Phase.AIM
|
||||||
|
|
||||||
|
|
||||||
func on_turn_finished(source: ShotSetup) -> void:
|
func on_turn_finished(_source: ShotSetup) -> void:
|
||||||
player.shot_setup.queue_restart()
|
player.shot_setup.queue_restart()
|
||||||
turn_started.emit(player)
|
turn_started.emit(player)
|
||||||
|
|
||||||
|
|
||||||
func on_player_death(player: WorldPlayer) -> void:
|
func on_player_death(source: WorldPlayer) -> void:
|
||||||
# TODO game over screen
|
# TODO game over screen
|
||||||
winner.emit(player)
|
winner.emit(source)
|
||||||
|
|
|
@ -3,6 +3,11 @@ class_name RoundRobinManager extends PlayManager
|
||||||
|
|
||||||
|
|
||||||
func on_initialization() -> void:
|
func on_initialization() -> void:
|
||||||
|
# Spawn all players
|
||||||
|
for p: WorldPlayer in players:
|
||||||
|
print("Emitting spawn signal for player ", p)
|
||||||
|
spawning.emit(p)
|
||||||
|
|
||||||
# Set first player as active
|
# Set first player as active
|
||||||
players[0].shot_setup.phase = ShotSetup.Phase.AIM
|
players[0].shot_setup.phase = ShotSetup.Phase.AIM
|
||||||
|
|
||||||
|
|
|
@ -27,16 +27,13 @@ static var group := "WorldGroup"
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
load_level(initial_level)
|
load_level(initial_level)
|
||||||
|
|
||||||
# Spawn players in the level
|
manager.spawning.connect(_spawn_player)
|
||||||
for player: WorldPlayer in manager.players:
|
manager.winner.connect(_on_winner)
|
||||||
_spawn_player(player)
|
|
||||||
|
|
||||||
manager.initialize()
|
manager.initialize()
|
||||||
if not manager.players:
|
if not manager.players:
|
||||||
push_warning("Warning: Starting game world with no players!")
|
push_warning("Warning: Starting game world with no players!")
|
||||||
|
|
||||||
manager.winner.connect(_on_winner)
|
|
||||||
|
|
||||||
|
|
||||||
func _random_spawn() -> Node3D:
|
func _random_spawn() -> Node3D:
|
||||||
# Get random spawn point
|
# Get random spawn point
|
||||||
|
@ -50,6 +47,7 @@ func _random_spawn() -> Node3D:
|
||||||
|
|
||||||
|
|
||||||
func _spawn_player(player: WorldPlayer) -> void:
|
func _spawn_player(player: WorldPlayer) -> void:
|
||||||
|
print_debug("Spawning player: ", player)
|
||||||
var spawn_point := _random_spawn()
|
var spawn_point := _random_spawn()
|
||||||
var shot_setup := player.shot_setup
|
var shot_setup := player.shot_setup
|
||||||
shot_setup.global_transform = spawn_point.global_transform
|
shot_setup.global_transform = spawn_point.global_transform
|
||||||
|
|
Loading…
Reference in New Issue