Refactored a bit. Created 'Level' class; added UI to each level.
This commit is contained in:
1 parent
09a6140d15
commit
84d09120b2
66 files changed
+384
-165
No files matched your search
+41
-29
@@ -1,30 +1,46 @@
|
||||
extends Node2D
|
||||
|
||||
var coins_collected : int = 0
|
||||
var total_coins : int = 0
|
||||
var levels = ["res://scenes/level_1.tscn", "res://scenes/level_2.tscn", "res://scenes/level_3.tscn"]
|
||||
var timers = [10, 15, 20]
|
||||
var time_available : int = 0
|
||||
var current_level = 0
|
||||
var timer = Timer.new()
|
||||
## Autoload GameController object for handling game logic
|
||||
|
||||
## Signals
|
||||
signal level_changed(level)
|
||||
signal destroyed(body)
|
||||
signal player_damaged(health, max_health)
|
||||
signal player_death
|
||||
# Save/load
|
||||
signal game_loaded(stashed_data)
|
||||
signal game_saved(level, time_remaining, player_health, enemies_dictionary)
|
||||
signal timer_updated(time_remaining)
|
||||
# Player health
|
||||
signal player_damaged(health, max_health)
|
||||
signal player_death
|
||||
# Other
|
||||
signal coin_collected(coins_remaining)
|
||||
signal destroyed(body)
|
||||
signal level_changed(level)
|
||||
signal timer_updated(time_remaining)
|
||||
|
||||
## Member variables
|
||||
# Coins
|
||||
var coins_collected : int = 0
|
||||
var total_coins : int = 0
|
||||
# Levels
|
||||
var level_names : Array = DirAccess.open("res://scenes/levels").get_files()
|
||||
var levels : Array
|
||||
var current_level = 0
|
||||
# Save/load
|
||||
var stash_data : Dictionary = {}
|
||||
# Timers
|
||||
var timers = [10, 15, 20]
|
||||
var time_available : int = 0
|
||||
var timer = Timer.new()
|
||||
# Characters
|
||||
var enemy_stats : CharacterStats
|
||||
var player_stats : CharacterStats
|
||||
var enemies_dict : Dictionary = {}
|
||||
var player_current_health : int = 0
|
||||
var stash_data : Dictionary = {}
|
||||
|
||||
func _ready() -> void:
|
||||
# test file loading from folder
|
||||
print_debug("Raw level names: " + str(level_names))
|
||||
for level_name in level_names:
|
||||
var level_path = "res://scenes/levels/" + level_name
|
||||
levels.append(level_path)
|
||||
print_debug("Adjusted level names: " + str(levels))
|
||||
# load in characters
|
||||
enemy_stats = load("res://resources/slime_stats.tres")
|
||||
player_stats = load("res://resources/player_stats.tres")
|
||||
@@ -48,8 +64,6 @@ func second_counter() -> void:
|
||||
timer_updated.emit(time_available)
|
||||
if time_available <= 0:
|
||||
print_debug("You ran out of time! Emitting level_changed signal")
|
||||
#get_tree().call_deferred("change_scene_to_file", levels[current_level])
|
||||
#await get_tree().create_timer(1.0).timeout
|
||||
level_changed.emit(levels[current_level])
|
||||
|
||||
func reset() -> void:
|
||||
@@ -57,17 +71,7 @@ func reset() -> void:
|
||||
enemies_dict.clear()
|
||||
player_current_health = player_stats["starting_health"]
|
||||
time_available = timers[current_level]
|
||||
print_debug("You have %s seconds to find all the coins" % str(time_available))
|
||||
|
||||
func _on_trigger_fired(intent: Variant, body: PhysicsBody2D) -> void:
|
||||
print("Game controller knows %s trigger fired " % intent)
|
||||
match intent:
|
||||
"destroy":
|
||||
print("Destroy this thing!")
|
||||
if body is RigidBody2D:
|
||||
destroyed.emit(body)
|
||||
"powerup":
|
||||
print("Power this thing up!")
|
||||
|
||||
func on_coin_collected(_body, coin) -> void:
|
||||
print_debug("GC knows coin collected")
|
||||
@@ -80,13 +84,11 @@ func set_total_coins(value) -> void:
|
||||
coin_collected.emit(value)
|
||||
print_debug("Setting coin total to %s" % str(value))
|
||||
if value == 0:
|
||||
# You won!
|
||||
print_debug("You beat Level %s!" % levels[current_level])
|
||||
current_level += 1
|
||||
if current_level >= levels.size():
|
||||
current_level = 0
|
||||
#await get_tree().create_timer(1.0).timeout
|
||||
level_changed.emit(levels[current_level])
|
||||
#total_coins = value
|
||||
print_debug("There are %s coins in the level" % str(value))
|
||||
|
||||
func on_player_slimed(_body, slime) -> void:
|
||||
@@ -152,3 +154,13 @@ func stash_game(stash) -> void:
|
||||
func set_player_health(value: int) -> void:
|
||||
print_debug("Setting player health to %s" % str(value))
|
||||
player_current_health = value
|
||||
|
||||
#func _on_trigger_fired(intent: Variant, body: PhysicsBody2D) -> void:
|
||||
#print("Game controller knows %s trigger fired "change_scene % intent)
|
||||
#match intent:
|
||||
#"destroy":
|
||||
#print("Destroy this thing!")
|
||||
#if body is RigidBody2D:
|
||||
#destroyed.emit(body)
|
||||
#"powerup":
|
||||
#print("Power this thing up!")
|
||||
@@ -0,0 +1,21 @@
|
||||
class_name Level
|
||||
extends Node2D
|
||||
## Documentation comments
|
||||
|
||||
## Signals
|
||||
## Enums
|
||||
## Constants
|
||||
## @export variables
|
||||
## Regular variables
|
||||
## @onready variables
|
||||
|
||||
## Overridden built-in virtual methods
|
||||
#func _init() -> void:
|
||||
#func _enter_tree() -> void:
|
||||
#func _ready() -> void:
|
||||
#func _process(delta: float) -> void:
|
||||
#func _physics_process(delta: float) -> void:
|
||||
## Remaining virtual methods
|
||||
## Overridden custom methods
|
||||
## Remaining methods
|
||||
## Subclasses
|
||||
@@ -0,0 +1 @@
|
||||
uid://djv8gud535in5
|
||||
@@ -1,5 +1,6 @@
|
||||
class_name SceneManager
|
||||
extends Node2D
|
||||
## Handles adding and removing scenes, building levels
|
||||
|
||||
var bullet = preload("res://scenes/bullet.tscn")
|
||||
var coin_scene = preload("res://scenes/coin.tscn")
|
||||
@@ -13,12 +14,18 @@ var total_allowed_bullets : int = 7
|
||||
@onready var crates: Node = $"../Crates"
|
||||
@onready var enemies: Node = $"../Enemies"
|
||||
@onready var player: Player = $"../Player"
|
||||
@onready var ui: UI = $"../CanvasLayer/UI"
|
||||
@onready var ui: UI = $"../UILayer/UI"
|
||||
|
||||
func _ready() -> void:
|
||||
GameController.reset()
|
||||
build_level()
|
||||
|
||||
|
||||
func _on_world_boundary_body_entered(body: Node2D) -> void:
|
||||
if body is Player:
|
||||
var current_scene = get_tree()
|
||||
current_scene.call_deferred("reload_current_scene")
|
||||
|
||||
func build_level() -> void:
|
||||
if coins:
|
||||
update_coins()
|
||||
@@ -26,7 +33,8 @@ func build_level() -> void:
|
||||
var _total_enemies : int = 0
|
||||
if enemies:
|
||||
update_enemies()
|
||||
# Wire up signals from GameController
|
||||
# Wire up signals
|
||||
# GameController
|
||||
GameController.level_changed.connect(change_scene)
|
||||
GameController.destroyed.connect(destroy)
|
||||
GameController.game_saved.connect(on_game_saved)
|
||||
@@ -34,9 +42,11 @@ func build_level() -> void:
|
||||
GameController.player_damaged.connect(player.handle_damage)
|
||||
GameController.player_damaged.connect(ui.update_health)
|
||||
GameController.player_death.connect(player.handle_death)
|
||||
player.player_died.connect(GameController.handle_player_death)
|
||||
GameController.timer_updated.connect(ui.update_timer)
|
||||
GameController.coin_collected.connect(ui.update_coins)
|
||||
# Player
|
||||
player.player_died.connect(GameController.handle_player_death)
|
||||
|
||||
|
||||
func update_enemies() -> void:
|
||||
var total_enemies : int = 0
|
||||
@@ -85,10 +95,6 @@ func bullet_factory() -> Bullet:
|
||||
bullet_array.push_front(my_bullet)
|
||||
return my_bullet
|
||||
|
||||
func _on_world_boundary_body_entered(body: Node2D) -> void:
|
||||
if body is Player:
|
||||
var current_scene = get_tree()
|
||||
current_scene.call_deferred("reload_current_scene")
|
||||
|
||||
func change_scene(level) -> void:
|
||||
print_debug("Changing scene to level %s" % level)
|
||||
|
||||
Reference in new issue
Block a user