private void InternalRankAndSortProgrammingExamples( GameActor actor, ReflexData reflex, ProgrammingElement selected) { RankSettings settings = new RankSettings(); settings.sensorRank = 2; settings.selectorRank = 2; settings.filterRank = 2; settings.actuatorRank = 2; settings.modifierRank = 2; settings.otherFilterRank = 1; settings.otherModifierRank = 1; if (selected is Filter) { settings.filterRank = 10; } else if (selected is Actuator) { settings.actuatorRank = 10; } else if (selected is Modifier) { settings.modifierRank = 10; } else if (selected is Selector) { settings.selectorRank = 10; } else if (selected is Sensor) { settings.sensorRank = 10; } RankAndSortProgrammingExamples( settings, actor, selected, reflex ); }
private void RankAndSortProgrammingExamples( RankSettings settings, GameActor actor, ProgrammingElement selected, ReflexData reflex) { for (int i = 0; i < programmingExamples.Count; ++i) { ExamplePage example = programmingExamples[i]; RankProgrammingExample( example, settings, actor, selected, reflex); } programmingExamples.Sort(CompareByRank); }
private void RankProgrammingExample( ExamplePage example, RankSettings settings, GameActor actor, ProgrammingElement selected, ReflexData reflex) { if (!example.ActorCompatible(actor)) { example.rank = -1; return; } string selectedUpid; if (selected != null) { selectedUpid = selected.upid; } else { selectedUpid = String.Empty; } example.rank = 0; for (int iReflex = 0; iReflex < example.reflexes.Length; ++iReflex) { ReflexData exampleReflex = example.reflexes[iReflex]; // Rank sensor if (selected == exampleReflex.Sensor) { example.rank += RankElements(exampleReflex.Sensor, selected, settings.sensorRank); } if (exampleReflex.Sensor != null && reflex.Sensor != null) { example.rank += RankElements(exampleReflex.Sensor, reflex.Sensor, settings.sensorRank); } // Rank selector if (selected == exampleReflex.Selector) { example.rank += RankElements(exampleReflex.Selector, selected, settings.selectorRank); } if (exampleReflex.Selector != null && reflex.Selector != null) { example.rank += RankElements(exampleReflex.Selector, reflex.Selector, settings.selectorRank); } // Rank actuator if (selected == exampleReflex.Actuator) { example.rank += RankElements(exampleReflex.Actuator, selected, settings.actuatorRank); } if (exampleReflex.Actuator != null && reflex.Actuator != null) { example.rank += RankElements(exampleReflex.Actuator, reflex.Actuator, settings.actuatorRank); } // Rank filters for (int i = 0; i < exampleReflex.Filters.Count; ++i) { if (selected == exampleReflex.Filters[i]) { example.rank += RankElements(exampleReflex.Filters[i], selected, settings.filterRank); } for (int j = 0; j < reflex.Filters.Count; ++j) { example.rank += RankElements(exampleReflex.Filters[i], reflex.Filters[j], settings.filterRank); } } // Rank modifiers for (int i = 0; i < exampleReflex.Modifiers.Count; ++i) { if (selected == exampleReflex.Modifiers[i]) { example.rank += RankElements(exampleReflex.Modifiers[i], selected, settings.modifierRank); } for (int j = 0; j < reflex.Modifiers.Count; ++j) { example.rank += RankElements(exampleReflex.Modifiers[i], reflex.Modifiers[j], settings.modifierRank); } } } }