示例#1
0
    public virtual async Task TakeAction(IActionFactory factory, SelfCtx ctx)
    {
        var oldActionGuid = CurrentActionId;      // capture old

        CurrentActionId = Guid.NewGuid();         // set new
        try {
            RemoveFromUnresolvedActions(factory); // removing first, so action can restore it if desired
            await factory.ActivateAsync(ctx);

            if (factory is IRecordLastTarget lastTargetRecorder)
            {
                await ActionTaken_ThisRound.InvokeAsync(new ActionTaken(factory, lastTargetRecorder.LastTarget));
            }
        } finally {
            CurrentActionId = oldActionGuid;  // restore
        }
        ctx.GameState.CheckWinLoss();         // @@@
    }