예제 #1
0
        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
                );
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
                    }
                }
            }
        }