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>