feat: Implement a skill pickup system with a new collectable type, event handling, and dedicated pickup objects.

This commit is contained in:
2026-01-31 17:12:57 +01:00
parent fda544d0f1
commit 425fa5b940
11 changed files with 145 additions and 2 deletions

View File

@@ -0,0 +1,44 @@
using Godot;
using Mr.BrickAdventures.Autoloads;
using Mr.BrickAdventures.scripts.Resources;
namespace Mr.BrickAdventures.scripts.Events;
/// <summary>
/// Handles skill collection events and unlocks skills via GameStateStore.
/// Skills are immediately activated but only persisted on level complete.
/// </summary>
public partial class SkillCollectHandler : Node
{
private SkillManager _skillManager;
public override void _Ready()
{
_skillManager = GetNode<SkillManager>(Constants.SkillManagerPath);
EventBus.Instance.SkillCollected += OnSkillCollected;
}
public override void _ExitTree()
{
if (EventBus.Instance != null)
{
EventBus.Instance.SkillCollected -= OnSkillCollected;
}
}
private void OnSkillCollected(SkillData skill, Vector2 position)
{
if (skill == null) return;
// Unlock in session (will be committed on level complete, lost on death)
GameStateStore.Instance?.UnlockSkillInSession(skill);
// Immediately activate the skill for the player
skill.IsActive = true;
skill.Level = 1;
_skillManager?.AddSkill(skill);
// Emit skill unlocked event for UI/achievements
EventBus.EmitSkillUnlocked(skill.Name, skill.Level);
}
}