Реклама | Adv
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
  • Rotator
Сообщения форума
Реклама | Adv

[Unbound 2] Практический пример работы с элементом "Компас"

Дата: 23.08.2019 19:36:21
MedvedevTD: Всем привет.

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

Первое решение, это частичная работа с файлом battle_layout.xml и редакция файла compass.unbound Оно вполне подходит для быстрого воплощения, но имеет некоторые минусы (проблемы с скалированием, отсутствие гибкости по разрешению экрана пользователя, лишний багаж файлов). Плюс ко всему при оптимизации клиента игры некоторые части попросту убираются из него, переезжая в другой мир.   Второе решение, это работа с Unbound 2. Собственно само решение выглядит так:
Создаём файл Mod_compass.unbound
И вносим туда следующей код Скрытый текст (def element CompassContainer () layout=true dispatch_size_change=true (scope (var selfAvatarEntity:gfx = "$datahub.getSingleEntity(CC.playerAvatar)") (var isAlive:bool = "selfAvatarEntity.health.isAlive" (event "selfAvatarEntity.health.evIsAliveChanged")) (var stageComponent:gfx = "$datahub.getSingleEntity(CC.stage).stage") (var stageWidth:number = "stageComponent.width" (event "stageComponent.evStageSizeChanged")) (var stageHeight:number = "stageComponent.height" (event "stageComponent.evStageSizeChanged")) (var compassScaleRatio:number = "0.6") (var leftOffset:number = "stageWidth / 2 - COMPASS_SIZE * compassScaleRatio / 2 - 20") (var bottomOffset:number = "stageHeight / 2 - COMPASS_SIZE * compassScaleRatio / 2 - 250") ) (style (position = "absolute") (width = "COMPASS_SIZE") (height = "COMPASS_SIZE") ) (controller $Instance renderer='CompassContainerInstance' (bind enabled "isAlive") (exprs (bind scaleX "compassScaleRatio") (bind scaleY "compassScaleRatio") (style (bind left "leftOffset") (bind bottom "bottomOffset") ) ) ) )   Оригинальный кусок кода в файле compass.unbound выглядит так (это просто для сравнения!): Скрытый текст   (def element CompassContainer () layout=true dispatch_size_change=true (scope (var selfAvatarEntity:gfx = "$datahub.getSingleEntity(CC.playerAvatar)") (var isAlive:bool = "selfAvatarEntity.health.isAlive" (event "selfAvatarEntity.health.evIsAliveChanged")) ) (style (position = "absolute") (bind width "COMPASS_SIZE") (bind height "COMPASS_SIZE") ) (controller $Instance renderer='CompassContainerInstance' (bind enabled "isAlive") ) )   В файле unbound_settings.xml добавляем строку: ./gui/unbound2/pc/battle/Mod_compass.unbound ВНИМАНИЕ!!! данная строка обязательно должна быть выше аналогичного немодифицированного файла compass.unbound Скрытый текст 443286969a6c516f011b35b62b03739e.png Это связано с порядком чтения/выполнения файлов unbound   Настройки размещения элемента.   (var compassScaleRatio:number = "0.6") - переменная отвечает за скалирование объекта, где 1.0 является 100% размером объекта (var leftOffset:number = "stageWidth / 2 - COMPASS_SIZE * compassScaleRatio / 2 - 20") - переменная для размещения по горизонтали, где 20 это компенсация отступа объекта указанная в файле battle_layout и в текущем виде выставляет элемент по центру  (var bottomOffset:number = "stageHeight / 2 - COMPASS_SIZE * compassScaleRatio / 2 - 250") - переменная для размещения по вертикали, где 250  это смещение от центра экрана     При желании убрать "лишний" круг вокруг компаса, просто добавляем в наш модифицированный файл оригинальный кусочек кода с закомментирированным значением элемента компаса:
  Скрытый текст (def element CompassContainerInstance () layout=true (scope (var aircarrierEntity:gfx = "$datahub.getSingleEntity(CC.aircarrier)") (var squadronCameraMode:str = "aircarrierEntity.aircarrier.squadronCameraMode" (event "aircarrierEntity.aircarrier.evSquadronCameraModeChanged")) (var isLastLookCamera:bool = "squadronCameraMode != SquadronCameraModes.DEFAULT") ) (style (position = "absolute") (bind width "COMPASS_SIZE") (bind height "COMPASS_SIZE") ) ### (element Compass ### (style (position = "absolute")) ### ) (element ShipDollAirDefenseSectors (style (position = "absolute") (top = 100px) (left = 100px) ) ) (element ShipDoll (style (position = "absolute") (top = 100px) (left = 100px) ) (bind visible "aircarrierEntity == null || !isLastLookCamera") ) (element Frustum "200" (style (position = "absolute")) ) (element GunsRotator (style (position = "absolute")) ) (element CrosshairRotatorLock) )     и в итоге получаем такую картину: Скрытый текст 6579a06b9154287f84e76de51bb5e8b9.jpg       Чуть не забыл :)
Здесь прикреплю архивчик с готовым решением в качестве образца gui.zip
Верю в вас, что вы понимаете что файл unbound_settings.xml может иногда изменятся и вы конечно будете использовать оригинальный файл для каждого патча, это не сложно :)
Поможет вам в этом, размечтательная тулза по извлечению пакаджей, вот из этой темы: [ALL] WOWS Unpack Tool: распаковка ресурсов клиента игры.   С уважением,

Реклама | Adv