Refactor GameManager session state handling and add new components: CanBeLaunchedComponent, IceEffectComponent, JumpPadComponent, KillPlayerOutOfScreenComponent, KnockbackComponent, LifetimeComponent, MagneticSkillComponent, OutOfScreenComponent, PeriodicShootingComponent, PlayerDeathComponent, ProgressiveDamageComponent, ProjectileComponent, ProjectileInitComponent, RequirementComponent, ScoreComponent, ShipMovementComponent, ShipShooterComponent, and SideToSideMovementComponent

This commit is contained in:
2025-08-12 03:38:23 +02:00
parent f3aa2631f2
commit ef4d128869
28 changed files with 869 additions and 145 deletions

View File

@@ -0,0 +1,44 @@
using Godot;
using Mr.BrickAdventures.scripts.Resources;
namespace Mr.BrickAdventures.scripts.components;
public partial class RequirementComponent : Node
{
[Export] public CollectableType RequirementType { get; set; }
[Export] public int RequirementAmount { get; set; } = 1;
private int _currentAmount = 0;
private const string CollectableGroupName = "Collectables";
[Signal]
public delegate void RequirementMetEventHandler(CollectableType requirementType);
public override void _Ready()
{
var collectables = GetTree().GetNodesInGroup(CollectableGroupName);
foreach (var collectable in collectables)
{
var c = collectable.GetNodeOrNull<CollectableComponent>("CollectableComponent");
if (c != null && c.Data.Type == RequirementType)
{
c.Collected += OnCollected;
}
}
}
private void OnCollected(Variant amount, CollectableType type, Node2D body)
{
AddProgress(amount.As<int>());
}
private void AddProgress(int amount = 1)
{
_currentAmount += amount;
if (_currentAmount >= RequirementAmount)
{
EmitSignalRequirementMet(RequirementType);
}
}
}