3111 lines
102 KiB
Lua
3111 lines
102 KiB
Lua
r2.logicEntityUIPath = "r2ed_logic_entities:content:menu:"
|
|
|
|
-- id of button which has just activated "which entity" menu
|
|
r2.whichEntitySelectedButtonId = nil
|
|
|
|
-- id of button which has just activated "right" menu
|
|
r2.rightSelectedButtonId = nil
|
|
|
|
-- table of buttons which can activate "which entity" menu
|
|
-- id of a such button give the method which must be called
|
|
r2.whichEntityButtons = {}
|
|
|
|
r2.logicEntityAttributes = {
|
|
|
|
|
|
["ApplicableActions"] = {
|
|
-- ["Activate"] = tostring(i18n.get( "uiR2EdActivate" ):toUtf8()),
|
|
-- ["Deactivate"] = tostring(i18n.get( "uiR2EdDeactivate" ):toUtf8()),
|
|
-- ["Wander"] = tostring(i18n.get( "uiR2EdWander" ):toUtf8()),
|
|
-- ["Sit Down"] = tostring(i18n.get( "uiR2EdSitDown" ):toUtf8()),
|
|
-- ["Stand Up"] = tostring(i18n.get( "uiR2EdStandUp" ):toUtf8()),
|
|
-- ["Respawn"] = tostring(i18n.get( "uiR2EdRespawn" ):toUtf8()),
|
|
-- ["Kill"] = tostring(i18n.get( "uiR2EdKill" ):toUtf8()),
|
|
-- ["begin activity sequence"] = tostring(i18n.get( "uiR2EdBeginActivitySequ" ):toUtf8()),
|
|
-- ["begin chat sequence"] = tostring(i18n.get( "uiR2EdBeginChatSequ" ))
|
|
},
|
|
|
|
["Events"] = {
|
|
-- ["activation"] = tostring(i18n.get( "uiR2EdActivation" ):toUtf8()),
|
|
-- ["desactivation"] = tostring(i18n.get( "uiR2EdDesactivation" ):toUtf8()),
|
|
-- ["a member death"] = tostring(i18n.get( "uiR2EdAMemberDeath" ):toUtf8()),
|
|
-- ["member death"] = tostring(i18n.get( "uiR2EdMemberDeath" ):toUtf8()),
|
|
-- ["group death"] = tostring(i18n.get( "uiR2EdGroupDeath" ):toUtf8()),
|
|
-- ["head to wander zone"] = tostring(i18n.get( "uiR2EdHeadWanderZone" ):toUtf8()),
|
|
-- ["arrive at wander zone"] = tostring(i18n.get( "uiR2EdArriveWanderZone" ):toUtf8()),
|
|
-- ["head to camp"] = tostring(i18n.get( "uiR2EdHeadCamp" ):toUtf8()),
|
|
-- ["arrive at camp"] = tostring(i18n.get( "uiR2EdArriveCamp" ):toUtf8()),
|
|
-- ["death"] = tostring(i18n.get( "uiR2EdDeath" ):toUtf8()),
|
|
-- ["end of activity step"] = tostring(i18n.get( "uiR2EdEndActivityStep" ):toUtf8()),
|
|
-- ["begin of activity step"] = tostring(i18n.get( "uiR2EdBeginActivityStep" ):toUtf8()),
|
|
-- ["end of activity sequence"] = tostring(i18n.get( "uiR2EdEndActivitySequ" ):toUtf8()),
|
|
-- ["begin of activity sequence"] = tostring(i18n.get( "uiR2EdBeginOfActivitySequ" ):toUtf8()),
|
|
|
|
-- ["end of chat step"] = tostring(i18n.get( "uiR2EdEndChatStep" ):toUtf8()),
|
|
-- ["end of chat sequence"] = tostring(i18n.get( "uiR2EdEndChatSequ" ):toUtf8()),
|
|
-- ["group death"] = tostring(i18n.get( "uiR2EdGroupDeath" ):toUtf8()),
|
|
},
|
|
|
|
|
|
["Conditions"] = {
|
|
-- ["is active"] = tostring(i18n.get( "uiR2EdIsActive" ):toUtf8()),
|
|
-- ["is inactive"] = tostring(i18n.get( "uiR2EdIsInactive" ):toUtf8()),
|
|
-- ["is dead"] = tostring(i18n.get( "uiR2EdIsDead" ):toUtf8()),
|
|
-- ["is alive"] = tostring(i18n.get( "uiR2EdIsAlive" ):toUtf8()),
|
|
-- ["is wandering"] = tostring(i18n.get( "uiR2EdIsWandering" ):toUtf8()),
|
|
-- ["is sitting"] = tostring(i18n.get( "uiR2EdIsSitting" ):toUtf8()),
|
|
-- ["is heading to wander zone"] = tostring(i18n.get( "uiR2EdIsHeadingWanderZone" ):toUtf8()),
|
|
-- ["is heading to camp"] = tostring(i18n.get( "uiR2EdIsHeadingCamp" ):toUtf8()),
|
|
-- ["is in activity sequence"] = tostring(i18n.get( "uiR2EdIsInActivitySequ" ):toUtf8()),
|
|
-- ["is in activity step"] = tostring(i18n.get( "uiR2EdIsInActivityStep" ):toUtf8()),
|
|
-- ["is in chat sequence"] = tostring(i18n.get( "uiR2EdIsInChatSequ" ):toUtf8()),
|
|
-- ["is in chat step"] = tostring(i18n.get( "uiR2EdIsInChatStep" ):toUtf8()),
|
|
},
|
|
}
|
|
|
|
------------------------------------------------
|
|
-- private: implement mergeComponentsLogicEntityAttributes
|
|
function r2:registerComponentsLogicEntityAttributes(localLogicEntityAttributes)
|
|
local k, v = next(localLogicEntityAttributes, nil)
|
|
while k do
|
|
local k2, v2 = next(v, nil)
|
|
while k2 do
|
|
if not r2.logicEntityAttributes[k][k2] then
|
|
r2.logicEntityAttributes[k][k2] = v2
|
|
end
|
|
k2, v2 = next(v, k2)
|
|
end
|
|
k, v = next(localLogicEntityAttributes, k)
|
|
end
|
|
end
|
|
|
|
------------------------------------------------
|
|
--
|
|
function r2:mergeComponentsLogicEntityAttributes()
|
|
local k, v = next(r2.Classes, nil)
|
|
while k do
|
|
if v.getLogicTranslations then
|
|
local localLogicEntityAttributes = v:getLogicTranslations()
|
|
if localLogicEntityAttributes then
|
|
r2:registerComponentsLogicEntityAttributes(localLogicEntityAttributes)
|
|
else
|
|
debugInfo(colorTag(255,0,0).."No Translation for component "..k)
|
|
end
|
|
end
|
|
k, v = next(r2.Classes, k)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
------------------------------------------- INITIALISATION ------------------------------
|
|
-- global initialization
|
|
function r2:initLogicEntityEditor()
|
|
r2:initActionEditor()
|
|
r2:initReactionEditor()
|
|
end
|
|
|
|
------------------ INIT EVENTS EDITOR ----------------------------------------------------------------
|
|
function r2:initEventsEditor()
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
-- create action editor
|
|
local actions = logicEntityUI:find("actions")
|
|
assert(actions)
|
|
|
|
local listActions = actions:find("elements_list")
|
|
assert(listActions)
|
|
|
|
local newEditorElt = createGroupInstance("template_edit_action", listActions.id, {id="edit_element", active="false"})
|
|
assert(newEditorElt)
|
|
listActions:addChild(newEditorElt)
|
|
listActions.parent:updateCoords()
|
|
|
|
newEditorElt.active = false
|
|
newEditorElt.Env.isEditor = true
|
|
|
|
-- add target scroll
|
|
local actionsList = newEditorElt:find("actions_list")
|
|
assert(actionsList)
|
|
local conditionsList = newEditorElt:find("conditions_list")
|
|
assert(conditionsList)
|
|
|
|
local menusList = actionsList:find("menus_list")
|
|
assert(menusList)
|
|
local scroll = actionsList:find("scroll_bar")
|
|
assert(scroll)
|
|
scroll:setTarget(menusList.id)
|
|
|
|
menusList = conditionsList:find("menus_list")
|
|
assert(menusList)
|
|
scroll = conditionsList:find("scroll_bar")
|
|
assert(scroll)
|
|
scroll:setTarget(menusList.id)
|
|
|
|
-- create reaction editor
|
|
local reactions = logicEntityUI:find("reactions")
|
|
assert(reactions)
|
|
|
|
local listReactions = reactions:find("elements_list")
|
|
assert(listReactions)
|
|
|
|
newEditorElt = createGroupInstance("template_edit_reaction", listReactions.id, {id="edit_element", active="false"})
|
|
assert(newEditorElt)
|
|
listReactions:addChild(newEditorElt)
|
|
listReactions.parent:updateCoords()
|
|
|
|
newEditorElt.active = false
|
|
newEditorElt.Env.isEditor = true
|
|
|
|
-- add target scroll
|
|
actionsList = newEditorElt:find("actions_list")
|
|
assert(actionsList)
|
|
conditionsList = newEditorElt:find("conditions_list")
|
|
assert(conditionsList)
|
|
|
|
local menusList = actionsList:find("menus_list")
|
|
assert(menusList)
|
|
local scroll = actionsList:find("scroll_bar")
|
|
assert(scroll)
|
|
scroll:setTarget(menusList.id)
|
|
|
|
menusList = conditionsList:find("menus_list")
|
|
assert(menusList)
|
|
scroll = conditionsList:find("scroll_bar")
|
|
assert(scroll)
|
|
scroll:setTarget(menusList.id)
|
|
end
|
|
|
|
function r2:getActionEditor()
|
|
return r2:getElementEditor("actions")
|
|
end
|
|
|
|
function r2:getReactionEditor()
|
|
return r2:getElementEditor("reactions")
|
|
end
|
|
|
|
function r2:getElementEditor(tabName)
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local actions = logicEntityUI:find(tabName)
|
|
assert(actions)
|
|
|
|
local listActions = actions:find("elements_list")
|
|
assert(listActions)
|
|
|
|
return listActions:find("edit_element")
|
|
end
|
|
|
|
function r2:initActionEditor()
|
|
|
|
--local actionsEditor = getUI("ui:interface:r2ed_actions")
|
|
local actionsEditor = r2:getActionEditor()
|
|
assert(actionsEditor)
|
|
|
|
-- Action editor / Actions / Which entity
|
|
local whichEntityButton = actionsEditor:find("actions_list"):find("menus_list"):getChild(0):find("left_menu"):find("select")
|
|
assert(whichEntityButton)
|
|
r2.whichEntityButtons[whichEntityButton.id] = {paramsLineLeft=r2.actionWhichEntity,
|
|
paramsLeft="r2:openWhichEntityMenu()",
|
|
paramsRight="r2:openRightMenu(true, 'ApplicableActions', 'r2:actionWhatAction')",
|
|
removePair="r2:removeActionStep(true)", paramsOver="r2:activeTrashButton()"}
|
|
|
|
-- Action editor / Extra conditions / Which entity
|
|
whichEntityButton = actionsEditor:find("conditions_list"):find("menus_list"):getChild(0):find("left_menu"):find("select")
|
|
assert(whichEntityButton)
|
|
r2.whichEntityButtons[whichEntityButton.id] = {paramsLineLeft=r2.actionConditionWhichEntity,
|
|
paramsLeft="r2:openWhichEntityMenu()",
|
|
paramsRight="r2:openRightMenu(true, 'Conditions', 'r2:actionWhatCondition')",
|
|
removePair="r2:removeActionConditionStep()", paramsOver="r2:activeTrashButton()"}
|
|
end
|
|
|
|
function r2:initReactionEditor()
|
|
|
|
--local reactionsEditor = getUI("ui:interface:r2ed_reactions")
|
|
local reactionsEditor = r2:getReactionEditor()
|
|
assert(reactionsEditor)
|
|
|
|
-- Reaction editor / What triggers this reaction / Which entity
|
|
local whichEntityButton = reactionsEditor:find("triggers"):find("combos"):find("left_menu"):find("select")
|
|
assert(whichEntityButton)
|
|
r2.whichEntityButtons[whichEntityButton.id] = {paramsLineLeft=r2.reactionWhatTriggersWhichEntity,
|
|
paramsLeft="r2:openWhichEntityMenu()",
|
|
paramsRight="r2:openRightMenu(true, 'Events', 'r2:reactionWhichEvent')"}
|
|
|
|
-- Rection editor / Actions / Which entity
|
|
local whichEntityButton = reactionsEditor:find("actions_list"):find("menus_list"):getChild(0):find("left_menu"):find("select")
|
|
assert(whichEntityButton)
|
|
r2.whichEntityButtons[whichEntityButton.id] = {paramsLineLeft=r2.reactionActionWhichEntity,
|
|
paramsLeft="r2:openWhichEntityMenu()",
|
|
paramsRight="r2:openRightMenu(true, 'ApplicableActions', 'r2:reactionWhatAction')",
|
|
removePair="r2:removeActionStep(false)", paramsOver="r2:activeTrashButton()"}
|
|
|
|
-- Reaction editor / Extra conditions / Which entity
|
|
whichEntityButton = reactionsEditor:find("conditions_list"):find("menus_list"):getChild(0):find("left_menu"):find("select")
|
|
assert(whichEntityButton)
|
|
r2.whichEntityButtons[whichEntityButton.id] = {paramsLineLeft=r2.reactionConditionWhichEntity,
|
|
paramsLeft="r2:openWhichEntityMenu()",
|
|
paramsRight="r2:openRightMenu(true, 'Conditions', 'r2:reactionWhatCondition')",
|
|
removePair="r2:removeReactionConditionStep()", paramsOver="r2:activeTrashButton()"}
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
------------------------------------ FIRST MENU -----------------------------------------------------------
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- when a "which entity" button is pushed, the "which entity" menu is open
|
|
function r2:openWhichEntityMenu()
|
|
|
|
r2.whichEntitySelectedButtonId = getUICaller().id
|
|
r2:initWhichEntityMenu()
|
|
r2:openLogicEntityMenu(getUICaller())
|
|
end
|
|
|
|
|
|
----------------------------------------------------------------------------------------------------------
|
|
-- register features to menu LogicEntityMenu
|
|
function r2:registerFeaturesMenu(logicEntityMenu)
|
|
do
|
|
local k,v = next(r2.Classes, nil)
|
|
while k do
|
|
if v.initLogicEntitiesMenu then v:initLogicEntitiesMenu(logicEntityMenu) end
|
|
k,v = next(r2.Classes, k)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- returns a list of instance of all act of the scenario (not only the base act and the current act)
|
|
function r2:getAllActInstances()
|
|
local ret = {}
|
|
if not r2.Scenario then return ret end
|
|
|
|
local base = true
|
|
local k, v = next(r2.Scenario.Acts, nil)
|
|
while k do
|
|
if base then
|
|
base = false
|
|
else
|
|
table.insert(ret, v)
|
|
end
|
|
k, v = next(r2.Scenario.Acts, k)
|
|
end
|
|
return ret
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- "which entity" menu initialization, called when "which menu" is open
|
|
function r2:initWhichEntityMenu()
|
|
|
|
-- which entity menu initialization
|
|
local logicEntityMenu = getUI("ui:interface:r2ed_logic_entity_menu")
|
|
assert(logicEntityMenu)
|
|
|
|
local logicEntityMenu = logicEntityMenu:getRootMenu()
|
|
assert(logicEntityMenu)
|
|
|
|
logicEntityMenu:reset()
|
|
|
|
local name = i18n.get("uiR2EdBanditCamps")
|
|
logicEntityMenu:addLine(ucstring(name), "lua", "", "BanditCampFeature")
|
|
|
|
name = i18n.get("uiR2EdGroups")
|
|
logicEntityMenu:addLine(ucstring(name), "lua", "", "NpcGrpFeature")
|
|
|
|
name = i18n.get("uiR2EdNPCs")
|
|
logicEntityMenu:addLine(ucstring(name), "lua", "", "Npc")
|
|
|
|
r2:registerFeaturesMenu(logicEntityMenu)
|
|
|
|
for i=0,logicEntityMenu:getNumLine()-1 do
|
|
local lineId = tostring(logicEntityMenu:getLineId(i))
|
|
local entitiesTable = nil
|
|
if lineId == "Act" then
|
|
entitiesTable = r2:getAllActInstances()
|
|
else
|
|
entitiesTable = r2.Scenario:getAllInstancesByType(lineId)
|
|
end
|
|
|
|
logicEntityMenu:addSubMenu(i)
|
|
local subMenu = logicEntityMenu:getSubMenu(i)
|
|
|
|
local count = 0
|
|
for key, entity in pairs(entitiesTable) do
|
|
local addLine = true
|
|
if entity:isKindOf("Act") and (entity:isBaseAct()) then
|
|
addLine = false
|
|
end
|
|
if entity:isKindOf("Npc") and (entity:isBotObject() or entity:isPlant()) then
|
|
addLine = false
|
|
end
|
|
if addLine then
|
|
subMenu:addLine(ucstring(entity.Name), "lua", "r2:selectWhichEntity(".. tostring(i) .. "," .. tostring(count) .. ")", entity.InstanceId)
|
|
count=count+1
|
|
end
|
|
end
|
|
|
|
if count == 0 then
|
|
subMenu:addLine(i18n.get("uiR2EdNoSelelection"), "", "", "")
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- the commun "logic entity" menu is open
|
|
function r2:openLogicEntityMenu(caller)
|
|
|
|
local menuName = "ui:interface:r2ed_logic_entity_menu"
|
|
launchContextMenuInGame(menuName)
|
|
local menu = getUI(menuName)
|
|
|
|
menu:updateCoords()
|
|
menu.y = caller.y_real - (menu.h - caller.h_real)
|
|
menu.x = caller.x_real
|
|
menu:updateCoords()
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- a logical entity is selected in the "which entity" menu
|
|
-- the correct method is called in function of the "which entity" button which has been pushed previously
|
|
function r2:selectWhichEntity(subMenuIndex, lineIndex)
|
|
|
|
local whichEntityMenu = getUI("ui:interface:r2ed_logic_entity_menu")
|
|
assert(whichEntityMenu)
|
|
|
|
whichEntityMenu = whichEntityMenu:getRootMenu()
|
|
|
|
local whichEntitySubMenu = whichEntityMenu:getSubMenu(subMenuIndex)
|
|
assert(whichEntitySubMenu)
|
|
|
|
local entityId = tostring(whichEntitySubMenu:getLineId(lineIndex))
|
|
|
|
local entityInstance = r2:getInstanceFromId(entityId)
|
|
assert(entityInstance)
|
|
|
|
local selectButton = getUI(r2.whichEntitySelectedButtonId)
|
|
assert(selectButton)
|
|
|
|
-- necessary data when right menu will be selected
|
|
selectButton.parent.parent.Env.oldEntityId = selectButton.parent.parent.Env.entityId
|
|
selectButton.parent.parent.Env.entityId = entityId
|
|
|
|
-- update correct property
|
|
local updateWhichEntity = r2.whichEntityButtons[r2.whichEntitySelectedButtonId].paramsLineLeft
|
|
updateWhichEntity(entityInstance)
|
|
end
|
|
|
|
|
|
function r2:createNewMenuPairAndComponent(newComponentName)
|
|
|
|
local leftButton = getUI(r2.whichEntitySelectedButtonId)
|
|
local buttonParams = r2.whichEntityButtons[r2.whichEntitySelectedButtonId]
|
|
|
|
local listMenu = leftButton.parent.parent.parent.parent
|
|
assert(listMenu)
|
|
|
|
-- the pushed "which entity" button is in a list
|
|
-- if it's the last child of this list, a new pair of buttons must be added at the end
|
|
if listMenu:getChild(listMenu.childrenNb-1).id == leftButton.parent.parent.parent.id then
|
|
|
|
-- create new menu pair template
|
|
r2:createNewMenuPair(listMenu, buttonParams)
|
|
|
|
-- create new lua component for menus whose left button has been pushed
|
|
return r2.newComponent(newComponentName)
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function r2:createNewMenuPair(listMenu, buttonParams)
|
|
|
|
local newId = "menu_pair"..(listMenu.childrenNb+1)
|
|
|
|
-- create new UI element
|
|
local newButtonPair = createGroupInstance("two_menu_trash_template", listMenu.id,
|
|
{id=newId, params_left=buttonParams.paramsLeft, params_right=buttonParams.paramsRight,
|
|
remove_pair=buttonParams.removePair, col_pushed="255 255 255 255",
|
|
params_over=buttonParams.paramsOver})
|
|
|
|
listMenu:addChild(newButtonPair)
|
|
listMenu.parent:updateCoords()
|
|
|
|
local newLeftButton = newButtonPair:find("left_menu"):find("select")
|
|
assert(newLeftButton)
|
|
|
|
r2.whichEntityButtons[newLeftButton.id] = {paramsLineLeft=buttonParams.paramsLineLeft,
|
|
paramsLeft=buttonParams.paramsLeft, paramsRight=buttonParams.paramsRight,
|
|
removePair=buttonParams.removePair, paramsOver=buttonParams.paramsOver}
|
|
|
|
return newButtonPair
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- update an action text
|
|
function r2:updateActionText(actionUI)
|
|
|
|
if actionUI == nil then
|
|
actionUI = r2:getSelectedEltUI(r2.logicEntityUIPath.."actions")
|
|
end
|
|
assert(actionUI)
|
|
|
|
local actionInst = r2:getInstanceFromId(actionUI.Env.elementId)
|
|
|
|
local actionText = actionUI:find("text_list")
|
|
assert(actionText)
|
|
|
|
actionText:clear()
|
|
|
|
if actionInst ~= nil then
|
|
|
|
local sep = actionUI:find("sep")
|
|
assert(sep)
|
|
|
|
if actionInst.Actions.Size > 0 then
|
|
actionText:addColoredTextChild("\n"..tostring(i18n.get("uiR2EdActionStepList")), 250, 200, 0, 255)
|
|
|
|
local totalText = ""
|
|
|
|
for a = 0, actionInst.Actions.Size - 1 do
|
|
local actionStep = actionInst.Actions[a]
|
|
assert(actionStep)
|
|
|
|
local entity = r2:getInstanceFromId(actionStep.Entity)
|
|
local actionType = actionStep.Action
|
|
|
|
if entity then
|
|
totalText = totalText..entity.Name
|
|
totalText = totalText .. " : "
|
|
|
|
if actionType.Type ~= "" then
|
|
local textValue = r2.logicEntityAttributes["ApplicableActions"][actionType.Type]
|
|
if textValue == nil then textValue = "?".. actionType.Type.."?" end
|
|
totalText = totalText .. textValue
|
|
if actionType.Value ~= "" then
|
|
local inst = r2:getInstanceFromId(actionType.Value)
|
|
if inst ~= nil then
|
|
totalText = totalText .. " " .. inst.Name
|
|
end
|
|
end
|
|
else
|
|
totalText = totalText .. "..."
|
|
end
|
|
end
|
|
|
|
totalText = totalText.."\n"
|
|
end
|
|
|
|
actionText:addTextChild(ucstring(totalText))
|
|
sep.active = true
|
|
else
|
|
sep.active = false
|
|
end
|
|
end
|
|
|
|
-- update titel
|
|
r2:buildActionTitle(actionUI, false)
|
|
|
|
local selectedAction = r2:getSelectedEltInstId(r2.logicEntityUIPath.."actions")
|
|
if selectedAction and selectedAction == actionInst.InstanceId then
|
|
r2:updateActionEditor()
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- update a reaction text
|
|
function r2:updateReactionText(reactionUI)
|
|
|
|
if reactionUI == nil then
|
|
reactionUI = r2:getSelectedEltUI(r2.logicEntityUIPath.."reactions")
|
|
end
|
|
assert(reactionUI)
|
|
|
|
local reactionInst = r2:getInstanceFromId(reactionUI.Env.elementId)
|
|
assert(reactionInst)
|
|
|
|
local actionInst = r2:getInstanceFromId(reactionInst.LogicEntityAction)
|
|
|
|
local reactionText = reactionUI:find("text_list")
|
|
assert(reactionText)
|
|
|
|
local sep = reactionUI:find("sep")
|
|
assert(sep)
|
|
|
|
reactionText:clear()
|
|
|
|
if actionInst ~= nil then
|
|
|
|
if actionInst.Actions.Size > 1 then
|
|
|
|
reactionText:addColoredTextChild("\n"..tostring(i18n.get("uiR2EdOtherActionStepList")), 170, 95, 235, 255)
|
|
local totalText = ""
|
|
|
|
for a = 0, actionInst.Actions.Size - 1 do
|
|
local actionStep = actionInst.Actions[a]
|
|
assert(actionStep)
|
|
|
|
if actionStep.InstanceId ~= reactionInst.ActionStep then
|
|
|
|
local entity = r2:getInstanceFromId(actionStep.Entity)
|
|
local actionType = actionStep.Action
|
|
|
|
if entity then
|
|
totalText = totalText..entity.Name
|
|
totalText = totalText .. " : "
|
|
|
|
if actionType.Type ~= "" then
|
|
totalText = totalText .. r2.logicEntityAttributes["ApplicableActions"][actionType.Type]
|
|
if actionType.Value ~= "" then
|
|
local inst = r2:getInstanceFromId(actionType.Value)
|
|
if inst ~= nil then
|
|
totalText = totalText .. " " .. inst.Name
|
|
end
|
|
end
|
|
else
|
|
totalText = totalText .. "..."
|
|
end
|
|
end
|
|
|
|
totalText = totalText .. "\n"
|
|
end
|
|
end
|
|
|
|
reactionText:addTextChild(ucstring(totalText))
|
|
|
|
sep.active = true
|
|
else
|
|
sep.active = false
|
|
end
|
|
end
|
|
|
|
-- update title reaction
|
|
r2:buildReactionTitle(reactionUI, false)
|
|
|
|
local selectedReaction = r2:getSelectedEltInstId(r2.logicEntityUIPath.."reactions")
|
|
if selectedReaction and selectedReaction == reactionInst.InstanceId then
|
|
r2:updateReactionEditor()
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of a logic entity in Action editor/Actions/Which entity menu
|
|
r2.actionWhichEntity = function(logicEntity)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetwhichEntityAction"))
|
|
|
|
local actionInstId = r2:getSelectedEltInstId(r2.logicEntityUIPath.."actions")
|
|
local action = r2:getInstanceFromId(actionInstId)
|
|
assert(action)
|
|
|
|
local actionStep = r2:createNewMenuPairAndComponent("ActionStep")
|
|
if actionStep ~= nil then
|
|
actionStep.Entity = r2.RefId(logicEntity.InstanceId)
|
|
r2.requestInsertNode(actionInstId, "Actions", -1, "", actionStep)
|
|
local reaction = r2.newComponent("LogicEntityReaction")
|
|
reaction.LogicEntityAction = actionInstId
|
|
reaction.ActionStep = actionStep.InstanceId
|
|
|
|
r2.requestInsertNode(logicEntity:getBehavior().InstanceId, "Reactions", -1, "", reaction)
|
|
else
|
|
local leftButton = getUI(r2.whichEntitySelectedButtonId)
|
|
assert(leftButton)
|
|
|
|
local menuPair = leftButton.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local actionStepIndex = menuList:getElementIndex(menuPair)
|
|
local actionStep = action.Actions[actionStepIndex]
|
|
assert(actionStep)
|
|
|
|
local oldWhichEntity = r2:getInstanceFromId(tostring(actionStep.Entity))
|
|
|
|
-- the associated reaction must be given to correct logic entity
|
|
|
|
if oldWhichEntity and oldWhichEntity.InstanceId ~= logicEntity.InstanceId then
|
|
local index
|
|
for r = 0, oldWhichEntity:getBehavior().Reactions.Size - 1 do
|
|
if oldWhichEntity:getBehavior().Reactions[r].ActionStep == actionStep.InstanceId then
|
|
index = r
|
|
break
|
|
end
|
|
end
|
|
|
|
r2.requestMoveNode(oldWhichEntity:getBehavior().InstanceId, "Reactions", index,
|
|
logicEntity:getBehavior().InstanceId, "Reactions", -1)
|
|
|
|
r2.requestSetNode(actionStep.InstanceId, "Entity", r2.RefId(logicEntity.InstanceId))
|
|
|
|
-- empty property by waiting user choice
|
|
r2.requestSetNode(actionStep.Action.InstanceId, "Type", "")
|
|
r2.requestSetNode(actionStep.Action.InstanceId, "Value", r2.RefId(""))
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of a logic entity in Action editor/Extra conditions/Which entity menu
|
|
r2.actionConditionWhichEntity = function(logicEntity)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetWhichEntityConditionAction"))
|
|
|
|
local actionInstId = r2:getSelectedEltInstId(r2.logicEntityUIPath.."actions")
|
|
|
|
local conditionStep = r2:createNewMenuPairAndComponent("ConditionStep")
|
|
if conditionStep ~= nil then
|
|
conditionStep.Entity = r2.RefId(logicEntity.InstanceId)
|
|
r2.requestInsertNode(actionInstId, "Conditions", -1, "", conditionStep)
|
|
else
|
|
|
|
local action = r2:getInstanceFromId(actionInstId)
|
|
assert(action)
|
|
|
|
local leftButton = getUI(r2.whichEntitySelectedButtonId)
|
|
assert(leftButton)
|
|
|
|
local menuPair = leftButton.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local conditionStepIndex = menuList:getElementIndex(menuPair)
|
|
local conditionStep = action.Conditions[conditionStepIndex]
|
|
assert(conditionStep)
|
|
|
|
r2.requestSetNode(conditionStep.InstanceId, "Entity", r2.RefId(logicEntity.InstanceId))
|
|
|
|
-- empty property by waiting user choice
|
|
r2.requestSetNode(conditionStep.Condition.InstanceId, "Type", "")
|
|
r2.requestSetNode(conditionStep.Condition.InstanceId, "Value", r2.RefId(""))
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of a logic entity in Reaction editor/What triggers this reaction/Which entity menu
|
|
r2.reactionWhatTriggersWhichEntity = function(logicEntity)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetWhatTriggersWhichEntityAction"))
|
|
local selectButton = getUI(r2.whichEntitySelectedButtonId)
|
|
assert(selectButton)
|
|
|
|
-- if left button is this of "Reaction editor/What triggers this reaction"
|
|
-- we create actually the "LogicEntityReaction" and its associated "LogicEntityAction" and "ActionStep"
|
|
local uiName = r2.logicEntityUIPath.."reactions"
|
|
local element = r2:getSelectedEltUI(uiName)
|
|
if element.Env.WhatTriggers~=nil and not element.Env.WhatTriggers then
|
|
|
|
element.Env.WhatTriggers = true
|
|
|
|
local reactionEditor = r2:getReactionEditor()
|
|
assert(reactionEditor)
|
|
|
|
local actions = reactionEditor:find("actions_list")
|
|
assert(actions)
|
|
actions.active = true
|
|
|
|
local conditions = reactionEditor:find("conditions_list")
|
|
assert(conditions)
|
|
conditions.active = true
|
|
|
|
local reaction = r2.newComponent("LogicEntityReaction")
|
|
|
|
r2:setSelectedEltInstId(uiName, reaction.InstanceId)
|
|
|
|
-- we create associated LogicEntityAction and ActionStep
|
|
local selectedLogicEntity = r2:getSelectedInstance()
|
|
local action = r2.newComponent("LogicEntityAction")
|
|
local actionStep = r2.newComponent("ActionStep")
|
|
actionStep.Entity = r2.RefId(selectedLogicEntity.InstanceId)
|
|
table.insert(action.Actions, actionStep)
|
|
|
|
reaction.LogicEntityAction = action.InstanceId
|
|
reaction.ActionStep = actionStep.InstanceId
|
|
|
|
r2.requestInsertNode(logicEntity:getBehavior().InstanceId, "Actions", -1, "", action)
|
|
r2.requestInsertNode(selectedLogicEntity:getBehavior().InstanceId, "Reactions", -1, "", reaction)
|
|
|
|
element.Env.elementId = reaction.InstanceId
|
|
|
|
-- the trigger logic entity is changed : the "LogicEntityAction" property of the reaction
|
|
-- is moved to the new trigger
|
|
else
|
|
local oldWhichEntity = r2:getInstanceFromId(selectButton.parent.parent.Env.oldEntityId)
|
|
assert(oldWhichEntity)
|
|
|
|
selectButton.parent.parent.Env.oldEntityId = nil
|
|
|
|
local reactionInst = r2:getSelectedEltInst(uiName)
|
|
local actionId = reactionInst.LogicEntityAction
|
|
|
|
local index
|
|
for a = 0, oldWhichEntity:getBehavior().Actions.Size - 1 do
|
|
if oldWhichEntity:getBehavior().Actions[a].InstanceId == actionId then
|
|
index = a
|
|
break
|
|
end
|
|
end
|
|
|
|
if oldWhichEntity.InstanceId ~= logicEntity.InstanceId then
|
|
r2.requestMoveNode(oldWhichEntity:getBehavior().InstanceId, "Actions", index,
|
|
logicEntity:getBehavior().InstanceId, "Actions", -1)
|
|
|
|
-- empty property by waiting user choice
|
|
local actionInst = r2:getInstanceFromId(actionId)
|
|
assert(actionInst)
|
|
r2.requestSetNode(actionInst.Event.InstanceId, "Type", "")
|
|
r2.requestSetNode(actionInst.Event.InstanceId, "Value", r2.RefId(""))
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of a logic entity in Reaction editor/Actions/Which entity menu
|
|
r2.reactionActionWhichEntity = function(logicEntity)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetReactionActionWhichEntityAction"))
|
|
|
|
local reactionInst = r2:getSelectedEltInst(r2.logicEntityUIPath.."reactions")
|
|
assert(reactionInst)
|
|
|
|
local action = r2:getInstanceFromId(reactionInst.LogicEntityAction)
|
|
|
|
local actionStep = r2:createNewMenuPairAndComponent("ActionStep")
|
|
if actionStep ~= nil then
|
|
actionStep.Entity = r2.RefId(logicEntity.InstanceId)
|
|
|
|
if action then
|
|
r2.requestInsertNode(action.InstanceId, "Actions", -1, "", actionStep)
|
|
end
|
|
|
|
-- new LogicEntityReaction
|
|
local newReaction = r2.newComponent("LogicEntityReaction")
|
|
newReaction.LogicEntityAction = reactionInst.LogicEntityAction
|
|
newReaction.ActionStep = actionStep.InstanceId
|
|
|
|
r2.requestInsertNode(logicEntity:getBehavior().InstanceId, "Reactions", -1, "", newReaction)
|
|
else
|
|
|
|
local leftButton = getUI(r2.whichEntitySelectedButtonId)
|
|
assert(leftButton)
|
|
|
|
local menuPair = leftButton.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local actionIndex = menuList:getElementIndex(menuPair)
|
|
assert(actionIndex)
|
|
|
|
local maxSize = actionIndex
|
|
if actionIndex >= action.Actions.Size then actionIndex = action.Actions.Size-1 end
|
|
for i=0, maxSize do
|
|
local actionStepInst = action.Actions[i]
|
|
if actionStepInst.InstanceId == reactionInst.ActionStep then
|
|
actionIndex = actionIndex+1
|
|
break
|
|
end
|
|
end
|
|
|
|
local actionInst = r2:getInstanceFromId(reactionInst.LogicEntityAction)
|
|
assert(actionInst)
|
|
|
|
local actionStepInst = actionInst.Actions[actionIndex]
|
|
assert(actionStepInst)
|
|
|
|
local oldWhichEntity = r2:getInstanceFromId(tostring(actionStepInst.Entity))
|
|
|
|
|
|
-- the associated reaction must be given to correct logic entity
|
|
if oldWhichEntity and oldWhichEntity.InstanceId ~= logicEntity.InstanceId then
|
|
local index
|
|
for r = 0, oldWhichEntity:getBehavior().Reactions.Size - 1 do
|
|
if oldWhichEntity:getBehavior().Reactions[r].ActionStep == actionStepInst.InstanceId then
|
|
index = r
|
|
break
|
|
end
|
|
end
|
|
|
|
r2.requestMoveNode(oldWhichEntity:getBehavior().InstanceId, "Reactions", index,
|
|
logicEntity:getBehavior().InstanceId, "Reactions", -1)
|
|
|
|
r2.requestSetNode(actionStepInst.InstanceId, "Entity", r2.RefId(logicEntity.InstanceId))
|
|
|
|
-- empty property by waiting user choice
|
|
r2.requestSetNode(actionStepInst.Action.InstanceId, "Type", "")
|
|
r2.requestSetNode(actionStepInst.Action.InstanceId, "Value", r2.RefId(""))
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of a logic entity in Reaction editor/Extra conditions/Which entity menu
|
|
r2.reactionConditionWhichEntity = function(logicEntity)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetReactionConditionWhichEntityAction"))
|
|
|
|
local reactionInstId = r2:getSelectedEltInstId(r2.logicEntityUIPath.."reactions")
|
|
local reaction = r2:getInstanceFromId(reactionInstId)
|
|
assert(reaction)
|
|
|
|
local conditionStep = r2:createNewMenuPairAndComponent("ConditionStep")
|
|
if conditionStep ~= nil then
|
|
|
|
conditionStep.Entity = r2.RefId(logicEntity.InstanceId)
|
|
|
|
local action = r2:getInstanceFromId(reaction.LogicEntityAction)
|
|
if action then
|
|
r2.requestInsertNode(action.InstanceId, "Conditions", -1, "", conditionStep)
|
|
end
|
|
else
|
|
|
|
local leftButton = getUI(r2.whichEntitySelectedButtonId)
|
|
assert(leftButton)
|
|
|
|
local menuPair = leftButton.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local conditionIndex = menuList:getElementIndex(menuPair)
|
|
assert(conditionIndex)
|
|
|
|
local actionInst = r2:getInstanceFromId(reaction.LogicEntityAction)
|
|
assert(actionInst)
|
|
|
|
local conditionInst = actionInst.Conditions[conditionIndex]
|
|
assert(conditionInst)
|
|
|
|
r2.requestSetNode(conditionInst.InstanceId, "Entity", r2.RefId(logicEntity.InstanceId))
|
|
|
|
-- empty property by waiting user choice
|
|
r2.requestSetNode(conditionInst.Condition.InstanceId, "Type", "")
|
|
r2.requestSetNode(conditionInst.Condition.InstanceId, "Value", r2.RefId(""))
|
|
end
|
|
end
|
|
|
|
|
|
function r2:activeTrashButton()
|
|
|
|
local menuTrashPair = getUICaller().parent.parent.parent
|
|
assert(menuTrashPair)
|
|
|
|
local trashButtonCaller = menuTrashPair:find("remove_menu_pair")
|
|
assert(trashButtonCaller)
|
|
|
|
local pairList = menuTrashPair.parent
|
|
assert(pairList)
|
|
|
|
if menuTrashPair.id == pairList:getChild(pairList.childrenNb-1).id then return end
|
|
|
|
for i=0, pairList.childrenNb-1 do
|
|
local pair = pairList:getChild(i)
|
|
assert(pair)
|
|
|
|
local trashButton = pair:find("remove_menu_pair")
|
|
assert(trashButton)
|
|
|
|
if trashButton.active then
|
|
if trashButton.id == trashButtonCaller.id then return end
|
|
trashButton.active = false
|
|
break
|
|
end
|
|
end
|
|
|
|
trashButtonCaller.active = true
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
------------------------------------ SECOND MENU ----------------------------------------------------------
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- when the second button of a menu pair is pushed, the second menu is open
|
|
r2.openSequencesMenu = { ["begin activity sequence"]= {element="activity", singleSubMenu=true},
|
|
["end of activity sequence"]={element="activity", singleSubMenu=true},
|
|
["is in activity sequence"]= {element="activity", singleSubMenu=true},
|
|
["begin chat sequence"]= {element="chat", singleSubMenu=true},
|
|
["end of chat sequence"]= {element="chat", singleSubMenu=true},
|
|
["is in chat sequence"]= {element="chat", singleSubMenu=true},
|
|
["is in activity step"]= {element="activity", singleSubMenu=false},
|
|
["end of activity step"]= {element="activity", singleSubMenu=false},
|
|
["begin of activity step"]= {element="activity", singleSubMenu=false},
|
|
["end of chat step"]= {element="chat", singleSubMenu=false},
|
|
["is in chat step"]= {element="chat", singleSubMenu=false},
|
|
["starts chat"]= {element="chatstep", singleSubMenu=true}
|
|
|
|
--["member death"]= {element="npc", singleSubMenu=true}
|
|
|
|
}
|
|
|
|
function r2:openRightMenu(isEntityOfLeftMenu, loadTable, selectLineFunction)
|
|
|
|
-- logic entity menu initialization
|
|
local logicEntityMenu = getUI("ui:interface:r2ed_logic_entity_menu")
|
|
assert(logicEntityMenu)
|
|
|
|
local logicEntityMenu = logicEntityMenu:getRootMenu()
|
|
assert(logicEntityMenu)
|
|
|
|
logicEntityMenu:reset()
|
|
r2.rightSelectedButtonId = getUICaller().id
|
|
|
|
-- either menu is relative to selected logic entity or to selected entity in left menu (which entity...)
|
|
local entityInst
|
|
if isEntityOfLeftMenu then
|
|
|
|
local entityId = getUICaller().parent.parent.parent.Env.entityId
|
|
|
|
if entityId == nil then
|
|
entityId = getUICaller().parent.parent.Env.entityId
|
|
end
|
|
|
|
if entityId == nil then
|
|
return
|
|
else
|
|
entityInst = r2:getInstanceFromId(entityId)
|
|
end
|
|
else
|
|
entityInst = r2:getSelectedInstance()
|
|
end
|
|
assert(entityInst)
|
|
|
|
-- initialization of "logic entity" menu
|
|
local class = r2.Classes[entityInst.Class]
|
|
assert(class)
|
|
|
|
for i=1,table.getn(class[loadTable]) do
|
|
local action = class[loadTable][i]
|
|
local openSequencesMenu = r2.openSequencesMenu[action]
|
|
local actionName = r2.logicEntityAttributes[loadTable][action]
|
|
if actionName == nil then actionName = "?"..action.."?" end
|
|
local actionText = ucstring(actionName)
|
|
if openSequencesMenu ~= nil then
|
|
|
|
-- first line
|
|
logicEntityMenu:addLine(actionText, "", "", action)
|
|
|
|
-- sequences sub menu
|
|
logicEntityMenu:addSubMenu(i-1)
|
|
local subMenu = logicEntityMenu:getSubMenu(i-1)
|
|
|
|
local sequences
|
|
if openSequencesMenu.element == "activity" then
|
|
sequences = entityInst:getBehavior().Activities
|
|
elseif openSequencesMenu.element == "chat" then
|
|
sequences = entityInst:getBehavior().ChatSequences
|
|
elseif openSequencesMenu.element == "chatstep" then
|
|
sequences = entityInst.Components
|
|
elseif openSequencesMenu.element == "npc" then
|
|
sequences = entityInst.Components
|
|
end
|
|
|
|
local count1 = 0
|
|
for s = 0, sequences.Size - 1 do
|
|
local sequence = sequences[s]
|
|
|
|
if not openSequencesMenu.singleSubMenu then
|
|
|
|
--subMenu:addLine(ucstring(sequence.Name), "", "", sequence.InstanceId)
|
|
subMenu:addLine(ucstring(r2:getSequenceName(sequence)), "", "", sequence.InstanceId)
|
|
|
|
-- steps sub menu
|
|
subMenu:addSubMenu(s)
|
|
local stepsMenu = subMenu:getSubMenu(s)
|
|
|
|
local steps = sequence.Components
|
|
if steps.Size == 0 then
|
|
stepsMenu:addLine(i18n.get("uiR2EdNoSelelection"), "lua", selectLineFunction .. "()", "")
|
|
end
|
|
|
|
local count2 = 0
|
|
for s = 0, steps.Size - 1 do
|
|
local step = steps[s]
|
|
local stepName = r2:getElementName(step)
|
|
stepsMenu:addLine(ucstring(stepName), "lua",
|
|
selectLineFunction.. "('".. action .. "','" .. step.InstanceId .."')", step.InstanceId)
|
|
count2=count2+1
|
|
end
|
|
else
|
|
--subMenu:addLine(ucstring(sequence.Name), "lua",
|
|
subMenu:addLine(ucstring(r2:getSequenceName(sequence)), "lua",
|
|
selectLineFunction.. "('".. action .. "','" .. sequence.InstanceId .. "')", sequence.InstanceId)
|
|
end
|
|
|
|
count1=count1+1
|
|
end
|
|
|
|
if sequences.Size == 0 then
|
|
subMenu:addLine(i18n.get("uiR2EdNoSelelection"), "lua", selectLineFunction .. "()", "")
|
|
end
|
|
|
|
else
|
|
logicEntityMenu:addLine(actionText, "lua", selectLineFunction .. "('".. action .. "')", action)
|
|
end
|
|
end
|
|
|
|
-- open menu
|
|
r2:openLogicEntityMenu(getUICaller())
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of an event in "Action editor/on which event" menu
|
|
function r2:actionWhichEvent(type, value)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetActionWhichEventAction"))
|
|
|
|
local actionEditor = r2:getActionEditor()
|
|
assert(actionEditor)
|
|
|
|
local whichEventText = actionEditor:find("which_event"):find("menu"):find("text")
|
|
assert(whichEventText)
|
|
|
|
if value == nil then value = "" end
|
|
|
|
-- update "Event" property
|
|
local actionInst = r2:getSelectedEltInst(r2.logicEntityUIPath.."actions")
|
|
assert(actionInst)
|
|
|
|
r2.requestSetNode(actionInst.Event.InstanceId, "Type", type)
|
|
r2.requestSetNode(actionInst.Event.InstanceId, "Value", r2.RefId(value))
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of an action in "Action editor/Actions/What action" menu
|
|
function r2:actionWhatAction(type, value)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetActionWhatActionAction"))
|
|
|
|
local rightButton = getUI(r2.rightSelectedButtonId)
|
|
assert(rightButton)
|
|
|
|
if value == nil then value = "" end
|
|
|
|
-- update ActionStep
|
|
local action = r2:getSelectedEltInst(r2.logicEntityUIPath.."actions")
|
|
assert(action)
|
|
|
|
local menuPair = rightButton.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local actionStepIndex = menuList:getElementIndex(menuPair)
|
|
|
|
local actionStepInst = action.Actions[actionStepIndex]
|
|
assert(actionStepInst)
|
|
|
|
r2.requestSetNode(actionStepInst.Action.InstanceId, "Type", type)
|
|
r2.requestSetNode(actionStepInst.Action.InstanceId, "Value", r2.RefId(value))
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of a condition in "Action editor/Extra conditions/What condition" menu
|
|
function r2:actionWhatCondition(type, value)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetActionWhatConditionAction"))
|
|
|
|
local rightButton = getUI(r2.rightSelectedButtonId)
|
|
assert(rightButton)
|
|
|
|
if value == nil then value = "" end
|
|
|
|
-- update ConditionStep
|
|
local action = r2:getSelectedEltInst(r2.logicEntityUIPath.."actions")
|
|
assert(action)
|
|
|
|
local menuPair = rightButton.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local conditionStepIndex = menuList:getElementIndex(menuPair)
|
|
|
|
local conditionStepInst = action.Conditions[conditionStepIndex]
|
|
assert(conditionStepInst)
|
|
|
|
r2.requestSetNode(conditionStepInst.Condition.InstanceId, "Type", type)
|
|
r2.requestSetNode(conditionStepInst.Condition.InstanceId, "Value", r2.RefId(value))
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of an event in "Reaction editor/Which event" menu
|
|
function r2:reactionWhichEvent(type, value)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetReactionWhichEventAction"))
|
|
|
|
if value == nil then value = "" end
|
|
|
|
-- update "Event" property of associated LogicEntityAction
|
|
local reactionInst = r2:getSelectedEltInst(r2.logicEntityUIPath.."reactions")
|
|
|
|
local logicEntityAction = r2:getInstanceFromId(reactionInst.LogicEntityAction)
|
|
assert(logicEntityAction)
|
|
r2.requestSetNode(logicEntityAction.Event.InstanceId, "Type", type)
|
|
r2.requestSetNode(logicEntityAction.Event.InstanceId, "Value", r2.RefId(value))
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of an action in "Reaction editor/What action to apply to me" menu
|
|
function r2:reactionWhatAction(type, value)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetReactionWhatActionAction"))
|
|
|
|
local rightButton = getUI(r2.rightSelectedButtonId)
|
|
assert(rightButton)
|
|
|
|
if value == nil then value = "" end
|
|
|
|
-- update ActionStep
|
|
local reactionInst = r2:getSelectedEltInst(r2.logicEntityUIPath.."reactions")
|
|
assert(reactionInst)
|
|
|
|
local action = r2:getInstanceFromId(reactionInst.LogicEntityAction)
|
|
assert(action)
|
|
|
|
local menuPair = rightButton.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local actionIndex = menuList:getElementIndex(menuPair)
|
|
|
|
local maxSize = actionIndex
|
|
if actionIndex >= action.Actions.Size then actionIndex = action.Actions.Size-1 end
|
|
for i=0, maxSize do
|
|
local actionStepInst = action.Actions[i]
|
|
if actionStepInst.InstanceId == reactionInst.ActionStep then
|
|
actionIndex = actionIndex+1
|
|
break
|
|
end
|
|
end
|
|
|
|
local actionStepInst = action.Actions[actionIndex]
|
|
assert(actionStepInst)
|
|
|
|
r2.requestSetNode(actionStepInst.Action.InstanceId, "Type", type)
|
|
r2.requestSetNode(actionStepInst.Action.InstanceId, "Value", r2.RefId(value))
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of an action in "Reaction editor/What action to apply to me" menu
|
|
function r2:reactionWhatMainAction(type, value)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetReactionWhatMainActionAction"))
|
|
|
|
local rightButton = getUI(r2.rightSelectedButtonId)
|
|
assert(rightButton)
|
|
|
|
if value == nil then value = "" end
|
|
|
|
-- update ActionStep
|
|
local reactionInst = r2:getSelectedEltInst(r2.logicEntityUIPath.."reactions")
|
|
|
|
local actionStepInst = r2:getInstanceFromId(reactionInst.ActionStep)
|
|
assert(actionStepInst)
|
|
|
|
r2.requestSetNode(actionStepInst.Action.InstanceId, "Type", type)
|
|
r2.requestSetNode(actionStepInst.Action.InstanceId, "Value", r2.RefId(value))
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
-- selection of a condition in "Reaction editor/Extra conditions/What condition" menu
|
|
function r2:reactionWhatCondition(type, value)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDSetReactionWhatConditionAction"))
|
|
|
|
local rightButton = getUI(r2.rightSelectedButtonId)
|
|
assert(rightButton)
|
|
|
|
if value == nil then value = "" end
|
|
|
|
-- update ConditionStep
|
|
local reaction = r2:getSelectedEltInst(r2.logicEntityUIPath.."reactions")
|
|
assert(reaction)
|
|
|
|
local action = r2:getInstanceFromId(reaction.LogicEntityAction)
|
|
assert(action)
|
|
|
|
local menuPair = rightButton.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local conditionIndex = menuList:getElementIndex(menuPair)
|
|
|
|
local conditionInst = action.Conditions[conditionIndex]
|
|
assert(conditionInst)
|
|
|
|
r2.requestSetNode(conditionInst.Condition.InstanceId, "Type", type)
|
|
r2.requestSetNode(conditionInst.Condition.InstanceId, "Value", r2.RefId(value))
|
|
end
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------------------------------------
|
|
------------------------------------ INTERFACE ------------------------------------------------------------
|
|
-----------------------------------------------------------------------------------------------------------
|
|
------------------ CREATE NEW ACTION ----------------------------------------------------------------------
|
|
function r2:newAction(firstRequest, instanceElement)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDNewActionAction"))
|
|
|
|
local uiName = r2.logicEntityUIPath.."actions"
|
|
|
|
if firstRequest == true then
|
|
local instanceElement = r2.newComponent("LogicEntityAction")
|
|
|
|
local logicEntity = r2:getSelectedInstance()
|
|
assert(logicEntity)
|
|
|
|
r2.requestInsertNode(logicEntity:getBehavior().InstanceId, "Actions", -1, "", instanceElement)
|
|
|
|
r2.ownCreatedInstances[instanceElement.InstanceId] = true
|
|
else
|
|
|
|
local templateParams = {
|
|
selectElt="r2:selectAction()",
|
|
openEltEditor="r2:openActionEditor()",
|
|
maxMinElt="r2:maximizeMinimizeAction()",
|
|
removeElt="r2:removeAction()",
|
|
colOver="200 150 0 100",
|
|
colPushed="200 150 0 255"
|
|
}
|
|
|
|
local element = r2:newLogicElement("actions", tostring(i18n.get("uiR2EdAction")), templateParams, instanceElement.InstanceId)
|
|
|
|
r2:updateActionText(element)
|
|
end
|
|
end
|
|
|
|
--------------------- BUILD ACTION TITLE ----------------------------------------------------------
|
|
function r2:buildActionTitle(actionUI, erase)
|
|
|
|
local actionInst = r2:getInstanceFromId(actionUI.Env.elementId)
|
|
assert(actionInst)
|
|
|
|
-- part1
|
|
local index = r2:searchElementIndex(actionInst)
|
|
if erase==true then index = index-1 end
|
|
local part1 = tostring(i18n.get("uiR2EdAction")).." "..index.." : "
|
|
|
|
-- part2
|
|
local eventType = "..."
|
|
if tostring(actionInst.Event.Type) ~= "" then
|
|
eventType = actionInst.Event.Type
|
|
end
|
|
if tostring(actionInst.Event.Value) ~= "" then
|
|
local inst = r2:getInstanceFromId(tostring(actionInst.Event.Value))
|
|
assert(inst)
|
|
eventType = eventType .. " " .. inst.Name
|
|
end
|
|
|
|
if actionInst.Event.ValueString and tostring(actionInst.Event.ValueString) ~= "" then
|
|
eventType = eventType .. " " .. actionInst.Event.ValueString
|
|
end
|
|
|
|
|
|
local part2 = tostring(i18n.get("uiR2EdEventTxtPreEvent")).." '" .. eventType .. "' "..string.lower(tostring(i18n.get("uiR2EdAction")))
|
|
|
|
-- title
|
|
local title = actionUI:find("title")
|
|
assert(title)
|
|
title.uc_hardtext= part1..part2
|
|
end
|
|
|
|
function r2:getActionName(actionInst)
|
|
|
|
-- part1
|
|
local index = r2:searchElementIndex(actionInst)
|
|
if erase==true then index = index-1 end
|
|
local part1 = tostring(i18n.get("uiR2EdAction")).." "..index.." : "
|
|
|
|
-- part2
|
|
local eventType = "..."
|
|
if tostring(actionInst.Event.Type) ~= "" then
|
|
eventType = actionInst.Event.Type
|
|
end
|
|
if tostring(actionInst.Event.Value) ~= "" then
|
|
local inst = r2:getInstanceFromId(tostring(actionInst.Event.Value))
|
|
assert(inst)
|
|
eventType = eventType .. " " .. inst.Name
|
|
end
|
|
if actionInst.Event.ValueString and tostring(actionInst.Event.ValueString) ~= "" then
|
|
eventType = eventType .. " " .. actionInst.Event.ValueString
|
|
end
|
|
|
|
|
|
local part2 = tostring(i18n.get("uiR2EdEventTxtPreEvent")).." '" .. eventType .. "' "..string.lower(tostring(i18n.get("uiR2EdAction")))
|
|
|
|
return part1..part2
|
|
end
|
|
|
|
------------------ SELECT ACTION ------------------------------------------------------------------
|
|
function r2:selectAction()
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("actions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
r2:selectElement(sequence, r2.logicEntityUIPath.."actions", false)
|
|
|
|
if getUICaller().pushed == true then
|
|
r2:openActionEditor() --TEMP
|
|
end
|
|
end
|
|
|
|
------------------ REMOVE ACTION ------------------------------------------------------------------
|
|
function r2:removeAction(removedElement)
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("actions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
local uiName = r2.logicEntityUIPath.."actions"
|
|
|
|
r2:removeElement(sequence, uiName, tostring(i18n.get("uiR2EdAction")), removedElement)
|
|
end
|
|
|
|
------------------ REMOVE ACTION ------------------------------------------------------------------
|
|
function r2:removeActionUI(removedElement)
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("actions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
local uiName = r2.logicEntityUIPath.."actions"
|
|
|
|
if (removedElement==nil) or (removedElement.id == r2:getSelectedEltUI(uiName)) then
|
|
r2:closeActionEditor()
|
|
end
|
|
|
|
r2:removeElementUI(sequence, uiName, removedElement)
|
|
end
|
|
|
|
------------------- UP ACTION ----------------------------------------------------------------------
|
|
function r2:upAction()
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("actions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
r2:upElement(sequence, r2.logicEntityUIPath.."actions")
|
|
end
|
|
|
|
--------------------- DOWN ACTION ------------------------------------------------------------------
|
|
function r2:downAction()
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("actions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
r2:downElement(sequence, r2.logicEntityUIPath.."actions")
|
|
end
|
|
|
|
-------------- MAX/MIN ACTIONS ----------------------------------------------------------------------
|
|
function r2:maximizeMinimizeActions()
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("actions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
r2:maximizeMinimizeElements(sequence, r2.logicEntityUIPath.."actions")
|
|
end
|
|
|
|
----------------MAX/MIN ACTION -----------------------------------------------------------------------
|
|
function r2:maximizeMinimizeAction()
|
|
r2:maximizeMinimizeElement(r2.logicEntityUIPath.."actions")
|
|
end
|
|
|
|
function r2:removeActionStep(fromActionEditor)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDRemoveActionStepAction"))
|
|
|
|
local menuPair = getUICaller().parent.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local actionStepIndex = menuList:getElementIndex(menuPair)
|
|
|
|
local action
|
|
if fromActionEditor == true then
|
|
action = r2:getSelectedEltInst(r2.logicEntityUIPath.."actions")
|
|
else
|
|
local reaction = r2:getSelectedEltInst(r2.logicEntityUIPath.."reactions")
|
|
assert(reaction)
|
|
action = r2:getInstanceFromId(reaction.LogicEntityAction)
|
|
end
|
|
assert(action)
|
|
|
|
|
|
if not fromActionEditor then
|
|
local reactionInst = r2:getSelectedEltInst(r2.logicEntityUIPath.."reactions")
|
|
assert(reactionInst)
|
|
|
|
local maxSize = actionStepIndex
|
|
if actionStepIndex >= action.Actions.Size then actionStepIndex = action.Actions.Size-1 end
|
|
for i=0, maxSize do
|
|
local actionStepInst = action.Actions[i]
|
|
if actionStepInst.InstanceId == reactionInst.ActionStep then
|
|
actionStepIndex = actionStepIndex+1
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
if actionStepIndex >= action.Actions.Size then return end
|
|
|
|
local actionStepInst = action.Actions[actionStepIndex]
|
|
assert(actionStepInst)
|
|
|
|
r2.requestEraseNode(actionStepInst.InstanceId, "", -1)
|
|
end
|
|
|
|
function r2:removeActionConditionStep()
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDRemoveActionConditionStepAction"))
|
|
|
|
local menuPair = getUICaller().parent.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local conditionStepIndex = menuList:getElementIndex(menuPair)
|
|
|
|
local action = r2:getSelectedEltInst(r2.logicEntityUIPath.."actions")
|
|
assert(action)
|
|
|
|
if conditionStepIndex >= action.Conditions.Size then return end
|
|
|
|
local conditionStepInst = action.Conditions[conditionStepIndex]
|
|
assert(conditionStepInst)
|
|
|
|
r2.requestEraseNode(conditionStepInst.InstanceId, "", -1)
|
|
|
|
r2:updateActionEditor()
|
|
end
|
|
|
|
function r2:removeReactionConditionStep()
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDRemoveReactionConditionStepAction"))
|
|
|
|
local menuPair = getUICaller().parent.parent.parent.parent
|
|
assert(menuPair)
|
|
|
|
local menuList = menuPair.parent
|
|
assert(menuList)
|
|
|
|
local conditionStepIndex = menuList:getElementIndex(menuPair)
|
|
|
|
local reaction = r2:getSelectedEltInst(r2.logicEntityUIPath.."reactions")
|
|
assert(reaction)
|
|
|
|
local action = r2:getInstanceFromId(reaction.LogicEntityAction)
|
|
assert(action)
|
|
|
|
if conditionStepIndex >= action.Conditions.Size then return end
|
|
|
|
local conditionStepInst = action.Conditions[conditionStepIndex]
|
|
assert(conditionStepInst)
|
|
|
|
r2.requestEraseNode(conditionStepInst.InstanceId, "", -1)
|
|
|
|
r2:updateReactionEditor()
|
|
end
|
|
|
|
------------------ OPEN ACTION EDITOR ----------------------------------------------------------------
|
|
function r2:openActionEditor()
|
|
|
|
r2:updateActionEditor()
|
|
r2:openElementEditor(r2.logicEntityUIPath.."actions", "uiR2EDActionEditor", "r2ed_logic_entities")
|
|
end
|
|
|
|
function r2:updateActionEditor()
|
|
|
|
-- delete menu list in editor and add first double menu in every list
|
|
local actionEditor = r2:getActionEditor()
|
|
assert(actionEditor)
|
|
|
|
--
|
|
local actionsList = actionEditor:find("actions_list")
|
|
assert(actionsList)
|
|
actionsList = actionsList:find("menus_list")
|
|
assert(actionsList)
|
|
actionsList:clear()
|
|
|
|
local newButtonPair = createGroupInstance("two_menu_trash_template", actionsList.id,
|
|
{id="menu_pair1", params_left="r2:openWhichEntityMenu()",
|
|
params_right="r2:openRightMenu(true, 'ApplicableActions', 'r2:actionWhatAction')",
|
|
remove_pair="r2:removeActionStep(true)", col_pushed="255 255 255 255",
|
|
params_over="r2:activeTrashButton()"})
|
|
|
|
actionsList:addChild(newButtonPair)
|
|
actionsList.parent:updateCoords()
|
|
|
|
--
|
|
local conditionsList = actionEditor:find("conditions_list"):find("menus_list")
|
|
assert(conditionsList)
|
|
conditionsList:clear()
|
|
|
|
newButtonPair = createGroupInstance("two_menu_trash_template", conditionsList.id,
|
|
{id="menu_pair1", params_left="r2:openWhichEntityMenu()",
|
|
params_right="r2:openRightMenu(true, 'Conditions', 'r2:actionWhatCondition')",
|
|
remove_pair="r2:removeActionConditionStep()", col_pushed="255 255 255 255",
|
|
params_over="r2:activeTrashButton()"})
|
|
|
|
conditionsList:addChild(newButtonPair)
|
|
conditionsList.parent:updateCoords()
|
|
|
|
r2:initActionEditor()
|
|
|
|
-- action name
|
|
local actionName = actionEditor:find("name")
|
|
assert(actionName)
|
|
|
|
-- update buttons text
|
|
local actionInst = r2:getSelectedEltInst(r2.logicEntityUIPath.."actions")
|
|
|
|
-- which event text
|
|
local whichEvent = actionEditor:find("which_event"):find("menu")
|
|
assert(whichEvent)
|
|
local whichEventText = whichEvent:find("text")
|
|
assert(whichEventText)
|
|
|
|
-- which event label
|
|
local whichEventLabel = actionEditor:find("which_event"):find("label")
|
|
assert(whichEventLabel)
|
|
local whichEventNameText = whichEventLabel:find("name_text")
|
|
assert(whichEventNameText)
|
|
text = r2:getSelectedInstance().Name
|
|
whichEventNameText.uc_hardtext = text
|
|
|
|
if actionInst ~= nil then
|
|
|
|
local index = r2:searchElementIndex(actionInst)
|
|
if index~= nil then
|
|
actionName.uc_hardtext = tostring(i18n.get("uiR2EdAction")).." "..index.." : "
|
|
else
|
|
actionName.uc_hardtext = tostring(i18n.get("uiR2EdAction")).." : "
|
|
end
|
|
|
|
-- which event text
|
|
local text = r2.logicEntityAttributes["Events"][actionInst.Event.Type]
|
|
if text == nil then text = "" end
|
|
if tostring(actionInst.Event.Value) ~= "" then
|
|
--text = text .. " : " .. r2:getInstanceFromId(tostring(actionInst.Event.Value)).Name
|
|
local inst = r2:getInstanceFromId(tostring(actionInst.Event.Value))
|
|
assert(inst)
|
|
text = text .. " : " .. r2:getElementName(inst)
|
|
end
|
|
whichEventText.uc_hardtext = text
|
|
|
|
local previousButtonPair = actionsList:getChild(0)
|
|
-- ActionStep list
|
|
for i=0, actionInst.Actions.Size-1 do
|
|
|
|
local actionStepInst = actionInst.Actions[i]
|
|
assert(actionStepInst)
|
|
|
|
local buttonParams = r2.whichEntityButtons[actionsList:getChild(0):find("left_menu"):find("select").id]
|
|
|
|
newButtonPair = r2:createNewMenuPair(actionsList, buttonParams)
|
|
|
|
local whichEntityMenu = previousButtonPair:find("left_menu")
|
|
assert(whichEntityMenu)
|
|
local whichEntityText = whichEntityMenu:find("text")
|
|
assert(whichEntityText)
|
|
text = r2:getInstanceFromId(tostring(actionStepInst.Entity)).Name
|
|
whichEntityText.uc_hardtext = text
|
|
|
|
|
|
local whatActionMenu = previousButtonPair:find("right_menu")
|
|
assert(whatActionMenu)
|
|
local whatActionText = whatActionMenu:find("text")
|
|
assert(whatActionText)
|
|
text = r2.logicEntityAttributes["ApplicableActions"][actionStepInst.Action.Type]
|
|
if text == nil then text = "" end
|
|
if tostring(actionStepInst.Action.Value) ~= "" then
|
|
--text = text .. " : " .. r2:getInstanceFromId(tostring(actionStepInst.Action.Value)).Name
|
|
local inst = r2:getInstanceFromId(tostring(actionStepInst.Action.Value))
|
|
assert(inst)
|
|
text = text .. " : " .. r2:getElementName(inst)
|
|
end
|
|
whatActionText.uc_hardtext = text
|
|
|
|
previousButtonPair.Env.entityId = tostring(actionStepInst.Entity)
|
|
previousButtonPair = newButtonPair
|
|
end
|
|
|
|
-- Conditions list
|
|
previousButtonPair = conditionsList:getChild(0)
|
|
for i=0, actionInst.Conditions.Size-1 do
|
|
|
|
local conditionInst = actionInst.Conditions[i]
|
|
assert(conditionInst)
|
|
|
|
local buttonParams = r2.whichEntityButtons[conditionsList:getChild(0):find("left_menu"):find("select").id]
|
|
|
|
newButtonPair = r2:createNewMenuPair(conditionsList, buttonParams)
|
|
|
|
local whichEntityMenu = previousButtonPair:find("left_menu")
|
|
assert(whichEntityMenu)
|
|
local whichEntityText = whichEntityMenu:find("text")
|
|
assert(whichEntityText)
|
|
text = r2:getInstanceFromId(tostring(conditionInst.Entity)).Name
|
|
whichEntityText.uc_hardtext = text
|
|
|
|
local whatConditionMenu = previousButtonPair:find("right_menu")
|
|
assert(whatConditionMenu)
|
|
local whatConditionText = whatConditionMenu:find("text")
|
|
assert(whatConditionText)
|
|
text = r2.logicEntityAttributes["Conditions"][conditionInst.Condition.Type]
|
|
if text == nil then text = "" end
|
|
if tostring(conditionInst.Condition.Value) ~= "" then
|
|
--text = text .. " : " .. r2:getInstanceFromId(tostring(conditionInst.Condition.Value)).Name
|
|
local inst = r2:getInstanceFromId(tostring(conditionInst.Condition.Value))
|
|
assert(inst)
|
|
text = text .. " : " .. r2:getElementName(inst)
|
|
end
|
|
whatConditionText.uc_hardtext = text
|
|
|
|
previousButtonPair.Env.entityId = tostring(conditionInst.Entity)
|
|
previousButtonPair = newButtonPair
|
|
end
|
|
else
|
|
|
|
local name = tostring(i18n.get("uiR2EdAction")).." : "
|
|
actionName.uc_hardtext = name
|
|
|
|
whichEventText.uc_hardtext = ""
|
|
end
|
|
end
|
|
|
|
|
|
------------------- CREATE NEW REACTION ---------------------------------------------------------------
|
|
function r2:newReaction(firstRequest, instanceElement)
|
|
|
|
local templateParams = {
|
|
selectElt="r2:selectReaction()",
|
|
openEltEditor="r2:openReactionEditor()",
|
|
maxMinElt="r2:maximizeMinimizeReaction()",
|
|
removeElt="r2:removeReaction()",
|
|
colOver="120 45 185 90",
|
|
colPushed="120 45 185 255"
|
|
}
|
|
|
|
local uiName = r2.logicEntityUIPath.."reactions"
|
|
|
|
local element
|
|
|
|
if firstRequest == true then
|
|
r2.ownCreatedInstances["emptyReaction"]=true
|
|
element = r2:newLogicElement("reactions", tostring(i18n.get("uiR2EdReaction")), templateParams, "emptyReaction")
|
|
element.Env.WhatTriggers = false
|
|
|
|
r2:updateReactionEditor()
|
|
else
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local reactionsUI = logicEntityUI:find("reactions")
|
|
assert(reactionsUI)
|
|
|
|
local reactions = reactionsUI:find("elements_list")
|
|
assert(reactions)
|
|
|
|
for i=0, reactions.childrenNb-1 do
|
|
local reactionUI = reactions:getChild(i)
|
|
if reactionUI.Env.elementId == instanceElement.InstanceId then
|
|
element = reactionUI
|
|
break
|
|
end
|
|
end
|
|
|
|
if element == nil then
|
|
element = r2:newLogicElement("reactions", tostring(i18n.get("uiR2EdReaction")), templateParams, instanceElement.InstanceId)
|
|
end
|
|
|
|
element.Env.WhatTriggers = true
|
|
|
|
-- update reaction text and title
|
|
r2:updateReactionText(element)
|
|
end
|
|
end
|
|
|
|
------------ BUILD REACTION TITLE ----------------------------------------------------------
|
|
function r2:buildReactionTitle(reactionUI, erase)
|
|
|
|
local title = reactionUI:find("title")
|
|
assert(title)
|
|
|
|
if reactionUI.Env.WhatTriggers==true then
|
|
local reactionInst = r2:getInstanceFromId(reactionUI.Env.elementId)
|
|
assert(reactionInst)
|
|
|
|
-- part1
|
|
local index = r2:searchElementIndex(reactionInst)
|
|
if erase==true then index = index-1 end
|
|
local part1 = tostring(i18n.get("uiR2EdReaction")).." "..index.." : "
|
|
|
|
-- part2
|
|
local actionStep = r2:getInstanceFromId(reactionInst.ActionStep)
|
|
assert(actionStep)
|
|
local value = tostring(actionStep.Action.Value)
|
|
local type = actionStep.Action.Type
|
|
local actionType = r2.logicEntityAttributes["ApplicableActions"][type]
|
|
if actionType == nil then actionType="" end
|
|
if value ~= "" then
|
|
local inst = r2:getInstanceFromId(value)
|
|
assert(inst)
|
|
actionType = actionType .. " " .. inst.Name
|
|
end
|
|
local part2 = actionType .. " "
|
|
|
|
-- part3
|
|
local actionInst = r2:getInstanceFromId(reactionInst.LogicEntityAction)
|
|
assert(actionInst)
|
|
value = tostring(actionInst.Event.Value)
|
|
type = r2.logicEntityAttributes["Events"][actionInst.Event.Type]
|
|
if type == nil then type="..." end
|
|
local eventType = type
|
|
if value ~= "" then
|
|
local inst = r2:getInstanceFromId(value)
|
|
assert(inst)
|
|
eventType = eventType .. " " .. inst.Name
|
|
end
|
|
|
|
|
|
if actionStep.Action.ValueString and actionStep.Action.ValueString ~= "" then
|
|
if string.gfind(eventType, "%%1")() then
|
|
eventType = string.gsub(eventType, "%%1", "'"..tostring(actionStep.Action.ValueString).."'")
|
|
else
|
|
eventType = eventType .. " '" .. tostring(actionStep.Action.ValueString).. "'"
|
|
end
|
|
end
|
|
|
|
|
|
local whichEntity = actionInst.Parent.Parent.Parent
|
|
assert(whichEntity)
|
|
|
|
local part3 = tostring(i18n.get("uiR2EdEventTxtPreEvent")).." '".. eventType .."' "..tostring(i18n.get("uiR2EdEventOf")).." ".. whichEntity.Name
|
|
|
|
-- title
|
|
title.uc_hardtext= part1..part2..part3
|
|
|
|
elseif erase==true then
|
|
local eltsList = reactionUI.parent
|
|
local indexReactionUI = eltsList:getElementIndex(reactionUI) - 1
|
|
title.uc_hardtext = tostring(i18n.get("uiR2EdReaction")).." "..indexReactionUI.." : "
|
|
end
|
|
end
|
|
|
|
function r2:getReactionName(reactionInst)
|
|
|
|
-- part1
|
|
local index = r2:searchElementIndex(reactionInst)
|
|
if erase==true then index = index-1 end
|
|
local part1 = tostring(i18n.get("uiR2EdReaction")).." "..index.." : "
|
|
|
|
-- part2
|
|
local actionStep = r2:getInstanceFromId(reactionInst.ActionStep)
|
|
assert(actionStep)
|
|
local value = tostring(actionStep.Action.Value)
|
|
local type = actionStep.Action.Type
|
|
local actionType = r2.logicEntityAttributes["ApplicableActions"][type]
|
|
if actionType == nil then actionType="" end
|
|
if value ~= "" then
|
|
local inst = r2:getInstanceFromId(value)
|
|
assert(inst)
|
|
actionType = actionType .. " " .. inst.Name
|
|
end
|
|
local part2 = actionType .. " "
|
|
|
|
-- part3
|
|
local actionInst = r2:getInstanceFromId(reactionInst.LogicEntityAction)
|
|
assert(actionInst)
|
|
value = tostring(actionInst.Event.Value)
|
|
type = r2.logicEntityAttributes["Events"][actionInst.Event.Type]
|
|
if type == nil then type="..." end
|
|
local eventType = type
|
|
if value ~= "" then
|
|
local inst = r2:getInstanceFromId(value)
|
|
assert(inst)
|
|
eventType = eventType .. " " .. inst.Name
|
|
end
|
|
|
|
if actionStep.Action.ValueString and tostring(actionStep.Action.ValueString) ~= "" then
|
|
eventType = eventType .. " " .. actionStep.Action.ValueString
|
|
end
|
|
|
|
if actionStep.Action.ValueString and actionStep.Action.ValueString ~= "" then
|
|
if string.gfind(eventType, "%%1")() then
|
|
eventType = string.gsub(eventType, "%%1", "'"..tostring(actionStep.Action.ValueString).."'")
|
|
else
|
|
eventType = eventType .. " '" .. tostring(actionStep.Action.ValueString).. "'"
|
|
end
|
|
end
|
|
|
|
|
|
|
|
local whichEntity = actionInst.Parent.Parent.Parent
|
|
assert(whichEntity)
|
|
|
|
local part3 = tostring(i18n.get("uiR2EdEventTxtPreEvent")).." '".. eventType .."' "..tostring(i18n.get("uiR2EdEventOf")).." ".. whichEntity.Name
|
|
|
|
return part1..part2..part3
|
|
end
|
|
|
|
------------------ SELECT REACTION ------------------------------------------------------------------
|
|
function r2:selectReaction()
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("reactions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
r2:selectElement(sequence, r2.logicEntityUIPath.."reactions", false)
|
|
|
|
if getUICaller().pushed == true then
|
|
r2:openReactionEditor() --TEMP
|
|
end
|
|
end
|
|
|
|
------------------ REMOVE REACTION ------------------------------------------------------------------
|
|
function r2:removeReaction(reactionUI)
|
|
|
|
r2.requestNewAction(i18n.get("uiR2EDRemoveReactionAction"))
|
|
|
|
local uiName = r2.logicEntityUIPath.."reactions"
|
|
|
|
local reaction
|
|
if reactionUI == nil then
|
|
reactionUI = r2:getSelectedEltUI(uiName)
|
|
reaction = r2:getSelectedEltInst(uiName)
|
|
else
|
|
reaction = r2:getInstanceFromId(reactionUI.Env.elementId)
|
|
end
|
|
|
|
if reactionUI.Env.WhatTriggers==true then
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("reactions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
-- delete associated action step
|
|
r2:removeElement(sequence, uiName, tostring(i18n.get("uiR2EdReaction")), reactionUI)
|
|
if reaction~= nil then
|
|
local actionStepId = reaction.ActionStep
|
|
if r2:getInstanceFromId(actionStepId) then
|
|
r2.requestEraseNode(actionStepId, "", -1)
|
|
end
|
|
end
|
|
else
|
|
r2:removeReactionUI(reactionUI)
|
|
end
|
|
end
|
|
|
|
------------------ REMOVE REACTION ------------------------------------------------------------------
|
|
function r2:removeReactionUI(reactionUI)
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("reactions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
local uiName = r2.logicEntityUIPath.."reactions"
|
|
|
|
if reactionUI.id == r2:getSelectedEltUI(uiName) then
|
|
r2:closeReactionEditor()
|
|
end
|
|
|
|
r2:removeElementUI(sequence, uiName, reactionUI)
|
|
end
|
|
|
|
------------------ MAX/MIN REACTION ----------------------------------------------------------------
|
|
function r2:maximizeMinimizeReaction()
|
|
r2:maximizeMinimizeElement(r2.logicEntityUIPath.."reactions")
|
|
end
|
|
|
|
------------------- UP REACTION --------------------------------------------------------------------
|
|
function r2:upReaction()
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("reactions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
r2:upElement(sequence, r2.logicEntityUIPath.."reactions")
|
|
end
|
|
|
|
------------------ DOWN REACTION --------------------------------------------------------------------
|
|
function r2:downReaction()
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("reactions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
r2:downElement(sequence, r2.logicEntityUIPath.."reactions")
|
|
end
|
|
|
|
------------------ MAX/MIN REACTIONS -----------------------------------------------------------------
|
|
function r2:maximizeMinimizeReactions()
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("reactions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
r2:maximizeMinimizeElements(sequence, r2.logicEntityUIPath.."reactions")
|
|
end
|
|
|
|
------------------ OPEN ACTION EDITOR ----------------------------------------------------------------
|
|
function r2:openReactionEditor()
|
|
|
|
r2:updateReactionEditor()
|
|
r2:openElementEditor(r2.logicEntityUIPath.."reactions", "uiR2EDReactionEditor", "r2ed_logic_entities")
|
|
end
|
|
|
|
function r2:updateReactionEditor()
|
|
|
|
local reactionEltUI = r2:getSelectedEltUI(r2.logicEntityUIPath.."reactions")
|
|
assert(reactionEltUI)
|
|
|
|
-- delete menu lists in editor and add first double menu in list
|
|
local reactionEditor = r2:getReactionEditor()
|
|
assert(reactionEditor)
|
|
|
|
local conditionsList = reactionEditor:find("conditions_list"):find("menus_list")
|
|
assert(conditionsList)
|
|
conditionsList:clear()
|
|
|
|
local newButtonPair = createGroupInstance("two_menu_trash_template", conditionsList.id,
|
|
{id="menu_pair1", params_left="r2:openWhichEntityMenu()",
|
|
params_right="r2:openRightMenu(true, 'Conditions', 'r2:reactionWhatCondition')",
|
|
remove_pair="r2:removeReactionConditionStep()", col_pushed="255 255 255 255",
|
|
params_over="r2:activeTrashButton()"})
|
|
|
|
conditionsList:addChild(newButtonPair)
|
|
conditionsList.parent:updateCoords()
|
|
|
|
local actionsList = reactionEditor:find("actions_list"):find("menus_list")
|
|
assert(actionsList)
|
|
actionsList:clear()
|
|
|
|
newButtonPair = createGroupInstance("two_menu_trash_template", actionsList.id,
|
|
{id="menu_pair1", params_left="r2:openWhichEntityMenu()",
|
|
params_right="r2:openRightMenu(true, 'ApplicableActions', 'r2:reactionWhatAction')",
|
|
remove_pair="r2:removeActionStep(false)", col_pushed="255 255 255 255",
|
|
params_over="r2:activeTrashButton()"})
|
|
|
|
actionsList:addChild(newButtonPair)
|
|
actionsList.parent:updateCoords()
|
|
|
|
r2:initReactionEditor()
|
|
|
|
local actions = reactionEditor:find("actions_list")
|
|
assert(actions)
|
|
|
|
local whatAction = actions:find("what_action")
|
|
assert(whatAction)
|
|
|
|
-- reaction name
|
|
local reactionName = reactionEditor:find("name")
|
|
assert(reactionName)
|
|
local eltsList = reactionEltUI.parent
|
|
assert(eltsList)
|
|
|
|
local indexReactionUI = eltsList:getElementIndex(reactionEltUI) + 1
|
|
local name = tostring(i18n.get("uiR2EdReaction")).." "..indexReactionUI.." : "
|
|
|
|
-- what action label
|
|
local whatActionLabel = whatAction:find("label")
|
|
assert(whatActionLabel)
|
|
local whatActionText = whatActionLabel:find("name_text")
|
|
assert(whatActionText)
|
|
local text = " " .. r2:getSelectedInstance().Name
|
|
whatActionText.uc_hardtext = text
|
|
|
|
local conditions = reactionEditor:find("conditions_list")
|
|
assert(conditions)
|
|
|
|
local whatActionMenu = whatAction:find("menu")
|
|
assert(whatActionMenu)
|
|
local whatActionText = whatActionMenu:find("text")
|
|
assert(whatActionText)
|
|
|
|
local menuPair = reactionEditor:find("combos")
|
|
assert(menuPair)
|
|
|
|
local whatTriggersMenu = menuPair:find("left_menu")
|
|
assert(whatTriggersMenu)
|
|
local whatTriggersText = whatTriggersMenu:find("text")
|
|
assert(whatTriggersText)
|
|
|
|
local whichEventMenu = menuPair:find("right_menu")
|
|
assert(whichEventMenu)
|
|
local whichEventText = whichEventMenu:find("text")
|
|
assert(whichEventText)
|
|
|
|
if not reactionEltUI.Env.WhatTriggers then
|
|
|
|
actions.active = false
|
|
conditions.active = false
|
|
|
|
whatActionText.uc_hardtext = ""
|
|
whatTriggersText.uc_hardtext = ""
|
|
whichEventText.uc_hardtext = ""
|
|
|
|
if reactionEditor.Env.minimize ~= true then
|
|
reactionEditor.h = reactionEditor.h - 320
|
|
reactionEditor.Env.minimize = true
|
|
end
|
|
else
|
|
|
|
actions.active = true
|
|
conditions.active = true
|
|
|
|
if reactionEditor.Env.minimize == true then
|
|
reactionEditor.h = reactionEditor.h + 320
|
|
reactionEditor.Env.minimize = false
|
|
end
|
|
|
|
local reactionInst = r2:getSelectedEltInst(r2.logicEntityUIPath.."reactions")
|
|
assert(reactionInst)
|
|
|
|
local index = r2:searchElementIndex(reactionInst)
|
|
if index~= nil then
|
|
name = tostring(i18n.get("uiR2EdReaction")).." "..index.." : "
|
|
else
|
|
name = tostring(i18n.get("uiR2EdReaction")).." : "
|
|
end
|
|
|
|
local actionInst = r2:getInstanceFromId(reactionInst.LogicEntityAction)
|
|
assert(actionInst)
|
|
|
|
local actionStepInst = r2:getInstanceFromId(reactionInst.ActionStep)
|
|
assert(actionStepInst)
|
|
|
|
-- "what action" button text
|
|
text = r2.logicEntityAttributes["ApplicableActions"][actionStepInst.Action.Type]
|
|
if text == nil then text = "" end
|
|
if tostring(actionStepInst.Action.Value) ~= "" then
|
|
--text = text .. " : " .. r2:getInstanceFromId(tostring(actionStepInst.Action.Value)).Name
|
|
local inst = r2:getInstanceFromId(tostring(actionStepInst.Action.Value))
|
|
assert(inst)
|
|
text = text .. " : " .. r2:getElementName(inst)
|
|
end
|
|
whatActionText.uc_hardtext = text
|
|
|
|
-- "what triggers..." and "which event" buttons text
|
|
local entityName = actionInst.ParentInstance.Parent.Name
|
|
local text = r2.logicEntityAttributes["Events"][actionInst.Event.Type]
|
|
if text == nil then text = "" end
|
|
if tostring(actionInst.Event.Value) ~= "" then
|
|
--text = text .. " : " .. r2:getInstanceFromId(tostring(actionInst.Event.Value)).Name
|
|
local inst = r2:getInstanceFromId(tostring(actionInst.Event.Value))
|
|
assert(inst)
|
|
text = text .. " : " .. r2:getElementName(inst)
|
|
end
|
|
|
|
whatTriggersText.uc_hardtext = entityName
|
|
|
|
whichEventText.uc_hardtext = text
|
|
|
|
menuPair.Env.entityId = actionInst.ParentInstance.Parent.InstanceId
|
|
|
|
-- Actions list
|
|
local previousButtonPair = actionsList:getChild(0)
|
|
|
|
for i=0, actionInst.Actions.Size-1 do
|
|
|
|
local actionStepInst = actionInst.Actions[i]
|
|
assert(actionStepInst)
|
|
|
|
if actionStepInst.InstanceId ~= reactionInst.ActionStep then
|
|
|
|
local buttonParams = r2.whichEntityButtons[actionsList:getChild(0):find("left_menu"):find("select").id]
|
|
|
|
newButtonPair = r2:createNewMenuPair(actionsList, buttonParams)
|
|
|
|
local whichEntityMenu = previousButtonPair:find("left_menu")
|
|
assert(whichEntityMenu)
|
|
local whichEntityText = whichEntityMenu:find("text")
|
|
assert(whichEntityText)
|
|
text = r2:getInstanceFromId(tostring(actionStepInst.Entity)).Name
|
|
whichEntityText.uc_hardtext = text
|
|
|
|
local whatActionMenu = previousButtonPair:find("right_menu")
|
|
assert(whatActionMenu)
|
|
local whatActionText = whatActionMenu:find("text")
|
|
assert(whatActionText)
|
|
text = r2.logicEntityAttributes["ApplicableActions"][actionStepInst.Action.Type]
|
|
if text == nil then text = "" end
|
|
|
|
if tostring(actionStepInst.Action.Value) ~= "" then
|
|
--text = text .. " : " .. r2:getInstanceFromId(tostring(actionStepInst.Action.Value)).Name
|
|
local inst = r2:getInstanceFromId(tostring(actionStepInst.Action.Value))
|
|
assert(inst)
|
|
text = text .. " : " .. r2:getElementName(inst)
|
|
end
|
|
whatActionText.uc_hardtext = text
|
|
|
|
previousButtonPair.Env.entityId = tostring(actionStepInst.Entity)
|
|
previousButtonPair = newButtonPair
|
|
end
|
|
end
|
|
|
|
-- Conditions list
|
|
local previousButtonPair = conditionsList:getChild(0)
|
|
|
|
for i=0, actionInst.Conditions.Size-1 do
|
|
|
|
local conditionInst = actionInst.Conditions[i]
|
|
assert(conditionInst)
|
|
|
|
local buttonParams = r2.whichEntityButtons[conditionsList:getChild(0):find("left_menu"):find("select").id]
|
|
|
|
newButtonPair = r2:createNewMenuPair(conditionsList, buttonParams)
|
|
|
|
local whichEntityMenu = previousButtonPair:find("left_menu")
|
|
assert(whichEntityMenu)
|
|
local whichEntityText = whichEntityMenu:find("text")
|
|
assert(whichEntityText)
|
|
text = r2:getInstanceFromId(tostring(conditionInst.Entity)).Name
|
|
whichEntityText.uc_hardtext = text
|
|
|
|
local whatConditionMenu = previousButtonPair:find("right_menu")
|
|
assert(whatConditionMenu)
|
|
local whatConditionText = whatConditionMenu:find("text")
|
|
assert(whatConditionText)
|
|
text = r2.logicEntityAttributes["Conditions"][conditionInst.Condition.Type]
|
|
if text == nil then text = "" end
|
|
if tostring(conditionInst.Condition.Value) ~= "" then
|
|
local inst = r2:getInstanceFromId(tostring(conditionInst.Condition.Value))
|
|
assert(inst)
|
|
text = text .. " : " .. r2:getElementName(inst)
|
|
end
|
|
whatConditionText.uc_hardtext = text
|
|
|
|
previousButtonPair.Env.entityId = tostring(conditionInst.Entity)
|
|
previousButtonPair = newButtonPair
|
|
end
|
|
end
|
|
|
|
reactionName.uc_hardtext = name
|
|
end
|
|
|
|
---------------------------- new element --------------------------------------------------------------
|
|
function r2:newLogicElement(tabName, elementName, templateParams, instanceId)
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find(tabName)
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
local newElement = r2:newElement(sequence, elementName, templateParams, false)
|
|
|
|
if instanceId~=nil and instanceId~="emptyReaction" then
|
|
newElement.Env.elementId = instanceId
|
|
end
|
|
|
|
if r2.ownCreatedInstances[instanceId]==true then
|
|
newElement:find("select").pushed = true
|
|
r2:selectElement(sequence, r2.logicEntityUIPath..tabName, false, newElement:find("select"))
|
|
r2.ownCreatedInstances[instanceId] = nil
|
|
if tabName == "actions" then
|
|
r2:updateActionEditor()
|
|
elseif tabName == "reactions" then
|
|
r2:updateReactionEditor()
|
|
end
|
|
end
|
|
|
|
r2:maximizeMinimizeElement(uiName, newElement)
|
|
|
|
return newElement
|
|
end
|
|
|
|
------------------------------------------------
|
|
function r2:cleanLogicEntityUI()
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local actionSequence = logicEntityUI:find("actions")
|
|
assert(actionSequence)
|
|
local logicEntityActions = actionSequence:find("elements_list")
|
|
assert(logicEntityActions)
|
|
logicEntityActions.Env.minimize = nil
|
|
|
|
local reactionSequence = logicEntityUI:find("reactions")
|
|
assert(reactionSequence)
|
|
local logicEntityReactions = reactionSequence:find("elements_list")
|
|
assert(logicEntityReactions)
|
|
logicEntityReactions.Env.minimize = nil
|
|
|
|
logicEntityActions:clear()
|
|
logicEntityReactions:clear()
|
|
|
|
-- clean actions sequence
|
|
r2:setSelectedEltUIId(r2.logicEntityUIPath.."actions", nil)
|
|
local minElts = actionSequence:find("minimize_elements")
|
|
assert(minElts)
|
|
|
|
local maxElts = actionSequence:find("maximize_elements")
|
|
assert(maxElts)
|
|
|
|
minElts.active = false
|
|
maxElts.active = false
|
|
|
|
logicEntityActions.Env.elementsCount = nil
|
|
|
|
-- clean reactions sequence
|
|
r2:setSelectedEltUIId(r2.logicEntityUIPath.."reactions", nil)
|
|
minElts = reactionSequence:find("minimize_elements")
|
|
assert(minElts)
|
|
|
|
maxElts = reactionSequence:find("maximize_elements")
|
|
assert(maxElts)
|
|
|
|
minElts.active = false
|
|
maxElts.active = false
|
|
|
|
logicEntityReactions.Env.elementsCount = nil
|
|
|
|
r2:initEventsEditor()
|
|
end
|
|
|
|
|
|
function r2:updateLogicEntityUI(instance)
|
|
|
|
if r2.logicEntityUIUpdated == true then return end
|
|
r2.logicEntityUIUpdated = true
|
|
|
|
-- remove all actions and reactions
|
|
r2:cleanLogicEntityUI()
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local actionSequence = logicEntityUI:find("actions")
|
|
assert(actionSequence)
|
|
local logicEntityActions = actionSequence:find("elements_list")
|
|
assert(logicEntityActions)
|
|
|
|
|
|
local reactionSequence = logicEntityUI:find("reactions")
|
|
assert(reactionSequence)
|
|
local logicEntityReactions = reactionSequence:find("elements_list")
|
|
assert(logicEntityReactions)
|
|
|
|
-- build actions and reactions of selected logic entity
|
|
local behavior = instance:getBehavior()
|
|
local actions = instance:getBehavior().Actions
|
|
local reactions = instance:getBehavior().Reactions
|
|
|
|
local uiName = r2.logicEntityUIPath.."actions"
|
|
for s = 0, actions.Size - 1 do
|
|
local action = actions[s]
|
|
r2:newAction(false, action)
|
|
end
|
|
if actions.Size > 0 then
|
|
local firstElt = logicEntityActions:getChild(1)
|
|
local selectedButton = firstElt:find("select")
|
|
selectedButton.pushed = true
|
|
local sequenceUI = actionSequence:find("sequence_elts")
|
|
assert(sequenceUI)
|
|
|
|
r2:selectElement(sequenceUI, uiName, false, selectedButton)
|
|
|
|
r2:updateActionEditor()
|
|
end
|
|
|
|
uiName = r2.logicEntityUIPath.."reactions"
|
|
for s = 0, reactions.Size - 1 do
|
|
local reaction = reactions[s]
|
|
r2:newReaction(false, reaction)
|
|
end
|
|
if reactions.Size > 0 then
|
|
local firstElt = logicEntityReactions:getChild(1)
|
|
local selectedButton = firstElt:find("select")
|
|
selectedButton.pushed = true
|
|
local sequenceUI = reactionSequence:find("sequence_elts")
|
|
assert(sequenceUI)
|
|
|
|
r2:selectElement(sequenceUI, uiName, false, selectedButton)
|
|
|
|
r2:updateReactionEditor()
|
|
end
|
|
|
|
logicEntityUI.uc_title = tostring(i18n.get("uiR2EDEventsTriggersEditor")) .. r2:getSelectedInstance().Name
|
|
end
|
|
|
|
----------------------------- CLOSE ACTION / REACTION EDITOR ------------------------------------
|
|
function r2:closeActionEditor()
|
|
local actionsEditor = r2:getActionEditor()
|
|
assert(actionsEditor)
|
|
|
|
actionsEditor.active = false
|
|
end
|
|
|
|
function r2:closeReactionEditor()
|
|
local reactionsEditor = r2:getReactionEditor()
|
|
assert(reactionsEditor)
|
|
|
|
reactionsEditor.active = false
|
|
end
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- LOGIC ENTITY DisplayerProperties -------------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
--local logicEntityPropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
--function logicEntityPropertySheetDisplayerTable:onPostCreate(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function logicEntityPropertySheetDisplayerTable:onErase(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function logicEntityPropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function logicEntityPropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function logicEntityPropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
r2.logicEntityUIUpdated = false
|
|
--function logicEntityPropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
|
|
-- if not isSelected then
|
|
-- r2.events:closeEditor()
|
|
-- end
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function logicEntityPropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
|
|
-- if not r2.logicEntityUIUpdated or instance ~= r2:getSelectedInstance() then
|
|
-- return
|
|
-- end
|
|
|
|
|
|
-- if attributeName == "Name" then
|
|
|
|
-- local actionEditor = r2:getActionEditor()
|
|
-- assert(actionEditor)
|
|
|
|
-- local reactionEditor = r2:getReactionEditor()
|
|
-- assert(reactionEditor)
|
|
|
|
-- if actionEditor.active == true then
|
|
-- r2:updateActionEditor()
|
|
-- end
|
|
|
|
-- if reactionEditor.active == true then
|
|
-- r2:updateReactionEditor()
|
|
-- end
|
|
|
|
-- local logicEntityWnd = getUI("ui:interface:r2ed_logic_entities")
|
|
-- assert(logicEntityWnd)
|
|
|
|
-- logicEntityWnd.uc_title = tostring(i18n.get("uiR2EDEventsTriggersEditor")) .. instance[attributeName]
|
|
-- end
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function r2:logicEntityPropertySheetDisplayer()
|
|
-- return logicEntityPropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
--end
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- LOGIC ENTITY ACTION DisplayerProperties -------------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
--local logicEntityActionPropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
--function logicEntityActionPropertySheetDisplayerTable:onPostCreate(instance)
|
|
|
|
-- local logicEntity = r2:getSelectedInstance()
|
|
-- local logicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
-- if not r2.logicEntityUIUpdated or logicEntity==nil or logicEntity ~= logicEntityParent then
|
|
-- return
|
|
-- end
|
|
|
|
-- r2:newAction(false, instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function logicEntityActionPropertySheetDisplayerTable:onErase(instance)
|
|
|
|
-- local logicEntity = r2:getSelectedInstance()
|
|
-- local logicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
-- if not r2.logicEntityUIUpdated or logicEntity==nil or logicEntity ~= logicEntityParent then
|
|
-- return
|
|
-- end
|
|
|
|
-- local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
-- assert(logicEntityUI)
|
|
|
|
-- local tabUI = logicEntityUI:find("actions")
|
|
-- assert(tabUI)
|
|
|
|
-- local sequence = tabUI:find("sequence_elts")
|
|
-- assert(sequence)
|
|
|
|
-- local uiName = r2.logicEntityUIPath.."actions"
|
|
|
|
-- local actionList = sequence:find("elements_list")
|
|
-- assert(actionList)
|
|
|
|
-- local actionUI = nil
|
|
-- for i=0, actionList.childrenNb-1 do
|
|
-- local action = actionList:getChild(i)
|
|
-- assert(action)
|
|
|
|
-- if (action.Env.elementId~=nil) and (action.Env.elementId == instance.InstanceId) then
|
|
-- actionUI = action
|
|
-- break
|
|
-- end
|
|
-- end
|
|
|
|
-- if actionUI~= nil then
|
|
-- r2:removeActionUI(actionUI)
|
|
-- end
|
|
--end
|
|
------------------------------------------------
|
|
--function logicEntityActionPropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
|
|
-- local logicEntity = r2:getSelectedInstance()
|
|
-- local logicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
-- if not r2.logicEntityUIUpdated or logicEntity==nil or logicEntity ~= logicEntityParent then
|
|
-- return
|
|
-- end
|
|
|
|
-- if this LogicEntityAction was on the selected logic entity,
|
|
-- we must update interface by removing the associated action UI
|
|
-- local actionsUI = getUI("ui:interface:r2ed_logic_entities"):find("actions")
|
|
-- assert(actionsUI)
|
|
|
|
-- local actionsList = actionsUI:find("elements_list")
|
|
-- assert(actionsList)
|
|
|
|
-- for r=0, actionsList.childrenNb-1 do
|
|
-- local action = actionsList:getChild(r)
|
|
-- assert(action)
|
|
|
|
-- if action.Env.elementId~=nil then
|
|
-- local actionInst = r2:getInstanceFromId(action.Env.elementId)
|
|
|
|
-- if actionInst and actionInst.InstanceId == instance.InstanceId then
|
|
-- r2:removeActionUI(action)
|
|
-- break
|
|
-- end
|
|
-- end
|
|
-- end
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function logicEntityActionPropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
|
|
-- local logicEntity = r2:getSelectedInstance()
|
|
-- local logicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
-- if not r2.logicEntityUIUpdated then
|
|
-- return
|
|
-- end
|
|
|
|
-- if logicEntity~=nil and logicEntity == logicEntityParent then
|
|
-- r2:newAction(false, instance)
|
|
-- end
|
|
|
|
-- update the reaction UI which are associated to this action
|
|
-- local reactionsUI = getUI("ui:interface:r2ed_logic_entities"):find("reactions")
|
|
-- assert(reactionsUI)
|
|
|
|
-- local reactionsList = reactionsUI:find("elements_list")
|
|
-- assert(reactionsList)
|
|
|
|
-- for r=0, reactionsList.childrenNb-1 do
|
|
-- local reaction = reactionsList:getChild(r)
|
|
-- assert(reaction)
|
|
|
|
-- if reaction.Env.elementId~=nil then
|
|
-- local reactionInst = r2:getInstanceFromId(reaction.Env.elementId)
|
|
|
|
-- if reactionInst and reactionInst.LogicEntityAction == instance.InstanceId then
|
|
-- r2:updateReactionText(reaction)
|
|
-- end
|
|
-- end
|
|
-- end
|
|
--end
|
|
------------------------------------------------
|
|
--function logicEntityActionPropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function logicEntityActionPropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function logicEntityActionPropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
|
|
-- if not r2.logicEntityUIUpdated then return end
|
|
|
|
-- local logicEntity = r2:getSelectedInstance()
|
|
-- local logicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
-- if logicEntity~=nil and logicEntity == logicEntityParent then
|
|
|
|
-- update action UI text
|
|
-- local actionsUI = getUI("ui:interface:r2ed_logic_entities"):find("actions")
|
|
-- assert(actionsUI)
|
|
|
|
-- local actionsList = actionsUI:find("elements_list")
|
|
-- assert(actionsList)
|
|
|
|
-- for a=0, actionsList.childrenNb-1 do
|
|
-- local action = actionsList:getChild(a)
|
|
-- assert(action)
|
|
|
|
-- if (action.Env.elementId~=nil) and (action.Env.elementId == instance.InstanceId) then
|
|
-- r2:updateActionText(action)
|
|
-- break
|
|
-- end
|
|
-- end
|
|
-- end
|
|
|
|
-- update reaction UI text
|
|
-- local reactionsUI = getUI("ui:interface:r2ed_logic_entities"):find("reactions")
|
|
-- assert(reactionsUI)
|
|
|
|
-- local reactionsList = reactionsUI:find("elements_list")
|
|
-- assert(reactionsList)
|
|
|
|
-- several LogicEntityReaction !!!
|
|
-- for r=0, reactionsList.childrenNb-1 do
|
|
-- local reaction = reactionsList:getChild(r)
|
|
-- assert(reaction)
|
|
|
|
-- if reaction.Env.elementId~=nil then
|
|
-- local reactionInst = r2:getInstanceFromId(reaction.Env.elementId)
|
|
|
|
-- if reactionInst and reactionInst.LogicEntityAction == instance.InstanceId
|
|
-- and r2:getInstanceFromId(reactionInst.ActionStep)~=nil then
|
|
|
|
-- r2:updateReactionText(reaction)
|
|
-- end
|
|
-- end
|
|
-- end
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function r2:logicEntityActionPropertySheetDisplayer()
|
|
-- return logicEntityActionPropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
--end
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- LOGIC ENTITY REACTION DisplayerProperties -----------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
local logicEntityReactionPropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
function logicEntityReactionPropertySheetDisplayerTable:onPostCreate(instance)
|
|
|
|
local logicEntity = r2:getSelectedInstance()
|
|
local logicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.logicEntityUIUpdated or logicEntity==nil or logicEntity ~= logicEntityParent then
|
|
return
|
|
end
|
|
|
|
r2:newReaction(false, instance)
|
|
end
|
|
------------------------------------------------
|
|
function logicEntityReactionPropertySheetDisplayerTable:onErase(instance)
|
|
|
|
local logicEntity = r2:getSelectedInstance()
|
|
local logicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.logicEntityUIUpdated or logicEntity==nil or logicEntity ~= logicEntityParent then
|
|
return
|
|
end
|
|
|
|
local logicEntityUI = getUI("ui:interface:r2ed_logic_entities")
|
|
assert(logicEntityUI)
|
|
|
|
local tabUI = logicEntityUI:find("reactions")
|
|
assert(tabUI)
|
|
|
|
local sequence = tabUI:find("sequence_elts")
|
|
assert(sequence)
|
|
|
|
local uiName = r2.logicEntityUIPath.."reactions"
|
|
|
|
local reactionList = sequence:find("elements_list")
|
|
assert(reactionList)
|
|
|
|
local reactionUI = nil
|
|
for i=0, reactionList.childrenNb-1 do
|
|
local reaction = reactionList:getChild(i)
|
|
assert(reaction)
|
|
|
|
if (reaction.Env.elementId~=nil) and (reaction.Env.elementId == instance.InstanceId) then
|
|
reactionUI = reaction
|
|
break
|
|
end
|
|
end
|
|
|
|
if reactionUI~=nil then
|
|
r2:removeReactionUI(reactionUI)
|
|
end
|
|
end
|
|
------------------------------------------------
|
|
function logicEntityReactionPropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
|
|
local logicEntity = r2:getSelectedInstance()
|
|
local logicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.logicEntityUIUpdated or logicEntity==nil or logicEntity ~= logicEntityParent then
|
|
return
|
|
end
|
|
|
|
-- if this LogicEntityReaction was on the selected logic entity,
|
|
-- we must update interface by removing the associated reaction UI
|
|
local reactionsUI = getUI("ui:interface:r2ed_logic_entities"):find("reactions")
|
|
assert(reactionsUI)
|
|
|
|
local reactionsList = reactionsUI:find("elements_list")
|
|
assert(reactionsList)
|
|
|
|
for r=0, reactionsList.childrenNb-1 do
|
|
local reaction = reactionsList:getChild(r)
|
|
assert(reaction)
|
|
|
|
if reaction.Env.elementId~=nil then
|
|
local reactionInst = r2:getInstanceFromId(reaction.Env.elementId)
|
|
|
|
if reactionInst and reactionInst.InstanceId == instance.InstanceId then
|
|
r2:removeReactionUI(reaction)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
------------------------------------------------
|
|
function logicEntityReactionPropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
|
|
local logicEntity = r2:getSelectedInstance()
|
|
local logicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.logicEntityUIUpdated or logicEntity==nil or logicEntity ~= logicEntityParent then
|
|
return
|
|
end
|
|
|
|
r2:newReaction(false, instance)
|
|
end
|
|
------------------------------------------------
|
|
function logicEntityReactionPropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function logicEntityReactionPropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function logicEntityReactionPropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
|
|
local logicEntity = r2:getSelectedInstance()
|
|
local logicEntityParent = instance.Parent.Parent.Parent
|
|
|
|
if not r2.logicEntityUIUpdated or logicEntity==nil or logicEntity ~= logicEntityParent then
|
|
return
|
|
end
|
|
end
|
|
|
|
function r2:findElementUIFromInstance(instance, uiName)
|
|
|
|
local sequenceInst = instance.Parent.Parent
|
|
|
|
local sequenceUI = getUI("ui:interface:"..uiName)
|
|
assert(sequenceUI)
|
|
|
|
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 element
|
|
end
|
|
end
|
|
end
|
|
|
|
------------------------------------------------
|
|
function logicEntityReactionPropertySheetDisplayerTable:onTargetInstanceCreated(instance, refIdName, refIdIndexInArray)
|
|
end
|
|
------------------------------------------------
|
|
function logicEntityReactionPropertySheetDisplayerTable:onTargetInstanceErased(instance, refIdName, refIdIndexInArray)
|
|
end
|
|
------------------------------------------------
|
|
function logicEntityReactionPropertySheetDisplayerTable:onTargetInstanceAttrModified(instance, refIdName, refIdIndexInArray, targetAttrName, targetAttrIndexInArray)
|
|
end
|
|
|
|
------------------------------------------------
|
|
function r2:logicEntityReactionPropertySheetDisplayer()
|
|
return logicEntityReactionPropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
end
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- EVENT TYPE DisplayerProperties -----------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
--local eventTypePropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
--function eventTypePropertySheetDisplayerTable:onPostCreate(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function eventTypePropertySheetDisplayerTable:onErase(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function eventTypePropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function eventTypePropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function eventTypePropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function eventTypePropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function eventTypePropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function eventTypePropertySheetDisplayerTable:onTargetInstanceEraseRequested(instance, refIdName, refIdIndexInArray)
|
|
-- r2.requestSetNode(instance.InstanceId, "Type", "")
|
|
-- r2.requestSetNode(instance.InstanceId, "Value", r2.RefId(""))
|
|
--end
|
|
------------------------------------------------
|
|
--function eventTypePropertySheetDisplayerTable:onTargetInstanceAttrModified(instance, refIdName, refIdIndexInArray, targetAttrName, targetAttrIndexInArray)
|
|
-- if targetAttrName == "Name" then
|
|
-- r2:logicEntityActionPropertySheetDisplayer():onAttrModified(instance.Parent)
|
|
-- end
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function r2:eventTypePropertySheetDisplayer()
|
|
-- return eventTypePropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
--end
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- ACTION STEP DisplayerProperties -----------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
--local actionStepPropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
--function actionStepPropertySheetDisplayerTable:onPostCreate(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function actionStepPropertySheetDisplayerTable:onErase(instance)
|
|
|
|
-- local logicEntity = r2:getInstanceFromId(tostring(instance.Entity))
|
|
-- if logicEntity then
|
|
|
|
-- for i=0, logicEntity:getBehavior().Reactions.Size-1 do
|
|
|
|
-- local reaction = logicEntity:getBehavior().Reactions[i]
|
|
-- assert(reaction)
|
|
|
|
-- if (reaction.ActionStep == instance.InstanceId) then
|
|
-- r2.requestEraseNode(reaction.InstanceId, "", -1)
|
|
-- break
|
|
-- end
|
|
-- end
|
|
-- end
|
|
--end
|
|
------------------------------------------------
|
|
--function actionStepPropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function actionStepPropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function actionStepPropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function actionStepPropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function actionStepPropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function actionStepPropertySheetDisplayerTable:onTargetInstanceErased(instance, refIdName, refIdIndexInArray)
|
|
-- r2.requestEraseNode(instance.InstanceId, "", -1)
|
|
--end
|
|
------------------------------------------------
|
|
--function actionStepPropertySheetDisplayerTable:onTargetInstanceAttrModified(instance, refIdName, refIdIndexInArray, targetAttrName, targetAttrIndexInArray)
|
|
-- if targetAttrName == "Name" then
|
|
-- r2:logicEntityActionPropertySheetDisplayer():onAttrModified(instance.Parent.Parent)
|
|
-- end
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function r2:actionStepPropertySheetDisplayer()
|
|
-- return actionStepPropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
--end
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- ACTION TYPE DisplayerProperties -----------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
--local actionTypePropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
--function actionTypePropertySheetDisplayerTable:onPostCreate(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function actionTypePropertySheetDisplayerTable:onErase(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function actionTypePropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function actionTypePropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function actionTypePropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function actionTypePropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function actionTypePropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function actionTypePropertySheetDisplayerTable:onTargetInstanceEraseRequested(instance, refIdName, refIdIndexInArray)
|
|
-- r2.requestSetNode(instance.InstanceId, "Type", "")
|
|
-- r2.requestSetNode(instance.InstanceId, "Value", r2.RefId(""))
|
|
--end
|
|
------------------------------------------------
|
|
--function actionTypePropertySheetDisplayerTable:onTargetInstanceAttrModified(instance, refIdName, refIdIndexInArray, targetAttrName, targetAttrIndexInArray)
|
|
-- if targetAttrName == "Name" then
|
|
-- r2:logicEntityActionPropertySheetDisplayer():onAttrModified(instance.Parent.Parent.Parent)
|
|
-- end
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function r2:actionTypePropertySheetDisplayer()
|
|
-- return actionTypePropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
--end
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- CONDITION STEP DisplayerProperties -----------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
--local conditionStepPropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
--function conditionStepPropertySheetDisplayerTable:onPostCreate(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function conditionStepPropertySheetDisplayerTable:onErase(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function conditionStepPropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function conditionStepPropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function conditionStepPropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function conditionStepPropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function conditionStepPropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function conditionStepPropertySheetDisplayerTable:onTargetInstanceEraseRequested(instance, refIdName, refIdIndexInArray)
|
|
-- r2.requestEraseNode(instance.InstanceId, "", -1)
|
|
--end
|
|
------------------------------------------------
|
|
--function conditionStepPropertySheetDisplayerTable:onTargetInstanceAttrModified(instance, refIdName, refIdIndexInArray, targetAttrName, targetAttrIndexInArray)
|
|
-- if targetAttrName == "Name" then
|
|
-- r2:logicEntityActionPropertySheetDisplayer():onAttrModified(instance.Parent.Parent)
|
|
-- end
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function r2:conditionStepPropertySheetDisplayer()
|
|
-- return conditionStepPropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
--end
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------
|
|
-------------------------------- CONDITION TYPE DisplayerProperties -----------------------
|
|
--------------------------------------------------------------------------------------------------
|
|
--local conditionTypePropertySheetDisplayerTable = clone(r2:propertySheetDisplayer())
|
|
|
|
------------------------------------------------
|
|
--function conditionTypePropertySheetDisplayerTable:onPostCreate(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function conditionTypePropertySheetDisplayerTable:onErase(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function conditionTypePropertySheetDisplayerTable:onPreHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function conditionTypePropertySheetDisplayerTable:onPostHrcMove(instance)
|
|
--end
|
|
------------------------------------------------
|
|
--function conditionTypePropertySheetDisplayerTable:onFocus(instance, hasFocus)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function conditionTypePropertySheetDisplayerTable:onSelect(instance, isSelected)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function conditionTypePropertySheetDisplayerTable:onAttrModified(instance, attributeName)
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function conditionTypePropertySheetDisplayerTable:onTargetInstanceEraseRequested(instance, refIdName, refIdIndexInArray)
|
|
-- r2.requestSetNode(instance.InstanceId, "Type", "")
|
|
-- r2.requestSetNode(instance.InstanceId, "Value", r2.RefId(""))
|
|
--end
|
|
------------------------------------------------
|
|
--function conditionTypePropertySheetDisplayerTable:onTargetInstanceAttrModified(instance, refIdName, refIdIndexInArray, targetAttrName, targetAttrIndexInArray)
|
|
-- if targetAttrName == "Name" then
|
|
-- r2:logicEntityActionPropertySheetDisplayer():onAttrModified(instance.Parent.Parent.Parent)
|
|
-- end
|
|
--end
|
|
|
|
------------------------------------------------
|
|
--function r2:conditionTypePropertySheetDisplayer()
|
|
-- return conditionTypePropertySheetDisplayerTable -- returned shared displayer to avoid wasting memory
|
|
--end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|