create GameOver and LevelUp under the UI script and a timer for the NextLevel

master
Sascha 2025-01-05 20:02:46 +07:00
parent 7c83a31cb5
commit 4c945f4adc
24 changed files with 178 additions and 75 deletions

@ -189,4 +189,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([])
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/LevelUp/LevelUpTimer")])

@ -1,3 +1,4 @@
Timer
HBoxContainer
Label
VBoxContainer
@ -8,7 +9,6 @@ ColorRect
AudioStreamPlayer2D
AudioListener2D
Node2D
Timer
PathFollow2D
Path2D
CollisionShape2D

@ -2,7 +2,7 @@
dock_3_selected_tab_idx=0
dock_4_selected_tab_idx=0
dock_5_selected_tab_idx=0
dock_5_selected_tab_idx=1
dock_floating={}
dock_bottom=[]
dock_closed=[]
@ -17,7 +17,7 @@ dock_filesystem_v_split_offset=0
dock_filesystem_display_mode=0
dock_filesystem_file_sort=0
dock_filesystem_file_list_display_mode=1
dock_filesystem_selected_paths=PackedStringArray("res://characters/slime/slime.tscn")
dock_filesystem_selected_paths=PackedStringArray("res://scripts/game_data.gd")
dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://scripts/", "res://scenes/", "res://characters/", "res://characters/slime/", "res://characters/happy_boo/")
dock_3="Scene,Import"
dock_4="FileSystem"
@ -26,7 +26,7 @@ dock_5="Inspector,Node,History"
[EditorNode]
open_scenes=PackedStringArray("res://scenes/game.tscn", "res://scenes/player.tscn", "res://scenes/gun.tscn", "res://scenes/boss.tscn", "res://scenes/tree.tscn")
current_scene="res://scenes/player.tscn"
current_scene="res://scenes/game.tscn"
center_split_offset=-317
selected_default_debugger_tab_idx=0
selected_main_editor_idx=2
@ -40,8 +40,8 @@ position=Vector2i(2560, 28)
[ScriptEditor]
open_scripts=["res://scripts/audio_controller.gd", "res://scripts/bullet.gd", "res://scripts/game.gd", "res://scripts/gun.gd", "res://scripts/mob.gd", "res://scripts/player.gd", "res://scripts/ui.gd"]
selected_script="res://scripts/game.gd"
open_scripts=["res://scripts/audio_controller.gd", "res://scripts/bullet.gd", "res://scripts/game.gd", "res://scripts/game_data.gd", "res://scripts/gun.gd", "res://scripts/level_up.gd", "res://scripts/mob.gd", "res://scripts/mob_data.gd", "res://scripts/player.gd", "res://scripts/ui.gd"]
selected_script="res://scripts/ui.gd"
open_help=[]
script_split_offset=200
list_split_offset=0

@ -7,3 +7,8 @@ res://scenes/tree.tscn
res://scripts/gun.gd
res://scripts/game.gd
res://scripts/player.gd
res://scripts/mob.gd
res://scripts/mob_data.gd
res://scripts/game_data.gd
res://scripts/ui.gd
res://scripts/level_up.gd

@ -189,4 +189,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([])
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/LevelUp/LevelUpTimer")])

@ -1,5 +1,5 @@
[folding]
node_unfolds=[NodePath("."), PackedStringArray("Ordering", "Transform"), NodePath("AudioController"), PackedStringArray("Transform"), NodePath("Map"), PackedStringArray("Layer", "Follow Viewport"), 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")]
node_unfolds=[NodePath("."), PackedStringArray("Ordering", "Transform"), NodePath("AudioController"), PackedStringArray("Transform"), NodePath("Map"), PackedStringArray("Layer", "Follow Viewport"), 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("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"), NodePath("UI/GameOver"), PackedStringArray("Layer"), NodePath("UI/GameOver/ColorRect"), PackedStringArray("Layout"), NodePath("UI/GameOver/ColorRect/Label"), PackedStringArray("Layout", "Theme Overrides")]
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=[]

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

@ -189,4 +189,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([])
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/LevelUp/LevelUpTimer")])

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

@ -0,0 +1,3 @@
[folding]
sections_unfolded=PackedStringArray()

@ -189,4 +189,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([])
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/LevelUp/LevelUpTimer")])

@ -7,7 +7,7 @@ use_advanced_connections=false
presets=[Color(0, 0.478431, 0.764706, 1), Color(0.0627451, 0.698039, 0.937255, 1), Color(0.0235294, 0.113725, 0.329412, 1), Color(0.811765, 0.866667, 1, 1), Color(0.423529, 0.172549, 0.854902, 1), Color(0.552941, 0.0980392, 0.843137, 1), Color(0.156863, 0.0784314, 0.305882, 1), Color(0.921569, 0.878431, 1, 1), Color(0.768627, 0.113725, 0.239216, 1), Color(1, 0.254902, 0.490196, 1), Color(0.45098, 0.152941, 0.360784, 1), Color(1, 0.858824, 0.956863, 1), Color(1, 0.717647, 0.188235, 1), Color(1, 0.835294, 0, 1), Color(0.870588, 0.313726, 0.168627, 1), Color(1, 0.92549, 0.788235, 1), Color(0.388235, 0.8, 0.372549, 1), Color(0.623529, 0.866667, 0.317647, 1), Color(0.0823529, 0.34902, 0.247059, 1), Color(0.866667, 1, 0.94902, 1), Color(0.427451, 0.239216, 0.172549, 1), Color(0.690196, 0.341176, 0.215686, 1), Color(0.415686, 0.0980392, 0, 1), Color(1, 0.890196, 0.890196, 1), Color(0.792157, 0.792157, 0.792157, 1), Color(1, 1, 1, 1), Color(0.152941, 0.168627, 0.188235, 1), Color(0.952941, 0.972549, 0.996078, 1)]
picker_shape=3
recent_presets=PackedColorArray(0.552941, 0.0980392, 0.843137, 1, 0.768627, 0.113725, 0.239216, 1, 0.876766, 0.156918, 0.285244, 1, 0.868575, 0.144554, 0.388966, 1, 0.145098, 0.145098, 0.145098, 1, 0.337255, 0.619608, 1, 1, 0.133333, 0.14902, 0.168627, 1, 0.145098, 0.145098, 0.145098, 1, 0.337255, 0.619608, 1, 1)
recent_presets=PackedColorArray(0.768627, 0.113725, 0.239216, 1, 0.876766, 0.156918, 0.285244, 1, 0.868575, 0.144554, 0.388966, 1, 0.145098, 0.145098, 0.145098, 1, 0.337255, 0.619608, 1, 1, 0.133333, 0.14902, 0.168627, 1, 0.145098, 0.145098, 0.145098, 1, 0.337255, 0.619608, 1, 1, 0, 0, 0, 0.392157)
[dialog_bounds]
@ -20,7 +20,7 @@ search_help=Rect2(3200, 360, 1280, 720)
[recent_files]
scenes=["res://characters/slime/slime.tscn", "res://scenes/boss.tscn", "res://scenes/game.tscn", "res://scenes/player.tscn", "res://scenes/gun.tscn", "res://player.tscn", "res://mob.tscn", "res://gun.tscn", "res://game.tscn", "res://tree.tscn"]
scripts=["res://scripts/game.gd", "res://scripts/mob.gd", "res://scripts/gun.gd", "res://scripts/ui.gd", "Color", "CanvasItem", "res://scripts/bullet.gd", "res://scripts/audio_controller.gd", "res://scripts/player.gd", "ColorRect"]
scripts=["CanvasLayer", "res://scripts/level_up.gd", "res://scripts/game_data.gd", "res://scripts/mob_data.gd", "res://scripts/game.gd", "res://scripts/mob.gd", "res://scripts/gun.gd", "res://scripts/ui.gd", "Color", "CanvasItem"]
[script_setup]

@ -73,11 +73,11 @@ state={
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 39,
"column": 22,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 55,
"scroll_position": 46.0,
"row": 27,
"scroll_position": 15.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
@ -101,10 +101,10 @@ state={
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 8,
"column": 18,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 31,
"row": 11,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"
@ -126,12 +126,54 @@ state={
[res://scripts/ui.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 25,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 27,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
[res://scripts/mob_data.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 18,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 11,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
[res://scripts/game_data.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 0,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 16,
"scroll_position": 0.0,
"selection": false,
"syntax_highlighter": "GDScript"
}
[res://scripts/level_up.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 19,
"folded_lines": Array[int]([]),
"h_scroll_position": 0,
"row": 4,
"scroll_position": 0.0,
"selection": false,

@ -189,4 +189,4 @@ Game={
"hide_selection": false,
"select_mode": 0
}
selected_nodes=Array[NodePath]([])
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/LevelUp/LevelUpTimer")])

@ -1,5 +1,5 @@
list=Array[Dictionary]([{
"base": &"RefCounted",
"base": &"Resource",
"class": &"GameData",
"icon": "",
"language": &"GDScript",

Binary file not shown.

@ -1,4 +1,4 @@
[gd_scene load_steps=14 format=3 uid="uid://b8umwsq7ccbbo"]
[gd_scene load_steps=15 format=3 uid="uid://b8umwsq7ccbbo"]
[ext_resource type="PackedScene" uid="uid://dauqd5gexcbgf" path="res://scenes/player.tscn" id="1_80nbo"]
[ext_resource type="Script" uid="uid://d4esu7gq460l7" path="res://scripts/game.gd" id="1_fc0e3"]
@ -8,6 +8,7 @@
[ext_resource type="AudioStream" uid="uid://b27pkgw38f0p6" path="res://sounds/745184__mrechobot__death2.wav" id="5_j5wjh"]
[ext_resource type="AudioStream" uid="uid://sjcesmi0xjef" path="res://sounds/697867__nfsmaster821__player_death_ui_show.wav" id="7_eow3j"]
[ext_resource type="AudioStream" uid="uid://beebg84wvxii" path="res://sounds/415804__sunsai__mushroom-background-music.wav" id="9_vef74"]
[ext_resource type="Script" uid="uid://lqaxhb3s3y2h" path="res://scripts/level_up.gd" id="10_kvpfn"]
[ext_resource type="Script" uid="uid://dvwfjjf35py4i" path="res://scripts/ui.gd" id="10_vtaks"]
[sub_resource type="Curve2D" id="Curve2D_feb5d"]
@ -101,34 +102,6 @@ position = Vector2(-957, -568)
stream = ExtResource("9_vef74")
autoplay = true
[node name="GameOver" type="CanvasLayer" parent="."]
unique_name_in_owner = true
visible = false
[node name="ColorRect" type="ColorRect" parent="GameOver"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.564706)
[node name="Label" type="Label" parent="GameOver/ColorRect"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -43.5
offset_top = -11.5
offset_right = 43.5
offset_bottom = 11.5
grow_horizontal = 2
grow_vertical = 2
theme_override_font_sizes/font_size = 156
text = "Game Over"
[node name="UI" type="CanvasLayer" parent="."]
script = ExtResource("10_vtaks")
@ -180,10 +153,72 @@ unique_name_in_owner = true
layout_mode = 2
text = "Mobs Killed: 0"
[node name="GameOver" type="CanvasLayer" parent="UI"]
unique_name_in_owner = true
visible = false
[node name="ColorRect" type="ColorRect" parent="UI/GameOver"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.564706)
[node name="Label" type="Label" parent="UI/GameOver/ColorRect"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -43.5
offset_top = -11.5
offset_right = 43.5
offset_bottom = 11.5
grow_horizontal = 2
grow_vertical = 2
theme_override_font_sizes/font_size = 156
text = "Game Over"
[node name="LevelUp" type="CanvasLayer" parent="UI"]
unique_name_in_owner = true
visible = false
script = ExtResource("10_kvpfn")
[node name="ColorRect" type="ColorRect" parent="UI/LevelUp"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.392157)
[node name="Label" type="Label" parent="UI/LevelUp/ColorRect"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -43.5
offset_top = -11.5
offset_right = 43.5
offset_bottom = 11.5
grow_horizontal = 2
grow_vertical = 2
theme_override_font_sizes/font_size = 156
text = "Level Up"
[node name="LevelUpTimer" type="Timer" parent="UI/LevelUp"]
unique_name_in_owner = true
[connection signal="boss" from="." to="." method="spawn_boss"]
[connection signal="game_over" from="." to="AudioController" method="_on_game_over"]
[connection signal="game_over" from="." to="UI" method="_on_game_over"]
[connection signal="level_up" from="." to="." method="_on_level_up"]
[connection signal="level_up" from="." to="Player" method="_on_game_level_up"]
[connection signal="level_up" from="." to="UI" method="_on_level_up"]
[connection signal="update_ui" from="." to="UI" method="_on_update_ui"]
[connection signal="timeout" from="SpawnMobTimer" to="." method="spawn_mob"]
[connection signal="health_depleted" from="Player" to="." method="_on_player_health_depleted"]
@ -191,3 +226,4 @@ text = "Mobs Killed: 0"
[connection signal="player_takes_damage" from="Player" to="AudioController" method="_on_player_takes_damage"]
[connection signal="shooted" from="Player" to="AudioController" method="_on_gun_shooted"]
[connection signal="finished" from="Player/DeathSound" to="." method="_on_death_sound_finished"]
[connection signal="timeout" from="UI/LevelUp/LevelUpTimer" to="UI/LevelUp" method="_on_level_up_timer_timeout"]

@ -10,7 +10,6 @@ const TREE = preload("res://scenes/tree.tscn")
const BOSS = preload("res://scenes/boss.tscn")
@onready var path_follow_2d: PathFollow2D = %PathFollow2D
@onready var game_over_layer: CanvasLayer = %GameOver
@onready var game_over_sound: AudioStreamPlayer2D = %GameOverSound
@onready var background_color: ColorRect = %BackgroundColor
@onready var spawn_mob_timer: Timer = %SpawnMobTimer
@ -23,7 +22,7 @@ const GameDataResource = preload("res://scripts/game_data.gd")
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 game_data = GameDataResource.new(0, 3, 0, 3, 0)
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
@ -40,7 +39,6 @@ func spawn_mob() -> void:
add_child(new_mob)
func _on_player_health_depleted() -> void:
game_over_layer.visible = true
game_over.emit()
func _on_death_sound_finished() -> void:
@ -56,19 +54,17 @@ func randomly_spawn_trees(tree_count: int) -> void:
func _on_mob_died(mob_xp: int) -> void:
game_data.kill_count += 1
game_data.xp += mob_xp
print("XP: " + str(game_data.xp) + "/" + str(game_data.xp_next_level))
if game_data.xp >= game_data.xp_next_level:
game_data.xp = game_data.xp - game_data.xp_next_level
game_data.xp_next_level *= 1.5
game_data.level += 1
level_up.emit()
print("Level up to " + str(game_data.level))
if game_data.level >= game_data.boss_level:
game_data.boss_level += game_data.boss_level * 1.1
boss.emit()
update_ui_data()
func spawn_boss() -> void:
print("Spawn Boss")
var new_boss = BOSS.instantiate()
new_boss.mob_data = MobDataResource.new(10, 50, 20)
path_follow_2d.progress_ratio = randf()

@ -1,3 +1,5 @@
extends Resource
class_name GameData
var xp: int
@ -7,8 +9,8 @@ var boss_level: int
var kill_count: int
func _init(init_xp: int, init_xp_next_level: int, init_level: int, init_boss_level: int, init_kill_count: int) -> void:
self.xp = init_xp
self.xp_next_level = init_xp_next_level
self.level = init_level
self.boss_level = init_boss_level
self.kill_count = init_kill_count
self.xp = init_xp
self.xp_next_level = init_xp_next_level
self.level = init_level
self.boss_level = init_boss_level
self.kill_count = init_kill_count

@ -0,0 +1,10 @@
extends CanvasLayer
@onready var level_up_timer: Timer = %LevelUpTimer
func show_level_up() -> void:
visible = true
level_up_timer.start()
func _on_level_up_timer_timeout() -> void:
visible = false

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

@ -6,14 +6,10 @@ signal mob_died(xp: int)
@onready var explosion_sound: AudioStreamPlayer2D = %ExplosionSound
@onready var take_damage_sound: AudioStreamPlayer2D = %TakeDamageSound
const SMOKE_EXPLOSION = preload("res://smoke_explosion/smoke_explosion.tscn")
@onready var player: Node2D = get_node("/root/Game/Player")
# Import the MobData class
const MobDataScript = preload("res://scripts/mob_data.gd")
# Create an instance of MobData
@export var mob_data: MobData = MobDataScript.new(2, 100, 1)
@onready var player: Node2D = get_node("/root/Game/Player")
var mob_data: MobData = MobDataScript.new(2, 100, 1)
func _ready() -> void:
animation_player.play("walk")

@ -2,11 +2,11 @@ extends Resource
class_name MobData
@export var health: int
@export var speed: float
@export var xp: int
var health: int
var speed: float
var xp: int
func _init(init_health: int = 2, init_speed: float = 100.0, init_xp: int = 1) -> void:
self.health = init_health
self.speed = init_speed
self.xp = init_xp
self.health = init_health
self.speed = init_speed
self.xp = init_xp

@ -1,9 +1,6 @@
extends CanvasLayer
# Import the UIData class
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
@ -11,6 +8,8 @@ var ui_data = UIDataClass.new(0, 3, 1, 3, 0)
@onready var level_label: Label = %LevelLabel
@onready var level_bar: ProgressBar = %LevelBar
@onready var kills: Label = %Kills
@onready var game_over: CanvasLayer = %GameOver
@onready var level_up: CanvasLayer = %LevelUp
func _on_update_ui(data: UIDataClass) -> void:
xp_label.text = "XP: " + str(data.xp) + "/" + str(data.xp_next_level)
@ -20,3 +19,10 @@ func _on_update_ui(data: UIDataClass) -> void:
level_bar.max_value = data.boss_level
level_bar.value = data.level
kills.text = "Mobs killed: " + str(data.kill_count)
func _on_game_over() -> void:
game_over.visible = true
get_tree().paused = true
func _on_level_up() -> void:
level_up.show_level_up()