Skip to content

Секция Flight route

Alexander Oblovatniy edited this page Oct 13, 2016 · 7 revisions
Note: English version

Класс il2fb.parsers.mission.sections.wing.FlightRouteSectionParser отвечает за разбор секций, которые содержат информацию о маршруте отдельного авиационного звена.

Маршрут сотстоит из отдельных точек, каждая из которых определяется на отдельной строке. Строки, начинающиеся с ключевого слова TRIGGERS, определяют дополнительные параметры для точки, определенной на предыдущей строке.

Конечным результатом работы парсера является словарь с элементом FLIGHT_ID_route, где FLIGHT_ID — идентификатор звена, который присутствует в секции Wing. Элемент содержит список точек.

Пример секции:

[3GvIAP01_Way]
  TAKEOFF 193373.53 99288.17 0 0 &0
  TRIGGERS 0 10 20 0
  NORMFLY_401 98616.72 78629.31 500.00 300.00 &0 F2
  TRIGGERS 1 1 25 5 500
  NORMFLY 63028.34 42772.13 500.00 300.00 r0100 1 &0
  GATTACK 99737.30 79106.06 500.00 300.00 0_Chief 0 &0
  GATTACK 74338.61 29746.57 500.00 300.00 4_Static 0 &0
  GATTACK 82387.92 51163.75 500.00 300.00 0_Rocket 0 &0
  LANDING_104 185304.27 54570.12 0 0 &1

Пример разбора:

{
    'flight_route_3GvIAP01': [
        FlightRouteTakeoffPoint(
            type=RoutePointTypes.takeoff_normal,
            pos=Point3D(193373.53, 99288.17, 0.0),
            speed=0.0,
            formation=None,
            radio_silence=False,
            delay=10,
            spacing=20,
        ),
        FlightRoutePatrolPoint(
            type=RoutePointTypes.patrol_triangle,
            pos=Point3D(98616.72, 78629.31, 500.00),
            speed=300.00,
            formation=Formations.echelon_right,
            radio_silence=False,
            patrol_cycles=1,
            patrol_timeout=1,
            pattern_angle=25,
            pattern_side_size=5,
            pattern_altitude_difference=500,
        ),
        FlightRouteAttackPoint(
            type=RoutePointTypes.air_attack,
            pos=Point3D(63028.34, 42772.13, 500.00),
            speed=300.00,
            formation=None,
            radio_silence=False,
            target_id='r0100',
            target_route_point=1,
        ),
        FlightRouteAttackPoint(
            type=RoutePointTypes.ground_attack,
            pos=Point3D(99737.30, 79106.06, 500.00),
            speed=300.00,
            formation=None,
            radio_silence=False,
            target_id='0_Chief',
            target_route_point=0,
        ),
        FlightRouteAttackPoint(
            type=RoutePointTypes.ground_attack,
            pos=Point3D(74338.61, 29746.57, 500.00),
            speed=300.00,
            formation=None,
            radio_silence=False,
            target_id='4_Static',
            target_route_point=0,
        ),
        FlightRouteAttackPoint(
            type=RoutePointTypes.ground_attack,
            pos=Point3D(82387.92, 51163.75, 500.00),
            speed=300.00,
            formation=None,
            radio_silence=False,
            target_id='0_Rocket',
            target_route_point=0,
        ),
        FlightRoutePoint(
            type=RoutePointTypes.landing_straight,
            pos=Point3D(185304.27, 54570.12, 0.00),
            speed=0.00,
            formation=None,
            radio_silence=True,
        ),
    ]
}

Существует 4 разных типа точек маршрута. У каждого из них есть свои подтипы. Все доступные типы описаны как типы точек маршрута.

Каждая точка маршрута имеет тип, координаты X, Y, Z и скорость. Так же они хранит информацию о радиомолчании и воздушном построении.

Взлет

Взлет включает в себя руление и непосредственно взлет, который может иметь нормальное размещение самолетов, размещение парами и в линию. При использовании последних 2-х самолеты взлетают сразу в направлении следующей точки маршрута.

Направление взлета

Можно задать расстояние между самолетами на земле. Также можно установить задержку взлета.

При нормальном типе взлета расположение самолетов автоматически будет привязано к ВПП как обычно, если точка маршрута расположена на расстоянии менее 1250 м от ВПП. Тем не менее, установленная временная задержка будет соблюдена.

Все эти параметры можно применять и ко взлету с авианосцев, но в этом случае будет иметь значение только временная задержка.

Пример определения:

TAKEOFF_003 80156.47 47263.58 0 0 &0
TRIGGERS 0 2 20 0

Пример разбора:

FlightRouteTakeoffPoint(
    type=RoutePointTypes.takeoff_in_line,
    pos=Point3D(80156.47, 47263.58, 0.0),
    speed=0.0,
    formation=None,
    radio_silence=False,
    delay=2,
    spacing=20,
)

Точки взлета описываются с помощью il2fb.parsers.mission.sections.wing.FlightRouteTakeoffPoint.

Рассмотрим определенные строки:

TAKEOFF_003

Тип точки маршрута (взлет в линию).

Путь: type
Тип: сложная константа типы точек маршрута
80156.47

Координата X.

Путь: pos.x
Тип: float
Значение: исходное значение, преобразованное в вещественное число
47263.58

Координата Y.

Путь: pos.y
Тип: float
Значение: исходное значение, преобразованное в вещественное число
0

Координата Z.

Путь: pos.z
Тип: float
Значение: исходное значение, преобразованное в вещественное число
0

Скорость.

Путь: speed
Тип: float
Значение: исходное значение, преобразованное в вещественное число
&0

Указывает, включен ли для этой точки режим радиомолчания.

Путь: radio_silence
Тип: bool
Значение: True, если &1, иначе False
Примечание: Строка TRIGGERS отсутствует при выборе нормального типа взлета
TRIGGERS
Указывает, что данная строка содержит дополнительные параметры для точки, определенной в предыдущей строке.
0
Не используется для взлета.
2

Временная задержка (в минутах)

Путь: delay
Тип: int
Значение: исходное значение, преобразованное в целое число
20

Расстояние между самолетами (в метрах).

Путь: spacing
Тип: int
Значение: исходное значение, преобразованное в целое число
0
Не используется для взлета.

Нормальный полет

Нормальный полет включает в себя крейсерство, патрулирование и артиллерийскую корректировку.

Патрулирование определяет циклическое движение согласно определенному шаблону (по треугольнику, по квадрату и т.д.). Можно установить угол вращения шаблона (направление в первой точке шаблона), размер стороны шаблона (в км) и разницу высот между точками (восходящий или низходящий шаблон).

Шаблон полета

Если установлено количество циклов или таймер, то они сообщат ИИ, когда необходимо прекратить движение по шаблону и перейти к кледующей точке маршрута. Таймер и количество кругов работают согласно логике ИЛИ: первый выполнившийся критерий выведет ИИ из цикла патрулирования. Нулевое значение указывает, что критерий игнорируется.

Точки маршрута типа артиллерийский корректировщик имеют такие параметры как: количество циклов, таймер, направление и размер стороны шаблона. Тем не менее, эти параметры почему-то ни на что не влияют.

Пример определения:

NORMFLY_401 98616.72 78629.31 500.00 300.00 &0 F2
TRIGGERS 1 1 25 5 500

Пример разбора:

FlightRoutePatrolPoint(
    type=RoutePointTypes.patrol_triangle,
    pos=Point3D(98616.72, 98616.72, 500.00),
    speed=300.00,
    formation=Formations.echelon_right,
    radio_silence=False,
    patrol_cycles=1,
    patrol_timeout=1,
    pattern_angle=25,
    pattern_side_size=5,
    pattern_altitude_difference=500,
)

Точки патрулирования описываются с помощью il2fb.parsers.mission.sections.wing.FlightRoutePatrolPoint. В остальных случаях (точки нормального полета и артиллерийской корректировки) используется il2fb.parsers.mission.sections.wing.FlightRoutePoint.

Рассмотрим определенные строки:

NORMFLY_401

Тип точки маршрута (патрулирование по треугольнику).

Путь: type
Тип: сложная константа типы точек маршрута
98616.72

Координата X.

Путь: pos.x
Тип: float
Значение: исходное значение, преобразованное в вещественное число
98616.72

Координата Y.

Путь: pos.y
Тип: float
Значение: исходное значение, преобразованное в вещественное число
500.00

Координата Z.

Путь: pos.z
Тип: float
Значение: исходное значение, преобразованное в вещественное число
300.00

Скорость.

Путь: speed
Тип: float
Значение: исходное значение, преобразованное в вещественное число
&0

Указывает, включен ли для этой точки режим радиомолчания.

Путь: radio_silence
Тип: bool
Значение: True, если &1, иначе False
F2

Тип авиационного построения (правый пеленг).

Путь: formation
Тип: сложная константа авиационные построения или None
Примечание: Строка TRIGGERS отсутствует при выборе нормального режима полета
TRIGGERS
Указывает, что данная строка содержит дополнительные параметры для точки, определенной в предыдущей строке.
1 [1]

Число циклов, которое необходимо выполнить.

Путь: patrol_cycles
Тип: int
Значение: исходное значение, преобразованное в целое число
2 [1]

Максимальное время патрулирования (в минутах).

Путь: patrol_timeout
Тип: int
Значение: исходное значение, преобразованное в целое число
25 [1]

Угол поворота шаблона (в градусах).

Путь: pattern_angle
Тип: int
Значение: исходное значение, преобразованное в целое число
5 [1]

Размер стороны шаблона (в км).

Путь: pattern_side_size
Тип: int
Значение: исходное значение, преобразованное в целое число
500 [1]

Разница высот (в метрах).

Путь: pattern_altitude_difference
Тип: int
Значение: исходное значение, преобразованное в целое число

Атака

Существует 2 вида точек маршрута, которые сообщают ИИ о необходимости атаки вражеских объектов: атака наземных целей и атака воздушных целей. Оба эти вида имеют одинаковые параметры, но их типы отличаются. Первый определяется как GATTACK, а последний — как NORMFLY.

Примечание: Да, точки маршрута, которые сообщают ИИ атаковать воздушные цели, определяются как NORMFLY, т.е. как точки нормального полета. Это сбивает с толку, поэтому типы точек маршрута определяют этот тип как X_AIR_ATTACK, где X указывает, что это вымышленый тип.

Целью атаки может быть любой разрушаемый объект: самолет, движущееся транспортное средство, артиллерия, ракета, неподвижный объект и т.д.

Пример определения:

NORMFLY 63028.34 42772.13 500.00 300.00 r0100 1 &0
GATTACK 99737.30 79106.06 500.00 300.00 0_Chief 0 &0

Пример разбора:

[
    FlightRouteAttackPoint(
        type=RoutePointTypes.air_attack,
        pos=Point3D(63028.34, 42772.13, 500.00),
        speed=300.00,
        formation=None,
        radio_silence=False,
        target_id='r0100',
        target_route_point=1,
    ),
    FlightRouteAttackPoint(
        type=RoutePointTypes.ground_attack,
        pos=Point3D(99737.30, 79106.06, 500.00),
        speed=300.00,
        formation=None,
        radio_silence=False,
        target_id='0_Chief',
        target_route_point=0,
    ),
]

Точки атаки описываются с помощью il2fb.parsers.mission.sections.wing.FlightRouteAttackPoint.

Рассмотрим вторую строку:

GATTACK

Тип точки маршрута (атаковать наземную цель).

Путь: type
Тип: сложная константа типы точек маршрута
99737.30

Координата X.

Путь: pos.x
Тип: float
Значение: исходное значение, преобразованное в вещественное число
79106.06

Координата Y.

Путь: pos.y
Тип: float
Значение: исходное значение, преобразованное в вещественное число
500.00

Координата Z.

Путь: pos.z
Тип: float
Значение: исходное значение, преобразованное в вещественное число
300.00

Скорость.

Путь: speed
Тип: float
Значение: исходное значение, преобразованное в вещественное число
0_Chief

Идентификатор цели, которую необходимо атаковать.

Путь: target_id
Тип: str
Значение: исходная строка
0

Номер точки объекта, который необходимо атаковать (не имееет значения для неподвижных объектов).

Путь: target_route_point
Тип: int
Значение: исходное значение, преобразованное в целое число
&0

Указывает, включен ли для этой точки режим радиомолчания.

Путь: radio_silence
Тип: bool
Значение: True, если &1, иначе False

Посадка

Для посадки можно выбрать 5 разных способов:

  • слева;
  • справа;
  • короткий слева;
  • короткий справа;
  • по прямой.

Способ слева используется по умолчанию в игре до версии 4.12. Способ по прямой сложно использовать правильно: самолеты могут столкнуться между собой. Вы можете выбрать различные способы посадки для разных звеньев при посадке на один аэродром. ИИ довольно неплохо справляется с этим, но нет никаких гарантий, что столкновений не будет. Все настройки игнорируются, если посадка происходит на авианосец (в этом случае ИИ используют стандартный способ слева).

Пример определения:

LANDING_104 185304.27 54570.12 0 0 &1

Пример разбора:

FlightRoutePoint(
    type=RoutePointTypes.landing_straight,
    pos=Point3D(185304.27, 54570.12, 0.00),
    speed=0.00,
    formation=None,
    radio_silence=True,
)

Точки посадки не имеют особых параметров и описываются с помощью il2fb.parsers.mission.sections.wing.FlightRoutePoint.

Описание:

LANDING_104

Тип точки маршрута (посадка по прямой).

Путь: type
Тип: сложная константа типы точек маршрута
185304.27

Координата X.

Путь: pos.x
Тип: float
Значение: исходное значение, преобразованное в вещественное число
54570.12

Координата Y.

Путь: pos.y
Тип: float
Значение: исходное значение, преобразованное в вещественное число
0

Координата Z.

Путь: pos.z
Тип: float
Значение: исходное значение, преобразованное в вещественное число
0

Скорость.

Путь: speed
Тип: float
Значение: исходное значение, преобразованное в вещественное число
&1

Указывает, включен ли для этой точки режим радиомолчания.

Путь: radio_silence
Тип: bool
Значение: True, если &1, иначе False

Примечания:

[1] Только для точек патрулирования.