change to seperate classes

master
Sascha 2025-01-05 11:30:32 +07:00
parent 4e8e37867d
commit 77cbbfe7af
5 changed files with 83 additions and 28 deletions

@ -1 +1,13 @@
list=Array[Dictionary]([])
list=Array[Dictionary]([{
"base": &"RefCounted",
"class": &"GameData",
"icon": "",
"language": &"GDScript",
"path": "res://scripts/game_data.gd"
}, {
"base": &"RefCounted",
"class": &"UIData",
"icon": "",
"language": &"GDScript",
"path": "res://scripts/ui_data.gd"
}])

@ -3,7 +3,7 @@ extends Node2D
signal game_over
signal level_up()
signal boss
signal update_ui(game_data: Dictionary)
signal update_ui(ui_data: Dictionary)
const MOB = preload("res://scenes/mob.tscn")
const TREE = preload("res://scenes/tree.tscn")
@ -18,19 +18,24 @@ const BOSS = preload("res://scenes/boss.tscn")
@export var map_size := Vector2(8000, 8000)
@export var tree_density := 100000
var game_data := {
"xp": 0,
"xp_next_level": 3,
"level": 1,
"boss_level": 3,
"kill_count": 0
}
# Import the GameData and UIData classes
const GameData = preload("res://scripts/game_data.gd")
const UIData = preload("res://scripts/ui_data.gd")
var game_data = GameData.new(0, 3, 1, 3, 0)
var ui_data = UIData.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(game_data)
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
})
func spawn_mob() -> void:
var new_mob = MOB.instantiate()
@ -49,7 +54,7 @@ func _on_death_sound_finished() -> void:
func randomly_spawn_trees(tree_count: int) -> void:
for i in range(tree_count):
var new_tree = TREE.instantiate()
new_tree.position = Vector2(randi_range(-map_size.x / 2, map_size.x / 2), randi_range(-map_size.y / 2, map_size.y / 2))
new_tree.position = Vector2(randi_range(int(-map_size.x / 2), int(map_size.x / 2)), randi_range(int(-map_size.y / 2), int(map_size.y / 2)))
new_tree.modulate = Color(randf(), randf(), randf())
add_child(new_tree)
@ -60,15 +65,19 @@ func _on_mob_died(mob_xp: int) -> void:
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
game_data.level += 1
level_up.emit()
print("Level up to " + str(game_data.level))
if game_data.level >= game_data.boss_level:
boss.emit()
game_data.level = game_data.level - game_data.boss_level
game_data.boss_level *= 2
update_ui.emit(game_data)
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
})
func spawn_boss() -> void:
print("Spawn Boss")
var new_boss = BOSS.instantiate()

@ -0,0 +1,14 @@
class_name GameData
var xp: int
var xp_next_level: int
var level: int
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

@ -2,12 +2,12 @@ extends CharacterBody2D
signal mob_died(xp: int)
@onready var animation_player = %AnimationPlayer
@onready var animation_player: AnimationPlayer = %AnimationPlayer
@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 = get_node("/root/Game/Player")
@onready var player: Node2D = get_node("/root/Game/Player")
@export var mob_data := {
"health": 2,
@ -27,14 +27,20 @@ func _physics_process(_delta: float) -> void:
func take_damage() -> void:
mob_data.health -= 1
if mob_data.health <= 0:
var smoke = SMOKE_EXPLOSION.instantiate()
get_parent().add_child(smoke)
smoke.global_position = global_position
explosion_sound.play()
await explosion_sound.finished
mob_died.emit(mob_data.xp)
queue_free()
die()
else:
take_damage_sound.play()
animation_player.play("hurt")
animation_player.queue("walk")
hurt()
func die() -> void:
var smoke = SMOKE_EXPLOSION.instantiate()
get_parent().add_child(smoke)
smoke.global_position = global_position
explosion_sound.play()
await explosion_sound.finished
mob_died.emit(mob_data.xp)
queue_free()
func hurt() -> void:
take_damage_sound.play()
animation_player.play("hurt")
animation_player.queue("walk")

@ -0,0 +1,14 @@
class_name UIData
var xp: int
var xp_next_level: int
var level: int
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