Основы Интерфейса

Содержание:
Кратко: Мы уже рассмотрели ранее фреймы ORIGIN_FRAME_GAME_UI и его потомков, также и ORIGIN_FRAME_WORLD_FRAME. Теперь давайте рассмотрим остальные элементы интерфейса.
ORIGIN_FRAME_HERO_BAR
index info
0 Полоса фреймов. Родитель всех HERO_BUTTONS, HeroButtons имеют одинаковую видимость.
Children of ORIGIN_FRAME_HERO_BAR
index информация и описание дочерних фреймов
0-6 HeroButton: Интерактивные кнопки героев в левой части экрана.
ORIGIN_FRAME_HERO_BUTTON
index info
0-6 интерактивные кнопки собственных / союзных героев в левой части экрана
пример
BlzGetOriginFrame(ORIGIN_FRAME_HERO_BUTTON, 0), -- 1ый герой, клавиша F1
BlzGetOriginFrame(ORIGIN_FRAME_HERO_BUTTON, 1), -- 2ой герой, клавиша F2
BlzGetOriginFrame(ORIGIN_FRAME_HERO_BUTTON, 2), -- 3ий герой, клавиша F3
BlzGetOriginFrame(ORIGIN_FRAME_HERO_BUTTON, 3), -- 4ый герой, клавиша F4
BlzGetOriginFrame(ORIGIN_FRAME_HERO_BUTTON, 4), -- 5ый герой, клавиша F5
BlzGetOriginFrame(ORIGIN_FRAME_HERO_BUTTON, 5), -- 6ой герой
BlzGetOriginFrame(ORIGIN_FRAME_HERO_BUTTON, 6) -- 7ой герой
Children of ORIGIN_FRAME_HERO_BUTTON
index информация и описание дочерних фреймов
0 HP-Bar (полоска здоровья под иконкой)
1 MP-Bar (полоска маны под иконкой)
2 Unspent-SkillPointsBox (только если в этом слоте когда-либо были неизрасходованные SkillPoints)
ORIGIN_FRAME_HERO_HP_BAR и ORIGIN_FRAME_HERO_MANA_BAR
index info
0-6 зеленая полоска здоровья героя под иконкой. подключена к HeroButton. HeroButton является родителем для ORIGIN_FRAME_HERO_HP_BAR
index info
0-6 Синяя полоска маны героя под иконкой героя. Подключена к HeroButton. HeroButton является родителем для ORIGIN_FRAME_HERO_MANA_BAR.
ORIGIN_FRAME_HERO_BUTTON_INDICATOR
index info
0-6 Unspent-SkillPointsBox - потомок для Parent of ORIGIN_FRAME. Подсвечивающая рамка для HeroButton, появляющаяся при получении новых очков навыков. Светится, когда у героя есть очки навыков; подключен к HeroButtons. Они появляются снова, когда герой получает новое очко навыков, даже если все исходные рамки скрыты.
ORIGIN_FRAME_ITEM_BUTTON
Тут есть нарисованный инвентарь со слотами. Проще говоря, это рисунок. И нет никаких ячеек. Тут поверх появляются/исчезают кнопки предметов. Когда юнит получает предмет, у нас появляется кнопка предмета.
index info
0-5 Кнопки предметов. Периодически обновляются, появляются при каждом изменении выбора юнита. Когда его родительский элемент виден.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/inventorybar.fdf
ui/framedef/ui/reforged/inventorybar.fdf
ORIGIN_FRAME_COMMAND_BUTTON
index info
0-11 Кнопки командной панели. Периодически обновляются, появляются при каждом изменении выбора. Когда его родительский элемент виден.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/CommandBarFrame.fdf
ui/framedef/ui/reforged/CommandBarFrame.fdf
Children of ORIGIN_FRAME_ITEM_BUTTON/ORIGIN_FRAME_COMMAND_BUTTON
Кол-во потомков: 0, 1 или 3 - зависит от того, может ли слот/кнопка когда-нибудь использована, и содержит ли заряды
index информация и описание дочерних фреймов
0, 1, 3 На самом деле, я не знаю за что отвечают данные потомки. Либо они часто пустые, или происходит вылет. Перебирать потомка надо, если сама кнопка видима. Итог: я так и не смог определить значимость этих потомков. Пишут, что отвечает за texture (string), text (string), value (значение, заряды)
ORIGIN_FRAME_SYSTEM_BUTTON
index info
0-3 Кнопки Меню, союзники, Журнал / чат, Квест.
код
BlzGetOriginFrame(ORIGIN_FRAME_SYSTEM_BUTTON, 0), -- Меню
BlzGetOriginFrame(ORIGIN_FRAME_SYSTEM_BUTTON, 1), -- Союзники
BlzGetOriginFrame(ORIGIN_FRAME_SYSTEM_BUTTON, 2), -- Чат
BlzGetOriginFrame(ORIGIN_FRAME_SYSTEM_BUTTON, 3) -- Задания
ORIGIN_FRAME_PORTRAIT
index info
0 Этот фрейм портрета можно назвать тоже что-то вроде кнопки. Когда вы кликаете по рожице, камера наводится на этого юнита. Можете повесить на этот фрейм событие клика.
При выключении фрейма портрет исчезает.
Как видим на скрине остался черный фон. И тексты хп и мана под портретом.
Кол-во потомков: 0
ORIGIN_FRAME_PORTRAIT_HP_TEXT и ORIGIN_FRAME_PORTRAIT_MANA_TEXT
V1.32+ Не существует до тех пор, пока не будет сделан какой-либо выбор, и не пройдет короткое время. Форсируйте выбор и подождите немного.
Проверяйте видимость фрейма через BlzFrameIsVisible(frame).
Перемещать позицию этого фрейма, по словам автора, правильнее через точку FRAMEPOINT_CENTER, другие framepoints, по его словам, могут привести к каким то неведомым мне ошибкам.
Скорее всего, текстовый фрейм с использовании некоторых нативок может привести к вылету игры (crash one setAlpha/Level, BlzFrameGetText возвращает показанное значение, BlzFrameSetFont работает...).
ORIGIN_FRAME_MINIMAP
MiniMapFrame, 0 <- другое обращение к фрейму.
index info
0 Мини-карта отвечает за отображения карты (ладншафт, деревья, юниты), исключая текстуры интерфейса и кнопки по правому боку. Эта мини-карта тоже особая кнопка, жмешь по ней и перемещаешь к камеру в нужную часть карты.
Ниже названия фреймов мини-карты не указаны в содержимом всех fdf, нашел их на хайве. Но их можно было найти в ui/framedef/ui/minimapframe/fdf.
Сейчас в 1.32 таких фреймов не вижу в дебагах в качестве потомков, всякие кнопочки миникарты, minimapbar видимо не являются потомками MinimapFrame.
В ui/war3skins.txt
MinimapSprite = UI\MiniMap\MiniMapIcon\MiniMapUnitIcon.mdl
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/MiniMapFrame.fdf
ui/framedef/ui/reforged/MiniMapFrame.fdf
MinimapButtonBar
MinimapButtonBar, 0 <- родитель кнопок мини-карты ссылка. Короче отключает бар с кнопками.
ORIGIN_FRAME_MINIMAP_BUTTON
index info
0-4 Кнопки мини-карты. кнопка 0 - верхняя, а кнопка 4 - самая нижняя кнопка.
код
MiniMapAllyButton, 0 (цвет ваших войск и союзников а мини-карте и на карте)
MiniMapCreepButton, 0 (крипы на мини-карте)
MinimapSignalButton, 0 (отметка на мини-карте)
MiniMapTerrainButton, 0 (рельеф на мини-карте)
FormationButton, 0 (боевое построение - кнопка на мини-карте)
ORIGIN_FRAME_TOOLTIP и ORIGIN_FRAME_UBERTOOLTIP
Эти фреймы отвечают за всплывающие окна с подсказками, появляющиеся при наведении мыши на элементы интерфейса: иконки героя, раба, кнопки абилки/юнита/технологии, кнопки меню/мини-карты, информация по интерфейсу.
originframetype index info
ORIGIN_FRAME_TOOLTIP 0
ORIGIN_FRAME_UBERTOOLTIP 0 Обрабатывает окно всплывающей подсказки
можно проверить таймером видимость подсказки. Когда вы наводите на фрейм или любой объект, у вас всплывает подсказка. Иногда можно этим пользоваться. Пример, мне нужно узнать не находится ли курсор внутри стандартных фреймов. Например, я выделили иконку защиты героя, и мне всплыла информация. Зачем это нужно? Ну например мне нужно было определить лежит ли курсор внутри интерфейса, или в игровом поле.
код
TimerStart(CreateTimer(),1.0,true,function()
    
        local frame = BlzGetOriginFrame(ORIGIN_FRAME_UBERTOOLTIP,0)
        if BlzFrameIsVisible(frame) then
            print("видим")
        end

end)
У ORIGIN_FRAME_TOOLTIP и ORIGIN_FRAME_UBERTOOLTIP есть по одному безымянному потомку.
ORIGIN_FRAME_CHAT_MSG и ORIGIN_FRAME_UNIT_MSG
originframetype index info
ORIGIN_FRAME_CHAT_MSG 0 рамка вывода печати для сообщения в чат. Это происходит, когда игрок пишет в чат, и вам выводится текст. У рамки есть опред границы. Или триггерная нативка ввода чат BlzDisplayChatMessage. Выключение этого фрейма, вы перестаете видеть на экране введенные в чат сообщения. Но, отключение может вызвать фатал.
ORIGIN_FRAME_UNIT_MSG 0 рамка вывода системного сообщения игры (вроде смерти героя). Или сообщения триггера DisplayTextToPlayer. Однако, не все тексты скрывает. Вроде желтенькие системные сообщения о запрете строительства на занятых участка, нельзя выбросить предмет, если он так настроен и прочее.
ORIGIN_FRAME_TOP_MSG
originframetype index info
ORIGIN_FRAME_TOP_MSG 0 Рамка: Предупреждающее сообщение UpKeep Change, под дневными часами.
ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR
originframetype index info
ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR 0 Рамка имеет размер, подходящий для всех 8 возможных buffs/debuffs.
Children of ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR
index info
0-7 BuffIcons + mouse Listeners
ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR_LABEL
originframetype index info
ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR 0 V1.32 + прикреплен к ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR по умолчанию

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
25
У портрета есть один прикол с необычным поведением. Если применить к нему BlzFrameSetScale, то изменится не только размер спрайта, но и отскейлится положение камеры внутри модели. А если залочить положение портрета двумя точками, и отключить автопозиционирование, то меняться будет только положение камеры.

Код
        local portrait = BlzGetOriginFrame(ORIGIN_FRAME_PORTRAIT, 0)
        local width, height = BlzFrameGetWidth(portrait), BlzFrameGetHeight(portrait)

        BlzEnableUIAutoPosition(false)
        BlzFrameClearAllPoints(portrait)

        BlzFrameSetAbsPoint(portrait, FRAMEPOINT_TOPLEFT, .260, .114)
        BlzFrameSetAbsPoint(portrait, FRAMEPOINT_BOTTOMRIGHT, .260 + width, .114 - height)

        local sliderFrame = BlzCreateFrameByType("SLIDER", "", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "QuestMainListScrollBar", 0)
        BlzFrameClearAllPoints(sliderFrame)
        BlzFrameSetAbsPoint(sliderFrame, FRAMEPOINT_CENTER, 0.296, 0.065 )
        BlzFrameSetSize(sliderFrame, 0.014, 0.1 )

        BlzFrameSetMinMaxValue(sliderFrame, 0.9, 1.5)
        BlzFrameSetStepSize(sliderFrame, 0.001)
        BlzFrameSetValue(sliderFrame, 1)

        local trigger = CreateTrigger()
        BlzTriggerRegisterFrameEvent(trigger, sliderFrame, FRAMEEVENT_SLIDER_VALUE_CHANGED)
        TriggerAddAction(trigger, function()
            print(BlzGetTriggerFrameValue())
            BlzFrameSetScale(portrait, BlzGetTriggerFrameValue())
        end)
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.