public void EnqueueBase(ISimpleTask task) { _baseQueue.Enqueue(task); _game.Log(LogLevel.DEBUG, BlockType.TRIGGER, "TaskQueue", !_game.Logging ? "" : $"{task.GetType().Name} is Enqueued in 0th stack"); }
public static IEnumerable <string> GetExamples(this ISimpleTask simpleTask) { var type = simpleTask.GetType(); var attributes = type.GetCustomAttributes(false).OfType <TaskExampleAttribute>(); if (attributes.Any()) { return(attributes.Select(a => a.Example)); } return(null); }
public static string GetName(this ISimpleTask simpleTask) { var type = simpleTask.GetType(); var attribute = type.GetCustomAttributes(false).OfType <TaskNameAttribute>().FirstOrDefault(); if (attribute != null) { return(attribute.Name); } return(type.Name); }
public void Enqueue(ISimpleTask task) { if (_standbyEvent != null) { _eventStack.Push(_standbyEvent.Value); _standbyEvent = null; _eventCreated = true; } CurrentQueue.Enqueue(task); _game.Log(LogLevel.DEBUG, BlockType.TRIGGER, "TaskQueue", !_game.Logging ? "" : $"{task.GetType().Name} is Enqueued in {_eventStack.Count}th stack"); }
public TaskState Process() { CurrentTask = TaskList.OrderBy(p => p.Source.OrderOfPlay).First(); TaskList.Remove(CurrentTask); Game.Log(LogLevel.VERBOSE, BlockType.TRIGGER, "TaskQueue", $"LazyTask[{CurrentTask.Source}]: '{CurrentTask.GetType().Name}' is processed!" + $"'{CurrentTask.Source.Card.Text?.Replace("\n", " ")}'"); // power block if (Game.History) { Game.PowerHistory.Add(PowerHistoryBuilder.BlockStart(BlockType.POWER, CurrentTask.Source.Id, "", -1, CurrentTask.Target?.Id ?? 0)); } TaskState success = CurrentTask.Process(); if (Game.History) { Game.PowerHistory.Add(PowerHistoryBuilder.BlockEnd()); } // reset between task execution Game.TaskStack.Reset(); //if (Game.Splits.Count == 0 && CurrentTask.Splits != null && CurrentTask.Splits.Count > 0) //{ // Log.Info($"Parallel-threading splits '{CurrentTask.Splits.Count}' starting now! [Info: {Game.Splits.Count}]"); // Game.Splits = CurrentTask.Splits; //} return(success); }
public void Execute(ISimpleTask task, Controller controller, IPlayable source, IPlayable target) { ISimpleTask clone = task.Clone(); clone.Game = controller.Game; clone.Controller = controller; clone.Source = source; clone.Target = target; Game.Log(LogLevel.VERBOSE, BlockType.TRIGGER, "TaskQueue", $"PriorityTask[{clone.Source}]: '{clone.GetType().Name}' is processed!" + $"'{clone.Source.Card.Text?.Replace("\n", " ")}'"); // power block if (controller.Game.History) { controller.Game.PowerHistory.Add(PowerHistoryBuilder.BlockStart(BlockType.POWER, source.Id, "", -1, target?.Id ?? 0)); } clone.Process(); if (controller.Game.History) { controller.Game.PowerHistory.Add(PowerHistoryBuilder.BlockEnd()); } Game.TaskStack.Reset(); }
public TaskState Process() { ISimpleTask currentTask = CurrentQueue.Dequeue(); CurrentTask = currentTask; //if (currentTask is StateTaskList tasks) // tasks.Stack = new TaskStack(_game); _game.Log(LogLevel.VERBOSE, BlockType.TRIGGER, "TaskQueue", !_game.Logging ? "" : $"LazyTask[{currentTask.Source}]: '{currentTask.GetType().Name}' is processed!" + $"'{currentTask.Source.Card.Text?.Replace("\n", " ")}'"); if (_game.History) { _game.PowerHistory.Add(PowerHistoryBuilder.BlockStart(currentTask.IsTrigger ? BlockType.TRIGGER : BlockType.POWER, currentTask.Source.Id, "", -1, currentTask.Target?.Id ?? 0)); } TaskState success = currentTask.Process(); if (_game.History) { _game.PowerHistory.Add(PowerHistoryBuilder.BlockEnd()); } // reset between task execution //_game.TaskStack.Reset(); CurrentTask = null; return(success); }