Добавлен , опубликован

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

Содержание:
SIMPLESTATUSBAR - это simple frame, который показывает текстуру blp частично (слева направо) на основе текущего значения SIMPLESTATUSBAR по сравнению с его максимальным значением. Текстура blp растягивается до полного размера фрейма. По умолчанию значение может быть от 0 до 100 (0 - пустой, 100 - полный). 40 покажет 40% blp.
Также возможно иметь границу наложения текста и добавлять текстуру фона. BarTexture находится над фоном и будет скрывать большую его часть по мере приближения значения к максимальному значению

Functions

Эти 3 функции - те, которые вы должны использовать при изменении значения столбцов.
native BlzFrameSetValue takes framehandle frame, real value returns nothing
native BlzFrameGetValue takes framehandle frame returns real
native BlzFrameSetMinMaxValue takes framehandle frame, real minValue, real maxValue returns nothing
BlzFrameSetValue устанавливает текущее значение.
BlzFrameGetValue получает локальное текущее значение.
BlzFrameSetMinMaxValue устанавливает минимальные максимальные значения bar.
Вы также можете использовать эту нативку, чтобы менять используемые текстуры во время игры.
BlzFrameSetTexture takes framehandle frame, string texFile, integer flag, boolean blend

The Frame Definition File (Файл определения фрейма)

В fdf по умолчанию нет SIMPLESTATUSBAR мэйнфрейма, иначе говоря, невозможно создать без нежелательных других фреймов. Следовательно, нужно написать собственный и загрузить его поверх пользовательского написанного toc.
Ниже представлен fdf-код с тремя шаблонами SIMPLESTATUSBAR, все из которых находятся в mainFrames. MyBarEx имеет границу, а MyBar - нет. Последний не имеет дополнительных функций (фон, граница, текст).
Без рамки больше подходит для лиц. У кого-то может быть идея спрятать или удалить фрейм-потомка, но в этом случае это плохая идея, потому что это приведет к сбою игры (это вещь String, Texture, когда вы имеете дело с простыми фреймами).
MyBar.TOC
war3mapImported\myBar.fdf
MyBar.fdf
String "MyBarTextTemplate" {
   //FontColor 0.99 0.427 0.0705 1.0, //Red Green Blue Alpha 0.0 to 1.0
   FontColor 1.0 1.0 1.0 1.0,
   FontShadowColor 0.0 0.0 0.0 0.9,
   FontShadowOffset 0.001 -0.001,
   Font "MasterFont", 0.01, //MasterFont is only valid with "DecorateFileNames,"
}
Frame "SIMPLESTATUSBAR" "MyBarEx" {
   Width 0.07, //Default Width
   Height 0.012, //Default Height
   BarTexture "Replaceabletextures\Teamcolor\Teamcolor00.blp", //Default BarTexture
   Layer "BACKGROUND" { //A simpleFrames thing, where this is placed layer wise
       Texture "MyBarExBackground"{ //the BACKGROUND Texture named "MyBarExBackground" its also a frame and a child
           File "Replaceabletextures\Teamcolor\Teamcolor27.blp", //Default Texture for "MyBarExBackground"
       }
   }
   Frame "SIMPLEFRAME" "MyBarExFrame" { //Child of "MyBarEx"
       DecorateFileNames, //Lookup FileNames in a StringList
       SetAllPoints, //copy "MyBarEx"
       Layer "ARTWORK" {
           Texture "MyBarExBorder" {
               File "SimpleXpBarBorder", //Default Texture for "MyBarExBorder"
           }
           String "MyBarExText" INHERITS "MyBarTextTemplate" {
               Text "MyBarEx", //Default Text for "MyBarExText" which takes over Data from "MyBarTextTemplate"
           }
       }
   }
}

Frame "SIMPLESTATUSBAR" "MyBar" {
   Width 0.07,
   Height 0.012,
   BarTexture "Replaceabletextures\Teamcolor\Teamcolor00.blp",
   Layer "BACKGROUND" {
       Texture "MyBarBackground" {
           File "Replaceabletextures\Teamcolor\Teamcolor27.blp",
       }
   }
   Frame "SIMPLEFRAME" "MyBarFrame" {
       SetAllPoints,
       DecorateFileNames,
       Layer "ARTWORK" {
           String "MyBarText" INHERITS "MyBarTextTemplate" {
               Text "MyBar",
           }
       }
   }
}
Frame "SIMPLESTATUSBAR" "MySimpleBar" {
   Width 0.07,
   Height 0.012,
}

Example MyBar

Этот код jass создает 3 элемента simpleStatusBars: 2 «MyBarEx» и 1 «MyBar».
«MyBarEx» покажет % здоровья и маны выбранного юнита. «MyBar» показывает использование двух фоновых полос с включенным и отключенным паладином.
Потому что SIMPLESTATUSBAR может отображать только blp, который использует teamcolors, чтобы дать полосе цвет.
jass код
function UpdateBars takes nothing returns nothing
   local unit u = GetTriggerUnit()
  call BlzFrameSetValue(BlzGetFrameByName("MyBarEx",1), GetUnitLifePercent(u)) //Load the Frame at ("MyBarEx",1) and set its value to the %HP
   call BlzFrameSetValue(BlzGetFrameByName("MyBarEx",2), GetUnitManaPercent(u))
   set u = null
endfunction

function MyBarCreate takes nothing returns nothing
  local framehandle bar = BlzCreateSimpleFrame("MyBarEx", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 1) //Create Bar at createContext 1
   local framehandle bar2 = BlzCreateSimpleFrame("MyBarEx", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 2) //createContext 2
  local framehandle bar4 = BlzCreateSimpleFrame("MyBar", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 4) //createContext 4, other names so would not be needed.
   call BlzFrameSetAbsPoint(bar, FRAMEPOINT_CENTER, 0.5, 0.3) // pos the bar
   call BlzFrameSetPoint(bar2, FRAMEPOINT_TOP, bar, FRAMEPOINT_BOTTOM, 0.0, 0.0) // pos bar2 below bar
   call BlzFrameSetPoint(bar4, FRAMEPOINT_BOTTOM, bar, FRAMEPOINT_TOP, 0.0, 0.0) // pos bar4 above bar
   call BlzFrameSetSize(bar4, 0.04, 0.04) //change the size of bar4

   call BlzFrameSetValue(bar4, 35) //Starting value for bar 4.

  call BlzFrameSetTexture(bar, "Replaceabletextures\\Teamcolor\\Teamcolor00.blp", 0, true) //change the BarTexture of bar to color red
   call BlzFrameSetTexture(bar2, "Replaceabletextures\\Teamcolor\\Teamcolor01.blp", 0, true) //color blue for bar2
   call BlzFrameSetTexture(bar4, "Replaceabletextures\\CommandButtons\\BTNHeroPaladin.blp", 0, true) //bar4 to Paladin-Face
  call BlzFrameSetTexture(BlzGetFrameByName("MyBarBackground",4), "Replaceabletextures\\CommandButtonsDisabled\\DISBTNHeroPaladin.blp", 0, true) //Change the background to DisabledPaladin-Face. ("MyBarBackground", 4) belongs to Bar4. would Bar4 be a "MyBarEx" one would have to write "MyBarExBackground" cause they are named differently in fdf.

   call BlzFrameSetText(BlzGetFrameByName("MyBarExText",1), "Life")
   call BlzFrameSetText(BlzGetFrameByName("MyBarExText",2), "Mana")
   call BlzFrameSetText(BlzGetFrameByName("MyBarText",4), I2S(R2I(BlzFrameGetValue(bar4)))+"%")

   call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0, 99999, "Select an unit to update the Bars")
endfunction

//===========================================================================
function InitTrig_MyBar takes nothing returns nothing
   local trigger trig = CreateTrigger()
    set gg_trg_MyBar = CreateTrigger()
    call TriggerRegisterTimerEventSingle( gg_trg_MyBar, 0.00 )
    call TriggerAddAction( gg_trg_MyBar, function MyBarCreate )
   call BlzLoadTOCFile("war3mapimported\\mybar.toc")
   call TriggerRegisterPlayerSelectionEventBJ(trig, Player(0), true )
   call TriggerAddAction(trig, function UpdateBars)
endfunction
можно готовую карту скачать отсюда и посмотреть

Другой вариант

Существует также карта SimpleStatusbar_face2, которая случайным образом меняет лицо артаса между живым и рыцарем смерти.
jass
function Change takes nothing returns nothing
   local framehandle fh = BlzGetFrameByName("MyBar",0)
   call BlzFrameSetValue(fh, BlzFrameGetValue(fh) + GetRandomReal(-3,3))
   set fh = null
endfunction
function Trig_Nahkampf_Initialisierung_Actions takes nothing returns nothing
   local framehandle fh = BlzCreateSimpleFrame("MyBar", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0)
   call BlzFrameSetAbsPoint(fh, FRAMEPOINT_CENTER, 0.5, 0.4)
   call BlzFrameSetValue(fh, 50)
   call BlzFrameSetText(BlzGetFrameByName("MyBarText",0), "")
   call BlzFrameSetTexture(BlzGetFrameByName("MyBarBackground",0), "Replaceabletextures\\CommandButtons\\BTNHeroDeathKnight.blp", 0,true)
   call BlzFrameSetTexture(fh, "Replaceabletextures\\CommandButtons\\BTNArthas.blp", 0,true)
   call BlzFrameSetSize(fh, 0.08, 0.08)
   call TimerStart(CreateTimer(), 0.08, true, function Change)
endfunction

//===========================================================================
function InitTrig_MyBar takes nothing returns nothing
    set gg_trg_MyBar = CreateTrigger(  )
    call TriggerRegisterTimerEventSingle( gg_trg_MyBar, 0.00 )
    call TriggerAddAction( gg_trg_MyBar, function Trig_Nahkampf_Initialisierung_Actions )
   call LoadToc("war3mapimported\\mybar.toc")
endfunction
Также можно использовать белую текстуру и изменить цвет полосы с помощью

BlzFrameSetTexture(bar, "ui\\feedback\\progressbar\\human-statbar-color", 0, true)
BlzFrameSetVertexColor(bar, BlzConvertColor(255, 255, 255, 1))

This lines crashed for me in 1.31.1, but work fine in 1.32.1 (reforged).​

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...