Inverter
The inverter task will invert the return value of the child task after it has finished executing. If the child returns success, the inverter task will return failure. If the child returns failure, the inverter task will return success.
将子Task的状态取反,也就是本来成功的改成失败,本来失败的改成成功。那如果是running呢?不变。注意看Decorate函数。
public class Inverter : Decorator
{
// The status of the child after it has finished running.
private TaskStatus executionStatus = TaskStatus.Inactive;
public override bool CanExecute()
{
// Continue executing until the child task returns success or failure.
return executionStatus == TaskStatus.Inactive || executionStatus == TaskStatus.Running;
}
public override void OnChildExecuted(TaskStatus childStatus)
{
// Update the execution status after a child has finished running.
executionStatus = childStatus;
}
public override TaskStatus Decorate(TaskStatus status)
{
// Invert the task status.
if (status == TaskStatus.Success) {
return TaskStatus.Failure;
} else if (status == TaskStatus.Failure) {
return TaskStatus.Success;
}
return status;
}
public override void OnEnd()
{
// Reset the execution status back to its starting values.
executionStatus = TaskStatus.Inactive;
}
}