49 lines
2.2 KiB
C#
49 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using RobotAndDonkey.Game.Cards;
|
|
using RobotAndDonkey.Game.Execution.Results;
|
|
using RobotAndDonkey.Game.GameState;
|
|
using RobotAndDonkey.Game.Modifiers;
|
|
|
|
namespace RobotAndDonkey.Game.Intents;
|
|
|
|
public class ModifyCard(Card card, EModifierId modifierId, EModifierDuration duration, ECardLocation location) : CardIntent(card)
|
|
{
|
|
public override void Run(Guid requestId, CoreLoop coreLoop, List<Intent> newIntents, List<Result> results)
|
|
{
|
|
Card.AddModifier(Create(ModifierId, Duration), newIntents);
|
|
results.Add(new ModifyCardResult(requestId, Card.DeepClone(), ModifierId, location));
|
|
|
|
base.Run(requestId, coreLoop, newIntents, results);
|
|
}
|
|
|
|
public override bool IsValid(CoreLoop coreLoop)
|
|
{
|
|
return base.IsValid(coreLoop) &&
|
|
ModifierId is EModifierId.Corrupt or EModifierId.Unreliable or EModifierId.RaceCondition or EModifierId.Throttled or EModifierId.Effective or EModifierId.Optimized or EModifierId.Efficient or EModifierId.Persistent &&
|
|
Card.Modifiers.All(m => m.Id != ModifierId);
|
|
}
|
|
|
|
public static Modifier Create(EModifierId id, EModifierDuration duration)
|
|
{
|
|
return id switch
|
|
{
|
|
EModifierId.Corrupt => new CorruptCardModifier(duration),
|
|
EModifierId.Unreliable => new UnreliableCardModifier(duration),
|
|
EModifierId.RaceCondition => new RaceConditionModifier(duration),
|
|
EModifierId.Throttled => new ThrottledModifier(duration),
|
|
EModifierId.Effective => new EffectiveModifier(duration),
|
|
EModifierId.Optimized => new OptimizedModifier(duration),
|
|
EModifierId.Efficient => new EfficientModifier(duration),
|
|
EModifierId.Persistent => new PersistentModifier(duration),
|
|
_ => throw new ArgumentOutOfRangeException()
|
|
};
|
|
}
|
|
|
|
public EModifierId ModifierId { get; set;} = modifierId;
|
|
|
|
public EModifierDuration Duration { get; set;} = duration;
|
|
|
|
public override string ToString() => $"Modify {Card.Name} with {ModifierId}, {Duration}, " + base.ToString();
|
|
} |