Mercurial > wow > cyborg-mmo7
changeset 54:c9706291c141
Added per-spec bindings. This is optional and must be enabled in the addon settings.
author | madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09 |
---|---|
date | Fri, 03 May 2013 23:24:21 +0000 |
parents | 4b9e27be9c68 |
children | 72adde883f46 |
files | CyborgMMO7.lua Localisation.lua OptionPage.xml |
diffstat | 3 files changed, 120 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/CyborgMMO7.lua Fri May 03 23:24:16 2013 +0000 +++ b/CyborgMMO7.lua Fri May 03 23:24:21 2013 +0000 @@ -24,6 +24,14 @@ SHIFT = 0, } +local function toboolean(value) + if value then + return true + else + return false + end +end + function CyborgMMO_LoadStrings(self) -- CyborgMMO_DPrint("LoadStrings("..self:GetName()..") = "..CyborgMMO_StringTable[self:GetName()]) self:SetText(CyborgMMO_StringTable[self:GetName()]) @@ -94,20 +102,36 @@ function CyborgMMO_SetRatSaveData(objects) assert(VarsLoaded) - local data = {} + local specIndex + if Settings.PerSpecBindings then + specIndex = GetActiveSpecGroup() + else + specIndex = 1 + end + local ratData = {} for mode=1,RAT7.MODES do - data[mode] = {} + ratData[mode] = {} for button=1,RAT7.BUTTONS do if objects[mode][button] then - data[mode][button] = objects[mode][button]:SaveData() + ratData[mode][button] = objects[mode][button]:SaveData() end end end - CyborgMMO_GetSaveData().Rat = data + local saveData = CyborgMMO_GetSaveData() + if not saveData.Rat then saveData.Rat = {} end + saveData.Rat[specIndex] = ratData end function CyborgMMO_GetRatSaveData() - return CyborgMMO_GetSaveData().Rat + local specIndex + if Settings.PerSpecBindings then + specIndex = GetActiveSpecGroup() + else + specIndex = 1 + end + CyborgMMO_DPrint("returning rat data for spec:", specIndex, GetActiveSpecGroup()) + local saveData = CyborgMMO_GetSaveData() + return saveData.Rat and saveData.Rat[specIndex] end local function GetSpellID(name) @@ -247,19 +271,21 @@ -- gather all needed IDs (and trigger sync while doing so) if data.Rat then - for mode=1,RAT7.MODES do - for button=1,RAT7.BUTTONS do - local data = data.Rat[mode][button] - if data then - if data.type=='item' then - local itemID = data.detail - if not GetItemInfo(itemID) then - itemIDs[itemID] = true - end - elseif data.type=='battlepet' then - local petID = data.detail - if not C_PetJournal.GetPetInfoByPetID(petID) then - petIDs[petID] = true + for spec,specData in pairs(data.Rat) do + for mode=1,RAT7.MODES do + for button=1,RAT7.BUTTONS do + local buttonData = specData[mode] and specData[mode][button] + if buttonData then + if buttonData.type=='item' then + local itemID = buttonData.detail + if not GetItemInfo(itemID) then + itemIDs[itemID] = true + end + elseif buttonData.type=='battlepet' then + local petID = buttonData.detail + if not C_PetJournal.GetPetInfoByPetID(petID) then + petIDs[petID] = true + end end end end @@ -311,34 +337,39 @@ local oldData = CyborgMMO7SaveData[SaveName] CyborgMMO7SaveData = {} CyborgMMO7SaveData.Settings = oldData.Settings - CyborgMMO7SaveData.Rat = ConvertOldRatData(oldData.Rat) + -- Rat is an array, with one child per talent spec/group + CyborgMMO7SaveData.Rat = {} + CyborgMMO7SaveData.Rat[1] = ConvertOldRatData(oldData.Rat) CyborgMMO7SaveData[SaveName] = oldData -- for now keep the data, we may have missed something in the conversion end elseif event == "PLAYER_ENTERING_WORLD" then EnteredWorld = true elseif event == "PLAYER_REGEN_DISABLED" then CyborgMMO_Close() + elseif event == "ACTIVE_TALENT_GROUP_CHANGED" then + -- force a re-loading of bindings + BindingsLoaded = false else CyborgMMO_DPrint("Event is "..tostring(event)) end -- Fire Loading if and only if the player is in the world and vars are loaded - if not BindingsLoaded and VarsLoaded and AsyncDataLoaded and EnteredWorld then + if not SettingsLoaded and VarsLoaded and AsyncDataLoaded and EnteredWorld then local data = CyborgMMO_GetSaveData() - CyborgMMO_RatPageModel:LoadData() - BindingsLoaded = true - - CyborgMMO_SetupModeCallbacks(1) - CyborgMMO_SetupModeCallbacks(2) - CyborgMMO_SetupModeCallbacks(3) - Settings = data.Settings if not Settings then Settings = {} + data.Settings = Settings + end + if Settings.MiniMapButton == nil then Settings.MiniMapButton = true + end + if Settings.CyborgButton == nil then Settings.CyborgButton = true - data.Settings = Settings + end + if Settings.PerSpecBindings == nil then + Settings.PerSpecBindings = false end if not Settings.Cyborg then Settings.Cyborg = 0.75 @@ -357,9 +388,21 @@ CyborgMMO_SetMiniMapButton(Settings.MiniMapButton) CyborgMMO_MiniMapButtonReposition(Settings.MiniMapButtonAngle) CyborgMMO_SetCyborgHeadButton(Settings.CyborgButton) + CyborgMMO_SetPerSpecBindings(Settings.PerSpecBindings) SettingsLoaded = true end + + -- load data AFTER the settings, because PerSpecBindings may affect what's loaded + if not BindingsLoaded and VarsLoaded and AsyncDataLoaded and EnteredWorld then + CyborgMMO_RatPageModel:LoadData() + + CyborgMMO_SetupModeCallbacks(1) + CyborgMMO_SetupModeCallbacks(2) + CyborgMMO_SetupModeCallbacks(3) + + BindingsLoaded = true + end end function CyborgMMO_SetDefaultSettings() @@ -389,6 +432,7 @@ CyborgMMO_MainPage:RegisterEvent("VARIABLES_LOADED") CyborgMMO_MainPage:RegisterEvent("PLAYER_ENTERING_WORLD") CyborgMMO_MainPage:RegisterEvent("PLAYER_REGEN_DISABLED") + CyborgMMO_MainPage:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED") end function CyborgMMO_Close() @@ -462,7 +506,7 @@ end CyborgMMO_OptionPageCyborgButton:SetChecked(visible) if SettingsLoaded then - Settings.CyborgButton = visible + Settings.CyborgButton = toboolean(visible) end end @@ -474,7 +518,18 @@ end CyborgMMO_OptionPageMiniMapButton:SetChecked(visible) if SettingsLoaded then - Settings.MiniMapButton = visible + Settings.MiniMapButton = toboolean(visible) end end +function CyborgMMO_SetPerSpecBindings(perSpec) + CyborgMMO_OptionPagePerSpecBindings:SetChecked(perSpec) + if SettingsLoaded then + Settings.PerSpecBindings = toboolean(perSpec) + end + -- reload bindings if necessary (AFTER altering the setting) + if BindingsLoaded then + CyborgMMO_RatPageModel:LoadData() + end +end +
--- a/Localisation.lua Fri May 03 23:24:16 2013 +0000 +++ b/Localisation.lua Fri May 03 23:24:21 2013 +0000 @@ -354,6 +354,7 @@ CyborgMMO_OptionPageCyborgButtonTitle="Cyborg Button", CyborgMMO_OptionPageCyborgSizeSliderTitle="Cyborg Head Size", CyborgMMO_OptionPageMiniMapButtonTitle="MiniMap Button", + CyborgMMO_OptionPagePerSpecBindingsTitle="Per-spec bindings", CyborgMMO_OptionPageRebindMouseRow10Name="Back Button", CyborgMMO_OptionPageRebindMouseRow11Name="Button 3", CyborgMMO_OptionPageRebindMouseRow12Name="Thumb Anticlockwise",
--- a/OptionPage.xml Fri May 03 23:24:16 2013 +0000 +++ b/OptionPage.xml Fri May 03 23:24:21 2013 +0000 @@ -257,7 +257,7 @@ <Size><AbsDimension x="32" y="32"/></Size> <Anchors> <Anchor point="TOPLEFT" relativeTo="$parentTitle"> - <Offset><AbsDimension x="15" y="-30"/></Offset> + <Offset><AbsDimension x="15" y="-25"/></Offset> </Anchor> </Anchors> <Layers> @@ -318,10 +318,42 @@ </Scripts> </CheckButton> + <CheckButton name="$parentPerSpecBindings" inherits="UICheckButtonTemplate" checked="true"> + <Size><AbsDimension x="32" y="32"/></Size> + <Anchors> + <Anchor point="TOPLEFT" relativeTo="$parentCyborgButton"> + <Offset><AbsDimension x="0" y="-30"/></Offset> + </Anchor> + </Anchors> + <Layers> + <Layer> + <FontString name="$parentTitle" font="Fonts\FRIZQT__.TTF" inherits="CyborgMMO_TemplateSliderTitle"> + <Anchors> + <Anchor point="LEFT" relativePoint="$parentPerSpecBindings"> + <Offset><AbsDimension x="45" y="0"/></Offset> + </Anchor> + </Anchors> + </FontString> + </Layer> + </Layers> + <Scripts> + <OnLoad> + CyborgMMO_LoadStrings(getglobal(self:GetName().."Title")) + </OnLoad> + <OnClick> + if self:GetChecked() then + CyborgMMO_SetPerSpecBindings(true) + else + CyborgMMO_SetPerSpecBindings(false) + end + </OnClick> + </Scripts> + </CheckButton> + <Button name="$parentSetDefaults" inherits="CyborgMMO_TemplateButton"> <Size><AbsDimension x="150" y="28"/></Size> <Anchors> - <Anchor point="TOPLEFT" relativeTo="CyborgButton"> + <Anchor point="TOPLEFT" relativeTo="PerSpecBindings"> <Offset><AbsDimension x="431" y="-20"/></Offset> </Anchor> </Anchors>