UI with XP and Level labels

master
Sascha 2025-01-05 12:06:27 +07:00
parent d8f6c6b562
commit 62131c5b3f
13 changed files with 56 additions and 41 deletions

@ -189,4 +189,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@18607/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@EditorMainScreen@98/MainScreen/@CanvasItemEditor@10371/@VSplitContainer@10195/@HSplitContainer@10197/@HSplitContainer@10199/@Control@10200/@SubViewportContainer@10201/@SubViewport@10202/Boss")])
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@18607/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@EditorMainScreen@98/MainScreen/@CanvasItemEditor@10371/@VSplitContainer@10195/@HSplitContainer@10197/@HSplitContainer@10199/@Control@10200/@SubViewportContainer@10201/@SubViewport@10202/Game/UI/VBoxContainer/Level/LevelLabel")])

@ -1,8 +1,8 @@
HBoxContainer
Label
VBoxContainer
ProgressBar
TextureRect
HBoxContainer
CanvasLayer
ColorRect
AudioStreamPlayer2D

@ -29,8 +29,8 @@ open_scenes=PackedStringArray("res://scenes/game.tscn", "res://scenes/player.tsc
current_scene="res://scenes/game.tscn"
center_split_offset=-317
selected_default_debugger_tab_idx=0
selected_main_editor_idx=2
selected_bottom_panel_item=1
selected_main_editor_idx=0
selected_bottom_panel_item=0
[EditorWindow]

@ -8,7 +8,7 @@ Anim={
"grid_snap_active": false,
"grid_step": Vector2(8, 8),
"grid_visibility": 1,
"ofs": Vector2(-125.045, -192.08),
"ofs": Vector2(-351, -153),
"primary_grid_step": Vector2i(8, 8),
"show_group_gizmos": true,
"show_guides": true,
@ -34,7 +34,7 @@ Anim={
"snap_rotation_step": 0.261799,
"snap_scale": false,
"snap_scale_step": 0.1,
"zoom": 0.620921
"zoom": 1.0
}
3D={
"fov": 70.01,
@ -189,4 +189,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@18607/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@EditorMainScreen@98/MainScreen/@CanvasItemEditor@10371/@VSplitContainer@10195/@HSplitContainer@10197/@HSplitContainer@10199/@Control@10200/@SubViewportContainer@10201/@SubViewport@10202/Boss")])
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@18607/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@EditorMainScreen@98/MainScreen/@CanvasItemEditor@10371/@VSplitContainer@10195/@HSplitContainer@10197/@HSplitContainer@10199/@Control@10200/@SubViewportContainer@10201/@SubViewport@10202/Game/Map/BackgroundColor")])

@ -1,5 +1,5 @@
[folding]
node_unfolds=[NodePath("."), PackedStringArray("Ordering", "Transform"), NodePath("AudioController"), PackedStringArray("Transform"), NodePath("Map"), PackedStringArray("Layer", "Follow Viewport"), NodePath("Map/BackgroundTexture"), PackedStringArray("Visibility", "Layout"), NodePath("Map/BackgroundColor"), PackedStringArray("Layout"), NodePath("Player"), PackedStringArray("Transform"), NodePath("Player/Path2D"), PackedStringArray("Transform"), NodePath("Player/Path2D/PathFollow2D"), PackedStringArray("Transform"), NodePath("Player/ShootSound"), PackedStringArray("Transform"), NodePath("Player/TakeDamageSound"), PackedStringArray("Transform"), NodePath("Player/DeathSound"), PackedStringArray("Transform"), NodePath("Player/GameOverSound"), PackedStringArray("Transform"), NodePath("Player/BackgoundMusic"), PackedStringArray("Transform"), NodePath("GameOver"), PackedStringArray("Layer"), NodePath("GameOver/ColorRect"), PackedStringArray("Layout"), NodePath("GameOver/ColorRect/Label"), PackedStringArray("Layout", "Theme Overrides"), NodePath("UI"), PackedStringArray("Follow Viewport", "Layer"), NodePath("UI/VBoxContainer"), PackedStringArray("Layout/Container Sizing", "Layout", "Layout/Transform"), NodePath("UI/VBoxContainer/XPBar"), PackedStringArray("Layout/Transform", "Layout/Container Sizing", "theme_override_styles/background", "Theme Overrides/styles"), NodePath("UI/VBoxContainer/LevelBar"), PackedStringArray("Theme Overrides", "Theme Overrides/styles", "theme_override_styles/fill")]
node_unfolds=[NodePath("."), PackedStringArray("Ordering", "Transform"), NodePath("AudioController"), PackedStringArray("Transform"), NodePath("Map"), PackedStringArray("Layer", "Follow Viewport"), NodePath("Map/BackgroundTexture"), PackedStringArray("Visibility", "Layout"), NodePath("Map/BackgroundColor"), PackedStringArray("Layout"), NodePath("Player"), PackedStringArray("Transform"), NodePath("Player/Path2D"), PackedStringArray("Transform"), NodePath("Player/Path2D/PathFollow2D"), PackedStringArray("Transform"), NodePath("Player/ShootSound"), PackedStringArray("Transform"), NodePath("Player/TakeDamageSound"), PackedStringArray("Transform"), NodePath("Player/DeathSound"), PackedStringArray("Transform"), NodePath("Player/GameOverSound"), PackedStringArray("Transform"), NodePath("Player/BackgoundMusic"), PackedStringArray("Transform"), NodePath("GameOver"), PackedStringArray("Layer"), NodePath("GameOver/ColorRect"), PackedStringArray("Layout"), NodePath("GameOver/ColorRect/Label"), PackedStringArray("Layout", "Theme Overrides"), NodePath("UI"), PackedStringArray("Follow Viewport", "Layer"), NodePath("UI/VBoxContainer"), PackedStringArray("Layout/Container Sizing", "Layout", "Layout/Transform"), NodePath("UI/VBoxContainer/XP/XPBar"), PackedStringArray("Layout/Transform", "Layout/Container Sizing", "theme_override_styles/background", "Theme Overrides/styles"), NodePath("UI/VBoxContainer/Level/LevelBar"), PackedStringArray("Theme Overrides", "Theme Overrides/styles", "theme_override_styles/fill")]
resource_unfolds=["res://scenes/game.tscn::Curve2D_feb5d", PackedStringArray("Resource"), "res://scenes/game.tscn::StyleBoxFlat_0tnpc", PackedStringArray("Corner Radius"), "res://scenes/game.tscn::StyleBoxFlat_vtaks", PackedStringArray("Corner Radius"), "res://scenes/game.tscn::StyleBoxFlat_kvpfn", PackedStringArray()]
nodes_folded=[]

@ -189,4 +189,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@18607/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@EditorMainScreen@98/MainScreen/@CanvasItemEditor@10371/@VSplitContainer@10195/@HSplitContainer@10197/@HSplitContainer@10199/@Control@10200/@SubViewportContainer@10201/@SubViewport@10202/Boss")])
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@18607/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@EditorMainScreen@98/MainScreen/@CanvasItemEditor@10371/@VSplitContainer@10195/@HSplitContainer@10197/@HSplitContainer@10199/@Control@10200/@SubViewportContainer@10201/@SubViewport@10202/Game/UI/VBoxContainer/Level/LevelLabel")])

@ -189,4 +189,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@18607/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@EditorMainScreen@98/MainScreen/@CanvasItemEditor@10371/@VSplitContainer@10195/@HSplitContainer@10197/@HSplitContainer@10199/@Control@10200/@SubViewportContainer@10201/@SubViewport@10202/Boss")])
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@18607/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@EditorMainScreen@98/MainScreen/@CanvasItemEditor@10371/@VSplitContainer@10195/@HSplitContainer@10197/@HSplitContainer@10199/@Control@10200/@SubViewportContainer@10201/@SubViewport@10202/Game/UI/VBoxContainer/Level/LevelLabel")])

@ -73,11 +73,11 @@ state={
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 0,
"column": 25,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 61,
"scroll_position": 42.0,
"row": 33,
"scroll_position": 11.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
@ -129,10 +129,10 @@ state={
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 0,
"column": 50,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 1,
"row": 18,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"

@ -189,4 +189,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@18607/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@EditorMainScreen@98/MainScreen/@CanvasItemEditor@10371/@VSplitContainer@10195/@HSplitContainer@10197/@HSplitContainer@10199/@Control@10200/@SubViewportContainer@10201/@SubViewport@10202/Boss")])
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@18607/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@EditorMainScreen@98/MainScreen/@CanvasItemEditor@10371/@VSplitContainer@10195/@HSplitContainer@10197/@HSplitContainer@10199/@Control@10200/@SubViewportContainer@10201/@SubViewport@10202/Game/UI/VBoxContainer/Level/LevelLabel")])

@ -149,18 +149,37 @@ offset_top = 10.0
offset_right = 1034.0
offset_bottom = 74.0
[node name="XPBar" type="ProgressBar" parent="UI/VBoxContainer"]
[node name="XP" type="HBoxContainer" parent="UI/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="XPLabel" type="Label" parent="UI/VBoxContainer/XP"]
unique_name_in_owner = true
layout_mode = 2
text = "XP: 0/3"
[node name="XPBar" type="ProgressBar" parent="UI/VBoxContainer/XP"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_styles/background = SubResource("StyleBoxFlat_0tnpc")
theme_override_styles/fill = SubResource("StyleBoxFlat_vtaks")
value = 67.0
show_percentage = false
[node name="LevelBar" type="ProgressBar" parent="UI/VBoxContainer"]
[node name="Level" type="HBoxContainer" parent="UI/VBoxContainer"]
layout_mode = 2
[node name="LevelLabel" type="Label" parent="UI/VBoxContainer/Level"]
unique_name_in_owner = true
layout_mode = 2
text = "Level: 1"
[node name="LevelBar" type="ProgressBar" parent="UI/VBoxContainer/Level"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_styles/background = SubResource("StyleBoxFlat_0tnpc")
theme_override_styles/fill = SubResource("StyleBoxFlat_kvpfn")

@ -3,7 +3,7 @@ extends Node2D
signal game_over
signal level_up()
signal boss
signal update_ui(ui_data: Dictionary)
signal update_ui(ui_data: UIDataResource)
const MOB = preload("res://scenes/mob.tscn")
const TREE = preload("res://scenes/tree.tscn")
@ -24,19 +24,12 @@ const UIDataResource = preload("res://scripts/ui_data.gd")
const MobDataResource = preload("res://scripts/mob_data.gd")
var game_data = GameDataResource.new(0, 3, 1, 3, 0)
var ui_data = UIDataResource.new(0, 3, 1, 3, 0)
func _ready() -> void:
background_color.size = map_size
background_color.position = Vector2(-map_size.x / 2, -map_size.y / 2)
randomly_spawn_trees(int(map_size.x * map_size.y / tree_density))
update_ui.emit({
"xp": ui_data.xp,
"xp_next_level": ui_data.xp_next_level,
"level": ui_data.level,
"boss_level": ui_data.boss_level,
"kill_count": ui_data.kill_count
})
update_ui_data()
func spawn_mob() -> void:
var new_mob = MOB.instantiate()
@ -71,13 +64,7 @@ func _on_mob_died(mob_xp: int) -> void:
print("Level up to " + str(game_data.level))
if game_data.level >= game_data.boss_level:
boss.emit()
update_ui.emit({
"xp": game_data.xp,
"xp_next_level": game_data.xp_next_level,
"level": game_data.level,
"boss_level": game_data.boss_level,
"kill_count": game_data.kill_count
})
update_ui_data()
func spawn_boss() -> void:
print("Spawn Boss")
@ -91,3 +78,8 @@ func spawn_boss() -> void:
func _on_level_up() -> void:
# spawn_mob_timer.wait_time = 1 - (game_data.level * 0.1)
level_up.emit(game_data.level)
update_ui_data()
func update_ui_data() -> void:
var ui_data = UIDataResource.new(game_data.xp, game_data.xp_next_level, game_data.level, game_data.boss_level, game_data.kill_count)
update_ui.emit(ui_data)

@ -18,6 +18,6 @@ func shoot() -> void:
shooted.emit()
func _on_player_level_up(level: int) -> void:
func _on_player_level_up(_level: int) -> void:
pass
# timer.wait_time = 0.5 - (level * 0.1)

@ -6,13 +6,17 @@ const UIDataClass = preload("res://scripts/ui_data.gd")
# Create an instance of UIData
var ui_data = UIDataClass.new(0, 3, 1, 3, 0)
@onready var xp_label: Label = %XPLabel
@onready var xp_bar: ProgressBar = %XPBar
@onready var level_label: Label = %LevelLabel
@onready var level_bar: ProgressBar = %LevelBar
@onready var kills: Label = %Kills
func _on_update_ui(game_data: Dictionary) -> void:
xp_bar.max_value = game_data.xp_next_level
xp_bar.value = game_data.xp
level_bar.max_value = game_data.boss_level
level_bar.value = game_data.level
kills.text = "Mobs killed: " + str(game_data.kill_count)
func _on_update_ui(ui_data: UIDataClass) -> void:
xp_label.text = "XP: " + str(ui_data.xp) + "/" + str(ui_data.xp_next_level)
xp_bar.max_value = ui_data.xp_next_level
xp_bar.value = ui_data.xp
level_label.text = "Level: " + str(ui_data.level)
level_bar.max_value = ui_data.boss_level
level_bar.value = ui_data.level
kills.text = "Mobs killed: " + str(ui_data.kill_count)