using System; using System.Collections.Generic; using RobotAndDonkey.Game.Data; using RobotAndDonkey.Game.Execution.Results; using RobotAndDonkey.Game.GameState; using RobotAndDonkey.Game.Intents; namespace RobotAndDonkey.Game.Modifiers; public record GravityModifier(EModifierDuration Duration) : Modifier(EModifierKind.Robot, EModifierId.Gravity, Duration) { protected override GravityModifier CreateInstance() => new(Duration); public override void OnAdded(Entity owner, List newIntents) { newIntents.Add(new ModifyCurrency(new(0, -Balancing.Instance.GravityMaxCarryPenalty, 0, 0, 0, 0))); } public override void Before(Guid requestId, ReadOnlySpan intents, CoreLoop coreLoop, Entity owner, List newIntents, List results) { foreach (var intent in intents) { if (intent is Move) intent.EnergyCost += Balancing.Instance.GravityExtraMoveCost; } } public override void OnRemoved(Entity owner, List newIntents) { newIntents.Add(new ModifyCurrency(new(0, Balancing.Instance.GravityMaxCarryPenalty, 0, 0, 0, 0))); } public override string ToolTip => $"Gravity: −{Balancing.Instance.GravityMaxCarryPenalty} Max Carry; Move costs +{Balancing.Instance.GravityExtraMoveCost} energy (temporary)."; }