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); }