Example #1
0
        protected override bool MeetsCriterion(VisualPayload payload)
        {
            var comparisonType = ComparisonTypeField.GetFirstValue(payload.Data);

            var firstOperand  = FirstOperand.GetFirstValue(payload.Data);
            var secondOperand = SecondOperand.GetFirstValue(payload.Data);

            return(ComparisonPredicates[comparisonType](firstOperand, secondOperand));
        }
        protected override MutableObject Mutate(MutableObject mutable)
        {
            foreach (var entry in Scope.GetEntries(mutable))
            {
                var valueToMatch           = IntToMatch.GetValue(entry);
                var found                  = false;
                var indexOfMatchingElement = 0;
                var comparisonType         = ComparisonTypeField.GetValue(entry);

                // Process "Lasts"
                if (comparisonType == ComparisonType.LastLessThanOrEqual)
                {
                    var exceeded = false;

                    foreach (var subEntry in PerEntryInt.GetEntries(entry))
                    {
                        var valueWeFound = PerEntryInt.GetValue(subEntry);

                        if (valueWeFound > valueToMatch)
                        {
                            exceeded = true;

                            indexOfMatchingElement--;

                            if (indexOfMatchingElement > -1)
                            {
                                found = true;
                            }

                            break;
                        }

                        indexOfMatchingElement++;
                    }

                    if (!exceeded)
                    {
                        indexOfMatchingElement--;
                    }
                }

                // Process "Firsts"
                else
                {
                    foreach (var subEntry in PerEntryInt.GetEntries(entry))
                    {
                        var valueWeFound = PerEntryInt.GetValue(subEntry);

                        found = ComparisonPredicates[comparisonType](valueWeFound, valueToMatch);

                        if (found)
                        {
                            break;
                        }

                        indexOfMatchingElement++;
                    }
                }

                if (!found)
                {
                    indexOfMatchingElement = -1;
                }

                FoundIndexTarget.SetValue(indexOfMatchingElement, entry);

                //Debug.LogFormat( "Found index of element: {0}", indexOfMatchingElement );
            }

            return(mutable);
        }