protected override void OnEvaluating(ExpressionInfo expression, ITaskEngine taskEngine, Action <object> callback) { ExpressionInfo left = expression.Children[0]; ExpressionInfo right = expression.Children[1]; taskEngine.GetExpression(left.Code).Evaluate(left, taskEngine, lvalue => { taskEngine.GetExpression(right.Code).Evaluate(right, taskEngine, rvalue => { OnEvaluating(lvalue, rvalue, callback); }); }); }
public void Evaluate(ExpressionInfo expression, ITaskEngine taskEngine, Action <object> callback) { TaskInfo taskInfo = (TaskInfo)expression.Value; ExpressionInfo valueInfo = expression.Children[0]; ExpressionInfo outputInfo = expression.Children.Length > 1 ? expression.Children[1] : null; if (outputInfo == null) { outputInfo = new ExpressionInfo { Code = ExpressionCode.Value, Value = PrimitiveContract.Create(0) }; } IExpression valueExpression = taskEngine.GetExpression(valueInfo.Code); expression.IsEvaluating = true; valueExpression.Evaluate(valueInfo, taskEngine, value => { expression.IsEvaluating = false; int outputIndex = ((PrimitiveContract <int>)outputInfo.Value).Value; taskEngine.Memory.WriteOutput(taskInfo.Parent.TaskId, taskInfo.TaskId, outputIndex, value); callback(null); }); }
protected override void OnEvaluating(ExpressionInfo expression, IMatchPlayerView player, IMatchUnitAssetView unit, ITaskEngine taskEngine, Action <object> callback) { ExpressionInfo target = expression.Children[2]; taskEngine.GetExpression(target.Code).Evaluate(target, taskEngine, targetType => { CmdResultCode can = unit.DataController.CanConvertImmediate((int)targetType); callback(can); }); }
protected override void OnEvaluating(ExpressionInfo expression, ITaskEngine taskEngine, Action <object> callback) { ExpressionInfo left = expression.Children[0]; ExpressionInfo right = expression.Children[1]; taskEngine.GetExpression(left.Code).Evaluate(left, taskEngine, first => { taskEngine.GetExpression(right.Code).Evaluate(right, taskEngine, second => { long unitId = (long)first; int playerId = (int)second; IMatchPlayerView player = taskEngine.MatchEngine.GetPlayerView(playerId); IMatchUnitAssetView unit = player.GetUnitOrAsset(unitId); OnEvaluating(expression, player, unit, taskEngine, callback); }); }); }
public void Evaluate(ExpressionInfo expression, ITaskEngine taskEngine, Action <object> callback) { ExpressionInfo child = expression.Children[0]; expression.IsEvaluating = true; taskEngine.GetExpression(child.Code).Evaluate(child, taskEngine, value => { expression.IsEvaluating = false; callback(!((bool)value)); }); }