呼叫方式
Conditions.talent.treeWidget(parent, spec, value, update)
記錄相依項目 Conditions.talent.treeWidget,然後以該名稱呼叫。含命名空間的呼叫不會傳入 self:請使用冒號呼叫,或自行傳入該物件。
作用
Builds the TALENT editor controls for Classic talent trees: a tree dropdown, a talent icon, a talent dropdown for the chosen tree, and a Points comparison. Changing the tree clears the talent (and the comparison when switching from another layout), and every change calls update.
參數
| 名稱 | 類型 | 作用 |
|---|---|---|
parent | table | Condition widget group the control is added to. |
spec | number | nil | Specialization the editor is for; on progression clients a value from 1 to 4 also selects the talent group to read. |
value | table | Saved TALENT condition settings; the control reads and rewrites its layout, tree, talent, node, entry, operator and value fields. |
update | function | Called with no arguments after every change so the editor can refresh. |
傳回值
無。
版本
內建輔助函式在每個版本上都會註冊。不同的是它們讀取的遊戲 API;某個 API 不存在時,輔助函式會改用備用方式,或傳回 nil 並附上原因。
它不會直接讀取任何遊戲 API。
插件如何呼叫它
- 天賦 (widget)
if current=="tree" then treeWidget(parent,spec,value,update)
相依項目
PLACEHOLDER(builtin:Conditions/talent.lua:PLACEHOLDER)block→Conditions.talent.blockdropdown→Conditions.talent.dropdowngroup→Conditions.talent.groupicon→Conditions.talent.iconinfo→Conditions.talent.infoownTrees→Conditions.talent.ownTreesplatform(builtin:Conditions/talent.lua:platform)
原始碼
Conditions/talent.lua,第 191 行。在遊戲中為唯讀;「複製」會產生一份可編輯的複本。
Conditions.talent.treeWidget(parent, spec, value, update)
local trees,treeOrder={},{}
-- Names, never positions: the game's for the player's class, the shipped
-- table's for another class's rotation or before the game has the data.
local listed=addon.TalentTrees.Choices(addon.TalentTrees.ContextClass(),group(spec))
if listed then trees,treeOrder=listed.choices,listed.order end
local talents,talentOrder={},{}
local talentIcon,talentPicker,treePicker
local function choices()
talents,talentOrder={},{}
if value.tree and ownTrees() then
for index=1,platform:GetTreeTalentCount(value.tree) or 0 do
local talent=platform:GetTreeTalentInfo(value.tree,index,group(spec))
if talent then talents[index]={text=talent.name,icon=talent.icon};talentOrder[#talentOrder+1]=index end
end
end
end
choices()
local box=block(parent)
talentIcon=icon(box,value,spec)
treePicker=dropdown(box,L["Talent Tree"],function(selected)
if selected==value.tree then return end
local wasTree=value.layout=="tree" or value.layout==nil and value.tree~=nil
value.tree,value.talent,value.layout=selected,nil,"tree"
if not wasTree then value.value,value.operator=nil,nil end
choices();talentPicker:SetList(talents,talentOrder);talentPicker:SetValue(nil)
talentPicker:SetDisabled(#talentOrder==0);talentIcon:SetImage(PLACEHOLDER);update()
end)
treePicker.configure=function() treePicker:SetList(trees,treeOrder);treePicker:SetValue(value.tree) end
talentPicker=dropdown(box,L["Talent"],function(selected)
value.talent,value.layout=selected,"tree"
local talent=info(value,spec);talentIcon:SetImage(talent and talent.icon or PLACEHOLDER);update()
end)
talentPicker:SetDisabled(#talentOrder==0)
talentPicker.configure=function() talentPicker:SetList(talents,talentOrder);talentPicker:SetValue(value.talent) end
parent:AddChild(addon:Widget_OperatorWidget(value,L["Points"],update))