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);
        }
Esempio n. 2
0
 /// <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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
 /// <summary>
 /// Evaluates a failed response and fires event.
 /// </summary>
 protected void EvaluateFail(string message)
 {
     IsSuccess    = false;
     ErrorMessage = message;
     OnEvaluated?.Invoke();
 }
Esempio n. 6
0
 /// <summary>
 /// Evaluates a success response and fires event.
 /// </summary>
 protected void EvaluateSuccess()
 {
     IsSuccess = true;
     OnEvaluated?.Invoke();
 }