Истребители багов: управление турелью



Марк начал с уничтожения ноутбучного жесткого диска, затем перешел к тестовому уровню, куда был загружен Cutlass с полным набором вооружения. Если начать стрелять, огонь будет вестись сразу из всех орудий, включая и пушки на верхней турели. Такого быть не должно. По задумке, управлять верхней турелью может только стрелок. Из-за неверных зависимостей в окне отладки видно, что четвертое и пятое орудие (расположенные на турели) управляются пилотом с приоритетом 10.

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

Получается, когда вы взаимодействуете с интерфейсом, вы говорите контроллеру оружию, что нужно делать, а он передает информацию пушкам. Если контроллер окажется поврежден — вы не сможете больше управлять орудиями — такая геймплейная задумка. В коде создается граф зависимостей, на котором устанавливаются связи. Задача всей этой системы — ответить на два вопроса: какими орудиями сможет управлять игрок, если сядет на определенную позицию, и кто возьмет контроль над орудиями, когда игрок покинет свое место?

К сожалению, сейчас менеджер берет позицию пилота, смотрит на граф и находит возможность установить связь между пилотом и пушками на турели, поскольку пилоту задан приоритет 10 в управлении орудиями. Турель, со своей стороны, тоже видит возможность установить связь с пилотом, но она имеет ограничение на эксклюзивность в программном коде.

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

Для решения проблемы Марк добавил в код проверку установленных с орудием связей, чтобы знать, кто и почему в данный момент имеет контроль над данным орудием. Если орудие уже эксклюзивно связано с турелью, мы не должны позволять пилоту перенимать управление на себя. При этом саму связь пилота с турелью требуется сохранить, чтобы он мог видеть ее состояние на экране.

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

Позволять или нет пилоту вести огонь из турели — теперь это вопрос дизайнеров. Они будут решать, какие турели на каких кораблях сделать эксклюзивными, а какими сможет управлять пилот.



Перейти к обсуждению