コード例 #1
0
    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);
    }
コード例 #2
0
    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);
        }
    }