# HG changeset patch # User Wuzzy # Date 1518196445 -3600 # Node ID 712ae7ff8c3d6e75755bd24aa2bf61772801a42b # Parent 3feab46234dd0b857b51ef30f6831080c6afa178 Construction Mode: Remember previous selection of pIndex diff -r 3feab46234dd -r 712ae7ff8c3d share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua Fri Feb 09 16:27:32 2018 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua Fri Feb 09 18:14:05 2018 +0100 @@ -177,11 +177,15 @@ clanPower = {} clanID = {} -clanLStrucIndex = {} -clanLWepIndex = {} -- for ease of use let's track this stuff -clanLUtilIndex = {} -clanLGearIndex = {} +-- for ease of use let's track previous selection +teamLStructIndex = {} +teamLObjectMode = {} +teamLCrateMode = {} +teamLMineIndex = {} +teamLWeapIndex = {} +teamLUtilIndex = {} + clanUsedExtraTime = {} clanCratesSpawned = {} clanFirstTurn = {} @@ -1204,6 +1208,12 @@ pMode = {} placedExpense = 1 + if not CurrentHedgehog then + return false + end + + local team = GetHogTeamName(CurrentHedgehog) + if cat[cIndex] == "Girder Placement Mode" then pIndex = CGR pMode = {loc("Girder")} @@ -1214,25 +1224,34 @@ elseif cat[cIndex] == "Barrel Placement Mode" then pMode = {60} placedExpense = 10 + teamLObjectMode[team] = cat[cIndex] elseif cat[cIndex] == "Health Crate Placement Mode" then pMode = {HealthCaseAmount} placedExpense = 5 + teamLCrateMode[team] = cat[cIndex] elseif cat[cIndex] == "Weapon Crate Placement Mode" then for i = 1, #atkArray do pMode[i] = GetAmmoName(atkArray[i][1]) end placedExpense = atkArray[pIndex][4] + teamLCrateMode[team] = cat[cIndex] + pIndex = teamLWeapIndex[team] elseif cat[cIndex] == "Utility Crate Placement Mode" then for i = 1, #utilArray do pMode[i] = GetAmmoName(utilArray[i][1]) end placedExpense = utilArray[pIndex][4] + teamLCrateMode[team] = cat[cIndex] + pIndex = teamLUtilIndex[team] elseif cat[cIndex] == "Mine Placement Mode" then pMode = {0,1000,2000,3000,4000,5000} placedExpense = 15 + teamLObjectMode[team] = cat[cIndex] + pIndex = teamLMineIndex[team] elseif cat[cIndex] == "Sticky Mine Placement Mode" then pMode = {loc("Sticky Mine")} placedExpense = 20 + teamLObjectMode[team] = cat[cIndex] elseif cat[cIndex] == "Structure Placement Mode" then pMode = { loc("Support Station"), @@ -1246,11 +1265,10 @@ loc("Respawner"), loc("Generator"), } + pIndex = teamLStructIndex[team] end - - - + return true end -- called in onGameTick() @@ -1434,8 +1452,7 @@ -- Check for valid pIndex if structureID <= #pMode then pIndex = structureID - showModeMessage() - updateCost() + updateIndex() end elseif (curWep == amCMObjectPlacer) then -- [Timer X]: Set mine time 1-5 @@ -1443,8 +1460,7 @@ local index = key + 1 if key <= #pMode then pIndex = index - showModeMessage() - updateCost() + updateIndex() end end end @@ -1455,38 +1471,49 @@ if (curWep == amCMObjectPlacer) then -- [Switch]: Set mine time to 0 pIndex = 1 - showModeMessage() - updateCost() + updateIndex() end end function onLeft() + if (curWep == amGirder) or (curWep == amRubber) or (curWep == amCMStructurePlacer) or (curWep == amCMCratePlacer) or (curWep == amCMObjectPlacer) then + pIndex = pIndex - 1 + if pIndex == 0 then + pIndex = #pMode + end + updateIndex() + end +end - pIndex = pIndex - 1 - if pIndex == 0 then - pIndex = #pMode +function onRight() + if (curWep == amGirder) or (curWep == amRubber) or (curWep == amCMStructurePlacer) or (curWep == amCMCratePlacer) or (curWep == amCMObjectPlacer) then + pIndex = pIndex + 1 + if pIndex > #pMode then + pIndex = 1 + end + updateIndex() end +end - if (curWep == amGirder) or (curWep == amCMStructurePlacer) or (curWep == amCMCratePlacer) or (curWep == amCMObjectPlacer) then +-- Should be called when the index of the mode was changed by the player. +-- E.g. new weapon crate contents or structure type +function updateIndex() + if (curWep == amGirder) or (curWep == amRubber) or (curWep == amCMStructurePlacer) or (curWep == amCMCratePlacer) or (curWep == amCMObjectPlacer) then showModeMessage() updateCost() end - -end - -function onRight() - - pIndex = pIndex + 1 - if pIndex > #pMode then - pIndex = 1 + -- Update team variables so the previous state can be restored later + if CurrentHedgehog == nil or band(GetState(CurrentHedgehog), gstHHDriven) == 0 then return end + local val = pMode[pIndex] + local team = GetHogTeamName(CurrentHedgehog) + if cat[cIndex] == "Mine Placement Mode" then + teamLMineIndex[team] = pIndex + elseif cat[cIndex] == "Weapon Crate Placement Mode" then + teamLWeapIndex[team] = pIndex + elseif cat[cIndex] == "Utility Crate Placement Mode" then + teamLUtilIndex[team] = pIndex end - - if (curWep == amGirder) or (curWep == amCMStructurePlacer) or (curWep == amCMCratePlacer) or (curWep == amCMObjectPlacer) then - showModeMessage() - updateCost() - end - end function showModeMessage() @@ -1688,14 +1715,21 @@ for i = 0, ClansCount-1 do clanPower[i] = math.min(conf_initialEnergy, conf_maxEnergy) - clanLWepIndex[i] = 1 -- for ease of use let's track this stuff - clanLUtilIndex[i] = 1 - clanLGearIndex[i] = 1 + clanUsedExtraTime[i] = false clanCratesSpawned[i] = 0 clanFirstTurn[i] = true end + for i = 0, TeamsCount-1 do + local team = GetTeamName(i) + teamLStructIndex[team] = 1 + teamLObjectMode[team] = "Mine Placement Mode" + teamLCrateMode[team] = "Weapon Crate Placement Mode" + teamLMineIndex[team] = 1 + teamLWeapIndex[team] = 1 + teamLUtilIndex[team] = 1 + end tMapWidth = RightX - LeftX tMapHeight = WaterLine - TopY