185 lines
6.4 KiB
Lua
185 lines
6.4 KiB
Lua
-- Update of the anim bar found in animation mode
|
|
|
|
|
|
r2.ui.AnimBar = {} -- the anim bar class
|
|
|
|
--------------
|
|
-- PUBLIC --
|
|
--------------
|
|
|
|
|
|
----------------------------------------------------------------------------------------------------------
|
|
-- Update the anim bar content, except for the contextual actions (those that apply on the current selected entity)
|
|
function r2.ui.AnimBar:update()
|
|
local testModeAvailable = false
|
|
local isDm = false
|
|
if r2.Mode == "DM" or r2.Mode == "AnimationModeDm" then isDm = true end
|
|
if r2.Mode == "DM" or r2.Mode == "AnimationModeDm" then -- Not in animation
|
|
testModeAvailable = (r2.AccessMode == "Editor" or r2.AccessMode == "OutlandOwner")
|
|
end
|
|
self:getButton("r2ed_anim_test_mode").active = testModeAvailable
|
|
self:getButton("r2ed_anim_dm_mode").active = (r2.Mode == "Test")
|
|
local actReceived = (isDm and (r2.AnimGlobals.Acts ~= nil or config.Local == 1))
|
|
debugInfo(tostring(actReceived))
|
|
self:getButton("r2ed_anim_acts").active = actReceived
|
|
local triggerReceived = (isDm and (r2.AnimGlobals.UserTriggers ~= nil or config.Local == 1))
|
|
debugInfo(tostring(triggerReceived))
|
|
self:getButton("r2ed_anim_triggers").active = triggerReceived
|
|
self:getButton("r2ed_anim_weather").active = (isDm)
|
|
self:getButton("r2ed_anim_dm_gift").active = r2:isCurrentSelectionPlayer()
|
|
self:updateButtonsPos()
|
|
end
|
|
|
|
|
|
function r2.ui.AnimBar:activateTable(tbl)
|
|
if (type(tbl) ~= "table")
|
|
then
|
|
local button = self:getButton(tbl)
|
|
if button then button.active = true end
|
|
return
|
|
end
|
|
|
|
local i, j = next(tbl, nil)
|
|
while i do
|
|
if i ~= 'n' then
|
|
self:activateTable(j)
|
|
-- r2.ui.AnimBar:activateTable(j)
|
|
end
|
|
i, j = next(tbl, i)
|
|
end
|
|
end
|
|
|
|
|
|
----------------------------------------------------------------------------------------------------------
|
|
-- Update the anim bar from a list of accessibles options (passed as a list of strings)
|
|
function r2.ui.AnimBar:updateActions(args)
|
|
self:clearActions()
|
|
getUI("ui:interface:r2ed_testbar:r2ed_anim_dm_gift").active = r2:isCurrentSelectionPlayer()
|
|
self:activateTable(args)
|
|
self:update()
|
|
self:updateButtonsPos()
|
|
end
|
|
|
|
|
|
----------------------------------------------------------------------------------------------------------
|
|
-- clear all accessible actions in the action bar
|
|
function r2.ui.AnimBar:clearActions()
|
|
self:getButton("r2ed_anim_speak_as").active = false
|
|
self:getButton("r2ed_anim_stop_speak").active = false
|
|
self:getButton("r2ed_anim_control").active = false
|
|
self:getButton("r2ed_anim_stop_control").active = false
|
|
self:getButton("r2ed_anim_add_hp").active = false
|
|
self:getButton("r2ed_anim_grp_heal").active = false
|
|
self:getButton("r2ed_anim_kill").active = false
|
|
self:getButton("r2ed_anim_grp_kill").active = false
|
|
self:getButton("r2ed_anim_despawn").active = false
|
|
self:getButton("r2ed_anim_dm_gift").active = false
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------------
|
|
-- update the window of dm controlled entities
|
|
function r2.ui.AnimBar:updateDMControlledEntitiesWindow()
|
|
local wnd = getUI("ui:interface:dm_controlled_entities")
|
|
local index = 0
|
|
local maxNumPossessedEntities = tonumber(getDefine("r2_max_num_dm_controlled_entities"))
|
|
--
|
|
local talkingList = r2.getTalkingAsList()
|
|
local numTalker = table.getn(talkingList)
|
|
local incarnatingList = r2.getIncarnatingList()
|
|
local numIncarnated = table.getn(incarnatingList)
|
|
if numTalker == 0 and numIncarnated == 0 then
|
|
wnd.active = false
|
|
return
|
|
end
|
|
--
|
|
wnd.active = r2.Mode ~= "Edit"
|
|
wnd = wnd.inside
|
|
for i = 0, (numTalker / 2) - 1 do
|
|
local button = wnd["b" .. index]
|
|
button.active = true
|
|
button.b.texture="r2_icon_speak_as_small.tga"
|
|
button.b.texture_pushed="r2_icon_speak_as_small_pushed.tga"
|
|
button.b.texture_over="r2_icon_speak_as_small_over.tga"
|
|
button.b.params_l="r2.ui.AnimBar:stopTalk(" .. talkingList[i * 2 + 1] .. ")"
|
|
button.b.tooltip = i18n.get("uiR2EDStopDMSpeakAs")
|
|
setDbProp("UI:VARIABLES:R2_DM_CONTROLLED:" .. index .. ":TEXT_ID", talkingList[i * 2 + 1])
|
|
index = index + 1
|
|
end
|
|
for i = 0, (numIncarnated / 2) - 1 do
|
|
local button = wnd["b" .. index]
|
|
button.active = true
|
|
button.b.texture="r2_icon_possess_small.tga"
|
|
button.b.texture_pushed="r2_icon_possess_small_pushed.tga"
|
|
button.b.texture_over="r2_icon_possess_small_over.tga"
|
|
button.b.tooltip = i18n.get("uiR2EDStopDMControl")
|
|
button.b.params_l="r2.ui.AnimBar:stopIncarnate(" .. incarnatingList[i * 2 + 1] .. ")"
|
|
setDbProp("UI:VARIABLES:R2_DM_CONTROLLED:" .. index .. ":TEXT_ID", incarnatingList[i * 2 + 1])
|
|
index = index + 1
|
|
end
|
|
while index < maxNumPossessedEntities do
|
|
wnd["b" .. index].active = false
|
|
index = index + 1
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------------
|
|
-- stop talk on an entity
|
|
function r2.ui.AnimBar:stopTalk(entityId)
|
|
r2:dssTarget('STOP_TALK ' .. entityId)
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------------
|
|
-- stop incarnate on an entity
|
|
function r2.ui.AnimBar:stopIncarnate(entityId)
|
|
r2:dssTarget('STOP_CONTROL ' .. entityId)
|
|
end
|
|
|
|
---------------
|
|
-- PRIVATE --
|
|
---------------
|
|
|
|
----------------------------------------------------------------------------------------------------------
|
|
-- get reference on a button in the select bar by its name
|
|
function r2.ui.AnimBar:getButton(name)
|
|
assert(name)
|
|
return getUI("ui:interface:r2ed_testbar:" .. name)
|
|
end
|
|
|
|
------------------------------------------------------------------------------------
|
|
-- Update pos of all buttons, so that x of first visible button will be 0
|
|
function r2.ui.AnimBar:updateButtonsPos()
|
|
local currX = 0
|
|
local firstButton = true
|
|
local function updateX(name, gap)
|
|
local but = self:getButton(name)
|
|
if but.active then
|
|
if not firstButton then
|
|
currX = currX + gap
|
|
else
|
|
firstButton = false
|
|
end
|
|
but.x = currX
|
|
currX = currX + 44
|
|
else
|
|
but.x = 0
|
|
end
|
|
end
|
|
|
|
updateX("r2ed_anim_test_mode", 0)
|
|
updateX("r2ed_anim_dm_mode", 4)
|
|
updateX("r2ed_anim_acts", 4)
|
|
updateX("r2ed_anim_triggers", 4)
|
|
updateX("r2ed_anim_speak_as", 12)
|
|
updateX("r2ed_anim_stop_speak", 4)
|
|
updateX("r2ed_anim_control", 4)
|
|
updateX("r2ed_anim_stop_control", 4)
|
|
updateX("r2ed_anim_add_hp", 4)
|
|
updateX("r2ed_anim_grp_heal", 4)
|
|
updateX("r2ed_anim_kill", 4)
|
|
updateX("r2ed_anim_grp_kill", 4)
|
|
updateX("r2ed_anim_despawn", 4)
|
|
updateX("r2ed_anim_weather", 12)
|
|
updateX("r2ed_anim_dm_gift", 12)
|
|
end
|
|
|
|
|