mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-12-29 12:20:53 +00:00
3931 lines
120 KiB
Lua
3931 lines
120 KiB
Lua
r2.maxActivities = 14
|
|
r2.sequencesNb = 0
|
|
|
|
r2.TimeLimitsProp = {
|
|
[tostring(i18n.get("uiR2EdNoTimeLimit"))]="No Limit",
|
|
--["Until a certain time"]="Until",
|
|
[tostring(i18n.get("uiR2EdWhileChat"))]="Chat",
|
|
[tostring(i18n.get("uiR2EdForCertainTime"))]="Few Sec"
|
|
}
|
|
r2.TimeLimitsCB = {
|
|
["No Limit"]=tostring(i18n.get("uiR2EdNoTimeLimit")),
|
|
--["Until"]="Until a certain time",
|
|
["Chat"]=tostring(i18n.get("uiR2EdWhileChat")),
|
|
["Few Sec"]=tostring(i18n.get("uiR2EdForCertainTime")),
|
|
}
|
|
|
|
r2.activityTypeMenu = {
|
|
["Inactive"]=tostring(i18n.get("uiR2EdInactive")),
|
|
["Stand Still"]=tostring(i18n.get("uiR2EdStandStill")),
|
|
["Follow Route"]=tostring(i18n.get("uiR2EdFollowRoad")),
|
|
["Patrol"]=tostring(i18n.get("uiR2EdPatrol")),
|
|
["Repeat Road"]=tostring(i18n.get("uiR2EdRepeatRoad")),
|
|
--["Deploy"]=tostring(i18n.get("uiR2EdDeploy")),
|
|
["Wander"]=tostring(i18n.get("uiR2EdWander")),
|
|
["Stand On Start Point"]=tostring(i18n.get("uiR2EdStandOnStartPoint")),
|
|
["Go To Start Point"]=tostring(i18n.get("uiR2EdGoToStartPoint")),
|
|
["Go To Zone"]=tostring(i18n.get("uiR2EdGoToZone")),
|
|
["Sit Down"]=tostring(i18n.get("uiR2EdSitDown")),
|
|
["Stand Up"]=tostring(i18n.get("uiR2EdStandUp")),
|
|
|
|
}
|
|
|
|
r2.fromNPCNameToId = {}
|
|
r2.fromEmoteIdToName = {}
|
|
|
|
r2.ownCreatedInstances = {}
|
|
|
|
|
|
------------------ INIT TRIGGERS EDITOR ----------------------------------------------------------------
|
|
function r2:initTriggersEditor()
|
|
|
|
-- emote
|
|
local menuName = "ui:interface:r2ed_triggers_menu"
|
|
local emoteMenu = getUI(menuName)
|
|
local emoteMenu = emoteMenu:getRootMenu()
|
|
assert(emoteMenu)
|
|
emoteMenu:reset()
|
|
|
|
local emoteTable = initEmotesMenu(menuName, "")
|
|
for id, name in pairs(emoteTable) do
|
|
r2.fromEmoteIdToName[id] = name
|
|
end
|
|
end
|
|
|
|
------------------ INIT TRIGGERS EDITOR ----------------------------------------------------------------
|
|
function r2:initActivityEditor(activityEditor)
|
|
|
|
-- time limit
|
|
local timeLimitCB = activityEditor:find("time_limit"):find("combo_box")
|
|
assert(timeLimitCB)
|
|
timeLimitCB:resetTexts()
|
|
timeLimitCB:addText(ucstring(i18n.get("uiR2EdNoTimeLimit")))
|
|
--timeLimitCB:addText(ucstring("Until a certain time"))
|
|
timeLimitCB:addText(ucstring(i18n.get("uiR2EdForCertainTime")))
|
|
timeLimitCB:addText(ucstring(i18n.get("uiR2EdWhileChat")))
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
function r2:getSelectedEltUI(uiName)
|
|
local id = r2:getSelectedEltUIId(uiName)
|
|
if id then
|
|
return getUI(id)
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
function r2:getSelectedEltUIId(uiName)
|
|
|
|
if uiName == nil then
|
|
dumpCallStack(1)
|
|
assert(false)
|
|
end
|
|
local windowUI = getUI("ui:interface:"..uiName)
|
|
assert(windowUI)
|
|
|
|
return windowUI.Env.selectedElementId
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
function r2:setSelectedEltUIId(uiName, eltUIId)
|
|
local windowUI = getUI("ui:interface:"..uiName)
|
|
assert(windowUI)
|
|
|
|
windowUI.Env.selectedElementId = eltUIId
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
function r2:getSelectedEltInstId(uiName)
|
|
|
|
local element = r2:getSelectedEltUI(uiName)
|
|
if element ~= nil then
|
|
return element.Env.elementId
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
function r2:setSelectedEltInstId(uiName, instId)
|
|
local element = r2:getSelectedEltUI(uiName)
|
|
assert(element)
|
|
element.Env.elementId = instId
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
function r2:getSelectedEltInst(uiName)
|
|
local id = r2:getSelectedEltInstId(uiName)
|
|
if id then
|
|
return r2:getInstanceFromId(id)
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
function r2:getSelectedSequInstId(uiName)
|
|
local windowUI = getUI("ui:interface:"..uiName)
|
|
assert(windowUI)
|
|
|
|
local tab = windowUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local sequence = windowUI:find(tab.associatedGroupSelection)
|
|
assert(sequence)
|
|
|
|
if sequence.Env == nil then return nil end
|
|
|
|
return sequence.Env.sequenceId
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
function r2:getSelectedSequInst(uiName)
|
|
local id = r2:getSelectedSequInstId(uiName)
|
|
if id then
|
|
return r2:getInstanceFromId(id)
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
function r2:getSelectedSequ(uiName)
|
|
local windowUI = getUI("ui:interface:"..uiName)
|
|
assert(windowUI)
|
|
|
|
local tab = windowUI:find("sequence_tabs")
|
|
|
|
if tab~=nil then
|
|
local associatedGroup = tab.associatedGroupSelection
|
|
if associatedGroup == "" then
|
|
return nil
|
|
end
|
|
|
|
local sequence = windowUI:find(associatedGroup)
|
|
assert(sequence)
|
|
|
|
return sequence
|
|
else
|
|
return windowUI:find("sequence_elts")
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
function r2:setSelectedSequInstId(uiName, instanceId)
|
|
|
|
local windowUI = getUI("ui:interface:"..uiName)
|
|
assert(windowUI)
|
|
|
|
local tab = windowUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local sequence = windowUI:find(tab.associatedGroupSelection)
|
|
assert(sequence)
|
|
|
|
sequence.Env.sequenceId = instanceId
|
|
end
|
|
|
|
------------------ CLOSE ALL UI --------------------------------------------------------------------
|
|
function r2:closeActivitySequenceUI()
|
|
|
|
local window = getUI("ui:interface:r2ed_edit_activity_sequence")
|
|
if window~=nil then
|
|
window.active = false
|
|
|
|
r2:openAndUpdateMiniActivityView()
|
|
end
|
|
end
|
|
|
|
------------------ NEW SEQUENCE --------------------------------------------------------------------
|
|
function r2:newActivitiesSequence(firstRequest, activitySequence, reset)
|
|
|
|
|
|
local triggersUI = getUI("ui:interface:r2ed_triggers")
|
|
assert(triggersUI)
|
|
|
|
local tab = triggersUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
if firstRequest and tab.tabButtonNb == 7 then return -1 end
|
|
|
|
if firstRequest == true then
|
|
activitySequence = r2.newComponent("ActivitySequence")
|
|
|
|
--local name = tostring(i18n.get("uiR2EdSeq"))..tab.tabButtonNb+1
|
|
--activitySequence.Name = name
|
|
|
|
local npcGroup = r2:getSelectedInstance()
|
|
assert(npcGroup)
|
|
|
|
r2.requestInsertNode(npcGroup:getBehavior().InstanceId, "Activities", -1, "", activitySequence)
|
|
-- r2.requestInsertNode(npcGroup.InstanceId,"ActivitiesId",-1,"",activitySequence.InstanceId)
|
|
-- r2.requestInsertNode(r2:getCurrentAct().InstanceId,"ActivitiesIds",-1,"",activitySequence.InstanceId)
|
|
|
|
r2.ownCreatedInstances[activitySequence.InstanceId] = true
|
|
|
|
return activitySequence.InstanceId
|
|
else
|
|
|
|
local updateMiniActivityView = r2.ownCreatedInstances[activitySequence.InstanceId]
|
|
if reset then
|
|
r2.ownCreatedInstances[activitySequence.InstanceId] = true
|
|
end
|
|
|
|
local templateParams = {
|
|
newElt="r2:newActivity(true)",
|
|
newEltText=tostring(i18n.get("uiR2EdNewActivity")),
|
|
eltOrderText=tostring(i18n.get("uiR2EdActivityOrder")),
|
|
upElt="r2:upActivity()",
|
|
downElt="r2:downActivity()",
|
|
maxMinElts="r2:maximizeMinimizeActivities()",
|
|
downUpColor="200 120 80 255",
|
|
colPushed = "200 80 80 255",
|
|
paramsL= "r2:selectSequenceTab('r2ed_triggers', "..tostring(tab.tabButtonNb)..")"
|
|
}
|
|
|
|
local editorEltTemplate = "template_edit_activity"
|
|
local sequence = r2:newElementsSequence("r2ed_triggers", templateParams, editorEltTemplate,
|
|
activitySequence, tostring(i18n.get("uiR2EdSeq")))
|
|
r2:initActivityEditor(sequence:find("edit_element"))
|
|
|
|
local activities = activitySequence.Components
|
|
for a = 0, activities.Size - 1 do
|
|
r2:newActivity(false, nil, activities[a])
|
|
end
|
|
|
|
-- new MiniActivity sequence
|
|
if updateMiniActivityView==true then
|
|
--r2:updateSequencesButtonBar(tab.tabButtonNb-1, activitySequence.Name)
|
|
r2:updateSequencesButtonBar(tab.tabButtonNb-1, r2:getSequenceName(activitySequence))
|
|
r2:openAndUpdateMiniActivityView()
|
|
end
|
|
end
|
|
end
|
|
|
|
------------------ REMOVE SEQUENCE -----------------------------------------------------------------
|
|
function r2:removeActivitiesSequence()
|
|
|
|
local sequenceId = r2:removeElementsSequence("r2ed_triggers", "Activities", tostring(i18n.get("uiR2EdSeq")))
|
|
|
|
-- local group = r2:getSelectedInstance()
|
|
-- assert(group)
|
|
-- local sequenceIndex = -1
|
|
-- for i=0,group.ActivitiesId.Size-1 do
|
|
-- if group.ActivitiesId[i] == sequenceId then
|
|
-- sequenceIndex = i
|
|
-- break
|
|
-- end
|
|
-- end
|
|
-- if sequenceIndex ~= -1 then
|
|
-- r2.requestEraseNode(group.InstanceId, "ActivitiesId", sequenceIndex)
|
|
-- end
|
|
--
|
|
-- local currentAct = r2:getCurrentAct()
|
|
-- sequenceIndex = -1
|
|
-- for i=0,currentAct.ActivitiesIds.Size-1 do
|
|
-- if currentAct.ActivitiesIds[i] == sequenceId then
|
|
-- sequenceIndex = i
|
|
-- break
|
|
-- end
|
|
-- end
|
|
-- if sequenceIndex ~= -1 then
|
|
-- r2.requestEraseNode(currentAct.InstanceId, "ActivitiesIds", sequenceIndex)
|
|
-- end
|
|
end
|
|
|
|
function r2:removeActivitiesSequenceUI(tabIndex)
|
|
local firstEltName = r2:removeElementsSequenceUI(tabIndex, "r2ed_triggers", "Activities", tostring(i18n.get("uiR2EdSeq")))
|
|
|
|
r2:updateSequencesButtonBar(0, firstEltName)
|
|
end
|
|
|
|
------------------ SELECT ACTIVITY ------------------------------------------------------------------
|
|
function r2:selectActivity()
|
|
r2:selectTriggerElement(nil, "r2ed_triggers")
|
|
|
|
if getUICaller().pushed == true then
|
|
r2:updateActivityEditor()
|
|
end
|
|
end
|
|
|
|
------------------ NEW ACTIVITY --------------------------------------------------------------------
|
|
function r2:newActivity(firstRequest, tableInit, instanceElement, sequenceUI, sequenceInstId)
|
|
|
|
|
|
|
|
local uiName = "r2ed_triggers"
|
|
|
|
if sequenceUI == nil then
|
|
sequenceUI = r2:getSelectedSequ(uiName)
|
|
end
|
|
local activityList
|
|
if sequenceUI~=nil then
|
|
activityList = sequenceUI:find("elements_list")
|
|
assert(activityList)
|
|
|
|
if activityList.childrenNb-1 == r2.maxActivities then return false end
|
|
end
|
|
|
|
if firstRequest == true then
|
|
|
|
instanceElement = r2.newComponent("ActivityStep")
|
|
|
|
if tableInit ~= nil then
|
|
instanceElement.Activity = tableInit.Activity
|
|
instanceElement.ActivityZoneId = r2.RefId(tableInit.ActivityZoneId)
|
|
instanceElement.TimeLimit = tableInit.TimeLimit
|
|
instanceElement.TimeLimitValue = tableInit.TimeLimitValue
|
|
else
|
|
instanceElement.TimeLimit = "No Limit"
|
|
instanceElement.Activity = "Stand Still"
|
|
end
|
|
|
|
if sequenceInstId == nil then
|
|
sequenceInstId = r2:getSelectedSequInstId(uiName)
|
|
end
|
|
assert(sequenceInstId)
|
|
|
|
r2.requestInsertNode(sequenceInstId, "Components", -1, "", instanceElement)
|
|
|
|
r2.ownCreatedInstances[instanceElement.InstanceId] = true
|
|
else
|
|
|
|
local templateParams = {
|
|
selectElt="r2:selectActivity()",
|
|
openEltEditor="r2:openActivityEditor()",
|
|
maxMinElt="r2:maximizeMinimizeActivity()",
|
|
removeElt="r2:removeActivity()",
|
|
colOver="200 120 80 120",
|
|
colPushed="200 120 80 255"
|
|
}
|
|
|
|
local element = r2:newTriggerElement(uiName, tostring(i18n.get("uiR2EdActivity")), templateParams, sequenceUI, instanceElement.InstanceId)
|
|
|
|
r2:updateActivityChatSequence(element)
|
|
|
|
-- active chat button if a chat sequence is associated to this activity
|
|
if instanceElement.Chat ~= "" then
|
|
|
|
local activityEditor = sequenceUI:find("edit_element")
|
|
assert(activityEditor)
|
|
local chatButtonEditor = activityEditor:find("open_chat_sequence")
|
|
assert(chatButtonEditor)
|
|
|
|
chatButtonEditor.active = true
|
|
end
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
|
|
function r2:buildActivityTitle(activityUI, erase)
|
|
|
|
local activityInst = r2:getInstanceFromId(activityUI.Env.elementId)
|
|
assert(activityInst)
|
|
|
|
-- part1
|
|
local index = r2:searchElementIndex(activityInst)
|
|
if erase==true then index = index-1 end
|
|
local part1 = tostring(i18n.get("uiR2EdActivity")).." "..index.." : "
|
|
|
|
-- part2
|
|
if not r2.activityTypeMenu[activityInst.Activity] then
|
|
debugInfo(colorTag(255,0,0).."The activity '".. activityInst.Activity.."' is not properly registred")
|
|
end
|
|
|
|
local part2 = r2.activityTypeMenu[activityInst.Activity].." "
|
|
if activityInst.ActivityZoneId~= "" then
|
|
local place = r2:getInstanceFromId(tostring(activityInst.ActivityZoneId))
|
|
if place~=nil then
|
|
part2 = part2.. place.Name .." "
|
|
end
|
|
end
|
|
|
|
-- part3
|
|
local part3 = ""
|
|
if activityInst.TimeLimit == "Few Sec" then
|
|
|
|
local hourNb, minNb, secNb = r2:calculHourMinSec(tonumber(activityInst.TimeLimitValue))
|
|
|
|
local timeLimitText = tostring(i18n.get("uiR2EdFor")) .. " "
|
|
if hourNb ~= 0 then timeLimitText = timeLimitText .. hourNb .. tostring(i18n.get("uiR2EdShortHours")) .. " " end
|
|
if minNb ~= 0 then timeLimitText = timeLimitText .. minNb .. tostring(i18n.get("uiR2EdShortMinutes")) .. " " end
|
|
timeLimitText = timeLimitText .. secNb .. tostring(i18n.get("uiR2EdShortSeconds"))
|
|
|
|
part3 = timeLimitText
|
|
|
|
elseif r2.TimeLimitsCB[activityInst.TimeLimit] ~= nil then
|
|
part3 = string.lower(r2.TimeLimitsCB[activityInst.TimeLimit])
|
|
end
|
|
|
|
-- title
|
|
local title = activityUI:find("title")
|
|
assert(title)
|
|
title.uc_hardtext= part1..part2..part3
|
|
end
|
|
|
|
function r2:getActivityName(activityInst)
|
|
|
|
-- part1
|
|
local index = r2:searchElementIndex(activityInst)
|
|
if erase==true then index = index-1 end
|
|
local part1 = tostring(i18n.get("uiR2EdActivity")).." "..index.." : "
|
|
|
|
-- part2
|
|
if not r2.activityTypeMenu[activityInst.Activity] then
|
|
debugInfo(colorTag(255,0,0).."The activity '".. activityInst.Activity.."' is not properly registred")
|
|
end
|
|
|
|
local part2 = r2.activityTypeMenu[activityInst.Activity].." "
|
|
if activityInst.ActivityZoneId~= "" then
|
|
local place = r2:getInstanceFromId(tostring(activityInst.ActivityZoneId))
|
|
if place~=nil then
|
|
part2 = part2.. place.Name .." "
|
|
end
|
|
end
|
|
|
|
-- part3
|
|
local part3 = ""
|
|
if activityInst.TimeLimit == "Few Sec" then
|
|
|
|
local hourNb, minNb, secNb = r2:calculHourMinSec(tonumber(activityInst.TimeLimitValue))
|
|
|
|
local timeLimitText = tostring(i18n.get("uiR2EdFor")) .. " "
|
|
if hourNb ~= 0 then timeLimitText = timeLimitText .. hourNb .. tostring(i18n.get("uiR2EdShortHours")) .. " " end
|
|
if minNb ~= 0 then timeLimitText = timeLimitText .. minNb .. tostring(i18n.get("uiR2EdShortMinutes")) .. " " end
|
|
timeLimitText = timeLimitText .. secNb .. tostring(i18n.get("uiR2EdShortSeconds"))
|
|
|
|
part3 = timeLimitText
|
|
|
|
elseif r2.TimeLimitsCB[activityInst.TimeLimit] ~= nil then
|
|
part3 = string.lower(r2.TimeLimitsCB[activityInst.TimeLimit])
|
|
end
|
|
|
|
return part1..part2..part3
|
|
end
|
|
|
|
function r2:getElementName(elementInst)
|
|
|
|
if elementInst:isKindOf("ActivityStep") then
|
|
return r2:getActivityName(elementInst)
|
|
elseif elementInst:isKindOf("ChatStep") then
|
|
return r2:getChatName(elementInst)
|
|
elseif elementInst:isKindOf("LogicEntityAction") then
|
|
return r2:getActionName(elementInst)
|
|
elseif elementInst:isKindOf("LogicEntityReaction") then
|
|
return r2:getReactionName(elementInst)
|
|
elseif elementInst:isKindOf("ChatSequence") or elementInst:isKindOf("ActivitySequence") then
|
|
return r2:getSequenceName(elementInst)
|
|
end
|
|
|
|
return ""
|
|
end
|
|
|
|
function r2:updateActivityChatSequence(elementUI, canceledChatStepId)
|
|
|
|
if elementUI == nil then
|
|
elementUI = r2:getSelectedEltUI("r2ed_triggers")
|
|
end
|
|
assert(elementUI)
|
|
|
|
local instance = r2:getInstanceFromId(elementUI.Env.elementId)
|
|
assert(instance)
|
|
|
|
local chatSequence = r2:getInstanceFromId(tostring(instance.Chat))
|
|
|
|
local activityText = elementUI:find("text_list")
|
|
assert(activityText)
|
|
|
|
local sep = elementUI:find("sep")
|
|
assert(sep)
|
|
|
|
activityText:clear()
|
|
|
|
if chatSequence ~= nil then
|
|
local counterTime = 0
|
|
|
|
if chatSequence.Components.Size > 0 then
|
|
|
|
local emptyText = true
|
|
|
|
activityText:addColoredTextChild("\n"..tostring(i18n.get("uiR2EdSequenceStart")), 255, 175, 135, 255)
|
|
|
|
for c = 0, chatSequence.Components.Size - 1 do
|
|
local chat = chatSequence.Components[c]
|
|
|
|
if chat.InstanceId ~= canceledChatStepId then
|
|
counterTime = counterTime + tonumber(chat.Time)
|
|
|
|
local firstLine = true
|
|
|
|
local who = tostring(chat.Actions[0].Who)
|
|
if who ~= "" then
|
|
|
|
local facing = tostring(chat.Actions[0].Facing)
|
|
local emote = chat.Actions[0].Emote
|
|
local says = chat.Actions[0].Says
|
|
|
|
local minNb, secNb = r2:calculMinSec(counterTime)
|
|
local countInfo = "*"
|
|
if minNb ~= 0 then
|
|
countInfo = countInfo..tostring(minNb)..tostring(i18n.get("uiR2EdShortMinutes"))
|
|
end
|
|
countInfo = countInfo.." "..tostring(secNb)..tostring(i18n.get("uiR2EdShortSeconds"))..":"
|
|
|
|
if facing ~= "" then
|
|
facing = r2:getInstanceFromId(who).Name .. " "..tostring(i18n.get("uiR2EdFaces")).." " .. r2:getInstanceFromId(facing).Name
|
|
if firstLine then
|
|
activityText:addColoredTextChild(countInfo, 220, 140, 100, 255)
|
|
firstLine = false
|
|
end
|
|
activityText:addTextChild(ucstring(facing))
|
|
emptyText = false
|
|
end
|
|
if r2.fromEmoteIdToName[emote] ~= nil then
|
|
emote = r2:getInstanceFromId(who).Name .. " "..string.lower(tostring(i18n.get("uiR2EdEmote"))).." : " .. r2.fromEmoteIdToName[emote]
|
|
if firstLine then
|
|
activityText:addColoredTextChild(countInfo, 220, 140, 100, 255)
|
|
firstLine = false
|
|
end
|
|
activityText:addTextChild(ucstring(emote))
|
|
emptyText = false
|
|
end
|
|
if r2:getInstanceFromId(says)~=nil and r2:getInstanceFromId(says).Text ~= "" then
|
|
says = r2:getInstanceFromId(who).Name .. " "..tostring(i18n.get("uiR2EdSays")).." : " .. r2:getInstanceFromId(says).Text
|
|
if firstLine then
|
|
activityText:addColoredTextChild(countInfo, 220, 140, 100, 255)
|
|
firstLine = false
|
|
end
|
|
activityText:addTextChild(ucstring(says))
|
|
emptyText = false
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if emptyText == true then
|
|
activityText:clear()
|
|
sep.active = false
|
|
else
|
|
sep.active = true
|
|
|
|
local hourNb, minNb, secNb = r2:calculHourMinSec(counterTime)
|
|
local totalChatTime = ""
|
|
if hourNb ~= 0 then
|
|
totalChatTime = tostring(hourNb)..tostring(i18n.get("uiR2EdShortHours"))
|
|
end
|
|
if minNb ~= 0 then
|
|
totalChatTime = totalChatTime.." "..tostring(minNb)..tostring(i18n.get("uiR2EdShortMinutes"))
|
|
end
|
|
totalChatTime = totalChatTime.." "..tostring(secNb)..tostring(i18n.get("uiR2EdShortSeconds"))
|
|
activityText:addColoredTextChild(tostring(i18n.get("uiR2EdSequenceEnd")).." (".. totalChatTime ..")\n", 255, 175, 135, 255)
|
|
end
|
|
end
|
|
else
|
|
sep.active = false
|
|
end
|
|
|
|
--update title
|
|
r2:buildActivityTitle(elementUI, false)
|
|
|
|
if r2:getSelectedEltInstId("r2ed_triggers") == instance.InstanceId then
|
|
local eltEditor = r2:getSelectedSequ("r2ed_triggers"):find("edit_element")
|
|
assert(eltEditor)
|
|
r2:updateActivityEditor()
|
|
end
|
|
|
|
r2:updateMiniActivityView()
|
|
end
|
|
|
|
function r2:updateActivitiesWhithThisChatSequence(chatStep, canceled)
|
|
|
|
local chatSequenceId = chatStep.Parent.Parent.InstanceId
|
|
|
|
local chatStepId = nil
|
|
if canceled == true then chatStepId = chatStep.InstanceId end
|
|
|
|
local triggersUI = getUI("ui:interface:r2ed_triggers")
|
|
assert(triggersUI)
|
|
|
|
local tab = triggersUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
for s = 0,tab.tabButtonNb-1 do
|
|
local activitySequence = tab:getGroup(s)
|
|
assert(activitySequence)
|
|
|
|
local activityList = activitySequence:find("elements_list")
|
|
assert(activityList)
|
|
|
|
for a=0, activityList.childrenNb-1 do
|
|
local activity = activityList:getChild(a)
|
|
assert(activity)
|
|
|
|
if activity.Env.elementId~=nil then
|
|
local activityInst = r2:getInstanceFromId(activity.Env.elementId)
|
|
assert(activityInst)
|
|
if tostring(activityInst.Chat) == chatSequenceId then
|
|
r2:updateActivityChatSequence(activity, chatStepId)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
------------------ REMOVE ACTIVITY ------------------------------------------------------------------
|
|
function r2:removeActivity()
|
|
r2:removeTriggerElement("r2ed_triggers", tostring(i18n.get("uiR2EdActivity")))
|
|
end
|
|
|
|
function r2:removeActivityUI(sequenceUI, elementUI)
|
|
|
|
r2:removeElementUI(sequenceUI, "r2ed_triggers", elementUI)
|
|
r2:closeActivitySequenceUI()
|
|
|
|
local activityList = sequenceUI:find("elements_list")
|
|
assert(activityList)
|
|
end
|
|
|
|
------------------ UP ACTIVITY -----------------------------------------------------------------------
|
|
function r2:upActivity()
|
|
r2:upTriggerElement("r2ed_triggers")
|
|
end
|
|
|
|
------------------ DOWN ACTIVITY ---------------------------------------------------------------------
|
|
function r2:downActivity()
|
|
r2:downTriggerElement("r2ed_triggers")
|
|
end
|
|
|
|
------------------ MAXIMIZE MINIMIZE ACTIVITIES ------------------------------------------------------
|
|
function r2:maximizeMinimizeActivities()
|
|
r2:maximizeMinimizeTriggerElements("r2ed_triggers")
|
|
end
|
|
|
|
------------------ MAXIMIZE MINIMIZE ACTIVITY ------------------------------------------------------
|
|
function r2:maximizeMinimizeActivity()
|
|
r2:maximizeMinimizeElement("r2ed_triggers")
|
|
end
|
|
|
|
------------------ OPEN ACTIVITY EDITOR ----------------------------------------------------------------
|
|
function r2:openActivityEditor()
|
|
r2:updateActivityEditor()
|
|
r2:openElementEditor("r2ed_triggers", "uiR2EDActivityStepEditor")
|
|
end
|
|
|
|
function r2:updateActivityEditor()
|
|
|
|
local uiName = "r2ed_triggers"
|
|
local instanceActivity = r2:getSelectedEltInst(uiName)
|
|
|
|
local activityEditor = r2:getSelectedSequ(uiName):find("edit_element")
|
|
assert(activityEditor)
|
|
|
|
-- activity name
|
|
local activityName = activityEditor:find("name")
|
|
assert(activityName)
|
|
|
|
-- activity type
|
|
local activityButtonText = activityEditor:find("activity"):find("text")
|
|
assert(activityButtonText)
|
|
|
|
-- time limit
|
|
local comboBox = activityEditor:find("time_limit").combo_box
|
|
assert(comboBox)
|
|
|
|
-- chat sequence
|
|
local chatMenuButton = activityEditor:find("chat_script"):find("menu"):find("text")
|
|
assert(chatMenuButton)
|
|
|
|
local chatButtonEditor = activityEditor:find("open_chat_sequence")
|
|
assert(chatButtonEditor)
|
|
|
|
if instanceActivity then
|
|
|
|
local index = r2:searchElementIndex(instanceActivity)
|
|
if index~= nil then
|
|
activityName.uc_hardtext = tostring(i18n.get("uiR2EdActivity")).." "..index.." : "
|
|
else
|
|
activityName.uc_hardtext = tostring(i18n.get("uiR2EdActivity")).." : "
|
|
end
|
|
|
|
-- activity type
|
|
local activityText = r2.activityTypeMenu[instanceActivity.Activity]
|
|
if activityText then
|
|
activityButtonText.uc_hardtext = activityText
|
|
end
|
|
if instanceActivity.ActivityZoneId ~= "" then
|
|
local place = r2:getInstanceFromId(instanceActivity.ActivityZoneId)
|
|
assert(place)
|
|
|
|
activityButtonText.uc_hardtext = activityButtonText.hardtext .. " " .. place.Name
|
|
end
|
|
|
|
-- time limit
|
|
local timeLimit = instanceActivity.TimeLimit
|
|
|
|
local certainTime = activityEditor:find("certain_time")
|
|
assert(certainTime)
|
|
|
|
comboBox.Env.locked = true
|
|
if timeLimit == "Few Sec" then
|
|
local timeLimitValue = tonumber(instanceActivity.TimeLimitValue)
|
|
|
|
if timeLimitValue ~= nil then
|
|
|
|
local hoursNb, minNb, secNb = r2:calculHourMinSec(timeLimitValue)
|
|
|
|
local timeLimitText = tostring(i18n.get("uiR2EdFor")) .. " "
|
|
if hoursNb ~= 0 then timeLimitText = timeLimitText .. hoursNb .. tostring(i18n.get("uiR2EdShortHours")) .. " " end
|
|
if minNb ~= 0 then timeLimitText = timeLimitText .. minNb .. tostring(i18n.get("uiR2EdShortMinutes")) .. " " end
|
|
timeLimitText = timeLimitText .. secNb .. tostring(i18n.get("uiR2EdShortSeconds"))
|
|
|
|
certainTime.active = true
|
|
local hoursMenu = certainTime:find("hours"):find("text")
|
|
assert(hoursMenu)
|
|
hoursMenu.uc_hardtext = tostring(hoursNb)
|
|
|
|
local minutesMenu = certainTime:find("minutes"):find("text")
|
|
assert(minutesMenu)
|
|
minutesMenu.uc_hardtext = tostring(minNb)
|
|
|
|
local secondsMenu = certainTime:find("seconds"):find("text")
|
|
assert(secondsMenu)
|
|
secondsMenu.uc_hardtext = tostring(secNb)
|
|
|
|
comboBox.view_text = timeLimitText
|
|
end
|
|
else
|
|
certainTime.active = false
|
|
timeLimit = r2.TimeLimitsCB[timeLimit]
|
|
if timeLimit~= nil then
|
|
comboBox.selection_text = timeLimit
|
|
end
|
|
end
|
|
comboBox.Env.locked = false
|
|
|
|
-- chat sequence TEMP TEMP TEMP TEMP
|
|
local sequenceChat = r2:getInstanceFromId(tostring(instanceActivity.Chat))
|
|
local repeatLabelButton = activityEditor:find("repeat")
|
|
assert(repeatLabelButton)
|
|
|
|
if sequenceChat ~= nil then
|
|
--chatMenuButton.uc_hardtext = sequenceChat.Name
|
|
chatMenuButton.uc_hardtext = r2:getSequenceName(sequenceChat)
|
|
|
|
repeatLabelButton.active = true
|
|
local repeatButton = repeatLabelButton:find("toggle_butt")
|
|
assert(repeatButton)
|
|
repeatButton.pushed = not (instanceActivity.Type == "Repeating")
|
|
|
|
chatButtonEditor.active = true
|
|
else
|
|
repeatLabelButton.active = false
|
|
chatMenuButton.uc_hardtext = i18n.get("uiR2EdNoElt")
|
|
|
|
chatButtonEditor.active = false
|
|
end
|
|
-- TEMP TEMP TEMP
|
|
|
|
else
|
|
|
|
local name = tostring(i18n.get("uiR2EdActivity")).." : "
|
|
activityName.uc_hardtext = name
|
|
|
|
activityButtonText.uc_hardtext = i18n.get("uiR2EdStandStill")
|
|
comboBox.selection_text = i18n.get("uiR2EdNoTimeLimit")
|
|
chatMenuButton.uc_hardtext = i18n.get("uiR2EdNoElt")
|
|
|
|
chatButtonEditor.active = false
|
|
end
|
|
end
|
|
|
|
------------------ REPEAT ACTIVITY SEQUENCE -------------------------------------------------------------
|
|
function r2:repeatActivitySequence()
|
|
r2.requestNewAction(i18n.get("uiR2EDRepeatActivitySequenceAction"))
|
|
|
|
local sequenceInstId = r2:getSelectedSequInstId("r2ed_triggers")
|
|
assert(sequenceInstId)
|
|
|
|
local sequenceType = not getUICaller().pushed
|
|
if sequenceType==false then sequenceType=0 else sequenceType=1 end
|
|
|
|
r2.requestSetNode(sequenceInstId, "Repeating", sequenceType)
|
|
end
|
|
|
|
------------------ CLOSE ACTIVITY EDITOR ----------------------------------------------------------------
|
|
function r2:closeChatSequencesUI()
|
|
|
|
local window = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(window)
|
|
window.active = false
|
|
|
|
window = getUI("ui:interface:r2ed_edit_chat_sequence")
|
|
assert(window)
|
|
window.active = false
|
|
end
|
|
|
|
------------------ OPEN ACTIVITY MENU -------------------------------------------------------------------
|
|
function r2:openActivityMenu()
|
|
|
|
local menuName = "ui:interface:r2ed_triggers_menu"
|
|
local activityMenu = getUI(menuName)
|
|
local activityMenu = activityMenu:getRootMenu()
|
|
assert(activityMenu)
|
|
activityMenu:reset()
|
|
|
|
-- Inactive
|
|
-- activityMenu:addLine(ucstring(i18n.get("uiR2EdInactive")), "lua", "r2:setActivity('Inactive')", "Inactive")
|
|
|
|
-- Stand still
|
|
activityMenu:addLine(ucstring(i18n.get("uiR2EdStandStill")), "lua", "r2:setActivity('Stand Still')", "Stand Still")
|
|
|
|
-- Follow route
|
|
activityMenu:addLine(ucstring(i18n.get("uiR2EdFollowRoad")), "", "", "Follow Route")
|
|
local menuButton = createGroupInstance("r2_menu_button", "", { bitmap = "r2ed_icon_road.tga", size="14" })
|
|
activityMenu:setUserGroupLeft(1, menuButton)
|
|
activityMenu:addSubMenu(1)
|
|
local roadsMenu = activityMenu:getSubMenu(1)
|
|
local roadsTable = r2.Scenario:getAllInstancesByType("Road")
|
|
for key, road in pairs(roadsTable) do
|
|
roadsMenu:addLine(ucstring(road.Name), "lua", "r2:setActivity('Follow Route', '".. road.InstanceId .."')", road.InstanceId)
|
|
end
|
|
if table.getn(roadsTable) == 0 then
|
|
roadsMenu:addLine(ucstring(i18n.get("uiR2EdNoSelelection")), "lua", "r2:setActivity()", "")
|
|
end
|
|
|
|
-- Patrol
|
|
activityMenu:addLine(ucstring(i18n.get("uiR2EdPatrol")), "", "", "Patrol")
|
|
menuButton = createGroupInstance("r2_menu_button", "", { bitmap = "r2ed_icon_road.tga", size="14"})
|
|
activityMenu:setUserGroupLeft(2, menuButton)
|
|
activityMenu:addSubMenu(2)
|
|
roadsMenu = activityMenu:getSubMenu(2)
|
|
for key, road in pairs(roadsTable) do
|
|
roadsMenu:addLine(ucstring(road.Name), "lua", "r2:setActivity('Patrol', '".. road.InstanceId .."')", road.InstanceId)
|
|
end
|
|
if table.getn(roadsTable) == 0 then
|
|
roadsMenu:addLine(ucstring(i18n.get("uiR2EdNoSelelection")), "lua", "r2:setActivity()", "")
|
|
end
|
|
|
|
-- Repeat Road
|
|
activityMenu:addLine(ucstring(i18n.get("uiR2EdRepeatRoad")), "", "", "Repeat Road")
|
|
menuButton = createGroupInstance("r2_menu_button", "", { bitmap = "r2ed_icon_road.tga", size="14"})
|
|
activityMenu:setUserGroupLeft(3, menuButton)
|
|
activityMenu:addSubMenu(3)
|
|
roadsMenu = activityMenu:getSubMenu(3)
|
|
for key, road in pairs(roadsTable) do
|
|
roadsMenu:addLine(ucstring(road.Name), "lua", "r2:setActivity('Repeat Road', '".. road.InstanceId .."')", road.InstanceId)
|
|
end
|
|
if table.getn(roadsTable) == 0 then
|
|
roadsMenu:addLine(ucstring(i18n.get("uiR2EdNoSelelection")), "lua", "r2:setActivity()", "")
|
|
end
|
|
|
|
-- Wander
|
|
activityMenu:addLine(ucstring(i18n.get("uiR2EdWander")), "", "", "Wander")
|
|
menuButton = createGroupInstance("r2_menu_button", "", { bitmap = "r2ed_icon_region.tga", size="14"})
|
|
activityMenu:setUserGroupLeft(4, menuButton)
|
|
activityMenu:addSubMenu(4)
|
|
local regionsMenu = activityMenu:getSubMenu(4)
|
|
local regionsTable = r2.Scenario:getAllInstancesByType("Region")
|
|
for key, region in pairs(regionsTable) do
|
|
regionsMenu:addLine(ucstring(region.Name), "lua", "r2:setActivity('Wander', '".. region.InstanceId .."')", region.InstanceId)
|
|
end
|
|
if table.getn(regionsTable) == 0 then
|
|
regionsMenu:addLine(ucstring(i18n.get("uiR2EdNoSelelection")), "lua", "r2:setActivity()", "")
|
|
end
|
|
|
|
-- Deploy
|
|
-- activityMenu:addLine(ucstring(i18n.get("uiR2EdDeploy")), "", "", "Deploy")
|
|
-- menuButton = createGroupInstance("r2_menu_button", "", { bitmap = "r2ed_icon_region.tga", size="14"})
|
|
-- activityMenu:setUserGroupLeft(6, menuButton)
|
|
-- activityMenu:addSubMenu(6)
|
|
-- local regionsMenu = activityMenu:getSubMenu(6)
|
|
-- local regionsTable = r2.Scenario:getAllInstancesByType("Region")
|
|
-- for key, region in regionsTable do
|
|
-- regionsMenu:addLine(ucstring(region.Name), "lua", "r2:setActivity('Deploy', '".. region.InstanceId .."')", region.InstanceId)
|
|
-- end
|
|
-- if table.getn(regionsTable) == 0 then
|
|
-- regionsMenu:addLine(ucstring(i18n.get("uiR2EdNoSelelection")), "lua", "r2:setActivity()", "")
|
|
-- end
|
|
|
|
r2:openTriggersMenu(getUICaller())
|
|
end
|
|
|
|
function r2:setActivity(activityType, placeId)
|
|
|
|
|
|
|
|
local activityInstId = r2:getSelectedEltInstId("r2ed_triggers")
|
|
assert(activityInstId)
|
|
|
|
if activityType == nil then
|
|
return
|
|
elseif placeId == nil then
|
|
r2.requestSetNode(activityInstId, "Activity", activityType)
|
|
r2.requestSetNode(activityInstId, "ActivityZoneId", r2.RefId(""))
|
|
else
|
|
r2.requestSetNode(activityInstId, "Activity", activityType)
|
|
r2.requestSetNode(activityInstId, "ActivityZoneId", r2.RefId(placeId))
|
|
end
|
|
end
|
|
|
|
------------------ SET TIME LIMIT --------------------------------------------------------------------
|
|
function r2:setTimeLimit(timeLimit)
|
|
|
|
if timeLimit == nil then
|
|
timeLimit = getUICaller().selection_text
|
|
if getUICaller().Env.locked then return end
|
|
end
|
|
|
|
local uiName = "r2ed_triggers"
|
|
local activity = r2:getSelectedEltUI(uiName)
|
|
if activity == nil then return end
|
|
|
|
local viewText
|
|
local hasTimeLimitValue = false
|
|
|
|
if timeLimit == tostring(i18n.get("uiR2EdForCertainTime")) then
|
|
hasTimeLimitValue = true
|
|
viewText = tostring(i18n.get("uiR2EdFor")) .. " 20" .. tostring(i18n.get("uiR2EdShortSeconds"))
|
|
|
|
local eltEditor = r2:getSelectedSequ(uiName):find("edit_element")
|
|
assert(eltEditor)
|
|
local comboTime = eltEditor:find("time_limit"):find("combo_box")
|
|
assert(comboTime)
|
|
comboTime.view_text = viewText
|
|
else
|
|
viewText = timeLimit
|
|
end
|
|
|
|
timeLimit = r2.TimeLimitsProp[timeLimit]
|
|
|
|
local activityInstId = r2:getSelectedEltInstId(uiName)
|
|
r2.requestSetNode(activityInstId, "TimeLimit", timeLimit)
|
|
|
|
if hasTimeLimitValue then
|
|
r2.requestSetNode(activityInstId, "TimeLimitValue", tostring(20))
|
|
else
|
|
r2.requestSetNode(activityInstId, "TimeLimitValue", "")
|
|
end
|
|
end
|
|
|
|
function r2:calculHourMinSec(totalSecNb)
|
|
|
|
local minSecNb, hourNb = totalSecNb, 0
|
|
while minSecNb > 3599 do
|
|
hourNb = hourNb+1
|
|
minSecNb = minSecNb - 3600
|
|
end
|
|
|
|
local minNb, secNb = 0, minSecNb
|
|
while secNb > 59 do
|
|
minNb = minNb+1
|
|
secNb = secNb - 60
|
|
end
|
|
|
|
return hourNb, minNb, secNb
|
|
end
|
|
|
|
function r2:calculMinSec(totalSecNb)
|
|
|
|
local minNb, secNb = 0, totalSecNb
|
|
while secNb > 59 do
|
|
minNb = minNb+1
|
|
secNb = secNb - 60
|
|
end
|
|
|
|
return minNb, secNb
|
|
end
|
|
|
|
function r2:activityForHours(hourNb)
|
|
|
|
local activityInst = r2:getSelectedEltInst("r2ed_triggers")
|
|
assert(activityInst)
|
|
|
|
local lastHourNb, minNb, secNb = r2:calculHourMinSec(tonumber(activityInst.TimeLimitValue))
|
|
|
|
r2:setLimitTimeValue(hourNb, minNb, secNb)
|
|
end
|
|
|
|
function r2:activityForMinutes(minNb)
|
|
|
|
local activityInst = r2:getSelectedEltInst("r2ed_triggers")
|
|
assert(activityInst)
|
|
|
|
local hoursNb, lastMinNb, secNb = r2:calculHourMinSec(tonumber(activityInst.TimeLimitValue))
|
|
|
|
r2:setLimitTimeValue(hoursNb, minNb, secNb)
|
|
end
|
|
|
|
function r2:activityForSeconds(secNb)
|
|
|
|
local activityInst = r2:getSelectedEltInst("r2ed_triggers")
|
|
assert(activityInst)
|
|
|
|
local hoursNb, minNb, lastSecNb = r2:calculHourMinSec(tonumber(activityInst.TimeLimitValue))
|
|
|
|
r2:setLimitTimeValue(hoursNb, minNb, secNb)
|
|
end
|
|
|
|
------------------ SET LIMIT TIME VALUE -------------------------------------------------------------------
|
|
function r2:setLimitTimeValue(hourNb, minNb, secNb)
|
|
|
|
local totalSec = tostring(hourNb*3600 + minNb*60 + secNb)
|
|
r2.requestSetNode(r2:getSelectedEltInstId("r2ed_triggers"), "TimeLimitValue", totalSec)
|
|
end
|
|
|
|
|
|
------------------ OPEN SELECT CHAT MENU -------------------------------------------------------------------
|
|
function r2:openSelectChatMenu()
|
|
|
|
-- triggers menu initialization
|
|
local chatMenu = getUI("ui:interface:r2ed_triggers_menu")
|
|
assert(chatMenu)
|
|
|
|
local chatMenu = chatMenu:getRootMenu()
|
|
assert(chatMenu)
|
|
|
|
chatMenu:reset()
|
|
|
|
-- first line "None"
|
|
chatMenu:addLine(ucstring(i18n.get("uiR2EdNoElt")), "lua", "r2:selectChatSequence('None')", "None")
|
|
|
|
-- second line "More"
|
|
chatMenu:addLine(ucstring(i18n.get("uiR2EdMore")), "lua", "r2:openChatSequences()", "More")
|
|
|
|
local entityInst = r2:getSelectedInstance()
|
|
assert(entityInst)
|
|
|
|
-- list of avoidable chat sequences
|
|
local chatSequences = entityInst:getBehavior().ChatSequences
|
|
for i=0, chatSequences.Size-1 do
|
|
local chatS = chatSequences[i]
|
|
assert(chatS)
|
|
--chatMenu:addLine(ucstring(chatS.Name), "lua", "r2:selectChatSequence('" .. chatS.InstanceId .. "')", chatS.InstanceId)
|
|
chatMenu:addLine(ucstring(r2:getSequenceName(chatS)), "lua", "r2:selectChatSequence('" .. chatS.InstanceId .. "')", chatS.InstanceId)
|
|
end
|
|
|
|
r2:openTriggersMenu(getUICaller())
|
|
end
|
|
|
|
function r2:openChatSequences()
|
|
local chatSequencesUI = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(chatSequencesUI)
|
|
|
|
chatSequencesUI.active = true
|
|
chatSequencesUI:updateCoords()
|
|
|
|
if chatSequencesUI.Env.openFirst == nil then
|
|
chatSequencesUI:center()
|
|
chatSequencesUI.Env.openFirst = true
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- the commun "logic entity" menu is open
|
|
function r2:openTriggersMenu(caller)
|
|
|
|
local menuName = "ui:interface:r2ed_triggers_menu"
|
|
launchContextMenuInGame(menuName)
|
|
local menu = getUI(menuName)
|
|
|
|
menu:updateCoords()
|
|
menu.y = caller.y_real - (menu.h + 2)
|
|
menu.x = caller.x_real
|
|
menu:setMinW(caller.w)
|
|
menu:updateCoords()
|
|
end
|
|
|
|
------------------ SELECT CHAT SEQUENCE -------------------------------------------------------------
|
|
function r2:selectChatSequence(choice, activityId)
|
|
|
|
local chatSequenceUI = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(chatSequenceUI)
|
|
|
|
local uiName = "r2ed_triggers"
|
|
|
|
if activityId == nil then
|
|
activityId = r2:getSelectedEltInstId(uiName)
|
|
end
|
|
|
|
local activityUI = r2:getSelectedEltUI(uiName)
|
|
assert(activityUI)
|
|
|
|
if choice == "None" then
|
|
r2.requestSetNode(activityId, "Chat", r2.RefId(""))
|
|
local sep = activityUI:find("sep")
|
|
assert(sep)
|
|
sep.active = false
|
|
elseif choice == "More" then
|
|
r2:openChatSequences()
|
|
elseif choice then
|
|
local chatSId = choice
|
|
local activityInstId = r2:getSelectedEltInstId(uiName)
|
|
r2.requestSetNode(activityId, "Chat", r2.RefId(chatSId))
|
|
r2.requestSetNode(activityInstId, "Type", "Non Repeating")
|
|
else
|
|
debugInfo("r2:selectChatSequence : unknown menu selection")
|
|
end
|
|
end
|
|
|
|
------------------ REPEAT OR NOT CHAT SEQUENCE ------------------------------------------------------
|
|
function r2:repeatChatSequence()
|
|
|
|
local activityInstId = r2:getSelectedEltInstId("r2ed_triggers")
|
|
assert(activityInstId)
|
|
|
|
local sequenceType = "Repeating"
|
|
if getUICaller().pushed then sequenceType = "Non Repeating" end
|
|
|
|
r2.requestSetNode(activityInstId, "Type", sequenceType)
|
|
end
|
|
|
|
------------------ NEW CHAT SEQUENCE -------------------------------------------------------------
|
|
function r2:newChatsSequence(firstRequest, instanceSequence, reset)
|
|
|
|
local chatSequencesUI = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(chatSequencesUI)
|
|
|
|
local tab = chatSequencesUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
-- limit sequences number
|
|
if firstRequest and tab.tabButtonNb == 7 then return -1 end
|
|
|
|
if firstRequest == true then
|
|
instanceSequence = r2.newComponent("ChatSequence")
|
|
|
|
--local name = tostring(i18n.get("uiR2EdChat"))..tab.tabButtonNb+1
|
|
--instanceSequence.Name = name
|
|
|
|
local npcGroup = r2:getSelectedInstance()
|
|
assert(npcGroup)
|
|
|
|
r2.requestInsertNode(npcGroup:getBehavior().InstanceId, "ChatSequences", -1, "", instanceSequence)
|
|
|
|
r2.ownCreatedInstances[instanceSequence.InstanceId] = true
|
|
else
|
|
|
|
local templateParams = {
|
|
newElt="r2:newChat(true)",
|
|
newEltText=tostring(i18n.get("uiR2EdNewChat")),
|
|
eltOrderText=tostring(i18n.get("uiR2EdChatOrder")),
|
|
upElt="r2:upChat()",
|
|
downElt="r2:downChat()",
|
|
maxMinElts="r2:maximizeMinimizeChats()",
|
|
downUpColor="120 150 140 255",
|
|
colPushed = "0 255 0 255",
|
|
paramsL= "r2:selectSequenceTab('r2ed_chat_sequence', "..tostring(tab.tabButtonNb)..")"
|
|
}
|
|
|
|
if reset == true then
|
|
r2.ownCreatedInstances[instanceSequence.InstanceId] = true
|
|
end
|
|
|
|
local editorEltTemplate = "template_edit_chat"
|
|
local sequence = r2:newElementsSequence("r2ed_chat_sequence", templateParams, editorEltTemplate,
|
|
instanceSequence, tostring(i18n.get("uiR2EdSequChat")))
|
|
|
|
local chats = instanceSequence.Components
|
|
for c = 0, chats.Size - 1 do
|
|
r2:newChat(false, chats[c])
|
|
end
|
|
|
|
local eltEditor = sequence:find("edit_element")
|
|
assert(eltEditor)
|
|
|
|
local editBox = eltEditor:find("edit_box_group")
|
|
assert(editBox)
|
|
|
|
local scroll = sequence:find("edit_box_scroll_ed")
|
|
assert(scroll)
|
|
|
|
scroll:setTarget(editBox.id)
|
|
end
|
|
|
|
return instanceSequence.InstanceId
|
|
end
|
|
|
|
------------------- REMOVE CHATS SEQUENCE ---------------------------------------------------------
|
|
function r2:removeChatsSequence()
|
|
|
|
-- remove sequence
|
|
r2:removeElementsSequence("r2ed_chat_sequence", "ChatSequences", tostring(i18n.get("uiR2EdSequChat")))
|
|
end
|
|
|
|
function r2:removeChatsSequenceUI(sequIndex)
|
|
|
|
r2:closeChatEditor()
|
|
|
|
-- remove sequence UI
|
|
r2:removeElementsSequenceUI(sequIndex, "r2ed_chat_sequence", "ChatSequences", tostring(i18n.get("uiR2EdSequChat")))
|
|
end
|
|
|
|
------------------- SELECT CHAT -------------------------------------------------------------------
|
|
function r2:selectChat()
|
|
r2:selectTriggerElement(nil, "r2ed_chat_sequence")
|
|
|
|
if getUICaller().pushed == true then
|
|
r2:updateChatEditor()
|
|
end
|
|
end
|
|
|
|
------------------- OPEN CHAT EDITOR --------------------------------------------------------------
|
|
function r2:openChatEditor()
|
|
r2:updateChatEditor()
|
|
r2:openElementEditor("r2ed_chat_sequence", "uiR2EDChatStepEditor")
|
|
end
|
|
|
|
function r2:updateChatEditor()
|
|
|
|
local instanceChat = r2:getSelectedEltInst("r2ed_chat_sequence")
|
|
|
|
local chatEditor = r2:getSelectedSequ("r2ed_chat_sequence"):find("edit_element")
|
|
assert(chatEditor)
|
|
|
|
-- chat name
|
|
local chatName = chatEditor:find("name")
|
|
assert(chatName)
|
|
|
|
-- time
|
|
local minutesText = chatEditor:find("minutes"):find("text")
|
|
assert(minutesText)
|
|
|
|
local secondsText = chatEditor:find("seconds"):find("text")
|
|
assert(secondsText)
|
|
|
|
-- update NPC name lists
|
|
local whoMenuText = chatEditor:find("whoMenu"):find("text")
|
|
assert(whoMenuText)
|
|
|
|
local toWhoMenuText = chatEditor:find("toWhoMenu"):find("text")
|
|
assert(toWhoMenuText)
|
|
|
|
local editBox = chatEditor:find("says"):find("edit_box_group")
|
|
assert(editBox)
|
|
|
|
local emoteButtonText = chatEditor:find("emote"):find("menu"):find("text")
|
|
assert(emoteButtonText)
|
|
|
|
if instanceChat then
|
|
|
|
local index = r2:searchElementIndex(instanceChat)
|
|
if index~= nil then
|
|
chatName.uc_hardtext = tostring(i18n.get("uiR2EdChat")).." "..index.." : "
|
|
else
|
|
chatName.uc_hardtext = tostring(i18n.get("uiR2EdChat")).." : "
|
|
end
|
|
|
|
-- after value
|
|
local time = instanceChat.Time
|
|
local minNb, secNb = r2:calculMinSec(time)
|
|
|
|
minutesText.uc_hardtext = tostring(minNb)
|
|
secondsText.uc_hardtext = tostring(secNb)
|
|
|
|
-- who
|
|
local whoInst = r2:getInstanceFromId(tostring(instanceChat.Actions[0].Who))
|
|
whoMenuText.uc_hardtext = whoInst.Name
|
|
|
|
-- says what
|
|
local textID = instanceChat.Actions[0].Says
|
|
if textID ~= "" then
|
|
editBox.uc_input_string = r2:getInstanceFromId(textID).Text
|
|
else
|
|
editBox.uc_input_string = ""
|
|
end
|
|
|
|
-- to who
|
|
local toWhoInst = r2:getInstanceFromId(tostring(instanceChat.Actions[0].Facing))
|
|
if toWhoInst then
|
|
toWhoMenuText.uc_hardtext = toWhoInst.Name
|
|
else
|
|
toWhoMenuText.uc_hardtext = tostring(i18n.get("uiR2EdNobody"))
|
|
end
|
|
|
|
-- emote
|
|
local emoteName = r2.fromEmoteIdToName[instanceChat.Actions[0].Emote]
|
|
if emoteName then
|
|
emoteButtonText.uc_hardtext = emoteName
|
|
else
|
|
emoteButtonText.uc_hardtext = tostring(i18n.get("uiR2EdNoElt"))
|
|
end
|
|
|
|
else
|
|
|
|
local name = tostring(i18n.get("uiR2EdChat")).." : "
|
|
chatName.uc_hardtext = name
|
|
|
|
minutesText.uc_hardtext = tostring(0)
|
|
secondsText.uc_hardtext = tostring(0)
|
|
|
|
whoMenuText.uc_hardtext = ""
|
|
|
|
editBox.uc_input_string = ""
|
|
|
|
toWhoMenuText.uc_hardtext = tostring(i18n.get("uiR2EdNobody"))
|
|
|
|
emoteButtonText.uc_hardtext = tostring(i18n.get("uiR2EdNoElt"))
|
|
end
|
|
end
|
|
|
|
------------------ OPEN CHAT SEQUENCE EDITOR --------------------------------------------------
|
|
function r2:openChatSequenceEditor()
|
|
|
|
local editor = getUI("ui:interface:r2ed_edit_chat_sequence")
|
|
assert(editor)
|
|
|
|
local chatsUI = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(chatsUI)
|
|
|
|
editor.x = chatsUI.x
|
|
editor.y = chatsUI.y
|
|
editor.active = true
|
|
end
|
|
|
|
------------------- MAX / MIN CHAT ----------------------------------------------------------------
|
|
function r2:maximizeMinimizeChat()
|
|
r2:maximizeMinimizeElement("r2ed_chat_sequence")
|
|
end
|
|
|
|
-------------------- NEW CHAT ---------------------------------------------------------------------
|
|
function r2:newChat(firstRequest, instanceElement, sequenceUI)
|
|
|
|
local uiName = "r2ed_chat_sequence"
|
|
|
|
if firstRequest == true then
|
|
instanceElement = r2.newComponent("ChatStep")
|
|
|
|
instanceElement.Time = 3
|
|
|
|
local who
|
|
local selectedInst = r2:getSelectedInstance()
|
|
assert(selectedInst)
|
|
|
|
if selectedInst:isGrouped() then
|
|
who = r2:getLeader(selectedInst)
|
|
else
|
|
who = selectedInst
|
|
end
|
|
local chatAction = r2.newComponent("ChatAction")
|
|
chatAction.Who = who.InstanceId
|
|
table.insert(instanceElement.Actions, chatAction)
|
|
|
|
local sequenceInstId = r2:getSelectedSequInstId(uiName)
|
|
|
|
r2.requestInsertNode(sequenceInstId, "Components", -1, "", instanceElement)
|
|
|
|
r2.ownCreatedInstances[instanceElement.InstanceId] = true
|
|
else
|
|
|
|
local templateParams = {
|
|
selectElt="r2:selectChat()",
|
|
openEltEditor="r2:openChatEditor()",
|
|
maxMinElt="r2:maximizeMinimizeChat()",
|
|
removeElt="r2:removeChat()",
|
|
colOver="120 150 140 100",
|
|
colPushed="120 150 140 255"
|
|
}
|
|
|
|
if sequenceUI == nil then
|
|
sequenceUI = r2:getSelectedSequ(uiName)
|
|
end
|
|
local element = r2:newTriggerElement(uiName, tostring(i18n.get("uiR2EdChat")), templateParams, sequenceUI, instanceElement.InstanceId)
|
|
|
|
r2:updateChatText(element)
|
|
end
|
|
end
|
|
|
|
function r2:searchElementIndex(eltInst)
|
|
|
|
local components = eltInst.Parent
|
|
local index
|
|
for i=0, components.Size-1 do
|
|
local elt = components[i]
|
|
if elt.InstanceId == eltInst.InstanceId then
|
|
return (i+1)
|
|
end
|
|
end
|
|
end
|
|
|
|
function r2:buildChatTitle(chatUI, erase)
|
|
|
|
local chatInst = r2:getInstanceFromId(chatUI.Env.elementId)
|
|
assert(chatInst)
|
|
|
|
-- part1
|
|
local index = r2:searchElementIndex(chatInst)
|
|
if erase==true then index = index-1 end
|
|
local part1 = tostring(i18n.get("uiR2EdChat")).." "..index.." : "
|
|
|
|
-- part2
|
|
local minNb, secNb = r2:calculMinSec(chatInst.Time)
|
|
local time = ""
|
|
if minNb ~= 0 then
|
|
time = tostring(minNb)..tostring(i18n.get("uiR2EdShortMinutes"))
|
|
end
|
|
time = time.." " ..tostring(secNb)..tostring(i18n.get("uiR2EdShortSeconds"))
|
|
local part2 = "(" ..tostring(i18n.get("uiR2EdAfter")).." ".. time..") "
|
|
|
|
-- part3
|
|
local part3 = ""
|
|
local action = chatInst.Actions[0]
|
|
local who = action.Who
|
|
if who ~= "" then
|
|
who = r2:getInstanceFromId(who)
|
|
assert(who)
|
|
part3 = who.Name .. " " ..tostring(i18n.get("uiR2EdSays")).. " "
|
|
|
|
local says = action.Says
|
|
if says ~= "" then
|
|
says = r2:getInstanceFromId(says).Text
|
|
says = string.substr(says, 0, 4)
|
|
end
|
|
|
|
part3 = part3 .. says .. "..."
|
|
end
|
|
|
|
-- title
|
|
local title = chatUI:find("title")
|
|
assert(title)
|
|
title.uc_hardtext= part1..part2..part3
|
|
end
|
|
|
|
function r2:getChatName(chatInst)
|
|
|
|
-- part1
|
|
local index = r2:searchElementIndex(chatInst)
|
|
if erase==true then index = index-1 end
|
|
local part1 = tostring(i18n.get("uiR2EdChat")).." "..index.." : "
|
|
|
|
-- part2
|
|
local minNb, secNb = r2:calculMinSec(chatInst.Time)
|
|
local time = ""
|
|
if minNb ~= 0 then
|
|
time = tostring(minNb)..tostring(i18n.get("uiR2EdShortMinutes"))
|
|
end
|
|
time = time.." " ..tostring(secNb)..tostring(i18n.get("uiR2EdShortSeconds"))
|
|
local part2 = "(" ..tostring(i18n.get("uiR2EdAfter")).." ".. time..") "
|
|
|
|
-- part3
|
|
local part3 = ""
|
|
local action = chatInst.Actions[0]
|
|
local who = action.Who
|
|
if who ~= "" then
|
|
who = r2:getInstanceFromId(who)
|
|
assert(who)
|
|
part3 = who.Name .. " " ..tostring(i18n.get("uiR2EdSays")).. " "
|
|
|
|
local says = action.Says
|
|
if says ~= "" then
|
|
says = r2:getInstanceFromId(says).Text
|
|
says = string.sub(says, 1, 4)
|
|
end
|
|
|
|
part3 = part3 .. says .. "..."
|
|
end
|
|
|
|
return part1..part2..part3
|
|
|
|
end
|
|
|
|
function r2:updateChatText(elementUI)
|
|
|
|
if elementUI == nil then
|
|
elementUI = r2:getSelectedEltUI("r2ed_chat_sequence")
|
|
end
|
|
assert(elementUI)
|
|
|
|
local instance = r2:getInstanceFromId(elementUI.Env.elementId)
|
|
assert(instance)
|
|
|
|
local chatText = elementUI:find("text_list")
|
|
assert(chatText)
|
|
|
|
chatText:clear()
|
|
|
|
local who = tostring(instance.Actions[0].Who)
|
|
if who ~= "" then
|
|
|
|
local text = ""
|
|
local textEmpty = true
|
|
|
|
local facing = tostring(instance.Actions[0].Facing)
|
|
local emote = instance.Actions[0].Emote
|
|
local says = instance.Actions[0].Says
|
|
|
|
if facing ~= "" then
|
|
text = "\n"..r2:getInstanceFromId(who).Name .." "..tostring(i18n.get("uiR2EdFaces")).." ".. r2:getInstanceFromId(facing).Name
|
|
textEmpty = false
|
|
end
|
|
if r2.fromEmoteIdToName[emote] ~= nil then
|
|
text = text .. "\n" .. r2:getInstanceFromId(who).Name .. " "..string.lower(tostring(i18n.get("uiR2EdEmote"))).." : " .. r2.fromEmoteIdToName[emote]
|
|
textEmpty = false
|
|
end
|
|
if r2:getInstanceFromId(says)~=nil and r2:getInstanceFromId(says).Text ~= "" then
|
|
text = text.."\n"..r2:getInstanceFromId(who).Name .. " "..tostring(i18n.get("uiR2EdSays")).." : " .. r2:getInstanceFromId(says).Text
|
|
textEmpty = false
|
|
end
|
|
text = text.."\n"
|
|
|
|
chatText:addTextChild(ucstring(text))
|
|
|
|
local sep = elementUI:find("sep")
|
|
assert(sep)
|
|
if textEmpty == false then
|
|
sep.active = true
|
|
else
|
|
chatText:clear()
|
|
sep.active = false
|
|
end
|
|
end
|
|
|
|
r2:buildChatTitle(elementUI, false)
|
|
|
|
local chatEditor = r2:getSelectedSequ("r2ed_chat_sequence"):find("edit_element")
|
|
assert(chatEditor)
|
|
|
|
if instance.InstanceId == r2:getSelectedEltInstId("r2ed_chat_sequence") then
|
|
r2:updateChatEditor()
|
|
end
|
|
|
|
r2:updateActivitiesWhithThisChatSequence(instance, false)
|
|
end
|
|
|
|
|
|
-------------------- UP CHAT ----------------------------------------------------------------------
|
|
function r2:upChat()
|
|
r2:upTriggerElement("r2ed_chat_sequence")
|
|
end
|
|
|
|
-------------------- DOWN CHAT --------------------------------------------------------------------
|
|
function r2:downChat()
|
|
r2:downTriggerElement("r2ed_chat_sequence")
|
|
end
|
|
|
|
-------------------- MAX / MIN CHATS --------------------------------------------------------------
|
|
function r2:maximizeMinimizeChats()
|
|
r2:maximizeMinimizeTriggerElements("r2ed_chat_sequence")
|
|
end
|
|
|
|
-------------------- REMOVE CHAT ------------------------------------------------------------------
|
|
function r2:removeChat()
|
|
r2:removeTriggerElement("r2ed_chat_sequence", tostring(i18n.get("uiR2EdChat")))
|
|
end
|
|
|
|
-------------------- CHAT TIME --------------------------------------------------------------------
|
|
function r2:setTime(minNb, secNb)
|
|
|
|
local chatSequenceId = r2:getSelectedEltInstId("r2ed_chat_sequence")
|
|
|
|
r2.requestSetNode(chatSequenceId, "Time", minNb*60+secNb)
|
|
end
|
|
|
|
-------------------- INIT TIME MENU -----------------------------------------------------------------
|
|
function r2:initTimeMenu(timeFunction, isHours)
|
|
|
|
local timeMenu = getUI("ui:interface:r2ed_triggers_menu")
|
|
assert(timeMenu)
|
|
|
|
local timeMenu = timeMenu:getRootMenu()
|
|
assert(timeMenu)
|
|
|
|
timeMenu:reset()
|
|
|
|
for i=0,9 do
|
|
timeMenu:addLine(ucstring(tostring(i)), "lua", timeFunction .. "(" .. tostring(i) .. ")", tostring(i))
|
|
end
|
|
|
|
if isHours == true then
|
|
timeMenu:addLine(ucstring(tostring(10)), "lua", timeFunction .. "(" .. tostring(10) .. ")", tostring(10))
|
|
else
|
|
|
|
local lineNb = 9
|
|
for i=10, 50, 10 do
|
|
local lineStr = tostring(i).."/"..tostring(i+9)
|
|
timeMenu:addLine(ucstring(lineStr), "", "", tostring(i))
|
|
lineNb = lineNb+1
|
|
|
|
timeMenu:addSubMenu(lineNb)
|
|
local subMenu = timeMenu:getSubMenu(lineNb)
|
|
|
|
for s=0,9 do
|
|
lineStr = tostring(i+s)
|
|
subMenu:addLine(ucstring(lineStr), "lua", timeFunction .. "(" .. tostring(i+s) .. ")", lineStr)
|
|
end
|
|
end
|
|
end
|
|
|
|
r2:openTriggersMenu(getUICaller())
|
|
end
|
|
|
|
-------------------- CHAT SECONDS -----------------------------------------------------------------
|
|
function r2:chatAfterSeconds(secNb)
|
|
|
|
local chatStepInst = r2:getSelectedEltInst("r2ed_chat_sequence")
|
|
|
|
local lastTime = chatStepInst.Time
|
|
|
|
local minNb = 0
|
|
while lastTime > 59 do
|
|
lastTime = lastTime - 60
|
|
minNb = minNb + 1
|
|
end
|
|
|
|
r2:setTime(minNb, secNb)
|
|
|
|
-- recover "says what" (equiv change focus)
|
|
local chatEditor = r2:getSelectedSequ("r2ed_chat_sequence"):find("edit_element")
|
|
assert(chatEditor)
|
|
|
|
local saysWhat = chatEditor:find("says"):find("edit_box_group").input_string
|
|
if chatStepInst.Actions[0].Says ~= r2.registerText(saysWhat).InstanceId then
|
|
r2:setSaysWhat(saysWhat)
|
|
end
|
|
end
|
|
|
|
-------------------- CHAT MINUTES -----------------------------------------------------------------
|
|
function r2:chatAfterMinutes(minNb)
|
|
|
|
local chatStepInst = r2:getSelectedEltInst("r2ed_chat_sequence")
|
|
|
|
local lastTime = chatStepInst.Time
|
|
|
|
local secNb = lastTime
|
|
while secNb > 59 do
|
|
secNb = secNb - 60
|
|
end
|
|
|
|
r2:setTime(minNb, secNb)
|
|
|
|
-- recover "says what" (equiv change focus)
|
|
local chatEditor = r2:getSelectedSequ("r2ed_chat_sequence"):find("edit_element")
|
|
assert(chatEditor)
|
|
|
|
local saysWhat = chatEditor:find("says"):find("edit_box_group").input_string
|
|
if chatStepInst.Actions[0].Says ~= r2.registerText(saysWhat).InstanceId then
|
|
r2:setSaysWhat(saysWhat)
|
|
end
|
|
end
|
|
|
|
-------------------- WHO --------------------------------------------------------------------------
|
|
function r2:setWho(who, chatStepInst)
|
|
|
|
if chatStepInst == nil then
|
|
chatStepInst = r2:getSelectedEltInst("r2ed_chat_sequence")
|
|
end
|
|
assert(chatStepInst)
|
|
|
|
r2.requestSetNode(chatStepInst.Actions[0].InstanceId, "Who", r2.RefId(who))
|
|
|
|
if who == chatStepInst.Actions[0].Facing then
|
|
r2:setToWho(tostring(i18n.get("uiR2EdNobody")))
|
|
end
|
|
|
|
-- recover "says what" (equiv change focus)
|
|
local chatEditor = r2:getSelectedSequ("r2ed_chat_sequence"):find("edit_element")
|
|
assert(chatEditor)
|
|
|
|
local saysWhat = chatEditor:find("says"):find("edit_box_group").input_string
|
|
if chatStepInst.Actions[0].Says ~= r2.registerText(saysWhat).InstanceId then
|
|
r2:setSaysWhat(saysWhat)
|
|
end
|
|
end
|
|
|
|
function r2:openWhoMenu(whoFunction, towho)
|
|
|
|
local menuName = "ui:interface:r2ed_triggers_menu"
|
|
|
|
local whoMenu = getUI(menuName)
|
|
local whoMenu = whoMenu:getRootMenu()
|
|
assert(whoMenu)
|
|
|
|
whoMenu:reset()
|
|
|
|
local npcTable = r2.Scenario:getAllInstancesByType("Npc")
|
|
|
|
if towho == true then
|
|
whoMenu:addLine(ucstring(i18n.get("uiR2EdNobody")), "lua", whoFunction.."('" ..tostring(i18n.get("uiR2EdNobody")).. "')", "Nobody")
|
|
end
|
|
|
|
for key, npc in npcTable do
|
|
local addLine = true
|
|
if not npc:isBotObject() and not npc:isPlant() and not r2.isCreature(npc.InstanceId) then
|
|
if towho == true then
|
|
local chatStepInst= r2:getSelectedEltInst("r2ed_chat_sequence")
|
|
assert(chatStepInst)
|
|
|
|
local whoId = chatStepInst.Actions[0].Who
|
|
if whoId~="" and whoId == npc.InstanceId then
|
|
addLine = false
|
|
end
|
|
end
|
|
if addLine then
|
|
whoMenu:addLine(ucstring(npc.Name), "lua", whoFunction.."('" ..npc.InstanceId.. "')", npc.InstanceId)
|
|
end
|
|
end
|
|
end
|
|
|
|
r2:openTriggersMenu(getUICaller())
|
|
end
|
|
|
|
-------------------- SAYS WHAT --------------------------------------------------------------------
|
|
function r2:setSaysWhat(what)
|
|
|
|
if what == nil then
|
|
what = getUICaller().input_string
|
|
end
|
|
|
|
local says = what
|
|
|
|
local chatStep = r2:getSelectedEltInst("r2ed_chat_sequence")
|
|
if chatStep ~= nil then
|
|
if what ~= "" then
|
|
what=r2.registerText(what).InstanceId
|
|
end
|
|
r2.requestSetNode(chatStep.Actions[0].InstanceId, "Says", what)
|
|
|
|
local chatStepUI = r2:getSelectedEltUI("r2ed_chat_sequence")
|
|
assert(chatStepUI)
|
|
end
|
|
end
|
|
|
|
-------------------- CLOSE CHAT EDITOR ------------------------------------------------------------
|
|
function r2:closeChatEditor(chatEditor)
|
|
|
|
if chatEditor == nil then
|
|
chatEditor = r2:getSelectedSequ("r2ed_chat_sequence"):find("edit_element")
|
|
end
|
|
assert(chatEditor)
|
|
|
|
local editSaysWhat = chatEditor:find("says"):find("edit_box_group")
|
|
assert(editSaysWhat)
|
|
|
|
if r2.callSetSaysWhat == true then
|
|
r2:setSaysWhat(editSaysWhat.input_string)
|
|
end
|
|
end
|
|
|
|
-------------------- TO WHO -----------------------------------------------------------------------
|
|
function r2:setToWho(toWho)
|
|
|
|
local chatSequence = r2:getSelectedEltInst("r2ed_chat_sequence")
|
|
assert(chatSequence)
|
|
|
|
local chatEditor = r2:getSelectedSequ("r2ed_chat_sequence"):find("edit_element")
|
|
assert(chatEditor)
|
|
|
|
-- recover "says what" (equiv change focus)
|
|
local saysWhat = chatEditor:find("says"):find("edit_box_group").input_string
|
|
if chatSequence.Actions[0].Says ~= r2.registerText(saysWhat).InstanceId then
|
|
r2:setSaysWhat(saysWhat)
|
|
end
|
|
|
|
if toWho == tostring(i18n.get("uiR2EdNobody")) then toWho="" end
|
|
|
|
r2.requestSetNode(chatSequence.Actions[0].InstanceId, "Facing", r2.RefId(toWho))
|
|
end
|
|
|
|
-------------------- EMOTE ------------------------------------------------------------------------
|
|
function r2:openEmoteMenu()
|
|
|
|
local menuName = "ui:interface:r2ed_triggers_menu"
|
|
|
|
local emoteMenu = getUI(menuName)
|
|
local emoteMenu = emoteMenu:getRootMenu()
|
|
assert(emoteMenu)
|
|
|
|
emoteMenu:reset()
|
|
initEmotesMenu(menuName, "r2:setEmote")
|
|
r2:openTriggersMenu(getUICaller())
|
|
end
|
|
|
|
function r2:setEmote(emoteId)
|
|
|
|
local chatSequence = r2:getSelectedEltInst("r2ed_chat_sequence")
|
|
assert(chatSequence)
|
|
|
|
r2.requestSetNode(chatSequence.Actions[0].InstanceId, "Emote", emoteId)
|
|
|
|
-- recover "says what" (equiv change focus)
|
|
local chatEditor = r2:getSelectedSequ("r2ed_chat_sequence"):find("edit_element")
|
|
assert(chatEditor)
|
|
|
|
local saysWhat = chatEditor:find("says"):find("edit_box_group").input_string
|
|
if chatSequence.Actions[0].Says ~= r2.registerText(saysWhat).InstanceId then
|
|
r2:setSaysWhat(saysWhat)
|
|
end
|
|
end
|
|
|
|
------------------ SELECT CHAT SEQUENCE ---------------------------------------------------------
|
|
function r2:selectChatsSequence(index)
|
|
r2:selectElementsSequence("r2ed_chat_sequence", index)
|
|
r2:updateMiniActivityView()
|
|
end
|
|
|
|
---------------------------------------------------------------------------------------------------
|
|
------------------------------ FACTORISATION ----------------------------------------------------
|
|
---------------------------------------------------------------------------------------------------
|
|
|
|
------------------------------ Remove element ---------------------------------------------------
|
|
function r2:removeTriggerElement(uiName, elementName)
|
|
|
|
local wndUI = getUI("ui:interface:"..uiName)
|
|
assert(wndUI)
|
|
|
|
local tab = wndUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local sequenceUI = wndUI:find(tab.associatedGroupSelection)
|
|
assert(sequenceUI)
|
|
|
|
r2:removeElement(sequenceUI, uiName, elementName)
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------
|
|
function r2:removeElement(sequence, uiName, elementName, removedElement)
|
|
|
|
local listElements = sequence:find("elements_list")
|
|
assert(listElements)
|
|
|
|
local toErasedInstId
|
|
if removedElement == nil then
|
|
toErasedInstId = r2:getSelectedEltInstId(uiName)
|
|
else
|
|
toErasedInstId = removedElement.Env.elementId
|
|
end
|
|
assert(toErasedInstId)
|
|
|
|
-- request erase node
|
|
if toErasedInstId ~= nil and r2:getInstanceFromId(toErasedInstId) ~= nil then
|
|
r2.requestEraseNode(toErasedInstId, "", -1)
|
|
end
|
|
end
|
|
|
|
function r2:removeElementUI(sequence, uiName, removedElement)
|
|
|
|
local listElements = sequence:find("elements_list")
|
|
assert(listElements)
|
|
|
|
-- update follow elements number
|
|
local removedIndex = listElements:getElementIndex(removedElement)
|
|
for i = removedIndex+1, (listElements.childrenNb-1) do
|
|
local element = listElements:getChild(i)
|
|
assert(element)
|
|
|
|
if not element.Env.isEditor then
|
|
r2:buildElementTitle(uiName, element, true)
|
|
end
|
|
end
|
|
|
|
-- delete element and update coordinates of elements list
|
|
if removedElement == r2:getSelectedEltUI(uiName) then
|
|
r2:setSelectedEltUIId(uiName, nil)
|
|
|
|
-- inactive element editor
|
|
local eltEditor = listElements:find("edit_element")
|
|
assert(eltEditor)
|
|
eltEditor.active = false
|
|
|
|
-- disactive up and down element buttons
|
|
local upElement = sequence:find("up_element")
|
|
assert(upElement)
|
|
local downElement = sequence:find("down_element")
|
|
assert(downElement)
|
|
local elementOrder = sequence:find("element_order")
|
|
assert(elementOrder)
|
|
|
|
upElement.active = false
|
|
downElement.active = false
|
|
elementOrder.active = false
|
|
end
|
|
listElements.Env.elementsNb = listElements.Env.elementsNb - 1
|
|
|
|
listElements:delChild(removedElement)
|
|
listElements.parent:invalidateCoords()
|
|
|
|
-- if any activity in list, disactive global minimize / maximize button
|
|
if listElements.childrenNb == 1 then
|
|
local minElts = sequence:find("minimize_elements")
|
|
assert(minElts)
|
|
|
|
local maxElts = sequence:find("maximize_elements")
|
|
assert(maxElts)
|
|
|
|
minElts.active = false
|
|
maxElts.active = false
|
|
end
|
|
end
|
|
|
|
------------------------------ Max / Min elements -----------------------------------------------
|
|
function r2:maximizeMinimizeTriggerElements(uiName)
|
|
|
|
local sequence = r2:getSelectedSequ(uiName)
|
|
assert(sequence)
|
|
|
|
r2:maximizeMinimizeElements(sequence, uiName)
|
|
end
|
|
|
|
------------------------------ Max / Min elements -----------------------------------------------
|
|
function r2:maximizeMinimizeElements(sequence, uiName)
|
|
|
|
local elements = sequence:find("elements_list")
|
|
assert(elements)
|
|
|
|
if elements.Env.minimize == nil then
|
|
elements.Env.minimize = true
|
|
end
|
|
|
|
elements.Env.minimize = not elements.Env.minimize
|
|
|
|
for i = 0, elements.childrenNb-1 do
|
|
local element = elements:getChild(i)
|
|
assert(element)
|
|
|
|
if element.Env.isEditor ~= true then
|
|
r2:maximizeMinimizeElement(uiName, element, elements.Env.minimize)
|
|
end
|
|
end
|
|
|
|
local minElts = sequence:find("minimize_elements")
|
|
assert(minElts)
|
|
local maxElts = sequence:find("maximize_elements")
|
|
assert(maxElts)
|
|
|
|
if elements.Env.minimize == true then
|
|
minElts.active = false
|
|
maxElts.active = true
|
|
else
|
|
minElts.active = true
|
|
maxElts.active = false
|
|
end
|
|
end
|
|
|
|
------------------------------ Max / Min element ------------------------------------------------
|
|
function r2:maximizeMinimizeElement(uiName, element, allMinimize)
|
|
|
|
if element == nil then
|
|
element = getUICaller().parent.parent.parent.parent.parent.parent
|
|
end
|
|
assert(element)
|
|
|
|
local eltText = element:find("element_text")
|
|
assert(eltText)
|
|
|
|
local allMin, allMax = true, true
|
|
if allMinimize ~= nil then
|
|
allMin = allMinimize
|
|
allMax = not allMin
|
|
end
|
|
|
|
local maxButton = element:find("maximize_element")
|
|
assert(maxButton)
|
|
local minButton = element:find("minimize_element")
|
|
assert(minButton)
|
|
|
|
-- maximize
|
|
if allMax and eltText.active==false then
|
|
eltText.active = true
|
|
maxButton.active = false
|
|
minButton.active = true
|
|
|
|
-- minimize
|
|
elseif allMin and eltText.active==true then
|
|
eltText.active = false
|
|
maxButton.active = true
|
|
minButton.active = false
|
|
end
|
|
end
|
|
|
|
------------------------------------ Down element --------------------------------------------------
|
|
function r2:downTriggerElement(uiName)
|
|
|
|
local eltSequenceUI = getUI("ui:interface:"..uiName)
|
|
assert(eltSequenceUI)
|
|
|
|
local tab = eltSequenceUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local sequence = eltSequenceUI:find(tab.associatedGroupSelection)
|
|
assert(sequence)
|
|
|
|
local listElements = sequence:find("elements_list")
|
|
assert(listElements)
|
|
|
|
local selectedElement = r2:getSelectedEltUI(uiName)
|
|
local index = listElements:getElementIndex(selectedElement)
|
|
|
|
local sequenceId = r2:getSelectedSequInstId(uiName)
|
|
if index < r2:getInstanceFromId(sequenceId).Components.Size-1 then
|
|
r2.requestMoveNode(sequenceId, "Components", index+1,
|
|
sequenceId, "Components", index)
|
|
end
|
|
end
|
|
|
|
------------------------------------ Down or up element UI ------------------------------------------
|
|
|
|
function r2:downUpElement(elementUI, uiName)
|
|
|
|
local listElements = elementUI.parent
|
|
assert(listElements)
|
|
|
|
local eltEditor = listElements:find("edit_element")
|
|
assert(eltEditor)
|
|
|
|
local index = listElements:getElementIndex(elementUI)
|
|
|
|
if index > 0 then
|
|
local previousElement = listElements:getChild(index - 1)
|
|
|
|
local editorBetweenBothElts = false
|
|
if previousElement.Env.elementId==nil then
|
|
previousElement = listElements:getChild(index - 2)
|
|
editorBetweenBothElts = true
|
|
end
|
|
|
|
listElements:upChild(elementUI)
|
|
if editorBetweenBothElts==true then
|
|
listElements:upChild(elementUI)
|
|
end
|
|
|
|
local selectedEltUI = r2:getSelectedEltUI(uiName)
|
|
if selectedEltUI~=nil then
|
|
local selectedEltIndex = listElements:getElementIndex(selectedEltUI)
|
|
local eltEditorIndex = listElements:getElementIndex(eltEditor)
|
|
if eltEditorIndex~=selectedEltIndex+1 then
|
|
if eltEditorIndex<selectedEltIndex then
|
|
for i=eltEditorIndex, selectedEltIndex-1 do
|
|
listElements:downChild(eltEditor)
|
|
end
|
|
else
|
|
for i=selectedEltIndex, eltEditorIndex-2 do
|
|
listElements:upChild(eltEditor)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
if selectedEltUI==previousElement then
|
|
previousElement.active = false
|
|
elseif selectedEltUI==elementUI then
|
|
elementUI.active = false
|
|
end
|
|
|
|
r2:updateElementEditor(uiName)
|
|
end
|
|
|
|
r2:buildElementTitle(uiName, previousElement, false)
|
|
r2:buildElementTitle(uiName, elementUI, false)
|
|
end
|
|
end
|
|
|
|
function r2:updateElementEditor(uiName)
|
|
|
|
if uiName == "r2ed_triggers" then
|
|
r2:updateActivityEditor()
|
|
elseif uiName == "r2ed_chat_sequence" then
|
|
r2:updateChatEditor()
|
|
end
|
|
end
|
|
|
|
function r2:buildElementTitle(uiName, elementUI, erase)
|
|
|
|
if uiName == "r2ed_triggers" then
|
|
r2:buildActivityTitle(elementUI, erase)
|
|
elseif uiName == "r2ed_chat_sequence" then
|
|
r2:buildChatTitle(elementUI, erase)
|
|
elseif uiName == r2.logicEntityUIPath.."actions" then
|
|
r2:buildActionTitle(elementUI, erase)
|
|
elseif uiName == r2.logicEntityUIPath.."reactions" then
|
|
r2:buildReactionTitle(elementUI, erase)
|
|
end
|
|
end
|
|
|
|
------------------------------------ Up element ------------------------------------------------------
|
|
function r2:upTriggerElement(uiName)
|
|
|
|
local eltSequenceUI = getUI("ui:interface:"..uiName)
|
|
assert(eltSequenceUI)
|
|
|
|
local tab = eltSequenceUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local sequence = eltSequenceUI:find(tab.associatedGroupSelection)
|
|
assert(sequence)
|
|
|
|
local listElements = sequence:find("elements_list")
|
|
assert(listElements)
|
|
|
|
local selectedElement = r2:getSelectedEltUI(uiName)
|
|
local index = listElements:getElementIndex(selectedElement)
|
|
|
|
if index>0 then
|
|
local sequenceId = r2:getSelectedSequInstId(uiName)
|
|
r2.requestMoveNode(sequenceId, "Components", index,
|
|
sequenceId, "Components", index-1)
|
|
end
|
|
end
|
|
|
|
---------------------------------------------------------------------------------------------------
|
|
function r2:selectTriggerElement(sequenceUI, uiName, selectedButtonElt)
|
|
|
|
if sequenceUI == nil then
|
|
sequenceUI = r2:getSelectedSequ(uiName)
|
|
end
|
|
r2:selectElement(sequenceUI, uiName, true, selectedButtonElt)
|
|
end
|
|
|
|
---------------------------------------------------------------------------------------------------
|
|
function r2:closeElementEditor(uiName)
|
|
|
|
if uiName == "r2ed_chat_sequence" then
|
|
r2:closeChatEditor(getUICaller())
|
|
end
|
|
|
|
local sequenceUI = r2:getSelectedSequ(uiName)
|
|
assert(sequenceUI)
|
|
|
|
local selectedEltUI = r2:getSelectedEltUI(uiName)
|
|
assert(selectedEltUI)
|
|
|
|
local selectedEltButton = selectedEltUI:find("select")
|
|
assert(selectedEltButton)
|
|
|
|
selectedEltButton.pushed = false
|
|
|
|
r2:selectElement(sequenceUI, uiName, false, selectedEltButton)
|
|
end
|
|
|
|
---------------- SELECT ELEMENT -------------------------------------------------------------------
|
|
function r2:selectElement(sequence, uiName, eltOrder, selectedButtonElt)
|
|
|
|
local upElement = sequence:find("up_element")
|
|
assert(upElement)
|
|
local downElement = sequence:find("down_element")
|
|
assert(downElement)
|
|
local orderElt = sequence:find("element_order")
|
|
|
|
if selectedButtonElt == nil then
|
|
selectedButtonElt = getUICaller()
|
|
end
|
|
|
|
-- new selected element
|
|
if selectedButtonElt.pushed == true then
|
|
|
|
if r2:getSelectedEltUIId(uiName) then
|
|
|
|
local lastSelectedElement = r2:getSelectedEltUI(uiName)
|
|
assert(lastSelectedElement)
|
|
|
|
local lastEltsList = lastSelectedElement.parent
|
|
local editElt = lastEltsList:find("edit_element")
|
|
assert(editElt)
|
|
|
|
if r2:getSelectedEltUIId(uiName) == selectedButtonElt.parent.parent.parent.id then
|
|
return
|
|
end
|
|
|
|
lastSelectedElement.active = true
|
|
lastSelectedElement:find("select").pushed = false
|
|
|
|
editElt.active = false
|
|
end
|
|
|
|
r2:setSelectedEltUIId(uiName, selectedButtonElt.parent.parent.parent.id)
|
|
|
|
local selectedElement = selectedButtonElt.parent.parent.parent
|
|
assert(selectedElement)
|
|
|
|
if eltOrder then
|
|
upElement.active = true
|
|
downElement.active = true
|
|
orderElt.active = true
|
|
end
|
|
|
|
-- update element editor position in list
|
|
local eltsList = sequence:find("elements_list")
|
|
assert(eltsList)
|
|
local editElt = eltsList:find("edit_element")
|
|
assert(editElt)
|
|
|
|
local indexSelectedElt = eltsList:getElementIndex(selectedElement)
|
|
local indexEltEditor = eltsList:getElementIndex(editElt)
|
|
|
|
if indexEltEditor<indexSelectedElt then
|
|
for i=indexEltEditor, indexSelectedElt-1 do
|
|
eltsList:downChild(editElt)
|
|
end
|
|
else
|
|
for i=indexSelectedElt, indexEltEditor-2 do
|
|
eltsList:upChild(editElt)
|
|
end
|
|
end
|
|
|
|
editElt.active = true
|
|
selectedElement.active = false
|
|
|
|
-- cancel current selection
|
|
else
|
|
local lastSelectedElement = r2:getSelectedEltUI(uiName)
|
|
r2:setSelectedEltUIId(uiName, nil)
|
|
|
|
upElement.active = false
|
|
downElement.active = false
|
|
orderElt.active = false
|
|
|
|
local lastEltsList = lastSelectedElement.parent
|
|
local editElt = lastEltsList:find("edit_element")
|
|
assert(editElt)
|
|
|
|
editElt.active = false
|
|
lastSelectedElement.active = true
|
|
end
|
|
end
|
|
|
|
------------------ SELECT SEQUENCE ---------------------------------------------------------
|
|
function r2:selectElementsSequence(uiName, index)
|
|
local eltsWnd = getUI("ui:interface:"..uiName)
|
|
assert(eltsWnd)
|
|
|
|
local sequencesTab = eltsWnd:find("sequence_tabs")
|
|
assert(sequencesTab)
|
|
|
|
if (index>=0) and (sequencesTab.tabButtonNb > index) then
|
|
sequencesTab.selection = tonumber(index)
|
|
|
|
local repeatButton = eltsWnd:find("repeat_group"):find("repeat"):find("toggle_butt")
|
|
assert(repeatButton)
|
|
|
|
local sequenceUI = sequencesTab:getGroup(index)
|
|
assert(sequenceUI)
|
|
local sequenceInstId = sequenceUI.Env.sequenceId
|
|
|
|
if sequenceInstId and r2:getInstanceFromId(sequenceInstId) then
|
|
local sequenceInst = r2:getInstanceFromId(sequenceInstId)
|
|
repeatButton.pushed = (sequenceInst.Repeating == 0)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
---------------------------------------- Open element editor --------------------------------------
|
|
function r2:openElementEditor(uiName, title, baseWindowName)
|
|
|
|
local elementEditor = r2:getSelectedSequ(uiName):find("edit_element")
|
|
assert(elementEditor)
|
|
|
|
local selectedElement = r2:getSelectedEltUI(uiName)
|
|
assert(selectedElement)
|
|
|
|
elementEditor.active = true
|
|
selectedElement.active = false
|
|
end
|
|
|
|
----------------------------------- Remove elements sequence --------------------------------------
|
|
function r2:removeElementsSequence(uiName, elementsTable, sequName)
|
|
|
|
local eltSequenceUI = getUI("ui:interface:"..uiName)
|
|
assert(eltSequenceUI)
|
|
|
|
local tab = eltSequenceUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
assert(activeLogicEntity)
|
|
local activitySequences = activeLogicEntity:getBehavior()[elementsTable]
|
|
|
|
--local seq = sequName
|
|
|
|
--for i=tab.selection+1,(tab.tabButtonNb-1) do
|
|
-- local buttonTab = tab:find("tab"..i)
|
|
-- assert(buttonTab)
|
|
|
|
-- if activitySequences[i].Name == seq..(i+1) then
|
|
-- local newText = seq..(i)
|
|
-- r2.requestSetNode(activitySequences[i].InstanceId, "Name", newText)
|
|
-- end
|
|
--end
|
|
|
|
local sequenceId = r2:getSelectedSequInstId(uiName)
|
|
-- request erase node
|
|
r2.requestEraseNode(sequenceId, "", -1)
|
|
|
|
return sequenceId
|
|
end
|
|
|
|
function r2:removeElementsSequenceUI(tabIndex, uiName, elementsTable, sequName)
|
|
|
|
local wndUI = getUI("ui:interface:"..uiName)
|
|
assert(wndUI)
|
|
|
|
local tab = wndUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
assert(activeLogicEntity)
|
|
local activitySequences = activeLogicEntity:getBehavior()[elementsTable]
|
|
|
|
for i=tabIndex+1,(tab.tabButtonNb-1) do
|
|
local buttonTab = tab:find("tab"..i)
|
|
assert(buttonTab)
|
|
|
|
buttonTab.params_l = "r2:selectSequenceTab('"..uiName.."', "..tostring(i-1)..")"
|
|
|
|
if buttonTab.hardtext == sequName..(i+1) then
|
|
buttonTab.uc_hardtext = sequName..i
|
|
end
|
|
end
|
|
|
|
-- recover name of the future "first sequence"
|
|
local firstEltName
|
|
local indexName
|
|
if tab.tabButtonNb > 1 then
|
|
if tabIndex==0 then
|
|
indexName = 1
|
|
else
|
|
indexName = 0
|
|
end
|
|
--if activitySequences[indexName].Name==sequName..(indexName+1) then
|
|
if r2:getSequenceName(activitySequences[indexName])==sequName..(indexName+1) then
|
|
firstEltName = sequName.."1"
|
|
else
|
|
--firstEltName = activitySequences[indexName].Name
|
|
firstEltName = r2:getSequenceName(activitySequences[indexName])
|
|
end
|
|
else
|
|
firstEltName = tostring(i18n.get("uiR2EDSequences"))
|
|
end
|
|
|
|
local selectedElt = r2:getSelectedEltUI(uiName)
|
|
if selectedElt and selectedElt.parent.parent.parent.id == r2:getSelectedSequ(uiName).id then
|
|
r2:setSelectedEltUIId(uiName, nil)
|
|
end
|
|
|
|
tab:removeTab(tabIndex)
|
|
|
|
if tab.tabButtonNb == 0 then
|
|
r2:cleanSequenceEditor(wndUI)
|
|
end
|
|
|
|
return firstEltName
|
|
end
|
|
|
|
function r2:cleanSequenceEditor(eltSequenceUI)
|
|
|
|
local sepTop = eltSequenceUI:find("sep_top")
|
|
assert(sepTop)
|
|
|
|
local sepBottom = eltSequenceUI:find("sep_bottom")
|
|
assert(sepBottom)
|
|
|
|
local sepLeft = eltSequenceUI:find("sep_left")
|
|
assert(sepLeft)
|
|
|
|
local sepRight = eltSequenceUI:find("sep_right")
|
|
assert(sepRight)
|
|
|
|
local removeSequence = eltSequenceUI:find("remove_sequence_button")
|
|
assert(removeSequence)
|
|
|
|
local editSequence = eltSequenceUI:find("edit_sequence")
|
|
assert(editSequence)
|
|
|
|
sepTop.active = false
|
|
sepBottom.active = false
|
|
sepLeft.active= false
|
|
sepRight.active= false
|
|
removeSequence.active = false
|
|
editSequence.active = false
|
|
|
|
local repeatButtonGr = eltSequenceUI:find("repeat_group")
|
|
repeatButtonGr.active = false
|
|
end
|
|
|
|
------------------ new elements sequence -------------------------------------------------------------
|
|
function r2:newElementsSequence(uiName, templateParams, editorEltTemplate, instance, sequName)
|
|
|
|
local eltSequenceUI = getUI("ui:interface:"..uiName)
|
|
assert(eltSequenceUI)
|
|
|
|
local menu = eltSequenceUI:find("sequence_menu")
|
|
assert(menu)
|
|
|
|
local tab = menu:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local newTabNb = tab.tabButtonNb+1
|
|
local posParent, posRef, id, hardText, group
|
|
if newTabNb == 1 then
|
|
posParent = "parent"
|
|
posRef = "TL TL"
|
|
else
|
|
posParent = "tab"..(newTabNb-2)
|
|
posRef = "TR TL"
|
|
end
|
|
|
|
id = "tab"..(newTabNb-1)
|
|
local group = "sequence"..r2.sequencesNb
|
|
|
|
r2.sequencesNb = r2.sequencesNb + 1
|
|
|
|
local newTabGroup = createUIElement("sequence_elements_template", menu.id, {id=group,
|
|
new_elt=templateParams.newElt, new_elt_text=templateParams.newEltText,
|
|
elt_order_text=templateParams.eltOrderText, up_elt=templateParams.upElt,
|
|
down_elt=templateParams.downElt, max_min_elts=templateParams.maxMinElts,
|
|
down_up_color=templateParams.downUpColor})
|
|
assert(newTabGroup)
|
|
|
|
menu:addGroup(newTabGroup)
|
|
|
|
newTabGroup.Env.sequenceId = instance.InstanceId
|
|
|
|
local tabName
|
|
if instance.Name~= "" then
|
|
tabName = instance.Name
|
|
else
|
|
local comps = instance.Parent
|
|
for i=0, comps.Size-1 do
|
|
if comps[i].InstanceId == instance.InstanceId then
|
|
tabName = sequName..(i+1)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
local newTab = createUIElement("sequence_tab_template", tab.id,
|
|
{id=id, posparent=posParent, posref=posRef, hardtext=tabName, group=group,
|
|
col_pushed =templateParams.colPushed, params_l=templateParams.paramsL})
|
|
assert(newTab)
|
|
|
|
tab:addTab(newTab)
|
|
|
|
if r2.ownCreatedInstances[instance.InstanceId] == true then
|
|
tab.selection = tab.tabButtonNb-1
|
|
r2.ownCreatedInstances[instance.InstanceId] = nil
|
|
|
|
--local repeatButton = eltSequenceUI:find("repeat_group"):find("repeat"):find("toggle_butt")
|
|
--assert(repeatButton)
|
|
--repeatButton.pushed = (instance.Repeating == 0)
|
|
|
|
r2:selectElementsSequence(uiName, tab.tabButtonNb-1)
|
|
end
|
|
|
|
if tab.tabButtonNb == 1 then
|
|
local sepTop = menu:find("sep_top")
|
|
assert(sepTop)
|
|
|
|
local sepBottom = menu:find("sep_bottom")
|
|
assert(sepBottom)
|
|
|
|
local sepLeft = menu:find("sep_left")
|
|
assert(sepLeft)
|
|
|
|
local sepRight = menu:find("sep_right")
|
|
assert(sepRight)
|
|
|
|
local removeSequence = eltSequenceUI:find("remove_sequence_button")
|
|
assert(removeSequence)
|
|
|
|
local editSequence = eltSequenceUI:find("edit_sequence")
|
|
assert(editSequence)
|
|
|
|
sepTop.active = true
|
|
sepBottom.active = true
|
|
sepLeft.active= true
|
|
sepRight.active= true
|
|
removeSequence.active = true
|
|
editSequence.active = true
|
|
|
|
if uiName == "r2ed_triggers" then --TEMP TEMP TEMP
|
|
local repeatButtonGr = eltSequenceUI:find("repeat_group")
|
|
repeatButtonGr.active = true
|
|
end --TEMP TEMP TEMP
|
|
end
|
|
|
|
local listElements = newTabGroup:find("elements_list")
|
|
assert(listElements)
|
|
listElements.Env.elementsCount = nil
|
|
|
|
-- add element editor in list
|
|
local newEditorElt = createGroupInstance(editorEltTemplate, listElements.id, {id="edit_element", active="false"})
|
|
assert(newEditorElt)
|
|
listElements:addChild(newEditorElt)
|
|
listElements.parent:updateCoords()
|
|
|
|
newEditorElt.Env.isEditor = true
|
|
|
|
newEditorElt.active = false
|
|
|
|
return newTabGroup
|
|
end
|
|
|
|
---------------------------- new element --------------------------------------------------------------
|
|
function r2:newTriggerElement(uiName, elementName, templateParams, sequenceUI, instanceId)
|
|
|
|
if sequenceUI == nil then
|
|
eltSequenceUI = getUI("ui:interface:"..uiName)
|
|
assert(eltSequenceUI)
|
|
|
|
local tab = eltSequenceUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local sequenceUI = eltSequenceUI:find(tab.associatedGroupSelection)
|
|
end
|
|
assert(sequenceUI)
|
|
|
|
local newElement = r2:newElement(sequenceUI, elementName, templateParams, true)
|
|
|
|
newElement.Env.elementId = instanceId
|
|
|
|
if r2.ownCreatedInstances[instanceId] == true then
|
|
newElement:find("select").pushed = true
|
|
r2:selectTriggerElement(sequenceUI, uiName, newElement:find("select"))
|
|
r2.ownCreatedInstances[instanceId] = nil
|
|
|
|
if uiName == "r2ed_triggers" then
|
|
r2:updateActivityEditor()
|
|
elseif uiName == "r2ed_chat_sequence" then
|
|
r2:updateChatEditor()
|
|
end
|
|
end
|
|
|
|
r2:maximizeMinimizeElement(uiName, newElement)
|
|
|
|
return newElement
|
|
end
|
|
|
|
---------------------------- new base element --------------------------------------------------------------
|
|
function r2:newElement(sequence, elementName, templateParams, eltOrder)
|
|
|
|
local listElements = sequence:find("elements_list")
|
|
assert(listElements)
|
|
|
|
-- counter for element group id
|
|
if listElements.Env.elementsCount == nil then
|
|
listElements.Env.elementsCount = 0
|
|
listElements.Env.elementsNb = 1
|
|
else
|
|
listElements.Env.elementsCount = listElements.Env.elementsCount+1
|
|
listElements.Env.elementsNb = listElements.Env.elementsNb+1
|
|
end
|
|
|
|
local elementId = "elt"..listElements.Env.elementsCount
|
|
|
|
local hardText = elementName.." "..listElements.Env.elementsNb.." : "
|
|
|
|
-- create new element
|
|
local newElement = createGroupInstance("element_template", listElements.id,
|
|
{id=elementId, posref="TL TL", x="0", y="0", sizeref="w", hardtext=hardText,
|
|
select_elt=templateParams.selectElt, open_elt_editor=templateParams.openEltEditor,
|
|
max_min_elt=templateParams.maxMinElt, remove_elt=templateParams.removeElt, open_chat=templateParams.openChat,
|
|
col_over=templateParams.colOver, col_pushed=templateParams.colPushed})
|
|
|
|
-- add element to list
|
|
listElements:addChild(newElement)
|
|
listElements.parent:updateCoords()
|
|
|
|
-- active global minimize / maximize button
|
|
if listElements.childrenNb == 2 then
|
|
local maxElts = sequence:find("maximize_elements")
|
|
assert(maxElts)
|
|
maxElts.active = true
|
|
|
|
if eltOrder then
|
|
|
|
local elementOrder = sequence:find("element_order")
|
|
assert(elementOrder)
|
|
elementOrder.active=true
|
|
end
|
|
end
|
|
|
|
-- scroll goes down to new element
|
|
local sequenceContent = newElement.parent.parent.parent
|
|
assert(sequenceContent)
|
|
|
|
local scrollBar = sequenceContent:find("scroll_objects")
|
|
assert(scrollBar)
|
|
scrollBar.trackPos = 0
|
|
|
|
-- target sroll text
|
|
local scroll = newElement:find("scroll_bar_text")
|
|
assert(scroll)
|
|
|
|
local scrollText = newElement:find("scroll_text_gr")
|
|
assert(scrollText)
|
|
scroll:setTarget(scrollText.id)
|
|
|
|
return newElement
|
|
end
|
|
|
|
------------------ OPEN SEQUENCE EDITOR --------------------------------------------------
|
|
function r2:openSequenceEditor(uiName, editorName)
|
|
|
|
local editor = getUI("ui:interface:"..editorName)
|
|
assert(editor)
|
|
|
|
local eltsUI = getUI("ui:interface:"..uiName)
|
|
assert(eltsUI)
|
|
|
|
editor.x = eltsUI.x
|
|
editor.y = eltsUI.y
|
|
editor.active = true
|
|
|
|
-- update edit box text with current sequence name
|
|
local editName = editor:find("sequence_name"):find("edit_box_group")
|
|
assert(editName)
|
|
|
|
local tab = eltsUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local buttonTab = tab:find("tab"..tab.selection)
|
|
assert(buttonTab)
|
|
|
|
editName.uc_input_string = buttonTab.uc_hardtext
|
|
end
|
|
|
|
------------------ SET SEQUENCE NAME -----------------------------------------------------
|
|
function r2:setSequenceName(uiName, editorName)
|
|
|
|
local editor = getUI("ui:interface:"..editorName)
|
|
assert(editor)
|
|
|
|
local editName = editor:find("sequence_name"):find("edit_box_group")
|
|
assert(editName)
|
|
|
|
local name = editName.input_string
|
|
|
|
local sequenceInstId = r2:getSelectedSequInstId(uiName)
|
|
r2.requestSetNode(sequenceInstId, "Name", name)
|
|
end
|
|
|
|
function r2:updateSequenceName(uiName, instance)
|
|
|
|
--local name = instance.Name
|
|
local name = r2:getSequenceName(instance)
|
|
local sequInstId = instance.InstanceId
|
|
|
|
local eltsUI = getUI("ui:interface:"..uiName)
|
|
assert(eltsUI)
|
|
|
|
local tab = eltsUI:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local tabId
|
|
for i=0, tab.tabButtonNb-1 do
|
|
local sequenceUI = tab:getGroup(i)
|
|
if sequenceUI.Env.sequenceId == sequInstId then
|
|
tabId = i
|
|
break
|
|
end
|
|
end
|
|
|
|
local buttonTab = tab:find("tab"..tabId)
|
|
assert(buttonTab)
|
|
|
|
buttonTab.uc_hardtext = name
|
|
|
|
if uiName == "r2ed_triggers" then
|
|
r2:updateSequencesButtonBar(tabId, name)
|
|
end
|
|
end
|
|
|
|
function r2:updateSequenceRepeatingOption(uiName, instance)
|
|
|
|
local sequenceUI = r2:getSelectedSequ(uiName)
|
|
|
|
if sequenceUI.Env.sequenceId == instance.InstanceId then
|
|
|
|
local eltsUI = getUI("ui:interface:"..uiName)
|
|
local repeatButton = eltsUI:find("repeat_group"):find("repeat"):find("toggle_butt")
|
|
repeatButton.pushed = (instance.Repeating == 0)
|
|
end
|
|
end
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------- ACTIVE LOGIC ENTITY DisplayerProperties -----------------------------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
|
|
local activeLogicEntityPropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
function activeLogicEntityPropertySheetDisplayerTable:onPostCreate(instance)
|
|
end
|
|
------------------------------------------------
|
|
function activeLogicEntityPropertySheetDisplayerTable:onErase(instance)
|
|
end
|
|
------------------------------------------------
|
|
function activeLogicEntityPropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function activeLogicEntityPropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function activeLogicEntityPropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
end
|
|
|
|
------------------------------------------------
|
|
r2.activitiesAndChatsUIUpdate = false
|
|
function activeLogicEntityPropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
|
|
r2:logicEntityPropertySheetDisplayer():onSelect(instance, isSelected)
|
|
|
|
local triggersUI = getUI("ui:interface:r2ed_triggers")
|
|
assert(triggersUI)
|
|
|
|
if not isSelected then
|
|
triggersUI.active = false
|
|
r2:closeMiniActivityView()
|
|
r2:closeChatSequencesUI()
|
|
|
|
r2:cleanActivitiesAndChatsUI()
|
|
r2:cleanLogicEntityUI()
|
|
else
|
|
r2.activitiesAndChatsUIUpdate = false
|
|
end
|
|
end
|
|
|
|
r2.callSetSaysWhat = true
|
|
------------------------------------------------
|
|
function r2:cleanActivitiesAndChatsUI()
|
|
|
|
-- update chat sequence combo box
|
|
local triggersUI = getUI("ui:interface:r2ed_triggers")
|
|
assert(triggersUI)
|
|
local chatSequencesUI = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(chatSequencesUI)
|
|
|
|
-- remove all tabs
|
|
local sequenceMenu = triggersUI:find("sequence_menu")
|
|
assert(sequenceMenu)
|
|
|
|
local tabActivities = triggersUI:find("sequence_tabs")
|
|
assert(tabActivities)
|
|
|
|
for i=0, tabActivities.tabButtonNb-1 do
|
|
local groupTab = tabActivities:getGroup(i)
|
|
assert(groupTab)
|
|
sequenceMenu:delGroup(groupTab)
|
|
end
|
|
|
|
tabActivities:removeAll()
|
|
r2:setSelectedEltUIId("r2ed_triggers", nil)
|
|
r2:cleanSequenceEditor(triggersUI)
|
|
|
|
-- delete chat sequences
|
|
sequenceMenu = chatSequencesUI:find("sequence_menu")
|
|
assert(sequenceMenu)
|
|
|
|
local tabChats = chatSequencesUI:find("sequence_tabs")
|
|
assert(tabChats)
|
|
|
|
for i=0, tabChats.tabButtonNb-1 do
|
|
local groupTab = tabChats:getGroup(i)
|
|
assert(groupTab)
|
|
sequenceMenu:delGroup(groupTab)
|
|
end
|
|
|
|
tabChats:removeAll()
|
|
r2:setSelectedEltUIId("r2ed_chat_sequence", nil)
|
|
r2:cleanSequenceEditor(chatSequencesUI)
|
|
end
|
|
|
|
function r2:updateActivitiesAndChatsUI(instance)
|
|
|
|
if r2.activitiesAndChatsUIUpdate==true then
|
|
return
|
|
end
|
|
|
|
r2.activitiesAndChatsUIUpdate = true
|
|
|
|
if r2.lastSelectedActivitySequence==nil then
|
|
|
|
r2:cleanActivitiesAndChatsUI()
|
|
|
|
-- update chat sequence combo box
|
|
local triggersUI = getUI("ui:interface:r2ed_triggers")
|
|
assert(triggersUI)
|
|
local chatSequencesUI = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(chatSequencesUI)
|
|
|
|
-- remove all tabs
|
|
local tabActivities = triggersUI:find("sequence_tabs")
|
|
assert(tabActivities)
|
|
|
|
-- delete chat sequences
|
|
local tabChats = chatSequencesUI:find("sequence_tabs")
|
|
assert(tabChats)
|
|
|
|
|
|
local activitySequences = instance:getBehavior().Activities
|
|
local chatSequences = instance:getBehavior().ChatSequences
|
|
|
|
-- build sequences of selected NPC group
|
|
local uiName = "r2ed_triggers"
|
|
|
|
for s = 0, activitySequences.Size - 1 do
|
|
local sequence = activitySequences[s]
|
|
r2:newActivitiesSequence(false, sequence, true)
|
|
end
|
|
|
|
if tabActivities.tabButtonNb>1 then
|
|
tabActivities.selection = 0
|
|
r2:selectElementsSequence(uiName, 0)
|
|
end
|
|
for s=0, tabActivities.tabButtonNb-1 do
|
|
local sequenceUI = tabActivities:getGroup(s)
|
|
assert(sequenceUI)
|
|
|
|
local eltsList = sequenceUI:find("elements_list")
|
|
assert(eltsList)
|
|
if eltsList.childrenNb > 1 then
|
|
local firstElt = eltsList:getChild(1)
|
|
local selectedButton = firstElt:find("select")
|
|
selectedButton.pushed = true
|
|
|
|
r2:selectElement(sequenceUI, uiName, true, selectedButton)
|
|
|
|
r2:updateActivityEditor()
|
|
|
|
break
|
|
end
|
|
end
|
|
|
|
uiName = "r2ed_chat_sequence"
|
|
r2.callSetSaysWhat = false
|
|
for s = 0, chatSequences.Size - 1 do
|
|
local sequence = chatSequences[s]
|
|
r2:newChatsSequence(false, sequence, true)
|
|
end
|
|
r2.callSetSaysWhat = true
|
|
if tabChats.tabButtonNb>1 then
|
|
tabChats.selection = 0
|
|
r2:selectElementsSequence(uiName, 0)
|
|
end
|
|
for s=0, tabChats.tabButtonNb-1 do
|
|
local sequenceUI = tabChats:getGroup(s)
|
|
assert(sequenceUI)
|
|
|
|
local eltsList = sequenceUI:find("elements_list")
|
|
assert(eltsList)
|
|
if eltsList.childrenNb > 1 then
|
|
local firstElt = eltsList:getChild(1)
|
|
local selectedButton = firstElt:find("select")
|
|
r2.callSetSaysWhat = false
|
|
selectedButton.pushed = true
|
|
|
|
r2:selectElement(sequenceUI, uiName, true, selectedButton)
|
|
|
|
r2.callSetSaysWhat = true
|
|
|
|
r2:updateChatEditor()
|
|
end
|
|
end
|
|
|
|
triggersUI.uc_title = tostring(i18n.get("uiR2EDActivitySequenceEditor")) .. r2:getSelectedInstance().Name
|
|
chatSequencesUI.uc_title = tostring(i18n.get("uiR2EDChatSequenceEditor")) .. r2:getSelectedInstance().Name
|
|
end
|
|
end
|
|
|
|
------------------------------------------------
|
|
function activeLogicEntityPropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
|
|
r2:logicEntityPropertySheetDisplayer():onAttrModified(instance, attributeName)
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or instance ~= r2:getSelectedInstance() then
|
|
return
|
|
end
|
|
|
|
if attributeName == "Name" then
|
|
|
|
local triggersUI = getUI("ui:interface:r2ed_triggers")
|
|
assert(triggersUI)
|
|
|
|
local chatSequencesUI = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(chatSequencesUI)
|
|
|
|
triggersUI.uc_title = tostring(i18n.get("uiR2EDActivitySequenceEditor")) .. instance[attributeName]
|
|
chatSequencesUI.uc_title = tostring(i18n.get("uiR2EDChatSequenceEditor")) .. instance[attributeName]
|
|
end
|
|
end
|
|
|
|
------------------------------------------------
|
|
function r2:activeLogicEntityPropertySheetDisplayer()
|
|
return activeLogicEntityPropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
end
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------- NPC GROUP DisplayerProperties -----------------------------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
|
|
local npcGroupPropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
function npcGroupPropertySheetDisplayerTable:onPostCreate(instance)
|
|
end
|
|
------------------------------------------------
|
|
function npcGroupPropertySheetDisplayerTable:onErase(instance)
|
|
end
|
|
------------------------------------------------
|
|
function npcGroupPropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function npcGroupPropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function npcGroupPropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function npcGroupPropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
r2:activeLogicEntityPropertySheetDisplayer():onSelect(instance, isSelected)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function npcGroupPropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
r2:activeLogicEntityPropertySheetDisplayer():onAttrModified(instance, attributeName)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function r2:npcGroupPropertySheetDisplayer()
|
|
return npcGroupPropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- ACTIVITY SEQUENCE DisplayerProperties ---------------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
local activitySequencePropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
function activitySequencePropertySheetDisplayerTable:onPostCreate(instance)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
r2:newActivitiesSequence(false, instance, false)
|
|
end
|
|
------------------------------------------------
|
|
function activitySequencePropertySheetDisplayerTable:onErase(instance)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
local triggersUI = getUI("ui:interface:r2ed_triggers")
|
|
assert(triggersUI)
|
|
|
|
local sequenceTabs = triggersUI:find("sequence_tabs")
|
|
assert(sequenceTabs)
|
|
|
|
local sequIndex
|
|
for i=0,sequenceTabs.tabButtonNb-1 do
|
|
local sequence = sequenceTabs:getGroup(i)
|
|
if sequence.Env.sequenceId == instance.InstanceId then
|
|
sequIndex = i
|
|
break
|
|
end
|
|
end
|
|
|
|
if sequIndex~=nil then
|
|
r2:removeActivitiesSequenceUI(sequIndex)
|
|
end
|
|
end
|
|
------------------------------------------------
|
|
function activitySequencePropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function activitySequencePropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function activitySequencePropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function activitySequencePropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function activitySequencePropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
if attributeName == "Name" then
|
|
r2:updateSequenceName("r2ed_triggers", instance)
|
|
elseif attributeName == "Repeating" then
|
|
r2:updateSequenceRepeatingOption("r2ed_triggers", instance)
|
|
end
|
|
end
|
|
|
|
------------------------------------------------
|
|
function r2:activitySequencePropertySheetDisplayer()
|
|
return activitySequencePropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
end
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- CHAT SEQUENCE DisplayerProperties ---------------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
local chatSequencePropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
function chatSequencePropertySheetDisplayerTable:onPostCreate(instance)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
r2:newChatsSequence(false, instance)
|
|
end
|
|
------------------------------------------------
|
|
function chatSequencePropertySheetDisplayerTable:onErase(instance)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
local chatsUI = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(chatsUI)
|
|
|
|
local sequenceTabs = chatsUI:find("sequence_tabs")
|
|
assert(sequenceTabs)
|
|
|
|
local sequIndex
|
|
for i=0,sequenceTabs.tabButtonNb-1 do
|
|
local sequence = sequenceTabs:getGroup(i)
|
|
if sequence.Env.sequenceId == instance.InstanceId then
|
|
sequIndex = i
|
|
break
|
|
end
|
|
end
|
|
|
|
if sequIndex~=nil then
|
|
r2:removeChatsSequenceUI(sequIndex)
|
|
end
|
|
|
|
r2:updateMiniActivityView()
|
|
end
|
|
------------------------------------------------
|
|
function chatSequencePropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function chatSequencePropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function chatSequencePropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function chatSequencePropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function chatSequencePropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
if attributeName == "Name" then
|
|
r2:updateSequenceName("r2ed_chat_sequence", instance)
|
|
elseif attributeName == "Repeating" then
|
|
r2:updateSequenceRepeatingOption("r2ed_chat_sequence", instance)
|
|
end
|
|
end
|
|
|
|
------------------------------------------------
|
|
function r2:chatSequencePropertySheetDisplayer()
|
|
return chatSequencePropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
end
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- ACTIVITY STEP DisplayerProperties--------------------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
local activityStepPropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
function activityStepPropertySheetDisplayerTable:onPostCreate(instance)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
local activitySequInst = instance.Parent.Parent
|
|
|
|
local triggersUI = getUI("ui:interface:r2ed_triggers")
|
|
assert(triggersUI)
|
|
|
|
local sequenceTabs = triggersUI:find("sequence_tabs")
|
|
assert(sequenceTabs)
|
|
|
|
local sequenceUI
|
|
for i=0,sequenceTabs.tabButtonNb-1 do
|
|
local sequence = sequenceTabs:getGroup(i)
|
|
if sequence.Env.sequenceId == activitySequInst.InstanceId then
|
|
sequenceUI = sequence
|
|
break
|
|
end
|
|
end
|
|
|
|
r2:newActivity(false, nil, instance, sequenceUI)
|
|
end
|
|
------------------------------------------------
|
|
function activityStepPropertySheetDisplayerTable:onErase(instance)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
local sequenceUI, elementUI = r2:findSequenceAndElementUIFromInstance(instance, "r2ed_triggers")
|
|
|
|
if elementUI ~= nil then
|
|
r2:removeActivityUI(sequenceUI, elementUI)
|
|
end
|
|
end
|
|
------------------------------------------------
|
|
function activityStepPropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function activityStepPropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
local sequenceUI, activityStepUI = r2:findSequenceAndElementUIFromInstance(instance, "r2ed_triggers")
|
|
if activityStepUI then
|
|
r2:downUpElement(activityStepUI, "r2ed_triggers")
|
|
end
|
|
end
|
|
------------------------------------------------
|
|
function activityStepPropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function activityStepPropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function activityStepPropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
local sequenceUI, elementUI = r2:findSequenceAndElementUIFromInstance(instance, "r2ed_triggers")
|
|
if elementUI then
|
|
r2:updateActivityChatSequence(elementUI)
|
|
end
|
|
end
|
|
|
|
------------------------------------------------
|
|
function activityStepPropertySheetDisplayerTable:onTargetInstanceEraseRequested(instance, refIdName, refIdIndexInArray)
|
|
|
|
if refIdName == "ActivityZoneId" then
|
|
r2.requestSetNode(instance.InstanceId, "Activity", "Stand Still")
|
|
r2.requestSetNode(instance.InstanceId, "ActivityZoneId", r2.RefId(""))
|
|
r2.requestSetNode(instance.InstanceId, "TimeLimit", "No Limit")
|
|
r2.requestSetNode(instance.InstanceId, "TimeLimitValue", "")
|
|
elseif refIdName == "Chat" then
|
|
r2.requestSetNode(instance.InstanceId, "Chat", r2.RefId(""))
|
|
end
|
|
end
|
|
------------------------------------------------
|
|
function activityStepPropertySheetDisplayerTable:onTargetInstanceAttrModified(instance, refIdName, refIdIndexInArray, targetAttrName, targetAttrIndexInArray)
|
|
end
|
|
|
|
-------------------------------------------------
|
|
function r2:activityStepPropertySheetDisplayer()
|
|
return activityStepPropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
end
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- CHAT STEP DisplayerProperties------------------------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
local chatStepPropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
function chatStepPropertySheetDisplayerTable:onPostCreate(instance)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
local chatSequInst = instance.Parent.Parent
|
|
|
|
local chatsUI = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(chatsUI)
|
|
|
|
local sequenceTabs = chatsUI:find("sequence_tabs")
|
|
assert(sequenceTabs)
|
|
|
|
local sequenceUI
|
|
for i=0,sequenceTabs.tabButtonNb-1 do
|
|
local sequence = sequenceTabs:getGroup(i)
|
|
if sequence.Env.sequenceId == chatSequInst.InstanceId then
|
|
sequenceUI = sequence
|
|
break
|
|
end
|
|
end
|
|
|
|
r2:newChat(false, instance, sequenceUI)
|
|
end
|
|
------------------------------------------------
|
|
function chatStepPropertySheetDisplayerTable:onErase(instance)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
local sequenceUI, elementUI = r2:findSequenceAndElementUIFromInstance(instance, "r2ed_chat_sequence")
|
|
|
|
if elementUI ~= nil then
|
|
local chatStepInst = r2:getInstanceFromId(elementUI.Env.elementId)
|
|
assert(chatStepInst)
|
|
r2:updateActivitiesWhithThisChatSequence(chatStepInst, true)
|
|
r2:removeElementUI(sequenceUI, "r2ed_chat_sequence", elementUI)
|
|
end
|
|
end
|
|
------------------------------------------------
|
|
function chatStepPropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function chatStepPropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
r2:updateActivitiesWhithThisChatSequence(instance, false)
|
|
|
|
local sequenceUI, chatStepUI = r2:findSequenceAndElementUIFromInstance(instance, "r2ed_chat_sequence")
|
|
if chatStepUI then
|
|
r2:downUpElement(chatStepUI, "r2ed_chat_sequence")
|
|
end
|
|
end
|
|
------------------------------------------------
|
|
function chatStepPropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function chatStepPropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function chatStepPropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
local activeLogicEntityParent = instance.Parent.Parent.Parent.Parent.Parent
|
|
|
|
if not r2.activitiesAndChatsUIUpdate or activeLogicEntity==nil or activeLogicEntity ~= activeLogicEntityParent then
|
|
return
|
|
end
|
|
|
|
local sequenceUI, chatStepUI = r2:findSequenceAndElementUIFromInstance(instance, "r2ed_chat_sequence")
|
|
if chatStepUI then
|
|
r2:updateChatText(chatStepUI)
|
|
end
|
|
end
|
|
|
|
function r2:findSequenceAndElementUIFromInstance(instance, uiName)
|
|
|
|
local sequenceInst = instance.Parent.Parent
|
|
|
|
local wndUI = getUI("ui:interface:"..uiName)
|
|
assert(wndUI)
|
|
|
|
local sequenceTabs = wndUI:find("sequence_tabs")
|
|
assert(sequenceTabs)
|
|
|
|
local sequenceUI
|
|
for i=0,sequenceTabs.tabButtonNb-1 do
|
|
local sequence = sequenceTabs:getGroup(i)
|
|
if sequence.Env.sequenceId == sequenceInst.InstanceId then
|
|
sequenceUI = sequence
|
|
break
|
|
end
|
|
end
|
|
|
|
if sequenceUI ~= nil then
|
|
local eltsList = sequenceUI:find("elements_list")
|
|
assert(eltsList)
|
|
|
|
for i=0,eltsList.childrenNb-1 do
|
|
local element = eltsList:getChild(i)
|
|
if element.Env.elementId == instance.InstanceId then
|
|
return sequenceUI, element
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--------------------------------------------------
|
|
function r2:chatStepPropertySheetDisplayer()
|
|
return chatStepPropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
end
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- CHAT ACTION DisplayerProperties -----------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
local chatActionPropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
function chatActionPropertySheetDisplayerTable:onPostCreate(instance)
|
|
end
|
|
------------------------------------------------
|
|
function chatActionPropertySheetDisplayerTable:onErase(instance)
|
|
end
|
|
------------------------------------------------
|
|
function chatActionPropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function chatActionPropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
end
|
|
------------------------------------------------
|
|
function chatActionPropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function chatActionPropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function chatActionPropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function chatActionPropertySheetDisplayerTable:onTargetInstanceEraseRequested(instance, refIdName, refIdIndexInArray)
|
|
if refIdName == "Who" then
|
|
r2.requestSetNode(instance.InstanceId, "Who", r2.RefId(""))
|
|
r2.requestSetNode(instance.InstanceId, "Says", "")
|
|
r2.requestSetNode(instance.InstanceId, "Emote", "")
|
|
r2.requestSetNode(instance.InstanceId, "Facing", r2.RefId(""))
|
|
elseif refIdName == "Facing" then
|
|
r2.requestSetNode(instance.InstanceId, "Facing", r2.RefId(""))
|
|
end
|
|
end
|
|
------------------------------------------------
|
|
function chatActionPropertySheetDisplayerTable:onTargetInstanceAttrModified(instance, refIdName, refIdIndexInArray, targetAttrName, targetAttrIndexInArray)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function r2:chatActionPropertySheetDisplayer()
|
|
return chatActionPropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r2.lastSelectedActivitySequence = nil
|
|
|
|
r2.activityTexture = { ["Follow Route"] = "r2_mini_activity_follow_road.tga",
|
|
["Patrol"] = "r2_mini_activity_patrol_road.tga",
|
|
["Repeat Road"] = "r2_mini_activity_repeat_road.tga",
|
|
["Wander"] = "r2_mini_activity_wander_zone.tga",
|
|
["Stand Still"] = "r2_mini_activity_stand_still.tga",
|
|
-- ["Inactive"] = "r2_mini_activity_inactive.tga"
|
|
}
|
|
|
|
---------------------------------------------------------------------------------------------------------
|
|
-- Show the mini activity view for this instance
|
|
function r2:setupMiniActivityView(instance)
|
|
if instance and instance:isKindOf("ActiveLogicEntity") then
|
|
local selectedTab = 0
|
|
if r2.lastSelectedActivitySequence then
|
|
selectedTab = r2.lastSelectedActivitySequence
|
|
end
|
|
r2:selectActivitiesSequence(selectedTab)
|
|
r2:updateSequencesButtonBar(selectedTab)
|
|
end
|
|
end
|
|
|
|
------------------ SELECT ACTIVITY SEQUENCE ---------------------------------------------------------
|
|
function r2:selectActivitiesSequence(index)
|
|
r2:selectElementsSequence("r2ed_triggers", index)
|
|
r2:openAndUpdateMiniActivityView(index)
|
|
end
|
|
|
|
------------------ UPDATE SEQUENCES BUTTON BAR ---------------------------------------------------------
|
|
function r2:updateSequencesButtonBar(index, sequenceName)
|
|
|
|
local selectBar = getUI("ui:interface:r2ed_select_bar")
|
|
assert(selectBar)
|
|
|
|
local sequencesButton = selectBar:find("sequences")
|
|
assert(sequencesButton)
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
if activeLogicEntity then
|
|
if sequenceName==nil and (index >=0) and (index < activeLogicEntity:getBehavior().Activities.Size) then
|
|
local activitySequence = activeLogicEntity:getBehavior().Activities[index]
|
|
assert(activitySequence)
|
|
--sequencesButton.uc_hardtext = activitySequence.Name
|
|
sequencesButton.uc_hardtext = r2:getSequenceName(activitySequence)
|
|
elseif sequenceName~= nil then
|
|
sequencesButton.uc_hardtext = sequenceName
|
|
else
|
|
sequencesButton.uc_hardtext = i18n.get("uiR2EDSequences")
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
function r2:newMiniActivitySequence()
|
|
return r2:newActivitiesSequence(true)
|
|
end
|
|
|
|
function r2:openAndUpdateMiniActivityView(index)
|
|
r2:openMiniActivityView()
|
|
-- update activities list
|
|
|
|
r2:updateMiniActivityView(index)
|
|
end
|
|
|
|
function r2:openMiniActivityView()
|
|
local triggersUI = getUI("ui:interface:r2ed_triggers")
|
|
assert(triggersUI)
|
|
|
|
local selectedInst = r2:getSelectedInstance()
|
|
|
|
if selectedInst and not selectedInst:isBotObject() and not selectedInst:isPlant() and not triggersUI.active then
|
|
local miniActivityView = getUI("ui:interface:r2ed_mini_activity_view")
|
|
assert(miniActivityView)
|
|
miniActivityView.active = true
|
|
end
|
|
end
|
|
|
|
|
|
function r2:updateMiniActivityView(index)
|
|
|
|
local miniActivityView = getUI("ui:interface:r2ed_mini_activity_view")
|
|
assert(miniActivityView)
|
|
|
|
local miniActivities = miniActivityView:find("mini_activities")
|
|
assert(miniActivities)
|
|
|
|
local noActivityLabel = miniActivityView:find("no_activity")
|
|
assert(noActivityLabel)
|
|
|
|
local startCount = 0
|
|
local sequence
|
|
if index~=nil then
|
|
local activities = r2:getSelectedInstance():getBehavior().Activities
|
|
if index < activities.Size then
|
|
sequence = activities[index]
|
|
end
|
|
else
|
|
sequence = r2:getSelectedSequInst("r2ed_triggers")
|
|
end
|
|
|
|
if sequence~=nil then
|
|
|
|
--label "No activity"
|
|
if sequence.Components.Size == 0 then
|
|
noActivityLabel.active = true
|
|
noActivityLabel.uc_hardtext = tostring(i18n.get("uiR2EdNoActivity"))
|
|
else
|
|
noActivityLabel.active = false
|
|
end
|
|
|
|
for i=0, sequence.Components.Size-1 do
|
|
|
|
local activityInst = sequence.Components[i]
|
|
assert(activityInst)
|
|
|
|
if activityInst then
|
|
|
|
local activityIndex = i
|
|
if afterEltEditor==true then activityIndex = i-1 end
|
|
|
|
local miniActivity = miniActivities[tostring(activityIndex)]
|
|
assert(miniActivity)
|
|
|
|
miniActivity.active = true
|
|
miniActivity.Env.id = activityIndex
|
|
|
|
-- chat button
|
|
local chatButton = miniActivity:find("chat_sequence"):find("button")
|
|
assert(chatButton)
|
|
if tostring(activityInst.Chat) ~= "" then
|
|
local chatTexture = "r2_mini_activity_chat.tga"
|
|
chatButton.texture = chatTexture
|
|
chatButton.texture_pushed = chatTexture
|
|
chatButton.texture_over = chatTexture
|
|
else
|
|
local chatTexture = "r2_mini_activity_empty_chat.tga"
|
|
chatButton.texture = chatTexture
|
|
chatButton.texture_pushed = chatTexture
|
|
chatButton.texture_over = chatTexture
|
|
end
|
|
|
|
-- activity type button
|
|
local activityButton = miniActivity:find("activity"):find("button")
|
|
assert(activityButton)
|
|
local activityTexture = r2.activityTexture[activityInst.Activity]
|
|
if activityTexture then
|
|
activityButton.texture = activityTexture
|
|
activityButton.texture_pushed = activityTexture
|
|
activityButton.texture_over = activityTexture
|
|
end
|
|
|
|
-- activity type text
|
|
local activityText = miniActivity:find("activity_name")
|
|
assert(activityText)
|
|
activityText.uc_hardtext = activityInst.Activity
|
|
end
|
|
end
|
|
startCount = sequence.Components.Size
|
|
else
|
|
noActivityLabel.active = true
|
|
noActivityLabel.uc_hardtext = tostring(i18n.get("uiR2EdNoSequence"))
|
|
end
|
|
|
|
-- hide remaining mini activity templates
|
|
for i=startCount, r2.maxActivities-1 do
|
|
local miniActivity = miniActivities[tostring(i)]
|
|
assert(miniActivity)
|
|
miniActivity.active = false
|
|
end
|
|
end
|
|
|
|
|
|
function r2:closeMiniActivityView()
|
|
local miniActivityView = getUI("ui:interface:r2ed_mini_activity_view")
|
|
assert(miniActivityView)
|
|
miniActivityView.active = false
|
|
end
|
|
|
|
function r2:openActivitiesSequence()
|
|
|
|
r2:updateActivitiesAndChatsUI(r2:getSelectedInstance())
|
|
|
|
local triggersUI = getUI("ui:interface:r2ed_triggers")
|
|
assert(triggersUI)
|
|
|
|
triggersUI.active = true
|
|
triggersUI:updateCoords()
|
|
|
|
if triggersUI.Env.openFirst == nil then
|
|
triggersUI:center()
|
|
triggersUI.Env.openFirst = true
|
|
end
|
|
|
|
r2:closeMiniActivityView()
|
|
end
|
|
|
|
|
|
function r2:chooseOrOpenSelectedChatSequence()
|
|
|
|
r2:updateActivitiesAndChatsUI(r2:getSelectedInstance())
|
|
|
|
-- init menu
|
|
local menuName = "ui:interface:r2ed_chat_sequences_menu"
|
|
launchContextMenuInGame(menuName)
|
|
local menu = getUI(menuName)
|
|
|
|
local rootMenu = menu:getRootMenu()
|
|
assert(rootMenu)
|
|
rootMenu:reset()
|
|
|
|
-- update menu
|
|
local miniActivity = getUICaller().parent.parent.parent
|
|
assert(miniActivity)
|
|
|
|
local miniActivityNb = tonumber(miniActivity.Env.id)
|
|
local activitySequence = r2:getSelectedSequInst("r2ed_triggers")
|
|
assert(activitySequence)
|
|
local activityInst = activitySequence.Components[miniActivityNb]
|
|
|
|
local chatSequenceId = tostring(activityInst.Chat)
|
|
|
|
local newLine = 3
|
|
--title "Chat sequence"
|
|
local chatSequence
|
|
if chatSequenceId ~= "" then
|
|
chatSequence = r2:getInstanceFromId(chatSequenceId)
|
|
assert(chatSequence)
|
|
--rootMenu:addLine(ucstring(tostring(i18n.get("uiR2EDChatSequence")).." " .. chatSequence.Name .." : "), "lua", "", "Title")
|
|
rootMenu:addLine(ucstring(tostring(i18n.get("uiR2EDChatSequence")).." " .. r2:getSequenceName(chatSequence) .." : "), "lua", "", "Title")
|
|
else
|
|
rootMenu:addLine(ucstring(tostring(i18n.get("uiR2EDChatSequence")).." : "), "lua", "", "Title")
|
|
end
|
|
|
|
rootMenu:addSeparator()
|
|
|
|
-- "Open chat sequence"
|
|
if chatSequenceId ~= "" then
|
|
--rootMenu:addLine(ucstring(tostring(i18n.get("uiR2EDOpen")).." "..chatSequence.Name), "lua", "r2:openMiniActivityChatSequence("..tostring(miniActivityNb)..")", "Open")
|
|
rootMenu:addLine(ucstring(tostring(i18n.get("uiR2EDOpen")).." "..r2:getSequenceName(chatSequence)), "lua", "r2:openMiniActivityChatSequence("..tostring(miniActivityNb)..")", "Open")
|
|
newLine = newLine + 1
|
|
end
|
|
|
|
-- "Any chat sequence"
|
|
rootMenu:addLine(ucstring(i18n.get("uiR2EdNoChat")), "lua", "r2:setSequenceChatToMiniActivity("..tostring(miniActivityNb)..")", "None")
|
|
|
|
|
|
-- "new chat sequence"
|
|
rootMenu:addLine(ucstring(tostring(i18n.get("uiR2EdNewChat")).."..."), "lua", "r2:newChatsSequenceAndSelect("..tostring(miniActivityNb)..")", "None")
|
|
local menuButton = createGroupInstance("r2_menu_button", "", { bitmap = "r2_icon_create.tga", size="14" })
|
|
rootMenu:setUserGroupLeft(newLine, menuButton)
|
|
|
|
rootMenu:addSeparator()
|
|
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
assert(activeLogicEntity)
|
|
|
|
for i=0, activeLogicEntity:getBehavior().ChatSequences.Size-1 do
|
|
local sequence = activeLogicEntity:getBehavior().ChatSequences[i]
|
|
assert(sequence)
|
|
|
|
--rootMenu:addLine(ucstring(sequence.Name), "lua", "r2:setSequenceChatToMiniActivity("..tostring(miniActivityNb)..", " .. tostring(i)..")", sequence.InstanceId)
|
|
rootMenu:addLine(ucstring(r2:getSequenceName(sequence)), "lua", "r2:setSequenceChatToMiniActivity("..tostring(miniActivityNb)..", " .. tostring(i)..")", sequence.InstanceId)
|
|
end
|
|
|
|
-- display menu
|
|
menu:updateCoords()
|
|
local ref = getUICaller()
|
|
menu.y = ref.y_real - (menu.h - ref.h_real)
|
|
menu.x = ref.x_real
|
|
menu:updateCoords()
|
|
end
|
|
|
|
function r2:openMiniActivityChatSequence(miniActivityNb, chatSequenceId)
|
|
|
|
local activitySequence = r2:getSelectedSequInst("r2ed_triggers")
|
|
assert(activitySequence)
|
|
local activityInst = activitySequence.Components[miniActivityNb]
|
|
|
|
if chatSequenceId == nil then
|
|
chatSequenceId = tostring(activityInst.Chat)
|
|
end
|
|
|
|
r2:openChatSequence(chatSequenceId)
|
|
end
|
|
|
|
function r2:openChatSequence(chatSequenceId)
|
|
|
|
if chatSequenceId == nil then
|
|
chatSequenceId = r2:getSelectedEltInst("r2ed_triggers").Chat
|
|
end
|
|
|
|
local chatSequences = getUI("ui:interface:r2ed_chat_sequence")
|
|
assert(chatSequences)
|
|
|
|
local tab = chatSequences:find("sequence_tabs")
|
|
assert(tab)
|
|
|
|
local selectedTab
|
|
local sequenceUI
|
|
for i=0, tab.tabButtonNb-1 do
|
|
sequence = tab:getGroup(i)
|
|
assert(sequence)
|
|
if sequence.Env.sequenceId == chatSequenceId then
|
|
sequenceUI = sequence
|
|
selectedTab = i
|
|
break
|
|
end
|
|
end
|
|
|
|
if selectedTab then
|
|
tab.selection = selectedTab
|
|
|
|
local repeatButton = chatSequences:find("repeat_group"):find("repeat"):find("toggle_butt")
|
|
assert(repeatButton)
|
|
|
|
local sequenceInstId = sequenceUI.Env.sequenceId
|
|
local sequenceInst = r2:getInstanceFromId(sequenceInstId)
|
|
|
|
repeatButton.pushed = (sequenceInst.Repeating == 0)
|
|
end
|
|
|
|
r2:openChatSequences()
|
|
end
|
|
|
|
function r2:newChatsSequenceAndSelect(miniActivityNb)
|
|
local chatSequenceId = r2:newChatsSequence(true)
|
|
|
|
if chatSequenceName ~= -1 then
|
|
r2:setSequenceChatToMiniActivity(miniActivityNb, -1, chatSequenceId)
|
|
r2:openMiniActivityChatSequence(miniActivityNb, chatSequenceId)
|
|
end
|
|
end
|
|
|
|
function r2:setSequenceChatToMiniActivity(miniActivityNb, sequenceNb, chatSequenceId)
|
|
|
|
local miniActivityView = getUI("ui:interface:r2ed_mini_activity_view")
|
|
assert(miniActivityView)
|
|
|
|
local miniActivities = miniActivityView:find("mini_activities")
|
|
assert(miniActivities)
|
|
|
|
local miniActivity = miniActivities[tostring(miniActivityNb)]
|
|
assert(miniActivity)
|
|
|
|
local activitySequence = r2:getSelectedSequInst("r2ed_triggers")
|
|
assert(activitySequence)
|
|
local activityInst = activitySequence.Components[miniActivityNb]
|
|
|
|
local chatTexture
|
|
|
|
if sequenceNb == nil then
|
|
r2:selectChatSequence("None", activityInst.InstanceId)
|
|
chatTexture = "r2_mini_activity_empty_chat.tga"
|
|
else
|
|
local activeLogicEntity = r2:getSelectedInstance()
|
|
assert(activeLogicEntity)
|
|
|
|
if chatSequenceId == nil then
|
|
local chatSequence = activeLogicEntity:getBehavior().ChatSequences[tonumber(sequenceNb)]
|
|
assert(chatSequence)
|
|
chatSequenceId = chatSequence.InstanceId
|
|
end
|
|
|
|
r2:selectChatSequence(chatSequenceId, activityInst.InstanceId)
|
|
|
|
chatTexture = "r2_mini_activity_chat.tga"
|
|
end
|
|
|
|
local chatButton = miniActivity:find("chat_sequence"):find("button")
|
|
assert(chatButton)
|
|
chatButton.texture = chatTexture
|
|
chatButton.texture_pushed = chatTexture
|
|
chatButton.texture_over = chatTexture
|
|
end
|
|
|
|
function r2:openActivity()
|
|
|
|
r2:updateActivitiesAndChatsUI(r2:getSelectedInstance())
|
|
|
|
local miniActivity = getUICaller().parent.parent.parent
|
|
assert(miniActivity)
|
|
|
|
local sequenceUI = r2:getSelectedSequ("r2ed_triggers")
|
|
assert(sequenceUI)
|
|
|
|
local activityList = sequenceUI:find("elements_list")
|
|
assert(activityList)
|
|
|
|
local eltEditor = activityList:find("edit_element")
|
|
assert(eltEditor)
|
|
local indexEltEditor = activityList:getElementIndex(eltEditor)
|
|
|
|
local activityIndex = miniActivity.Env.id
|
|
if indexEltEditor<=activityIndex then activityIndex=activityIndex+1 end
|
|
|
|
local activityUI = activityList:getChild(activityIndex)
|
|
assert(activityUI)
|
|
|
|
local selectedButtonElt = activityUI:find("select")
|
|
assert(selectedButtonElt)
|
|
|
|
selectedButtonElt.pushed = true
|
|
r2:selectTriggerElement(nil, "r2ed_triggers", selectedButtonElt)
|
|
|
|
r2:updateActivityEditor()
|
|
r2:openActivitiesSequence()
|
|
end
|
|
|
|
function r2:selectSequenceTab(uiName, index)
|
|
|
|
if uiName == "r2ed_triggers" then
|
|
r2:updateSequencesButtonBar(index)
|
|
end
|
|
|
|
local eltsUI = getUI("ui:interface:"..uiName)
|
|
assert(eltsUI)
|
|
|
|
local sequencesTab = eltsUI:find("sequence_tabs")
|
|
assert(sequencesTab)
|
|
|
|
local repeatButton = eltsUI:find("repeat_group"):find("repeat"):find("toggle_butt")
|
|
assert(repeatButton)
|
|
|
|
local sequenceUI = sequencesTab:getGroup(index)
|
|
assert(sequenceUI)
|
|
local sequenceInstId = sequenceUI.Env.sequenceId
|
|
|
|
if sequenceInstId and r2:getInstanceFromId(sequenceInstId) then
|
|
local sequenceInst = r2:getInstanceFromId(sequenceInstId)
|
|
repeatButton.pushed = (sequenceInst.Repeating == 0)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
function r2:getSequenceName(sequenceInst)
|
|
|
|
local name = sequenceInst.Name
|
|
local index = -1
|
|
if name == "" then
|
|
local components = sequenceInst.Parent
|
|
for i=0, components.Size-1 do
|
|
if components[i].InstanceId == sequenceInst.InstanceId then
|
|
index = i
|
|
break
|
|
end
|
|
end
|
|
|
|
if index >= 0 then
|
|
local startName
|
|
if sequenceInst:isKindOf("ChatSequence") then
|
|
startName = tostring(i18n.get("uiR2EdSequChat"))
|
|
elseif sequenceInst:isKindOf("ActivitySequence") then
|
|
startName = tostring(i18n.get("uiR2EdSeq"))
|
|
end
|
|
|
|
name = startName..(index+1)
|
|
end
|
|
end
|
|
|
|
return name
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|