/// <summary> /// 行动点约束 /// </summary> /// <param name="args">动作输入参数</param> /// <returns>行动点是否足够</returns> public override ActionConditResult CheckCondition(IReadonlyActionInputArgs args) { Contract.Requires(args.User != null); int cost = this.ActionConfig; bool canExecute = args.User.ActionPoint >= cost; return(new ActionConditResult( canExecute, canExecute ? string.Empty : $"角色至少需要{cost}行动点,目前仅有{args.User.ActionPoint}")); }
/// <summary> /// 行动点约束 /// </summary> /// <param name="args">动作输入参数</param> /// <returns>行动点是否足够</returns> public override ActionConditResult CheckCondition(IReadonlyActionInputArgs args) { Contract.Requires(args.User != null); Contract.Requires(args.Targets.Count > 0); Contract.Requires(args.Targets.All(x => x != null)); var range = args.User.Position.Value.GetCellInRange(this.ActionConfig).ToVector3Int().Where(x => x.x >= 0 && x.y >= 0); UnityEngine.Debug.Log("Rang" + string.Join("\n", range.Select(x => x.ToString()))); var result = args.Targets .Select(x => (canExecute: range.Contains(x.Position.Value), role: x)) .Select(x => (x.canExecute, msg: x.canExecute ? this.GetTrueMsg(x.role) : this.GetFalseMsg(x.role))) .Select(x => new ActionConditResult(x.canExecute, x.msg)); return(new ActionConditResult(result.All(x => x.CanExecute == true), childs: result)); }
/// <summary> /// 校验动作条件组 /// </summary> /// <param name="args">动作输入参数</param> /// <returns></returns> public List <ActionConditResult> CheckConditAction(IReadonlyActionInputArgs args) { return(this.ConditionsActions.Select(x => x.CheckCondition(args)).ToList()); }