Example #1
0
        internal static List <SortedCombatant> Rebuild_SortedCombatantList(int size, int max_range, Point pos, Predicate <Player> filter) /* sub_738D8 */
        {
            var deltas      = ovr033.GetSizeBasedMapDeltas(size);
            var attackerMap = ovr033.BuildSizeMap(size, pos);

            var sortedCombatants = new List <SortedCombatant>();

            for (int playerIndex = 1; playerIndex <= gbl.CombatantCount; playerIndex++)
            {
                var combatantMap = gbl.CombatMap[playerIndex];
                if (combatantMap.size > 0 && filter(gbl.player_array[playerIndex]))
                {
                    var targetMap = ovr033.BuildSizeMap(combatantMap.size, combatantMap.pos);

                    bool  found          = false;
                    int   found_range    = max_range;
                    Point found_target   = new Point();
                    Point found_attacker = new Point();

                    foreach (var targetPos in targetMap)
                    {
                        foreach (var attackerPos in attackerMap)
                        {
                            int tmp_range = max_range;

                            if (canReachTarget(ref tmp_range, targetPos, attackerPos) == true)
                            {
                                found = true;

                                if (tmp_range < found_range)
                                {
                                    found_range    = tmp_range;
                                    found_attacker = attackerPos;
                                    found_target   = targetPos;
                                }
                            }
                        }
                    }

                    if (found == true)
                    {
                        byte tmpDir = FindCombatantDirection(found_target, found_attacker);

                        var combatant = new SortedCombatant(gbl.player_array[playerIndex], combatantMap.pos, found_range, tmpDir);
                        sortedCombatants.Add(combatant);
                    }
                }
            }

            sortedCombatants.Sort();

            return(sortedCombatants);
        }
Example #2
0
        /* sub_738D8 */
        internal static List<SortedCombatant> Rebuild_SortedCombatantList(int size, int max_range, Point pos, Predicate<Player> filter)
        {
            var deltas = ovr033.GetSizeBasedMapDeltas(size);
            var attackerMap = ovr033.BuildSizeMap(size, pos);

            var sortedCombatants = new List<SortedCombatant>();

            for (int playerIndex = 1; playerIndex <= gbl.CombatantCount; playerIndex++)
            {
                var combatantMap = gbl.CombatMap[playerIndex];
                if (combatantMap.size > 0 && filter(gbl.player_array[playerIndex]))
                {
                    var targetMap = ovr033.BuildSizeMap(combatantMap.size, combatantMap.pos);

                    bool found = false;
                    int found_range = max_range;
                    Point found_target = new Point();
                    Point found_attacker = new Point();

                    foreach (var targetPos in targetMap)
                    {
                        foreach (var attackerPos in attackerMap)
                        {
                            int tmp_range = max_range;

                            if (canReachTarget(ref tmp_range, targetPos, attackerPos) == true)
                            {
                                found = true;

                                if (tmp_range < found_range)
                                {
                                    found_range = tmp_range;
                                    found_attacker = attackerPos;
                                    found_target = targetPos;
                                }
                            }
                        }
                    }

                    if (found == true)
                    {
                        byte tmpDir = FindCombatantDirection(found_target, found_attacker);

                        var combatant = new SortedCombatant(gbl.player_array[playerIndex], combatantMap.pos, found_range, tmpDir);
                        sortedCombatants.Add(combatant);
                    }
                }
            }

            sortedCombatants.Sort();

            return sortedCombatants;
        }
Example #3
0
        /* sub_41932 */
        internal static Player step_combat_list(bool arg_2, int step, ref int list_index, ref Point attackerPos, SortedCombatant[] sorted_list)
        {
            if (arg_2 == true)
            {
                attackerPos = sorted_list[list_index - 1].pos;
            }
            else
            {
                ovr033.RedrawPosition(attackerPos);
            }

            list_index += step;

            if (list_index == 0)
            {
                list_index = sorted_list.GetLength(0);
            }

            if (list_index > sorted_list.GetLength(0))
            {
                list_index = 1;
            }

            Player newTarget = sorted_list[list_index - 1].player;

            var targetPos = sorted_list[list_index - 1].pos;

            if (arg_2 == true)
            {
                ovr025.draw_missile_attack(0, 1, targetPos, attackerPos);
                attackerPos = targetPos;
            }

            return newTarget;
        }