public double Evaluate(IEnumerable <PieceData> pieces) { HashSet <PieceData> hasChecked = new HashSet <PieceData>(); List <int> counts = new List <int>(); foreach (var piece in pieces) { if (piece == null) { continue; } if (piece.m_shape != m_shape) { continue; } if (hasChecked.Contains(piece)) { continue; } HashSet <PieceData> group = CombinationUtility.GetGroup(piece, x => x.m_shape == m_shape); counts.Add(group.Sum(x => x.m_positions.Length)); hasChecked.UnionWith(group); } OnGroupChecked?.Invoke(this, counts); var value = (counts.Count == 0) ? 0 : counts.Average(); OnEvaluated?.Invoke(this, value); return(value); }
/// <summary> /// 对此结点进行评估 /// </summary> /// <returns></returns> public NodeStates Evaluate() { if (!IsInstance) { Debug.LogError("尝试评估未实例化的结点: " + name); return(NodeStates.Failure); } if (!isStarted) { OnStart(); isStarted = true; } if (isStarted) { if (!IsPaused) { State = OnUpdate(); } if (IsDone) { OnEnd(); isStarted = false; } } OnEvaluated?.Invoke(this); return(State); }
public double Evaluate(IEnumerable <PieceData> pieces) { if (Services.SpaceChecker == null) { return(0); } int max = 0; MaxPosition = Vector2Int.zero; MaxSize = Vector2Int.zero; foreach (var space in Services.SpaceChecker.GetIsolatedSpaces()) { var array = space.ToArray(); if (array.Length <= max) { continue; } foreach (var position in array) { (int x, int y) = GetMaxSquareSize(position, array); if (x * y <= max) { continue; } max = x * y; MaxPosition = position; MaxSize = new Vector2Int(x, y); } } OnEvaluated?.Invoke(this, max); return(max); }
public double Evaluate(double scoreBeforeBonus, IEnumerable <PieceData> pieces) { var bonus = m_bonusCalculator.Evaluate(pieces); double value = m_scoreBonusFunc.Invoke(scoreBeforeBonus, bonus); OnEvaluated?.Invoke(this, value); return(value); }
/// <summary> /// Evaluates a failed response and fires event. /// </summary> protected void EvaluateFail(string message) { IsSuccess = false; ErrorMessage = message; OnEvaluated?.Invoke(); }
/// <summary> /// Evaluates a success response and fires event. /// </summary> protected void EvaluateSuccess() { IsSuccess = true; OnEvaluated?.Invoke(); }