static public void Override(IFlexibleSpeedActionFactory factory, Phase phase, GameState gameState) { factory.OverrideSpeedBehavior = new TemporarySpeed(phase); Task Restore(GameState _) { factory.OverrideSpeedBehavior = null; return(Task.CompletedTask); } gameState.TimePasses_ThisRound.Push(Restore); }
public static async Task Execute(SelfCtx ctx) { var resultingSpeed = ctx.GameState.Phase; var originalSpeed = OriginalSpeed(resultingSpeed); var changeableFactories = ctx.Self.GetAvailableActions(originalSpeed).OfType <IFlexibleSpeedActionFactory>().ToArray(); var prompt = Prompt(resultingSpeed); IFlexibleSpeedActionFactory factory = (IFlexibleSpeedActionFactory)await ctx.Self.SelectFactory(prompt, changeableFactories, Present.Done); if (factory != null) { TemporarySpeed.Override(factory, resultingSpeed, ctx.GameState); await ctx.Self.TakeAction(factory, ctx); } }