Refactor console and scene structure; update resource paths and add configuration handling
This commit is contained in:
17
scripts/achievements.gd
Normal file
17
scripts/achievements.gd
Normal file
@@ -0,0 +1,17 @@
|
||||
class_name Achievements
|
||||
extends Node
|
||||
|
||||
func unlock_achievement(achievement_name: String) -> bool:
|
||||
if not Steam.setAchievement(achievement_name):
|
||||
print("Failed to unlock achievement: ", achievement_name)
|
||||
return false
|
||||
|
||||
return true
|
||||
|
||||
|
||||
func reset_achievement(achievement_name: String) -> bool:
|
||||
if not Steam.clearAchievement(achievement_name):
|
||||
print("Failed to reset achievement: ", achievement_name)
|
||||
return false
|
||||
|
||||
return true
|
1
scripts/achievements.gd.uid
Normal file
1
scripts/achievements.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://deguukal87gcb
|
@@ -1,7 +1,7 @@
|
||||
class_name PeriodicShootingComponent
|
||||
class_name PeriodicShootingComponent
|
||||
extends Node
|
||||
|
||||
@export var bullet_scene: PackedScene = preload("res://objects/bullet.tscn")
|
||||
@export var bullet_scene: PackedScene = preload("res://objects/entities/bullet.tscn")
|
||||
@export var shoot_interval: float = 1.0
|
||||
@export var shoot_direction: Vector2 = Vector2.RIGHT
|
||||
@export var side_to_side_movement: SideToSideMovement
|
||||
@@ -45,4 +45,4 @@ func setup_timer() -> void:
|
||||
timer.one_shot = false
|
||||
timer.autostart = true
|
||||
timer.timeout.connect(on_timer_timeout)
|
||||
add_child(timer)
|
||||
add_child(timer)
|
||||
|
@@ -22,14 +22,17 @@ func try_unlock_skill(skill_data: SkillData) -> bool:
|
||||
return true
|
||||
|
||||
|
||||
func unlock_all_skills() -> void:
|
||||
var available_skills: Array[SkillData] = skill_manager.available_skills
|
||||
var skills: Array[String] = []
|
||||
|
||||
for skill in available_skills:
|
||||
skills.append(skill.name)
|
||||
|
||||
game_manager.unlock_skills(skills)
|
||||
skill_manager.apply_unlocked_skills()
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("unlock_skills"):
|
||||
var available_skills: Array[SkillData] = skill_manager.available_skills
|
||||
var skills: Array[String] = []
|
||||
|
||||
for skill in available_skills:
|
||||
skills.append(skill.name)
|
||||
|
||||
game_manager.unlock_skills(skills)
|
||||
skill_manager.apply_unlocked_skills()
|
||||
print("Unlocked skills: ", skills)
|
||||
unlock_all_skills()
|
134
scripts/console_management.gd
Normal file
134
scripts/console_management.gd
Normal file
@@ -0,0 +1,134 @@
|
||||
class_name ConsoleManagement
|
||||
extends Node
|
||||
|
||||
@export var player_health: HealthComponent
|
||||
@export var skill_unlocker: SkillUnlockerComponent
|
||||
@export var skill_manager: SkillManager
|
||||
|
||||
@onready var game_manager: GM = $"/root/GameManager"
|
||||
@onready var achievements: Achievements = $"/root/AchievementsManager"
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Console.pause_enabled = true
|
||||
Console.add_command("add_coins", console_add_coins, ["amount"], 1, "Add coins to the player.")
|
||||
Console.add_command("set_coins", console_set_coins, ["amount"], 1, "Set the player's coins.")
|
||||
Console.add_command("set_lives", console_set_lives, ["amount"], 1, "Set the player's lives.")
|
||||
Console.add_command("set_health", console_set_health, ["amount"], 1, "Set the player's health.")
|
||||
Console.add_command("unlock_skill", console_unlock_skill, ["skill_name"], 1, "Unlock a skill for the player.")
|
||||
Console.add_command("remove_skill", console_remove_skill, ["skill_name"], 1, "Remove a skill from the player.")
|
||||
Console.add_command("remove_all_skills", console_remove_all_skills, [], 0, "Remove all skills from the player.")
|
||||
Console.add_command("unlock_all_skills", console_unlock_all_skills, [], 0, "Unlock all skills for the player.")
|
||||
Console.add_command("unlock_achievement", console_unlock_achievement, ["achievement_name"], 1, "Unlock an achievement for the player.")
|
||||
Console.add_command("reset_achievement", console_reset_achievement, ["achievement_name"], 1, "Reset an achievement for the player.")
|
||||
|
||||
|
||||
func console_add_coins(amount: Variant) -> void:
|
||||
if not game_manager:
|
||||
return
|
||||
if not amount.is_valid_int():
|
||||
Console.print_error("Invalid amount: " + str(amount))
|
||||
return
|
||||
game_manager.add_coins(int(amount))
|
||||
Console.print_info("Added " + str(amount) + " coins.")
|
||||
|
||||
|
||||
func console_set_coins(amount: Variant) -> void:
|
||||
if not game_manager:
|
||||
return
|
||||
if not amount.is_valid_int():
|
||||
Console.print_error("Invalid amount: " + str(amount))
|
||||
return
|
||||
game_manager.set_coins(int(amount))
|
||||
Console.print_info("Set coins to " + str(amount))
|
||||
|
||||
|
||||
func console_set_lives(amount: Variant) -> void:
|
||||
if not game_manager:
|
||||
return
|
||||
if not amount.is_valid_int():
|
||||
Console.print_error("Invalid amount: " + str(amount))
|
||||
return
|
||||
game_manager.set_lives(int(amount))
|
||||
Console.print_info("Set lives to " + str(amount))
|
||||
|
||||
|
||||
func console_set_health(amount: Variant) -> void:
|
||||
if not player_health:
|
||||
return
|
||||
if not amount.is_valid_int():
|
||||
Console.print_error("Invalid amount: " + str(amount))
|
||||
return
|
||||
player_health.set_health(int(amount))
|
||||
Console.print_info("Set health to " + str(amount))
|
||||
|
||||
|
||||
func console_unlock_skill(skill_name: Variant) -> void:
|
||||
if not skill_manager or not skill_unlocker or not game_manager:
|
||||
return
|
||||
if not skill_name:
|
||||
Console.print_error("Invalid skill name: " + str(skill_name))
|
||||
return
|
||||
|
||||
game_manager.unlock_skill(skill_name)
|
||||
var skill_data: SkillData = skill_manager.get_skill_by_name(skill_name)
|
||||
if not skill_data:
|
||||
Console.print_error("Skill not found: " + str(skill_name))
|
||||
return
|
||||
skill_manager.add_skill(skill_data)
|
||||
Console.print_info("Unlocked skill: " + str(skill_name))
|
||||
|
||||
|
||||
func console_unlock_all_skills() -> void:
|
||||
if not skill_manager or not skill_unlocker or not game_manager:
|
||||
return
|
||||
|
||||
skill_unlocker.unlock_all_skills()
|
||||
Console.print_info("Unlocked all skills.")
|
||||
|
||||
|
||||
func console_remove_skill(skill_name: Variant) -> void:
|
||||
if not skill_manager or not skill_unlocker or not game_manager:
|
||||
return
|
||||
if not skill_name:
|
||||
Console.print_error("Invalid skill name: " + str(skill_name))
|
||||
return
|
||||
|
||||
game_manager.remove_skill(skill_name)
|
||||
skill_manager.remove_skill(skill_name)
|
||||
Console.print_info("Removed skill: " + str(skill_name))
|
||||
|
||||
|
||||
func console_remove_all_skills() -> void:
|
||||
if not skill_manager or not skill_unlocker or not game_manager:
|
||||
return
|
||||
|
||||
for skill_name in skill_manager.active_components.keys():
|
||||
game_manager.remove_skill(skill_name)
|
||||
skill_manager.remove_skill(skill_name)
|
||||
|
||||
|
||||
func console_unlock_achievement(achievement_name: Variant) -> void:
|
||||
if not achievement_name:
|
||||
Console.print_error("Invalid achievement name: " + str(achievement_name))
|
||||
return
|
||||
if not achievements:
|
||||
Console.print_error("Achievements manager not found.")
|
||||
return
|
||||
if not achievements.unlock_achievement(achievement_name):
|
||||
Console.print_error("Failed to unlock achievement: " + str(achievement_name))
|
||||
|
||||
Console.print_info("Unlocked achievement: " + str(achievement_name))
|
||||
|
||||
|
||||
func console_reset_achievement(achievement_name: Variant) -> void:
|
||||
if not achievement_name:
|
||||
Console.print_error("Invalid achievement name: " + str(achievement_name))
|
||||
return
|
||||
if not achievements:
|
||||
Console.print_error("Achievements manager not found.")
|
||||
return
|
||||
if not achievements.reset_achievement(achievement_name):
|
||||
Console.print_error("Failed to reset achievement: " + str(achievement_name))
|
||||
|
||||
Console.print_info("Reset achievement: " + str(achievement_name))
|
1
scripts/console_management.gd.uid
Normal file
1
scripts/console_management.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://8r1y8elyw7kt
|
@@ -103,6 +103,11 @@ func unlock_skill(skill_name: String) -> void:
|
||||
player_state["unlocked_skills"].append(skill_name)
|
||||
|
||||
|
||||
func remove_skill(skill_name: String) -> void:
|
||||
if is_skill_unlocked(skill_name):
|
||||
player_state["unlocked_skills"].erase(skill_name)
|
||||
|
||||
|
||||
func unlock_skills(skill_names: Array[String]) -> void:
|
||||
for skill_name in skill_names:
|
||||
unlock_skill(skill_name)
|
||||
|
99
scripts/input_settings.gd
Normal file
99
scripts/input_settings.gd
Normal file
@@ -0,0 +1,99 @@
|
||||
class_name InputSettings
|
||||
extends Control
|
||||
|
||||
@export var input_button_scene: PackedScene = preload("res://objects/ui/input_button.tscn")
|
||||
@export var action_list: Container
|
||||
@export var reset_to_default_button: Button
|
||||
|
||||
@export var input_actions: Dictionary = {
|
||||
'left': 'Move left',
|
||||
'right': 'Move right',
|
||||
'up': 'Move up',
|
||||
'down': 'Move down',
|
||||
'jump': 'Jump',
|
||||
'attack': 'Attack',
|
||||
'show_marketplace': "Toggle marketplace",
|
||||
}
|
||||
|
||||
var is_remapping: bool = false
|
||||
var action_to_remap = null
|
||||
var remapping_button = null
|
||||
var buttons: Array[Button] = []
|
||||
|
||||
@onready var config_file_handler = $'/root/ConfigFileHandler'
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
create_action_list()
|
||||
|
||||
if buttons.size() > 0:
|
||||
buttons[0].grab_focus()
|
||||
|
||||
if reset_to_default_button:
|
||||
reset_to_default_button.pressed.connect(on_reset_button_pressed)
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if is_remapping:
|
||||
if event is InputEventKey or (event is InputEventMouseButton and event.pressed) or event is InputEventJoypadButton:
|
||||
if event is InputEventMouseButton and event.double_click:
|
||||
event.double_click = false
|
||||
|
||||
InputMap.action_erase_events(action_to_remap)
|
||||
InputMap.action_add_event(action_to_remap, event)
|
||||
update_action_list(remapping_button, event)
|
||||
|
||||
is_remapping = false
|
||||
action_to_remap = null
|
||||
remapping_button = null
|
||||
|
||||
accept_event()
|
||||
|
||||
|
||||
func create_action_list() -> void:
|
||||
InputMap.load_from_project_settings()
|
||||
for item in action_list.get_children():
|
||||
item.queue_free()
|
||||
|
||||
for action in input_actions:
|
||||
var button := input_button_scene.instantiate() as Button
|
||||
var action_label := button.find_child("LabelAction") as Label
|
||||
var input_label := button.find_child("LabelInput") as Label
|
||||
action_label.text = input_actions[action]
|
||||
|
||||
var events := InputMap.action_get_events(action)
|
||||
if events.size() > 0:
|
||||
input_label.text = events[0].as_text().trim_suffix(" (Physical)")
|
||||
else:
|
||||
input_label.text = "None"
|
||||
|
||||
action_list.add_child(button)
|
||||
button.pressed.connect(on_input_button_pressed.bind(button, action))
|
||||
buttons.append(button)
|
||||
|
||||
|
||||
func on_input_button_pressed(button: Button, action) -> void:
|
||||
if is_remapping:
|
||||
return
|
||||
|
||||
is_remapping = true
|
||||
action_to_remap = action
|
||||
remapping_button = button
|
||||
button.find_child("LabelInput").text = "Press any key..."
|
||||
|
||||
|
||||
func update_action_list(button: Button, event: InputEvent) -> void:
|
||||
button.find_child("LabelInput").text = event.as_text().trim_suffix(" (Physical)")
|
||||
|
||||
|
||||
func on_reset_button_pressed() -> void:
|
||||
create_action_list()
|
||||
|
||||
|
||||
func save_settings() -> void:
|
||||
config_file_handler.settings_config.set_value("input_settings", "input_actions", input_actions)
|
||||
config_file_handler.settings_config.save(config_file_handler.SETTINGS_FILE_PATH)
|
||||
|
||||
|
||||
func load_settings() -> void:
|
||||
pass
|
1
scripts/input_settings.gd.uid
Normal file
1
scripts/input_settings.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dppwl7xie2mh
|
@@ -13,6 +13,7 @@ extends Node
|
||||
|
||||
var is_paused: bool = false
|
||||
var is_console_open: bool = false
|
||||
var settings_menu_instance: Control
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -42,6 +43,8 @@ func _ready() -> void:
|
||||
quit_button.pressed.connect(_on_quit_button_pressed)
|
||||
settings_button.pressed.connect(_on_settings_button_pressed)
|
||||
exit_to_menu_button.pressed.connect(_on_exit_to_menu_button_pressed)
|
||||
Console.console_opened.connect(_on_console_open)
|
||||
Console.console_closed.connect(_on_console_close)
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
@@ -57,6 +60,9 @@ func _input(event: InputEvent) -> void:
|
||||
|
||||
func _on_resume_button_pressed() -> void:
|
||||
pause_menu_control.hide()
|
||||
if settings_menu_instance:
|
||||
settings_menu_instance.queue_free()
|
||||
settings_menu_instance = null
|
||||
gm.resume_game()
|
||||
is_paused = false
|
||||
|
||||
@@ -71,9 +77,9 @@ func _on_settings_button_pressed() -> void:
|
||||
return
|
||||
|
||||
var settings_instance: Control = settings_menu.instantiate()
|
||||
get_tree().root.add_child(settings_instance)
|
||||
add_child(settings_instance)
|
||||
settings_instance.show()
|
||||
pause_menu_control.hide()
|
||||
settings_menu_instance = settings_instance
|
||||
gm.pause_game()
|
||||
is_paused = true
|
||||
|
||||
@@ -87,8 +93,8 @@ func _on_exit_to_menu_button_pressed() -> void:
|
||||
|
||||
|
||||
func _on_console_open():
|
||||
pass
|
||||
is_console_open = true
|
||||
|
||||
|
||||
func _on_console_close():
|
||||
pass
|
||||
is_console_open = false
|
||||
|
8
scripts/settings_menu.gd
Normal file
8
scripts/settings_menu.gd
Normal file
@@ -0,0 +1,8 @@
|
||||
class_name SettingsMenu
|
||||
extends Node
|
||||
|
||||
@export var input_settings_scene: PackedScene = preload("res://objects/ui/input_settings.tscn")
|
||||
@export var audio_settings_scene: PackedScene
|
||||
@export var display_settings_scene: PackedScene
|
||||
@export var gameplay_settings_scene: PackedScene
|
||||
@export var settings_menu_control: Control
|
1
scripts/settings_menu.gd.uid
Normal file
1
scripts/settings_menu.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c506rigcjlm6x
|
@@ -55,3 +55,10 @@ func apply_unlocked_skills() -> void:
|
||||
add_skill(skill_data)
|
||||
else:
|
||||
remove_skill(skill_data.name)
|
||||
|
||||
|
||||
func get_skill_by_name(skill_name: String) -> SkillData:
|
||||
for skill_data in available_skills:
|
||||
if skill_data.name == skill_name:
|
||||
return skill_data
|
||||
return null
|
||||
|
Reference in New Issue
Block a user