2017-03-15 19:43:10 +00:00
r2.acts = {
newLocation = " new location " ,
enlargingFactor = 2 ,
islands = { } ,
ecoSystemName = " r2_desert " ,
islandButtonColors =
{
[ " r2_desert " ] = " 157 110 74 255 " ,
[ " r2_jungle " ] = " 47 110 54 255 " ,
[ " r2_forest " ] = " 74 52 0 255 " ,
[ " r2_lakes " ] = " 95 93 67 255 " ,
[ " r2_roots " ] = " 66 52 41 255 " ,
} ,
islandSelectedButtonColors =
{
[ " r2_desert " ] = " 152 60 39 " ,
[ " r2_jungle " ] = " 18 156 51 " ,
[ " r2_forest " ] = " 133 36 13 " ,
[ " r2_lakes " ] = " 109 149 106 " ,
[ " r2_roots " ] = " 73 148 122 " ,
} ,
islandOverButtonColors =
{
[ " r2_desert " ] = " 127 48 33 " ,
[ " r2_jungle " ] = " 0 51 20 " ,
[ " r2_forest " ] = " 90 28 0 " ,
[ " r2_lakes " ] = " 55 53 37 " ,
[ " r2_roots " ] = " 36 22 11 " ,
} ,
ecosystemNames =
{
[ " r2_desert " ] = i18n.get ( " uiR2EDEcosystemDesert " ) : toUtf8 ( ) ,
[ " r2_jungle " ] = i18n.get ( " uiR2EDEcosystemJungle " ) : toUtf8 ( ) ,
[ " r2_forest " ] = i18n.get ( " uiR2EDEcosystemForest " ) : toUtf8 ( ) ,
[ " r2_lakes " ] = i18n.get ( " uiR2EDEcosystemLacustre " ) : toUtf8 ( ) ,
[ " r2_roots " ] = i18n.get ( " uiR2EDEcosystemPrimeRoots " ) : toUtf8 ( ) ,
} ,
selectedIslandButtonId = nil ,
selectedIslandName = nil ,
createNewScenario = true ,
deleteOldScenario = false ,
createNewLocation = true ,
currentScenario =
{
name = " " ,
level = 0 ,
rules = " strict " ,
notes = " "
} ,
currentAct =
{
name = " " ,
weather = 0 ,
manualWeather = true ,
notes = " " ,
} ,
currentLocation =
{
name = " " ,
islandName = " " ,
instanceId = " " ,
season = " spring " ,
manualSeason = true ,
notes = " " ,
entryPoint = " " ,
} ,
}
-------------------------- to sort islands in function of their translated name -----------
function r2 . acts : getIslandNb ( islandName )
local islandTrans = i18n.get ( islandName ) : toUtf8 ( )
local islandNb = string.sub ( islandTrans , - 5 )
local endLen = 6
if string.sub ( islandNb , 1 , 1 ) ~= " " then
islandNb = string.sub ( islandNb , 3 )
endLen = endLen - 1
else
islandNb = string.sub ( islandNb , 2 )
end
-- outland test
local outland = string.sub ( islandTrans , 1 , - endLen )
outland = string.sub ( outland , - 7 )
if outland == " Outland " then return nil end
islandNb = string.sub ( islandNb , 1 , - 2 )
return tonumber ( islandNb )
end
--------------------------------------------------------------------------------------
--------------------------- init location editor -------------------------------------
function r2 . acts : initActsEditor ( )
-- create scenario/act window
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
self.islands = { }
local islands = getCompleteIslands ( )
for islandName , islandAtts in pairs ( islands ) do
local ecoSystemName = islandAtts.continent
if self.islands [ ecoSystemName ] == nil then
self.islands [ ecoSystemName ] = { }
end
local islandNb = self : getIslandNb ( islandName )
if islandNb then
self.islands [ ecoSystemName ] [ islandNb ] = { [ " name " ] = islandName , [ " table " ] = islandAtts }
end
end
local ecoList = actsUI : find ( " ecosystem_list_2 " )
assert ( ecoList )
ecoList : clear ( )
local ecoButtonsGr = actsUI : find ( " choose_ecosystem " )
assert ( ecoButtonsGr )
local buttonDim = 78
local maxWLine = actsUI : find ( " choose_island_2 " ) : find ( " back_gr " ) . w_real - 1
local nbButtonsInLine = math.floor ( maxWLine / ( buttonDim + 2 ) )
local addW = math.floor ( ( maxWLine - buttonDim * nbButtonsInLine ) / nbButtonsInLine )
-- for each ecosystem group, create all islands buttons
for ecoSysName , ecoSysTable in pairs ( self.islands ) do
local ecoGr = createGroupInstance ( " template_lines " , ecoList.id , { id = ecoSysName } )
assert ( ecoGr )
ecoList : addChild ( ecoGr )
ecoGr.active = false
local maxPackage = 0
local islandsNb = 0
for k , v in pairs ( ecoSysTable ) do
local package = r2.getIslandRingAccess ( v.name )
if r2.RingAccess . testAccess ( package ) then
local package = tonumber ( string.sub ( package , 2 , 2 ) )
if package > maxPackage then maxPackage = package end
islandsNb = islandsNb + 1
end
end
local nbLines = math.ceil ( islandsNb / nbButtonsInLine )
local ecoButton = ecoButtonsGr : find ( ecoSysName ) : find ( " eco_button " )
assert ( ecoButton )
local uc_package = ucstring ( )
uc_package : fromUtf8 ( i18n.get ( " uiR2EDEcosystemPackage " ) : toUtf8 ( ) .. " : " .. maxPackage )
ecoButton.tooltip = uc_package
for i = 0 , nbLines - 1 do
local lineGr = createGroupInstance ( " template_line " , ecoGr.id , { id = " line " .. i , h = buttonDim } )
assert ( lineGr )
ecoGr : addChild ( lineGr )
end
if ecoGr.childrenNb > 0 then
local currentLine = ecoGr : getChild ( 0 )
assert ( currentLine )
local currentEltInLine = 0
local currentLineNb = 0
for islandNb , islandAttrs in pairs ( ecoSysTable ) do
local islandName = islandAttrs.name
local islandTable = islandAttrs.table
local textureName = islandName .. " _sp_little.tga "
local ringAccess = r2.RingAccess . testAccess ( r2.getIslandRingAccess ( islandName ) )
if fileExists ( textureName ) and ringAccess then
local tooltip = islandName
local islandW = islandTable.xmax - islandTable.xmin
local islandH = islandTable.ymax - islandTable.ymin
local maxDim = math.max ( islandW , islandH )
local ratio = 64 / maxDim
local width = math.floor ( islandW * ratio )
local height = math.floor ( islandH * ratio )
local maxDim = buttonDim - 20 -- buttonDim - 2*(8+2)
local w_button_texture
local h_button_texture
local x_button_texture
local y_button_texture
local scale = " false "
scale , w_button_texture , h_button_texture , width , height =
self : textureRedimension ( textureName , maxDim , maxDim , width , height )
scale = tostring ( scale )
-- center button island
x_button_texture = ( ( maxDim - width ) / 2 + 10 ) -- (8 + (maxDim-width)/2 + 2)
y_button_texture =- ( ( maxDim - height ) / 2 + 10 ) -- (-((maxDim-height)/2 + 8 + 2))
local tmplParams =
{
id = islandName ,
posparent = " parent " ,
posref = " TL TL " ,
sizeref = " " ,
h = buttonDim + 2 ,
w = buttonDim + addW ,
x_button = " 0 " ,
y_button = " 0 " ,
w_button = - addW ,
h_button = " -2 " ,
icon = textureName ,
tooltip = tooltip ,
w_button_texture = w_button_texture ,
h_button_texture = h_button_texture ,
x_button_texture = x_button_texture ,
y_button_texture = y_button_texture ,
scale = scale ,
color = self.islandButtonColors [ ecoSysName ] ,
back_color = self.islandButtonColors [ ecoSysName ] ,
selected_color = self.islandSelectedButtonColors [ ecoSysName ] .. " 255 " ,
col_over = self.islandOverButtonColors [ ecoSysName ] .. " 80 " ,
group_params_l = " r2.acts:openIslandCardFromButton(' " .. ecoSysName .. " ', ' " .. islandName .. " ') " ,
params_l = " r2.acts:openIslandCardFromButton(' " .. ecoSysName .. " ', ' " .. islandName .. " ') " ,
}
local buttonIsland = createGroupInstance ( " act_button_template " , currentLine.id , tmplParams )
if buttonIsland then
currentLine : addChild ( buttonIsland )
buttonIsland.Env . Name = islandName
end
currentEltInLine = currentEltInLine + 1
if currentEltInLine == nbButtonsInLine then
currentLineNb = currentLineNb + 1
if currentLineNb < ecoGr.childrenNb then
currentLine = ecoGr : getChild ( currentLineNb )
end
currentEltInLine = 0
end
end
end
end
end
local newLocationMode = actsUI : find ( " new_location_mode_2 " )
assert ( newLocationMode )
newLocationMode.Env . Name = self.newLocation
local ringLevel = actsUI : find ( " ring_level " )
ringLevel.hardtext = " Ring level : " .. r2.getCharacterRingAccess ( )
end
--------------------------------------------------------------------------------------
--------------------------- open scenario editor -------------------------------------
function r2 . acts : openScenarioActEditor ( newScenario , noCancelOption , rebuildFirstAct )
setKeyboardContext ( " r2ed_scenario_creation " )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local locationEditor = actsUI : find ( " location " )
assert ( locationEditor )
local prevLocationEditor = actsUI : find ( " previous_location " )
assert ( prevLocationEditor )
actsUI.active = true
setTopWindow ( actsUI )
self.createNewScenario = newScenario
locationEditor.active = ( newScenario == true or rebuildFirstAct == true )
prevLocationEditor.active = not locationEditor.active
self.createNewLocation = true
local islandCancel = actsUI : find ( " island_cancel " )
assert ( islandCancel )
islandCancel.active = ( noCancelOption ~= true )
local islandPrecedent = actsUI : find ( " island_precedent " )
assert ( islandPrecedent )
islandPrecedent.active = ( self.createNewScenario ~= true and rebuildFirstAct ~= true )
-----------------------------------------
-- init scenario/act/location properties
self.currentScenario . level = 0
self.currentScenario . rules = " strict "
self.currentAct . weather = math.random ( 0 , 1022 )
self.currentAct . manualWeather = true
self.currentLocation . manualSeason = true
local seasonNb = math.random ( 1 , 4 )
local seasons = { [ 1 ] = " Spring " , [ 2 ] = " Summer " , [ 3 ] = " Autumn " , [ 4 ] = " Winter " }
self.currentLocation . season = seasons [ seasonNb ]
-- location season
local seasonGr = actsUI : find ( " island_season " )
assert ( seasonGr )
local seasonButton = seasonGr : find ( self.currentLocation . season )
assert ( seasonButton )
self : selectButtonTemplate ( seasonButton )
local seasonManual = seasonGr : find ( " manual_season_2 " )
assert ( seasonManual )
seasonManual : find ( " toggle_butt " ) . pushed = not self.currentLocation . manualSeason
-- act and scenario names
if self.createNewScenario or rebuildFirstAct then
self.currentAct . name = i18n.get ( " uiR2EDDefaultActTitle " ) : toUtf8 ( ) .. " 1 "
else
local actNb = r2.Scenario . Acts.Size
self.currentAct . name = i18n.get ( " uiR2EDDefaultActTitle " ) : toUtf8 ( ) .. " " .. actNb
end
if self.createNewScenario == true then
self.currentScenario . name = i18n.get ( " uiR2EDNewScenario " ) : toUtf8 ( )
else
r2.ScenarioWindow : setActNotes ( )
-- select "new island" mode
local newLocationMode = actsUI : find ( " new_location_mode_2 " )
assert ( newLocationMode )
newLocationMode : find ( " button " ) . active = false
newLocationMode : find ( " selected_button " ) . active = true
self.currentLocation . islandName = " "
self.currentLocation . instanceId = " "
-- clean list of old previous locations
local locationList = actsUI : find ( " location_list " )
assert ( locationList )
locationList : clear ( )
self : openPreviousIslandsActs ( )
local scrollPreviousLoc = actsUI : find ( " scroll_previous_islands " )
assert ( scrollPreviousLoc )
scrollPreviousLoc.trackPos = scrollPreviousLoc.h_real
end
self : openEcosystemIslands ( " r2_desert " )
end
function r2 . acts : backPreviousLocations ( )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local newLocationMode = actsUI : find ( " new_location_mode_2 " )
assert ( newLocationMode )
self : locationIsland ( newLocationMode : find ( " button " ) )
local locationEditor = actsUI : find ( " location " )
assert ( locationEditor )
local prevLocationEditor = actsUI : find ( " previous_location " )
assert ( prevLocationEditor )
locationEditor.active = false
prevLocationEditor.active = true
end
-------------------------------------------------------------------------------------------------------
function r2 . acts : openPreviousIslandsActs ( )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local locationList = actsUI : find ( " location_list " )
assert ( locationList )
local enlargingFactor = self.enlargingFactor
local locationActs = { }
for key , act in specPairs ( r2.Scenario . Acts ) do
local locationId = act.LocationId
if locationActs [ locationId ] == nil then locationActs [ locationId ] = { } end
table.insert ( locationActs [ locationId ] , act.InstanceId )
end
for key , location in specPairs ( r2.Scenario . Locations ) do
local islandName = location.IslandName
local textureName = islandName .. " _sp.tga "
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local islandTable
local ecoSysName = nil
for ecoSystem , ecoSysTable in pairs ( self.islands ) do
local islandNb = self : getIslandNb ( islandName )
if ecoSysTable [ islandNb ] and ecoSysTable [ islandNb ] . name == islandName then
ecoSysName = ecoSystem
islandTable = ecoSysTable [ islandNb ] . table
break
end
end
if ecoSysName then
local backTexture = ecoSysName .. " _back.tga "
local islandW , islandH = ( islandTable.xmax - islandTable.xmin ) * enlargingFactor , ( islandTable.ymax - islandTable.ymin ) * enlargingFactor
-- resize island button to see all island whitout deformation
local totalDim = 200
local maxDim = totalDim - 2 * 8
local w_button_texture
local h_button_texture
local x_button_texture
local y_button_texture
local scale = " false "
local initW , initH = islandW , islandH
scale , w_button_texture , h_button_texture , islandW , islandH =
self : textureRedimension ( textureName , maxDim , maxDim , islandW , islandH )
scale = tostring ( scale )
-- center button island
x_button_texture = ( maxDim - islandW ) / 2 + 8 -- 8 + (maxDim-width)/2 + 2
y_button_texture = - ( ( maxDim - islandH ) / 2 + 8 ) -- -((maxDim-height)/2 + 8 + 2)
local h , h_button , y_button , h_text , y_text
local marge = 15
if locationList.childrenNb == 0 then
h = totalDim
h_button = " 0 "
y_button = " 0 "
h_text = " 0 "
y_text = " 0 "
else
h = totalDim + marge
h_button =- marge
y_button =- marge
h_text =- marge
y_text =- marge
end
local tmplParams =
{
id = islandName ,
posparent = " parent " ,
posref = " BR TR " ,
sizeref = " w " ,
w = " 0 " ,
h = h ,
x = " 0 " ,
y = " 0 " ,
sizeref_act = " h " ,
w_act = totalDim ,
h_act = " 0 " ,
x_act = " 0 " ,
y_act = " 0 " ,
y_button = y_button ,
h_button = h_button ,
icon = textureName ,
w_button_texture = w_button_texture ,
h_button_texture = h_button_texture ,
x_button_texture = x_button_texture ,
y_button_texture = y_button_texture ,
scale = scale ,
color = self.islandButtonColors [ ecoSysName ] ,
back_color = " 255 255 255 255 " ,
selected_color = self.islandSelectedButtonColors [ ecoSysName ] .. " 255 " ,
col_over = self.islandSelectedButtonColors [ ecoSysName ] .. " 80 " ,
group_params_l = " r2.acts:locationIsland(getUICaller()) " ,
params_l = " r2.acts:locationIsland() " ,
back_texture = backTexture ,
x_text = marge ,
w_text = - ( totalDim + marge + 15 ) ,
h_text = h_text ,
y_text = y_text ,
}
local buttonIsland = createGroupInstance ( " previous_loc_template " , locationList.id , tmplParams )
if buttonIsland then
locationList : addChild ( buttonIsland )
buttonIsland.Env . InstanceId = location.InstanceId
local uc_island = ucstring ( )
uc_island : fromUtf8 ( location.Name )
buttonIsland : find ( " button " ) : find ( " center_button " ) . tooltip = uc_island
buttonIsland : find ( " selected_button " ) : find ( " center_button " ) . tooltip = uc_island
-- init text
local textList = buttonIsland : find ( " text_list " )
assert ( textList )
local prevText = textList : find ( " previous_text " )
assert ( prevText )
local text = " ' " .. location.Name .. " ' Location used in acts : \n "
prevText : addColoredTextChild ( text , 200 , 0 , 0 , 255 )
local acts = locationActs [ location.InstanceId ]
for k , actId in pairs ( acts ) do
local act = r2 : getInstanceFromId ( actId )
local act_text = act.Name
if act.ShortDescription ~= " " then
act_text = act_text .. " : "
end
prevText : addColoredTextChild ( act_text , 200 , 120 , 0 , 255 )
if act.ShortDescription ~= " " then
act_text = act.ShortDescription
local uc_act = ucstring ( )
uc_act : fromUtf8 ( act_text )
prevText : addTextChild ( uc_act )
end
end
-- init scroll target
local scroll = textList : find ( " scroll_previous " )
assert ( scroll )
local list = textList : find ( " list " )
assert ( list )
scroll : setTarget ( list.id )
end
end
end
end
--------------------------------------------------------------------------------------
--------------------------- texture button redimension -------------------------------
function r2 . acts : textureRedimension ( textureName , maxW , maxH , islandW , islandH )
local scale = false
local w , h
if maxW < islandW or maxH < islandH then
local ratioW = islandW / maxW
local ratioH = islandH / maxH
local maxRatio = math.max ( ratioW , ratioH )
local textureW , textureH = getTextureSize ( textureName )
local newW = math.floor ( textureW / maxRatio )
local newH = math.floor ( textureH / maxRatio )
scale = true
w = newW
h = newH
islandW = math.floor ( islandW / maxRatio )
islandH = math.floor ( islandH / maxRatio )
else
w = islandW
h = islandH
end
return scale , w , h , islandW , islandH
end
--------------------------------------------------------------------------------------
--------------------------- open islands list of an ecosystem ------------------------
function r2 . acts : openEcosystemIslands ( ecoSystemName )
self.ecoSystemName = ecoSystemName
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
-- ecosystem buttons
local ecoSystemList = actsUI : find ( " ecosystem_list " )
assert ( ecoSystemList )
local selectedEcoSystemGr = ecoSystemList : find ( ecoSystemName )
assert ( selectedEcoSystemGr )
local selectedIslandsLists = selectedEcoSystemGr : find ( " two_lists " )
assert ( selectedIslandsLists )
-- ecosystem islands lists
local ecoSystemList2 = actsUI : find ( " ecosystem_list_2 " )
assert ( ecoSystemList2 )
local selectedEcoSystemGr2 = ecoSystemList2 : find ( ecoSystemName )
assert ( selectedEcoSystemGr2 )
if selectedEcoSystemGr2.active then
local ecoButton = selectedEcoSystemGr : find ( " eco_button " )
assert ( ecoButton )
ecoButton.pushed = true
--return
end
local index = ecoSystemList2 : getElementIndex ( selectedEcoSystemGr2 )
for i = 0 , index do
ecoSystemList2 : upChild ( selectedEcoSystemGr2 )
end
-- all islands list inactive instead of selected ecosystem (inverse)
for i = 0 , ecoSystemList2.childrenNb - 1 do
local ecosystemGr2 = ecoSystemList2 : getChild ( i )
assert ( ecosystemGr2 )
ecosystemGr2.active = ( ecosystemGr2.id == selectedEcoSystemGr2.id )
end
for i = 0 , ecoSystemList.childrenNb - 1 do
local ecosystemGr = ecoSystemList : getChild ( i )
assert ( ecosystemGr )
local islandsList = ecosystemGr : find ( " two_lists " )
assert ( islandsList )
local ecoButton = ecosystemGr : find ( " eco_button " )
assert ( ecoButton )
ecoButton.pushed = ( islandsList.id == selectedIslandsLists.id )
ecosystemGr.child_resize_h = false
ecosystemGr.h = 32
if islandsList.id == selectedIslandsLists.id then
ecosystemGr.h = 38
end
end
-- open first island image
local selectedIslandsList = selectedEcoSystemGr2 : find ( " line0 " )
local islandCard = actsUI : find ( " island_current_image " )
assert ( islandCard )
local islandOk = actsUI : find ( " island_ok " )
assert ( islandOk )
if selectedIslandsList and ( selectedIslandsList.childrenNb > 0 ) then
-- color
local ecoColor = self.islandSelectedButtonColors [ self.ecoSystemName ] .. " 255 "
local ecoColorBack = self.islandSelectedButtonColors [ self.ecoSystemName ] .. " 100 "
islandCard.active = true
islandCard : find ( " bl " ) . color = ecoColor
islandCard : find ( " tl " ) . color = ecoColor
islandCard : find ( " tr " ) . color = ecoColor
islandCard : find ( " br " ) . color = ecoColor
islandCard : find ( " bottom " ) . color = ecoColor
islandCard : find ( " top " ) . color = ecoColor
islandCard : find ( " left " ) . color = ecoColor
islandCard : find ( " right " ) . color = ecoColor
islandCard : find ( " bg " ) . color = ecoColorBack
islandOk.active = true
local firstIsland = selectedIslandsList : getChild ( 0 )
assert ( firstIsland )
self : openIslandCardFromButton ( self.ecoSystemName , firstIsland.Env . Name )
else
local islandBitmap = actsUI : find ( " island_bitmap " )
assert ( islandBitmap )
islandBitmap.texture = " "
islandCard.active = false
islandOk.active = false
end
local scrollIslands = actsUI : find ( " scroll_islands_2 " )
assert ( scrollIslands )
scrollIslands.trackPos = scrollIslands.h_real
-- "choose island" title
local title = actsUI : find ( " choose_island " ) : find ( " choose_island_title " )
assert ( title )
-- doesn't work in all language local titleText = " " .. i18n.get("uiR2EDChooseIsland"):toUtf8() .." " .. self.ecosystemNames[self.ecoSystemName] .. " " .. i18n.get("uiR2EDEcosystem"):toUtf8() .. " "
local titleText = " " .. i18n.get ( " uiR2EDChooseIsland " ) : toUtf8 ( ) .. self.ecosystemNames [ self.ecoSystemName ] .. " "
local uc_title = ucstring ( )
uc_title : fromUtf8 ( titleText )
title.uc_hardtext = uc_title
end
--------------------------------------------------------------------------------------
--------------------------- open island card and images ------------------------------
function r2 . acts : openIslandCardFromButton ( ecosystem , islandName )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local ecosystemList = actsUI : find ( " ecosystem_list_2 " )
assert ( ecosystemList )
local ecosystemGr = ecosystemList : find ( ecosystem )
assert ( ecosystemGr )
local islandButton = ecosystemGr : find ( islandName )
assert ( islandButton )
-- unselect last selection
if self.selectedIslandButtonId ~= nil then
local lastSelectedIsland = getUI ( self.selectedIslandButtonId )
if lastSelectedIsland ~= nil then
lastSelectedIsland : find ( " button " ) . active = true
lastSelectedIsland : find ( " selected_button " ) . active = false
end
end
-- select button
islandButton : find ( " button " ) . active = false
islandButton : find ( " selected_button " ) . active = true
self.selectedIslandButtonId = islandButton.id
self.selectedIslandName = islandButton.Env . Name
self.currentLocation . islandName = self.selectedIslandName
self : openIslandCard ( self.selectedIslandName )
end
--------------------------------------------------------------------------------------
--------------------------- open island card -----------------------------------------
function r2 . acts : openIslandCard ( islandName )
local enlargingFactor = self.enlargingFactor
local textureName = islandName .. " _sp.tga "
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local islandBitmap = actsUI : find ( " island_bitmap " )
assert ( islandBitmap )
-- load texture
islandBitmap.texture = textureName
-- card title
local title = actsUI : find ( " island_images " ) : find ( " card_title " )
assert ( title )
-- doesn't work in all language local titleText = " " .. i18n.get("uiR2EDZoomOn"):toUtf8() .." '" .. i18n.get(islandName):toUtf8() .. "' " .. i18n.get("uiR2EDIsland"):toUtf8() .. " "
local titleText = " " .. i18n.get ( " uiR2EDZoomOn " ) : toUtf8 ( ) .. i18n.get ( islandName ) : toUtf8 ( ) .. " "
local uc_title = ucstring ( )
uc_title : fromUtf8 ( titleText )
title.uc_hardtext = uc_title
local islandTable = self.islands [ self.ecoSystemName ] [ self : getIslandNb ( islandName ) ] . table
local islandW , islandH = ( islandTable.xmax - islandTable.xmin ) * enlargingFactor , ( islandTable.ymax - islandTable.ymin ) * enlargingFactor
local islandCard = actsUI : find ( " island_current_image " )
assert ( islandCard )
-- resize island button to see all island whitout deformation
local maxW , maxH = islandCard.w_real - 12 , islandCard.h_real - 12
local initW , initH = islandW , islandH
islandBitmap.scale , islandBitmap.w , islandBitmap.h , islandW , islandH =
self : textureRedimension ( textureName , maxW , maxH , islandW , islandH )
local cardButton = islandCard : find ( " selected_button " )
assert ( cardButton )
cardButton.w = - ( maxW - islandW )
cardButton.h = - ( maxH - islandH )
cardButton.x = ( maxW - islandW ) / 2
cardButton.y = - ( maxH - islandH ) / 2
-- center button island
islandBitmap.x = 6
islandBitmap.y = - 6
-- entry points
local entryNb = 0
for location , entry in pairs ( islandTable.entrypoints ) do
local entryPoinButton = actsUI : find ( " entrypoint " .. entryNb ) : find ( " flag " )
entryPoinButton.active = true
entryPoinButton.x = ( enlargingFactor * ( entry.x - islandTable.xmin ) / initW ) * islandW
entryPoinButton.y = ( enlargingFactor * ( entry.y - islandTable.ymax ) / initH ) * islandH
entryPoinButton.tooltip = i18n.get ( location )
entryPoinButton.parent . Env.Name = location
if entryNb == 0 then
entryPoinButton.texture = " r2ed_entry_point_pushed.tga "
self.currentLocation . entryPoint = location
else
entryPoinButton.texture = " r2ed_entry_point.tga "
end
entryNb = entryNb + 1
if entryNb == 9 then break end
end
if entryNb < 9 then
for i = entryNb , 9 do
local entryPointGr = actsUI : find ( " entrypoint " .. i )
assert ( entryPointGr )
local entryPoinButton = entryPointGr : find ( " flag " )
entryPoinButton.active = false
end
end
-- enlarge selected ecosystem button
local ecoButton = actsUI : find ( self.ecoSystemName )
assert ( ecoButton )
local ecoList = ecoButton.parent
assert ( ecoList )
for i = 0 , ecoList.childrenNb - 1 do
local button = ecoList : getChild ( i )
if button == ecoButton then
button : find ( " eco_button " ) . wmin = 164
else
button : find ( " eco_button " ) . wmin = 160
end
end
actsUI : invalidateCoords ( )
actsUI : updateCoords ( )
end
--------------------------------------------------------------------------------------
--------------------------- select an entry point ---------------------------------------
function r2 . acts : selectEntryPoint ( )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
for i = 0 , 9 do
local entryPoinButton = actsUI : find ( " entrypoint " .. i ) : find ( " flag " )
assert ( entryPoinButton )
if entryPoinButton == getUICaller ( ) then
getUICaller ( ) . texture = " r2ed_entry_point_pushed.tga "
self.currentLocation . entryPoint = getUICaller ( ) . parent.Env . Name
else
entryPoinButton.texture = " r2ed_entry_point.tga "
end
end
end
--------------------------------------------------------------------------------------
--------------------------- choose a name for location -------------------------------
function r2 . acts : chooseLocationName ( )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local chooseNamePopup = getUI ( " ui:interface:r2ed_choose_location_name " )
assert ( chooseNamePopup )
local editText = chooseNamePopup : find ( " edit_box_group " )
assert ( editText )
local name = editText.uc_input_string : toUtf8 ( )
-- check location name duplication
if not self.createNewScenario then
for i = 0 , r2.Scenario . Locations.Size - 1 do
local location = r2.Scenario . Locations [ i ]
if location.Name == name then
messageBox ( i18n.get ( " uiR2EDLocationNameDuplicated " ) )
return
end
end
end
if name ~= " " then
self.currentLocation . name = name
chooseNamePopup.active = false
actsUI.active = false
disableModalWindow ( )
setKeyboardContext ( " r2ed " )
if self.createNewScenario == true then
self : createScenario ( )
else
self : createAct ( )
end
else
editText : setFocusOnText ( )
end
end
--------------------------------------------------------------------------------------
--------------------------- choose a name for scenario/act ---------------------------
function r2 . acts : chooseScenarioActName ( )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local chooseNamePopup = getUI ( " ui:interface:r2ed_choose_scenario_act_name " )
assert ( chooseNamePopup )
-- act name
local actGr = chooseNamePopup : find ( " act_name " )
assert ( actGr )
local actEditText = actGr : find ( " edit_box_group " )
assert ( actEditText )
local actName = actEditText.uc_input_string : toUtf8 ( )
local scenarioName = " "
local scenarioEditText
if self.createNewScenario == true then
-- scenario name
local scenarioGr = chooseNamePopup : find ( " scenario_name " )
assert ( scenarioGr )
scenarioEditText = scenarioGr : find ( " edit_box_group " )
assert ( scenarioEditText )
scenarioName = scenarioEditText.uc_input_string : toUtf8 ( )
end
if ( self.createNewScenario and scenarioName ~= " " and actName ~= " " ) or ( not self.createNewScenario and actName ~= " " ) then
chooseNamePopup.active = false
disableModalWindow ( )
self.currentScenario . name = scenarioName
self.currentAct . name = actName
if self.createNewLocation == true then
local locationGr = actsUI : find ( " location " )
assert ( locationGr )
local scenarioActGr = actsUI : find ( " scenario_act " )
assert ( scenarioActGr )
scenarioActGr.active = false
locationGr.active = true
self : openEcosystemIslands ( " r2_desert " )
else
actsUI.active = false
if self.createNewScenario == true then
self : createScenario ( )
else
self : createAct ( )
end
setKeyboardContext ( " r2ed " )
end
elseif self.createNewScenario and scenarioName == " " then
scenarioEditText : setFocusOnText ( )
elseif actName == " " then
actEditText : setFocusOnText ( )
end
end
--------------------------------------------------------------------------------------
--------------------------------- createScenario -------------------------------------
function r2 . acts : createScenario ( )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
-- scenario/act/location notes
local scenarioNotes , actNotes
scenarioNotes = " "
actNotes = " "
r2.resetNameGiver ( )
-- create scenario component
local scenario = r2.newComponent ( " Scenario " )
scenario.Ghost_Name = self.currentScenario . name
scenario.Description . ShortDescription = scenarioNotes
if r2.Scenario and r2.Scenario . Language then
scenario.Language = r2.Scenario . Language
end
scenario.AccessRules = self.currentScenario . rules
scenario.Description . LevelId = self.currentScenario . level
scenario.Description . CreationDate = os.date ( )
scenario.Description . Creator = r2 : getUserEntityName ( )
scenario.Description . CreatorMD5 = r2.getCharIdMd5 ( )
-- create permanent act component
local act = r2.newComponent ( " Act " )
local features = act.Features
local tmpDefault = r2.newComponent ( " DefaultFeature " )
act.Name = i18n.get ( " uiR2EDBaseAct " ) : toUtf8 ( )
table.insert ( features , tmpDefault )
table.insert ( scenario.Acts , act )
-- create act 1 component
act = r2.newComponent ( " Act " )
local features = act.Features
local tmpDefault = r2.newComponent ( " DefaultFeature " )
r2.ActUIDisplayer . LastSelfCreatedActInstanceId = act.InstanceId
--act.Name = i18n.get("uiR2EDAct1"):toUtf8() .. ":" .. r2.currentAct.name
act.Name = self.currentAct . name
act.WeatherValue = self.currentAct . weather
local manualWeather = 0
if self.currentAct . manualWeather == true then manualWeather = 1 end
act.ManualWeather = manualWeather
act.ShortDescription = actNotes
table.insert ( features , tmpDefault )
table.insert ( scenario.Acts , act )
-- create location
local location = r2.newComponent ( " Location " )
location.Season = self.currentLocation . season
location.IslandName = self.currentLocation . islandName
location.Name = self.currentLocation . name
location.EntryPoint = self.currentLocation . entryPoint
local manualSeason = 0
if self.currentLocation . manualSeason == true then manualSeason = 1 end
location.ManualSeason = manualSeason
table.insert ( scenario.Locations , location )
act.LocationId = location.InstanceId
r2.requestCreateScenario ( scenario )
r2 : waitScenarioScreen ( )
self.deleteOldScenario = true
end
function r2 . acts : createAct ( )
r2.requestNewAction ( i18n.get ( " uiR2EDNewActAction " ) )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
-- act/location notes
local actNotes = " "
-- create act component
local act = r2.newComponent ( " Act " )
local features = act.Features
local tmpDefault = r2.newComponent ( " DefaultFeature " )
if ( tmpDefault == nil ) then
debugWarning ( " Failed to create default feature " ) ;
return
end
r2.ActUIDisplayer . LastSelfCreatedActInstanceId = act.InstanceId
local actNb = r2.Scenario . Acts.Size
--act.Name = i18n.get("uiR2EDDefaultActTitle"):toUtf8() .. actNb .. ":" .. r2.currentAct.name
act.Name = self.currentAct . name
act.WeatherValue = self.currentAct . weather
local manualWeather = 0
if self.currentAct . manualWeather == true then manualWeather = 1 end
act.ManualWeather = manualWeather
act.ShortDescription = actNotes
table.insert ( features , tmpDefault )
if ( act == nil ) then
debugWarning ( " Failed to create additionnal 'Act' " ) ;
return
end
-- create location
local location
if self.createNewLocation then
location = r2.newComponent ( " Location " )
location.Season = self.currentLocation . season
location.IslandName = self.currentLocation . islandName
location.Name = self.currentLocation . name
location.EntryPoint = self.currentLocation . entryPoint
local manualSeason = 0
if self.currentLocation . manualSeason == true then manualSeason = 1 end
location.ManualSeason = manualSeason
act.LocationId = location.InstanceId
r2.requestInsertNode ( r2.Scenario . InstanceId , " Locations " , - 1 , " " , location )
else
act.LocationId = self.currentLocation . instanceId
end
r2.requestInsertNode ( r2.Scenario . InstanceId , " Acts " , - 1 , " " , act )
end
--------------------------------------------------------------------------------------
--------------------------- choose location name popup -------------------------------
function r2 . acts : openLocationName ( )
local chooseNamePopup = getUI ( " ui:interface:r2ed_choose_location_name " )
assert ( chooseNamePopup )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
if not actsUI.active then return end
local okButton = actsUI : find ( " island_ok " )
assert ( okButton )
enableModalWindow ( okButton , chooseNamePopup.id )
local editText = chooseNamePopup : find ( " edit_box_group " )
assert ( editText )
editText.uc_input_string = i18n.get ( self.currentLocation . islandName )
editText : setFocusOnText ( )
end
------------------------ SELECT BUTTON IN LIST --------------------------------
-- only one button can be selected --------------------------------------------
function r2 . acts : selectButtonTemplate ( buttonTemplate )
local list = buttonTemplate.parent
assert ( list )
for i = 0 , list.childrenNb - 1 do
local child = list : getChild ( i )
assert ( child )
child : find ( " button " ) . active = true
child : find ( " selected_button " ) . active = false
end
buttonTemplate : find ( " button " ) . active = false
buttonTemplate : find ( " selected_button " ) . active = true
end
function r2 . acts : selectButton ( button )
local list = button.parent
assert ( list )
for i = 0 , list.childrenNb - 1 do
local child = list : getChild ( i )
assert ( child )
child : find ( " button " ) . pushed = false
end
button : find ( " button " ) . pushed = true
end
--------------------------- CHOOSE LOCATION SEASON ---------------------------------------
function r2 . acts : locationSeason ( caller )
local buttonTemplate
if caller == nil then
caller = getUICaller ( )
buttonTemplate = caller.parent . parent
else
buttonTemplate = caller.parent
end
self : selectButtonTemplate ( buttonTemplate )
local list = buttonTemplate.parent
local seasons = { [ 0 ] = " Spring " , [ 1 ] = " Summer " , [ 2 ] = " Autumn " , [ 3 ] = " Winter " }
local seasonNb = list : getElementIndex ( buttonTemplate )
self.currentLocation . season = seasons [ seasonNb ]
end
----- MANUAL SEASON ACTIVATION -------------------------------------------------------
function r2 . acts : manualSeason ( )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local manualButton = actsUI : find ( " manual_season_2 " ) : find ( " toggle_butt " )
assert ( manualButton )
self.currentLocation . manualSeason = ( manualButton.pushed == false )
local seasonList = actsUI : find ( " season_list_2 " )
assert ( seasonList )
seasonList.active = self.currentLocation . manualSeason
end
--- OPEN POPUP NAME FOR ACT/SCENARIO OR LOCATION -----------------------------------------
function r2 . acts : openPopupName ( )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local createLocationGr = actsUI : find ( " location " )
assert ( createLocationGr )
local prevLocationGr = actsUI : find ( " previous_location " )
assert ( prevLocationGr )
if prevLocationGr.active then
self : createLocationOrCreateAct ( )
else
self : openLocationName ( )
end
end
--- CANCEL ACT/SCENARIO CREATION --------------------------------------------------------
function r2 . acts : cancelActCreation ( )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
actsUI.active = false
setKeyboardContext ( " r2ed " )
end
--------------------- update palette UI when change act ------------------------------
function r2 . acts : updatePaletteFromEcosystem ( )
local ecosystemTrees =
{
[ " r2_desert " ] = " fytrees " ,
[ " r2_forest " ] = " fotrees " ,
[ " r2_jungle " ] = " jutrees " ,
[ " r2_lakes " ] = " trtrees " ,
[ " r2_roots " ] = " prtrees " ,
}
local currentAct = r2 : getCurrentAct ( )
assert ( currentAct )
local botObjectsPalette = { }
if not r2.Palette . BotEntries then
return -- special case for the 'light' palette
end
botObjectsPalette = r2.Palette . BotEntries
if not currentAct : isBaseAct ( ) then
local currentLocation = r2 : getInstanceFromId ( currentAct.LocationId )
if currentLocation == nil then return end
-- search for ecosystem of current location
local islandEcosystem
for ecoName , v in pairs ( self.islands ) do
if self.islands [ ecoName ] [ self : getIslandNb ( currentLocation.IslandName ) ] . name == currentLocation.IslandName then
islandEcosystem = ecoName
break
end
end
-- flag to display only vegetation of current ecosystem
if islandEcosystem and ecosystemTrees [ islandEcosystem ] then
for ecoName , v in pairs ( ecosystemTrees ) do
botObjectsPalette [ ecosystemTrees [ ecoName ] ] . Display = ( ecoName == islandEcosystem )
end
end
else
for ecoName , v in pairs ( ecosystemTrees ) do
botObjectsPalette [ ecosystemTrees [ ecoName ] ] . Display = false
end
end
r2 : buildPaletteUI ( )
end
----------------------------------------------------------------------------------------------
function r2 . acts : locationIsland ( caller )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
local buttonTemplate
if caller == nil then
caller = getUICaller ( )
buttonTemplate = caller.parent . parent
else
buttonTemplate = caller.parent
end
if buttonTemplate.Env . Name == self.newLocation then
-- select "create new location" mode
buttonTemplate : find ( " button " ) . active = false
buttonTemplate : find ( " selected_button " ) . active = true
self.createNewLocation = true
-- deselect all previous locations
local prevLocationList = actsUI : find ( " location_list " )
assert ( prevLocationList )
for i = 0 , prevLocationList.childrenNb - 1 do
local child = prevLocationList : getChild ( i )
assert ( child )
child : find ( " button " ) . active = true
child : find ( " selected_button " ) . active = false
end
self.currentLocation . islandName = " "
self.currentLocation . intanceId = " "
else
-- select this previous location
self : selectButtonTemplate ( buttonTemplate.parent )
self.currentLocation . instanceId = buttonTemplate.parent . Env.InstanceId
-- deselect "create new location" mode
local newLocationMode = actsUI : find ( " new_location_mode_2 " )
assert ( newLocationMode )
newLocationMode : find ( " button " ) . active = true
newLocationMode : find ( " selected_button " ) . active = false
self.createNewLocation = false
end
end
--------------------------------------------------------------------------------------
--------------------------- choose a name for scenario/act ---------------------------
function r2 . acts : createLocationOrCreateAct ( )
local actsUI = getUI ( " ui:interface:r2ed_acts " )
assert ( actsUI )
if self.createNewLocation then
local createLocationGr = actsUI : find ( " location " )
assert ( createLocationGr )
local prevLocationGr = actsUI : find ( " previous_location " )
assert ( prevLocationGr )
createLocationGr.active = true
prevLocationGr.active = false
self : openEcosystemIslands ( " r2_desert " )
else
actsUI.active = false
disableModalWindow ( )
setKeyboardContext ( " r2ed " )
self : createAct ( )
end
end