| | | 1 | | using System.Collections.Generic; |
| | | 2 | | using UnityEngine; |
| | | 3 | | |
| | | 4 | | // The round-robin assignment assigns hierarchical objects to each other in a round-robin order. |
| | | 5 | | public class RoundRobinAssignment : AssignmentBase { |
| | | 6 | | // Run the assignment algorithm and assign the hierarchical objects. |
| | | 7 | | public override List<AssignmentItem> Assign(IReadOnlyList<IHierarchical> first, |
| | 0 | 8 | | IReadOnlyList<IHierarchical> second) { |
| | 0 | 9 | | if (first.Count == 0 || second.Count == 0) { |
| | 0 | 10 | | return new List<AssignmentItem>(); |
| | | 11 | | } |
| | | 12 | | |
| | 0 | 13 | | int secondIndex = 0; |
| | 0 | 14 | | var assignments = new List<AssignmentItem>(); |
| | 0 | 15 | | foreach (var firstHierarchical in first) { |
| | 0 | 16 | | var secondHierarchical = second[secondIndex]; |
| | 0 | 17 | | assignments.Add( |
| | | 18 | | new AssignmentItem { First = firstHierarchical, Second = secondHierarchical }); |
| | 0 | 19 | | secondIndex = (secondIndex + 1) % second.Count; |
| | 0 | 20 | | } |
| | 0 | 21 | | return assignments; |
| | 0 | 22 | | } |
| | | 23 | | } |