annotate CyborgMMO7.lua @ 37:0734b90e605a

Create the saved data root table when it doesn't exist.
author madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09
date Thu, 25 Apr 2013 18:15:52 +0000
parents 8fc4f8a25225
children 67ad1101ee10
rev   line source
madcatzinc@13 1 --~ Warcraft Plugin for Cyborg MMO7
madcatzinc@0 2 --~ Filename: CyborgMMO7.lua
madcatzinc@0 3 --~ Description: Plugin entry point, String tables and other generic crap that I could not think to put anywhere else.
madcatzinc@0 4 --~ Copyright (C) 2012 Mad Catz Inc.
madcatzinc@0 5 --~ Author: Christopher Hooks
madcatzinc@0 6
madcatzinc@0 7 --~ This program is free software; you can redistribute it and/or
madcatzinc@0 8 --~ modify it under the terms of the GNU General Public License
madcatzinc@0 9 --~ as published by the Free Software Foundation; either version 2
madcatzinc@0 10 --~ of the License, or (at your option) any later version.
madcatzinc@0 11
madcatzinc@0 12 --~ This program is distributed in the hope that it will be useful,
madcatzinc@0 13 --~ but WITHOUT ANY WARRANTY; without even the implied warranty of
madcatzinc@0 14 --~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
madcatzinc@0 15 --~ GNU General Public License for more details.
madcatzinc@0 16
madcatzinc@0 17 --~ You should have received a copy of the GNU General Public License
madcatzinc@0 18 --~ along with this program; if not, write to the Free Software
madcatzinc@0 19 --~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
madcatzinc@0 20
madcatzinc@36 21 local RAT7 = {
madcatzinc@36 22 BUTTONS = 13,
madcatzinc@36 23 MODES = 3,
madcatzinc@36 24 SHIFT = 0,
madcatzinc@36 25 }
madcatzinc@36 26
madcatzinc@4 27 function CyborgMMO_LoadStrings(self)
madcatzinc@15 28 -- CyborgMMO_DPrint("LoadStrings("..self:GetName()..") = "..CyborgMMO_StringTable[self:GetName()])
madcatzinc@13 29 self:SetText(CyborgMMO_StringTable[self:GetName()])
madcatzinc@0 30 end
madcatzinc@0 31
madcatzinc@20 32 local VarsLoaded = false
madcatzinc@20 33 local EnteredWorld = false
madcatzinc@20 34 local BindingsLoaded = false
madcatzinc@21 35 local SettingsLoaded = false
madcatzinc@20 36 local SaveName = GetRealmName().."_"..UnitName("player")
madcatzinc@21 37 local Settings = nil
madcatzinc@0 38
madcatzinc@0 39
madcatzinc@4 40 function CyborgMMO_MiniMapButtonReposition(pos)
madcatzinc@4 41 CyborgMMO_MiniMapFrame:SetPoint("TOPLEFT",
madcatzinc@0 42 "Minimap",
madcatzinc@0 43 "TOPLEFT",
madcatzinc@13 44 52 - (80 * cos(pos)),
madcatzinc@13 45 (80 * sin(pos)) - 52)
madcatzinc@0 46 end
madcatzinc@0 47
madcatzinc@0 48
madcatzinc@4 49 function CyborgMMO_MiniMapButtonOnUpdate()
madcatzinc@0 50
madcatzinc@0 51 local xpos,ypos = GetCursorPosition()
madcatzinc@0 52 local xmin,ymin = Minimap:GetLeft(), Minimap:GetBottom()
madcatzinc@0 53
madcatzinc@0 54 xpos = (xmin)-(xpos / UIParent:GetScale())
madcatzinc@0 55 ypos = (ypos/ UIParent:GetScale())-(ymin)
madcatzinc@0 56
madcatzinc@13 57 local degrees = math.deg(math.atan2(ypos, xpos))
madcatzinc@0 58
madcatzinc@13 59 while degrees < 0 do
madcatzinc@13 60 degrees = degrees + 360
madcatzinc@0 61 end
madcatzinc@0 62
madcatzinc@4 63 CyborgMMO_MiniMapButtonReposition(degrees)
madcatzinc@0 64 end
madcatzinc@0 65
madcatzinc@4 66 function CyborgMMO_MouseModeChange(mode)
madcatzinc@4 67 local MiniMapTexture = getglobal("CyborgMMO_MiniMapFrameButton_Icon")
madcatzinc@4 68 local MiniMapGlowTexture = getglobal("CyborgMMO_MiniMapFrameButton_IconGlow")
madcatzinc@13 69 local OpenButtonTexture = getglobal("CyborgMMO_OpenButtonPage".."OpenMainForm"):GetNormalTexture()
madcatzinc@13 70 local OpenButtonGlowTexture = getglobal("CyborgMMO_OpenButtonPage".."OpenMainForm"):GetHighlightTexture()
madcatzinc@13 71 if mode == 1 then
madcatzinc@0 72 MiniMapTexture:SetVertexColor(1,0,0,1)
madcatzinc@31 73 MiniMapGlowTexture:SetVertexColor(1,0.26,0.26,.75)
madcatzinc@13 74 OpenButtonTexture:SetVertexColor(1,0,0,0.75)
madcatzinc@31 75 OpenButtonGlowTexture:SetVertexColor(1,0.26,0.26,0.50)
madcatzinc@13 76 elseif mode == 2 then
madcatzinc@0 77 MiniMapTexture:SetVertexColor(0.07,0.22,1,1)
madcatzinc@13 78 MiniMapGlowTexture:SetVertexColor(0.13,0.56,1,.75)
madcatzinc@13 79 OpenButtonTexture:SetVertexColor(0.07,0.22,1,0.75)
madcatzinc@13 80 OpenButtonGlowTexture:SetVertexColor(0.13,0.56,1,0.5)
madcatzinc@13 81 elseif mode == 3 then
madcatzinc@0 82 MiniMapTexture:SetVertexColor(0.52,0.08,0.89,1)
madcatzinc@13 83 MiniMapGlowTexture:SetVertexColor(0.67,0.31,0.85,.75)
madcatzinc@13 84 OpenButtonTexture:SetVertexColor(0.52,0.08,0.89,0.75)
madcatzinc@13 85 OpenButtonGlowTexture:SetVertexColor(0.67,0.31,0.85,0.5)
madcatzinc@0 86 end
madcatzinc@0 87 end
madcatzinc@0 88
madcatzinc@4 89 function CyborgMMO_GetSaveData()
madcatzinc@32 90 assert(VarsLoaded)
madcatzinc@32 91 if not CyborgMMO7SaveData then
madcatzinc@32 92 CyborgMMO7SaveData = {}
madcatzinc@0 93 end
madcatzinc@34 94 return CyborgMMO7SaveData
madcatzinc@0 95 end
madcatzinc@0 96
madcatzinc@34 97 function CyborgMMO_SetRatSaveData(data)
madcatzinc@32 98 assert(VarsLoaded)
madcatzinc@34 99 local saveData = {}
madcatzinc@36 100 for mode=1,RAT7.MODES do
madcatzinc@34 101 saveData[mode] = {}
madcatzinc@36 102 for button=1,RAT7.BUTTONS do
madcatzinc@34 103 if data[mode][button] then
madcatzinc@34 104 saveData[mode][button] = data[mode][button]:SaveData()
madcatzinc@34 105 end
madcatzinc@34 106 end
madcatzinc@34 107 end
madcatzinc@34 108 CyborgMMO_GetSaveData().Rat = saveData
madcatzinc@0 109 end
madcatzinc@0 110
madcatzinc@35 111 local function GetSpellID(name)
madcatzinc@35 112 local link = GetSpellLink(name)
madcatzinc@35 113 if link then
madcatzinc@35 114 local id = link:match('spell:(%d+)|')
madcatzinc@35 115 if id then
madcatzinc@35 116 return tonumber(id)
madcatzinc@35 117 end
madcatzinc@35 118 end
madcatzinc@35 119 end
madcatzinc@35 120
madcatzinc@35 121 local function ConvertOldRatData(oldData)
madcatzinc@35 122 local newData = {}
madcatzinc@35 123 for mode,modeData in ipairs(oldData) do
madcatzinc@35 124 newData[mode] = {}
madcatzinc@35 125 for button,buttonData in ipairs(modeData) do
madcatzinc@35 126 CyborgMMO_DPrint("converting mode:", mode, "button:", button)
madcatzinc@35 127 local type = buttonData.Type
madcatzinc@35 128 if type=='item' then
madcatzinc@35 129 -- not possible, the WowObject 'Type' field was overwritten by the item type
madcatzinc@35 130 elseif type=='macro' then
madcatzinc@35 131 local name = buttonData.Name
madcatzinc@35 132 newData[mode][button] = {
madcatzinc@35 133 type = type,
madcatzinc@35 134 detail = name,
madcatzinc@35 135 }
madcatzinc@35 136 elseif type=='spell' then
madcatzinc@35 137 local id = GetSpellID(buttonData.Name)
madcatzinc@35 138 CyborgMMO_DPrint("converting spell:", buttonData.Name, id)
madcatzinc@35 139 if id then
madcatzinc@35 140 newData[mode][button] = {
madcatzinc@35 141 type = type,
madcatzinc@35 142 detail = id,
madcatzinc@35 143 }
madcatzinc@35 144 end
madcatzinc@35 145 elseif type=='petaction' then
madcatzinc@35 146 -- no longer supported
madcatzinc@35 147 elseif type=='merchant' then
madcatzinc@35 148 -- no longer supported
madcatzinc@35 149 elseif type=='companion' then
madcatzinc@35 150 local id = GetSpellID(buttonData.Name)
madcatzinc@35 151 CyborgMMO_DPrint("converting companion:", buttonData.Name, id)
madcatzinc@35 152 if id then
madcatzinc@35 153 newData[mode][button] = {
madcatzinc@35 154 type = type,
madcatzinc@35 155 detail = buttonData.Subdetail,
madcatzinc@35 156 subdetail = id,
madcatzinc@35 157 }
madcatzinc@35 158 end
madcatzinc@35 159 elseif type=='equipmentset' then
madcatzinc@35 160 CyborgMMO_DPrint("converting equipment set:", buttonData.Detail)
madcatzinc@35 161 newData[mode][button] = {
madcatzinc@35 162 type = type,
madcatzinc@35 163 detail = buttonData.Detail,
madcatzinc@35 164 }
madcatzinc@35 165 elseif type=='callback' then
madcatzinc@35 166 CyborgMMO_DPrint("converting callback:", buttonData.Detail)
madcatzinc@35 167 newData[mode][button] = {
madcatzinc@35 168 type = type,
madcatzinc@35 169 detail = buttonData.Detail,
madcatzinc@35 170 }
madcatzinc@35 171 elseif type then
madcatzinc@35 172 -- maybe it's an item type
madcatzinc@35 173 local id = buttonData.Detail
madcatzinc@35 174 local class = select(6, GetItemInfo(id)) -- :NOTE: this may fail if the item is not yet in the cache
madcatzinc@35 175 if class == type then
madcatzinc@35 176 CyborgMMO_DPrint("converting item:", id, type, class)
madcatzinc@35 177 newData[mode][button] = {
madcatzinc@35 178 type = "item",
madcatzinc@35 179 detail = id,
madcatzinc@35 180 }
madcatzinc@35 181 end
madcatzinc@35 182 else
madcatzinc@35 183 CyborgMMO_DPrint("cannot convert:", type)
madcatzinc@35 184 end
madcatzinc@35 185 end
madcatzinc@35 186 end
madcatzinc@35 187 return newData
madcatzinc@35 188 end
madcatzinc@35 189
madcatzinc@4 190 function CyborgMMO_Event(self, event, ...)
madcatzinc@13 191 if event == "VARIABLES_LOADED" then
madcatzinc@20 192 VarsLoaded = true
madcatzinc@37 193 -- create root table if necessary
madcatzinc@37 194 if not CyborgMMO7SaveData then
madcatzinc@37 195 CyborgMMO7SaveData = {}
madcatzinc@37 196 end
madcatzinc@35 197 -- convert old profile
madcatzinc@35 198 if CyborgMMO7SaveData[SaveName] and not CyborgMMO7SaveData.Settings then
madcatzinc@35 199 local oldData = CyborgMMO7SaveData[SaveName]
madcatzinc@35 200 CyborgMMO7SaveData = {}
madcatzinc@35 201 CyborgMMO7SaveData.Settings = oldData.Settings
madcatzinc@35 202 CyborgMMO7SaveData.Rat = ConvertOldRatData(oldData.Rat)
madcatzinc@35 203 CyborgMMO7SaveData[SaveName] = oldData -- for now keep the data, we may have missed something in the conversion
madcatzinc@35 204 end
madcatzinc@13 205 elseif event == "PLAYER_ENTERING_WORLD" then
madcatzinc@20 206 EnteredWorld = true
madcatzinc@19 207 elseif event == "PLAYER_REGEN_DISABLED" then
madcatzinc@13 208 CyborgMMO_Close()
madcatzinc@0 209 else
madcatzinc@15 210 CyborgMMO_DPrint("Event is "..tostring(event))
madcatzinc@13 211 end
madcatzinc@0 212
madcatzinc@0 213 -- Fire Loading if and only if the player is in the world and vars are loaded
madcatzinc@20 214 if not BindingsLoaded and VarsLoaded and EnteredWorld then
madcatzinc@20 215 local data = CyborgMMO_GetSaveData()
madcatzinc@0 216
madcatzinc@20 217 CyborgMMO_RatPageModel:LoadData()
madcatzinc@20 218 BindingsLoaded = true
madcatzinc@0 219
madcatzinc@20 220 CyborgMMO_SetupModeCallbacks(1)
madcatzinc@20 221 CyborgMMO_SetupModeCallbacks(2)
madcatzinc@20 222 CyborgMMO_SetupModeCallbacks(3)
madcatzinc@0 223
madcatzinc@21 224 Settings = data.Settings
madcatzinc@21 225 if not Settings then
madcatzinc@21 226 Settings = {}
madcatzinc@21 227 Settings.Cyborg = 0.75
madcatzinc@21 228 Settings.Plugin = 0.75
madcatzinc@21 229 Settings.MiniMapButton = true
madcatzinc@21 230 Settings.CyborgButton = true
madcatzinc@21 231 data.Settings = Settings
madcatzinc@21 232 end
madcatzinc@21 233 SettingsLoaded = true
madcatzinc@0 234
madcatzinc@21 235 -- Reload Slider values:
madcatzinc@21 236 CyborgMMO_SetOpenButtonSize(Settings.Cyborg)
madcatzinc@21 237 CyborgMMO_SetMainPageSize(Settings.Plugin)
madcatzinc@0 238
madcatzinc@21 239 CyborgMMO_SetMiniMapButton(Settings.MiniMapButton)
madcatzinc@21 240 CyborgMMO_SetCyborgHeadButton(Settings.CyborgButton)
madcatzinc@0 241
madcatzinc@20 242 local xmin,ymin = Minimap:GetLeft(),Minimap:GetBottom()
madcatzinc@20 243 CyborgMMO_MiniMapButtonReposition(math.deg(math.atan2(ymin, xmin)))
madcatzinc@20 244 -- Close the main window for now
madcatzinc@20 245 CyborgMMO_Close()
madcatzinc@0 246 end
madcatzinc@0 247 end
madcatzinc@0 248
madcatzinc@4 249 function CyborgMMO_SetDefaultSettings()
madcatzinc@13 250 CyborgMMO_OpenButtonPageOpenMainForm:ClearAllPoints()
madcatzinc@13 251 CyborgMMO_MainPage:ClearAllPoints()
madcatzinc@13 252 CyborgMMO_OpenButtonPageOpenMainForm:SetPoint("LEFT", UIParent, "LEFT", 0, 0)
madcatzinc@13 253 CyborgMMO_MainPage:SetPoint("LEFT", UIParent, "LEFT", 0, 0)
madcatzinc@0 254
madcatzinc@13 255 CyborgMMO_SetOpenButtonSize(0.75)
madcatzinc@13 256 CyborgMMO_SetMainPageSize(0.75)
madcatzinc@13 257 CyborgMMO_SetMiniMapButton(true)
madcatzinc@13 258 CyborgMMO_SetCyborgHeadButton(true)
madcatzinc@0 259 end
madcatzinc@0 260
madcatzinc@0 261
madcatzinc@4 262 function CyborgMMO_SetupModeCallbacks(modeNum)
madcatzinc@23 263 local fn = function()
madcatzinc@13 264 CyborgMMO_MouseModeChange(modeNum)
madcatzinc@18 265 CyborgMMO_RatPageModel:SetMode(modeNum)
madcatzinc@0 266 end
madcatzinc@0 267
madcatzinc@23 268 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(fn)
madcatzinc@16 269 SetOverrideBindingClick(parentFrame, true, CyborgMMO_Mode[modeNum], name, "LeftButton")
madcatzinc@0 270 end
madcatzinc@0 271
madcatzinc@4 272 function CyborgMMO_Loaded()
madcatzinc@13 273 CyborgMMO_MainPage:RegisterEvent("VARIABLES_LOADED")
madcatzinc@13 274 CyborgMMO_MainPage:RegisterEvent("PLAYER_ENTERING_WORLD")
madcatzinc@19 275 CyborgMMO_MainPage:RegisterEvent("PLAYER_REGEN_DISABLED")
madcatzinc@0 276 end
madcatzinc@0 277
madcatzinc@4 278 function CyborgMMO_Close()
madcatzinc@13 279 CyborgMMO_MainPage:Hide()
madcatzinc@0 280 end
madcatzinc@0 281
madcatzinc@4 282 function CyborgMMO_Open()
madcatzinc@13 283 CyborgMMO_MainPage:Show()
madcatzinc@13 284 CyborgMMO_RatQuickPage:Hide()
madcatzinc@0 285 end
madcatzinc@0 286
madcatzinc@4 287 function CyborgMMO_IsOpen()
madcatzinc@13 288 if CyborgMMO_MainPage:IsVisible() == 1 then
madcatzinc@13 289 return true
madcatzinc@0 290 else
madcatzinc@13 291 return false
madcatzinc@0 292 end
madcatzinc@0 293 end
madcatzinc@0 294
madcatzinc@4 295 function CyborgMMO_Toggle()
madcatzinc@13 296 if CyborgMMO_IsOpen() then
madcatzinc@13 297 CyborgMMO_Close()
madcatzinc@0 298 else
madcatzinc@13 299 CyborgMMO_Open()
madcatzinc@0 300 end
madcatzinc@0 301 end
madcatzinc@0 302
madcatzinc@15 303 function CyborgMMO_GetDebugFrame()
madcatzinc@15 304 for i=1,NUM_CHAT_WINDOWS do
madcatzinc@15 305 local windowName = GetChatWindowInfo(i);
madcatzinc@15 306 if windowName == "Debug" then
madcatzinc@15 307 return getglobal("ChatFrame" .. i)
madcatzinc@15 308 end
madcatzinc@15 309 end
madcatzinc@15 310 end
madcatzinc@15 311
madcatzinc@15 312 local log_prefix = "|cffff6666".."CyborgMMO".."|r:"
madcatzinc@15 313
madcatzinc@15 314 function CyborgMMO_DPrint(...)
madcatzinc@15 315 local debugframe = CyborgMMO_GetDebugFrame()
madcatzinc@15 316 if debugframe then
madcatzinc@15 317 local t = {log_prefix, ...}
madcatzinc@15 318 for i=1,select('#', ...)+1 do
madcatzinc@15 319 t[i] = tostring(t[i])
madcatzinc@15 320 end
madcatzinc@15 321 debugframe:AddMessage(table.concat(t, ' '))
madcatzinc@15 322 end
madcatzinc@0 323 end
madcatzinc@0 324
madcatzinc@4 325 function CyborgMMO_SetMainPageSize(percent)
madcatzinc@21 326 CyborgMMO_MainPage:SetScale(percent)
madcatzinc@21 327 CyborgMMO_OptionPagePluginSizeSlider:SetValue(percent)
madcatzinc@21 328 if BindingsLoaded then
madcatzinc@21 329 Settings.Plugin = percent
madcatzinc@0 330 end
madcatzinc@0 331 end
madcatzinc@0 332
madcatzinc@4 333 function CyborgMMO_SetOpenButtonSize(percent)
madcatzinc@21 334 CyborgMMO_OpenButtonPage:SetScale(percent)
madcatzinc@21 335 CyborgMMO_OptionPageCyborgSizeSlider:SetValue(percent)
madcatzinc@21 336 if SettingsLoaded then
madcatzinc@21 337 Settings.Cyborg = percent
madcatzinc@0 338 end
madcatzinc@0 339 end
madcatzinc@0 340
madcatzinc@21 341 function CyborgMMO_SetCyborgHeadButton(visible)
madcatzinc@21 342 if visible then
madcatzinc@21 343 CyborgMMO_OpenButtonPage:Show()
madcatzinc@0 344 else
madcatzinc@13 345 CyborgMMO_OpenButtonPage:Hide()
madcatzinc@0 346 end
madcatzinc@21 347 CyborgMMO_OptionPageCyborgButton:SetChecked(visible)
madcatzinc@21 348 if SettingsLoaded then
madcatzinc@21 349 Settings.CyborgButton = visible
madcatzinc@21 350 end
madcatzinc@0 351 end
madcatzinc@0 352
madcatzinc@21 353 function CyborgMMO_SetMiniMapButton(visible)
madcatzinc@21 354 if visible then
madcatzinc@4 355 CyborgMMO_MiniMapFrameButton:Show()
madcatzinc@0 356 else
madcatzinc@4 357 CyborgMMO_MiniMapFrameButton:Hide()
madcatzinc@0 358 end
madcatzinc@21 359 CyborgMMO_OptionPageMiniMapButton:SetChecked(visible)
madcatzinc@21 360 if SettingsLoaded then
madcatzinc@21 361 Settings.MiniMapButton = visible
madcatzinc@21 362 end
madcatzinc@0 363 end
madcatzinc@0 364