annotate CyborgMMO7.lua @ 34:6ce173840e68

Reworked the whole "wow object" system: - Only save what is strictly necessary. - Save appropriate persistent information for all objects (like spellIDs instead of spellBook+spellIndex). - Fixed Battle Pets objects (non-combat pets in pre-MoP). - Fixed item objects. - Cleaned and simplified most objects implementation. - Moved the settings and button profile to the root of the saved data, rather than in a per-character sub-table (that data is already tagged as saved per character). This should fix most issues with objects changing without user interaction on diverse occasions. Old profiles are not converted to the new system. This will come soon. Some issues persist due to the asynchronous loading of some informations: - Pet icons are never properly loaded from saved data. - Items are not properly loaded the first time the UI is started (a "/reload ui" or disconnect/connect cycle fixes this problem).
author madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09
date Thu, 25 Apr 2013 01:31:31 +0000
parents fc5f52d60d16
children 16b2ff47b6db
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@4 21 function CyborgMMO_LoadStrings(self)
madcatzinc@15 22 -- CyborgMMO_DPrint("LoadStrings("..self:GetName()..") = "..CyborgMMO_StringTable[self:GetName()])
madcatzinc@13 23 self:SetText(CyborgMMO_StringTable[self:GetName()])
madcatzinc@0 24 end
madcatzinc@0 25
madcatzinc@20 26 local VarsLoaded = false
madcatzinc@20 27 local EnteredWorld = false
madcatzinc@20 28 local BindingsLoaded = false
madcatzinc@21 29 local SettingsLoaded = false
madcatzinc@20 30 local SaveName = GetRealmName().."_"..UnitName("player")
madcatzinc@21 31 local Settings = nil
madcatzinc@0 32
madcatzinc@0 33
madcatzinc@4 34 function CyborgMMO_MiniMapButtonReposition(pos)
madcatzinc@4 35 CyborgMMO_MiniMapFrame:SetPoint("TOPLEFT",
madcatzinc@0 36 "Minimap",
madcatzinc@0 37 "TOPLEFT",
madcatzinc@13 38 52 - (80 * cos(pos)),
madcatzinc@13 39 (80 * sin(pos)) - 52)
madcatzinc@0 40 end
madcatzinc@0 41
madcatzinc@0 42
madcatzinc@4 43 function CyborgMMO_MiniMapButtonOnUpdate()
madcatzinc@0 44
madcatzinc@0 45 local xpos,ypos = GetCursorPosition()
madcatzinc@0 46 local xmin,ymin = Minimap:GetLeft(), Minimap:GetBottom()
madcatzinc@0 47
madcatzinc@0 48 xpos = (xmin)-(xpos / UIParent:GetScale())
madcatzinc@0 49 ypos = (ypos/ UIParent:GetScale())-(ymin)
madcatzinc@0 50
madcatzinc@13 51 local degrees = math.deg(math.atan2(ypos, xpos))
madcatzinc@0 52
madcatzinc@13 53 while degrees < 0 do
madcatzinc@13 54 degrees = degrees + 360
madcatzinc@0 55 end
madcatzinc@0 56
madcatzinc@4 57 CyborgMMO_MiniMapButtonReposition(degrees)
madcatzinc@0 58 end
madcatzinc@0 59
madcatzinc@4 60 function CyborgMMO_MouseModeChange(mode)
madcatzinc@4 61 local MiniMapTexture = getglobal("CyborgMMO_MiniMapFrameButton_Icon")
madcatzinc@4 62 local MiniMapGlowTexture = getglobal("CyborgMMO_MiniMapFrameButton_IconGlow")
madcatzinc@13 63 local OpenButtonTexture = getglobal("CyborgMMO_OpenButtonPage".."OpenMainForm"):GetNormalTexture()
madcatzinc@13 64 local OpenButtonGlowTexture = getglobal("CyborgMMO_OpenButtonPage".."OpenMainForm"):GetHighlightTexture()
madcatzinc@13 65 if mode == 1 then
madcatzinc@0 66 MiniMapTexture:SetVertexColor(1,0,0,1)
madcatzinc@31 67 MiniMapGlowTexture:SetVertexColor(1,0.26,0.26,.75)
madcatzinc@13 68 OpenButtonTexture:SetVertexColor(1,0,0,0.75)
madcatzinc@31 69 OpenButtonGlowTexture:SetVertexColor(1,0.26,0.26,0.50)
madcatzinc@13 70 elseif mode == 2 then
madcatzinc@0 71 MiniMapTexture:SetVertexColor(0.07,0.22,1,1)
madcatzinc@13 72 MiniMapGlowTexture:SetVertexColor(0.13,0.56,1,.75)
madcatzinc@13 73 OpenButtonTexture:SetVertexColor(0.07,0.22,1,0.75)
madcatzinc@13 74 OpenButtonGlowTexture:SetVertexColor(0.13,0.56,1,0.5)
madcatzinc@13 75 elseif mode == 3 then
madcatzinc@0 76 MiniMapTexture:SetVertexColor(0.52,0.08,0.89,1)
madcatzinc@13 77 MiniMapGlowTexture:SetVertexColor(0.67,0.31,0.85,.75)
madcatzinc@13 78 OpenButtonTexture:SetVertexColor(0.52,0.08,0.89,0.75)
madcatzinc@13 79 OpenButtonGlowTexture:SetVertexColor(0.67,0.31,0.85,0.5)
madcatzinc@0 80 end
madcatzinc@0 81 end
madcatzinc@0 82
madcatzinc@4 83 function CyborgMMO_GetSaveData()
madcatzinc@32 84 assert(VarsLoaded)
madcatzinc@32 85 if not CyborgMMO7SaveData then
madcatzinc@32 86 CyborgMMO7SaveData = {}
madcatzinc@0 87 end
madcatzinc@34 88 return CyborgMMO7SaveData
madcatzinc@0 89 end
madcatzinc@0 90
madcatzinc@34 91 function CyborgMMO_SetRatSaveData(data)
madcatzinc@32 92 assert(VarsLoaded)
madcatzinc@34 93 local saveData = {}
madcatzinc@34 94 for mode=1,#data do
madcatzinc@34 95 saveData[mode] = {}
madcatzinc@34 96 for button=1,#data[mode] do
madcatzinc@34 97 if data[mode][button] then
madcatzinc@34 98 saveData[mode][button] = data[mode][button]:SaveData()
madcatzinc@34 99 end
madcatzinc@34 100 end
madcatzinc@34 101 end
madcatzinc@34 102 CyborgMMO_GetSaveData().Rat = saveData
madcatzinc@0 103 end
madcatzinc@0 104
madcatzinc@4 105 function CyborgMMO_Event(self, event, ...)
madcatzinc@13 106 if event == "VARIABLES_LOADED" then
madcatzinc@20 107 VarsLoaded = true
madcatzinc@13 108 elseif event == "PLAYER_ENTERING_WORLD" then
madcatzinc@20 109 EnteredWorld = true
madcatzinc@19 110 elseif event == "PLAYER_REGEN_DISABLED" then
madcatzinc@13 111 CyborgMMO_Close()
madcatzinc@0 112 else
madcatzinc@15 113 CyborgMMO_DPrint("Event is "..tostring(event))
madcatzinc@13 114 end
madcatzinc@0 115
madcatzinc@0 116 -- Fire Loading if and only if the player is in the world and vars are loaded
madcatzinc@20 117 if not BindingsLoaded and VarsLoaded and EnteredWorld then
madcatzinc@20 118 local data = CyborgMMO_GetSaveData()
madcatzinc@0 119
madcatzinc@20 120 CyborgMMO_RatPageModel:LoadData()
madcatzinc@20 121 BindingsLoaded = true
madcatzinc@0 122
madcatzinc@20 123 CyborgMMO_SetupModeCallbacks(1)
madcatzinc@20 124 CyborgMMO_SetupModeCallbacks(2)
madcatzinc@20 125 CyborgMMO_SetupModeCallbacks(3)
madcatzinc@0 126
madcatzinc@21 127 Settings = data.Settings
madcatzinc@21 128 if not Settings then
madcatzinc@21 129 Settings = {}
madcatzinc@21 130 Settings.Cyborg = 0.75
madcatzinc@21 131 Settings.Plugin = 0.75
madcatzinc@21 132 Settings.MiniMapButton = true
madcatzinc@21 133 Settings.CyborgButton = true
madcatzinc@21 134 data.Settings = Settings
madcatzinc@21 135 end
madcatzinc@21 136 SettingsLoaded = true
madcatzinc@0 137
madcatzinc@21 138 -- Reload Slider values:
madcatzinc@21 139 CyborgMMO_SetOpenButtonSize(Settings.Cyborg)
madcatzinc@21 140 CyborgMMO_SetMainPageSize(Settings.Plugin)
madcatzinc@0 141
madcatzinc@21 142 CyborgMMO_SetMiniMapButton(Settings.MiniMapButton)
madcatzinc@21 143 CyborgMMO_SetCyborgHeadButton(Settings.CyborgButton)
madcatzinc@0 144
madcatzinc@20 145 local xmin,ymin = Minimap:GetLeft(),Minimap:GetBottom()
madcatzinc@20 146 CyborgMMO_MiniMapButtonReposition(math.deg(math.atan2(ymin, xmin)))
madcatzinc@20 147 -- Close the main window for now
madcatzinc@20 148 CyborgMMO_Close()
madcatzinc@0 149 end
madcatzinc@0 150 end
madcatzinc@0 151
madcatzinc@4 152 function CyborgMMO_SetDefaultSettings()
madcatzinc@13 153 CyborgMMO_OpenButtonPageOpenMainForm:ClearAllPoints()
madcatzinc@13 154 CyborgMMO_MainPage:ClearAllPoints()
madcatzinc@13 155 CyborgMMO_OpenButtonPageOpenMainForm:SetPoint("LEFT", UIParent, "LEFT", 0, 0)
madcatzinc@13 156 CyborgMMO_MainPage:SetPoint("LEFT", UIParent, "LEFT", 0, 0)
madcatzinc@0 157
madcatzinc@13 158 CyborgMMO_SetOpenButtonSize(0.75)
madcatzinc@13 159 CyborgMMO_SetMainPageSize(0.75)
madcatzinc@13 160 CyborgMMO_SetMiniMapButton(true)
madcatzinc@13 161 CyborgMMO_SetCyborgHeadButton(true)
madcatzinc@0 162 end
madcatzinc@0 163
madcatzinc@0 164
madcatzinc@4 165 function CyborgMMO_SetupModeCallbacks(modeNum)
madcatzinc@23 166 local fn = function()
madcatzinc@13 167 CyborgMMO_MouseModeChange(modeNum)
madcatzinc@18 168 CyborgMMO_RatPageModel:SetMode(modeNum)
madcatzinc@0 169 end
madcatzinc@0 170
madcatzinc@23 171 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(fn)
madcatzinc@16 172 SetOverrideBindingClick(parentFrame, true, CyborgMMO_Mode[modeNum], name, "LeftButton")
madcatzinc@0 173 end
madcatzinc@0 174
madcatzinc@4 175 function CyborgMMO_Loaded()
madcatzinc@13 176 CyborgMMO_MainPage:RegisterEvent("VARIABLES_LOADED")
madcatzinc@13 177 CyborgMMO_MainPage:RegisterEvent("PLAYER_ENTERING_WORLD")
madcatzinc@19 178 CyborgMMO_MainPage:RegisterEvent("PLAYER_REGEN_DISABLED")
madcatzinc@0 179 end
madcatzinc@0 180
madcatzinc@4 181 function CyborgMMO_Close()
madcatzinc@13 182 CyborgMMO_MainPage:Hide()
madcatzinc@0 183 end
madcatzinc@0 184
madcatzinc@4 185 function CyborgMMO_Open()
madcatzinc@13 186 CyborgMMO_MainPage:Show()
madcatzinc@13 187 CyborgMMO_RatQuickPage:Hide()
madcatzinc@0 188 end
madcatzinc@0 189
madcatzinc@4 190 function CyborgMMO_IsOpen()
madcatzinc@13 191 if CyborgMMO_MainPage:IsVisible() == 1 then
madcatzinc@13 192 return true
madcatzinc@0 193 else
madcatzinc@13 194 return false
madcatzinc@0 195 end
madcatzinc@0 196 end
madcatzinc@0 197
madcatzinc@4 198 function CyborgMMO_Toggle()
madcatzinc@13 199 if CyborgMMO_IsOpen() then
madcatzinc@13 200 CyborgMMO_Close()
madcatzinc@0 201 else
madcatzinc@13 202 CyborgMMO_Open()
madcatzinc@0 203 end
madcatzinc@0 204 end
madcatzinc@0 205
madcatzinc@15 206 function CyborgMMO_GetDebugFrame()
madcatzinc@15 207 for i=1,NUM_CHAT_WINDOWS do
madcatzinc@15 208 local windowName = GetChatWindowInfo(i);
madcatzinc@15 209 if windowName == "Debug" then
madcatzinc@15 210 return getglobal("ChatFrame" .. i)
madcatzinc@15 211 end
madcatzinc@15 212 end
madcatzinc@15 213 end
madcatzinc@15 214
madcatzinc@15 215 local log_prefix = "|cffff6666".."CyborgMMO".."|r:"
madcatzinc@15 216
madcatzinc@15 217 function CyborgMMO_DPrint(...)
madcatzinc@15 218 local debugframe = CyborgMMO_GetDebugFrame()
madcatzinc@15 219 if debugframe then
madcatzinc@15 220 local t = {log_prefix, ...}
madcatzinc@15 221 for i=1,select('#', ...)+1 do
madcatzinc@15 222 t[i] = tostring(t[i])
madcatzinc@15 223 end
madcatzinc@15 224 debugframe:AddMessage(table.concat(t, ' '))
madcatzinc@15 225 end
madcatzinc@0 226 end
madcatzinc@0 227
madcatzinc@4 228 function CyborgMMO_SetMainPageSize(percent)
madcatzinc@21 229 CyborgMMO_MainPage:SetScale(percent)
madcatzinc@21 230 CyborgMMO_OptionPagePluginSizeSlider:SetValue(percent)
madcatzinc@21 231 if BindingsLoaded then
madcatzinc@21 232 Settings.Plugin = percent
madcatzinc@0 233 end
madcatzinc@0 234 end
madcatzinc@0 235
madcatzinc@4 236 function CyborgMMO_SetOpenButtonSize(percent)
madcatzinc@21 237 CyborgMMO_OpenButtonPage:SetScale(percent)
madcatzinc@21 238 CyborgMMO_OptionPageCyborgSizeSlider:SetValue(percent)
madcatzinc@21 239 if SettingsLoaded then
madcatzinc@21 240 Settings.Cyborg = percent
madcatzinc@0 241 end
madcatzinc@0 242 end
madcatzinc@0 243
madcatzinc@21 244 function CyborgMMO_SetCyborgHeadButton(visible)
madcatzinc@21 245 if visible then
madcatzinc@21 246 CyborgMMO_OpenButtonPage:Show()
madcatzinc@0 247 else
madcatzinc@13 248 CyborgMMO_OpenButtonPage:Hide()
madcatzinc@0 249 end
madcatzinc@21 250 CyborgMMO_OptionPageCyborgButton:SetChecked(visible)
madcatzinc@21 251 if SettingsLoaded then
madcatzinc@21 252 Settings.CyborgButton = visible
madcatzinc@21 253 end
madcatzinc@0 254 end
madcatzinc@0 255
madcatzinc@21 256 function CyborgMMO_SetMiniMapButton(visible)
madcatzinc@21 257 if visible then
madcatzinc@4 258 CyborgMMO_MiniMapFrameButton:Show()
madcatzinc@0 259 else
madcatzinc@4 260 CyborgMMO_MiniMapFrameButton:Hide()
madcatzinc@0 261 end
madcatzinc@21 262 CyborgMMO_OptionPageMiniMapButton:SetChecked(visible)
madcatzinc@21 263 if SettingsLoaded then
madcatzinc@21 264 Settings.MiniMapButton = visible
madcatzinc@21 265 end
madcatzinc@0 266 end
madcatzinc@0 267