annotate Hansgar_And_Franzok_Assist.lua @ 4:1c3534391efb

- Added timeout for stampers.
author Tercio
date Mon, 02 Mar 2015 21:28:33 -0300
parents 23e19ba2b62c
children 789bf9e40966
rev   line source
Tercio@0 1 local floor = floor
Tercio@0 2 local min = min
Tercio@0 3 local UnitExists = UnitExists
Tercio@0 4 local GetPlayerMapPosition = GetPlayerMapPosition
Tercio@0 5 local UnitHealth = UnitHealth
Tercio@4 6 local GetNumGroupMembers = GetNumGroupMembers
Tercio@4 7 local abs = abs
Tercio@0 8
Tercio@0 9 local f = CreateFrame ("frame", "Hansgar_And_Franzok_Assist", UIParent)
Tercio@0 10 f:SetFrameStrata ("DIALOG")
Tercio@0 11
Tercio@4 12 local tframe = CreateFrame ("frame", "Hansgar_And_Franzok_Assist_PTrack", UIParent)
Tercio@4 13
Tercio@0 14 f:SetSize (155, 156)
Tercio@0 15 f:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = -1, right = -1, top = -1, bottom = -1},
Tercio@0 16 edgeFile = "Interface\\AddOns\\Hansgar_And_Franzok_Assist\\border_2", edgeSize = 8})
Tercio@0 17 f:SetPoint ("center", UIParent, "center")
Tercio@0 18 f:SetBackdropColor (0, 0, 0, 0)
Tercio@0 19 f:SetBackdropBorderColor (0, 0, 0, 1)
Tercio@0 20 f:SetMovable (true)
Tercio@0 21 f:EnableMouse (true)
Tercio@0 22 f:Hide()
Tercio@0 23
Tercio@0 24 local title = f:CreateFontString (nil, "overlay", "GameFontNormal")
Tercio@0 25 title:SetText ("Hansgar & Franzok Assist")
Tercio@0 26 title:SetPoint ("center", f, "center")
Tercio@0 27 title:SetPoint ("bottom", f, "top", 0, 2)
Tercio@0 28
Tercio@0 29 --
Tercio@0 30 local frame_event = CreateFrame ("frame", "Hansgar_And_Franzok_AssistEvents", f)
Tercio@0 31 frame_event:RegisterEvent ("ENCOUNTER_START")
Tercio@0 32 frame_event:RegisterEvent ("ENCOUNTER_END")
Tercio@0 33 frame_event:RegisterEvent ("ADDON_LOADED")
Tercio@0 34
Tercio@0 35 --
Tercio@0 36 local player_bar = CreateFrame ("statusbar", "Hansgar_And_Franzok_AssistPlayerBar", f)
Tercio@0 37 player_bar:SetPoint ("topleft", f, "bottomleft", 0, -3)
Tercio@0 38 player_bar:SetPoint ("topright", f, "bottomright", 0, -3)
Tercio@0 39 player_bar:SetHeight (14)
Tercio@0 40 player_bar:SetStatusBarColor (0, 0, 0, 0)
Tercio@0 41 player_bar:SetMinMaxValues (0, 100)
Tercio@0 42 player_bar:SetValue (0)
Tercio@0 43 f.player_bar = player_bar
Tercio@0 44
Tercio@0 45 player_bar.texture = player_bar:CreateTexture (nil, "overlay")
Tercio@0 46 player_bar.texture:SetTexture ("Interface\\AddOns\\Hansgar_And_Franzok_Assist\\bar_skyline")
Tercio@0 47 player_bar:SetStatusBarTexture (player_bar.texture)
Tercio@0 48
Tercio@0 49 --
Tercio@0 50
Tercio@4 51 local player_pos_frame = CreateFrame ("frame", "Hansgar_And_Franzok_Assist_DanceBar", UIParent)
Tercio@4 52 player_pos_frame:SetPoint ("topleft", player_bar, "bottomleft", 0, -3)
Tercio@4 53 player_pos_frame:SetPoint ("topright", player_bar, "bottomright", 0, -3)
Tercio@4 54 player_pos_frame:SetHeight (14)
Tercio@4 55 player_pos_frame:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = -1, right = -1, top = -1, bottom = -1},
Tercio@4 56 edgeFile = "Interface\\AddOns\\Hansgar_And_Franzok_Assist\\border_2", edgeSize = 8})
Tercio@4 57 player_pos_frame:SetBackdropColor (0, 0, 0, 1)
Tercio@4 58 player_pos_frame:Hide()
Tercio@4 59
Tercio@4 60 --red
Tercio@4 61 local t1 = player_pos_frame:CreateTexture (nil, "artwork")
Tercio@4 62 t1:SetPoint ("left", player_pos_frame, "left")
Tercio@4 63 t1:SetSize (player_pos_frame:GetWidth()*0.30, 14)
Tercio@4 64 t1:SetTexture (1, 1, 1)
Tercio@4 65 --t1:SetTexCoord (260/512, 430/512, 29/256, 82/256)
Tercio@4 66 t1:SetVertexColor (1, 0.2, 0.2, 0.4)
Tercio@4 67
Tercio@4 68 --green
Tercio@4 69 local t2 = player_pos_frame:CreateTexture (nil, "artwork")
Tercio@4 70 t2:SetPoint ("left", t1, "right")
Tercio@4 71 t2:SetSize (player_pos_frame:GetWidth()*0.15, 14)
Tercio@4 72 t2:SetTexture (0.2, 1, 0.2, 0.4)
Tercio@4 73
Tercio@4 74 --red
Tercio@4 75 local middle = player_pos_frame:CreateTexture (nil, "artwork")
Tercio@4 76 middle:SetPoint ("left", t2, "right")
Tercio@4 77 middle:SetSize (player_pos_frame:GetWidth()*0.10, 14)
Tercio@4 78 middle:SetTexture (1, 1, 1)
Tercio@4 79 --middle:SetTexCoord (260/512, 430/512, 29/256, 82/256)
Tercio@4 80 middle:SetVertexColor (1, 0.2, 0.2, 0.4)
Tercio@4 81
Tercio@4 82 --green
Tercio@4 83 local t3 = player_pos_frame:CreateTexture (nil, "artwork")
Tercio@4 84 t3:SetPoint ("left", middle, "right")
Tercio@4 85 t3:SetSize (player_pos_frame:GetWidth()*0.15, 14)
Tercio@4 86 t3:SetTexture (0.2, 1, 0.2, 0.4)
Tercio@4 87
Tercio@4 88 --red
Tercio@4 89 local t4 = player_pos_frame:CreateTexture (nil, "artwork")
Tercio@4 90 t4:SetPoint ("left", t3, "right")
Tercio@4 91 t4:SetSize (player_pos_frame:GetWidth()*0.30, 14)
Tercio@4 92 t4:SetTexture (1, 1, 1)
Tercio@4 93 --t4:SetTexCoord (260/512, 430/512, 29/256, 82/256)
Tercio@4 94 t4:SetVertexColor (1, 0.2, 0.2, 0.4)
Tercio@4 95
Tercio@4 96 local div = player_pos_frame:CreateTexture (nil, "overlay")
Tercio@4 97 div:SetPoint ("left", player_pos_frame, "left", 0, 0)
Tercio@4 98 div:SetTexture (1, 1, 1, 1)
Tercio@4 99 div:SetSize (1, 16)
Tercio@4 100 div:Hide()
Tercio@4 101 --
Tercio@4 102
Tercio@4 103 local AceTimer = LibStub:GetLibrary ("AceTimer-3.0")
Tercio@4 104 AceTimer:Embed (f)
Tercio@4 105 local AceComm = LibStub:GetLibrary ("AceComm-3.0")
Tercio@4 106 AceComm:Embed (f)
Tercio@4 107
Tercio@0 108 local db
Tercio@0 109
Tercio@4 110 f.block_tracker = {}
Tercio@4 111
Tercio@0 112 frame_event:SetFrameStrata ("FULLSCREEN")
Tercio@0 113
Tercio@0 114 frame_event:SetScript ("OnEvent", function (self, event, ...)
Tercio@0 115
Tercio@0 116 if (event == "ADDON_LOADED" and select (1, ...) == "Hansgar_And_Franzok_Assist") then
Tercio@0 117
Tercio@0 118 db = Hansgar_And_Franzok_DB
Tercio@0 119 if (not db) then
Tercio@0 120 db = {}
Tercio@0 121 Hansgar_And_Franzok_DB = db
Tercio@0 122 end
Tercio@4 123 --
Tercio@0 124 db.STAMPERS_DELAY = db.STAMPERS_DELAY or 5
Tercio@4 125 if (db.CD_NUMBER == nil) then
Tercio@4 126 db.CD_NUMBER = false
Tercio@4 127 end
Tercio@4 128 if (db.SHOW_DANCE == nil) then
Tercio@4 129 db.SHOW_DANCE = true
Tercio@4 130 end
Tercio@4 131 --
Tercio@0 132 SLASH_Hansgar_And_Franzok_Assist1, SLASH_Hansgar_And_Franzok_Assist2 = "/hansgar", "/franzok"
Tercio@0 133 function SlashCmdList.Hansgar_And_Franzok_Assist (msg, editbox)
Tercio@0 134
Tercio@0 135 local command, rest = msg:match ("^(%S*)%s*(.-)$")
Tercio@0 136
Tercio@0 137 if (command == "delay") then
Tercio@0 138 local t = tonumber (rest)
Tercio@0 139 if (t) then
Tercio@0 140 db.STAMPERS_DELAY = t
Tercio@0 141 print ("|cFFFFAA00Hansgar and Franzok Assist|r delay set to: ", t)
Tercio@0 142 else
Tercio@0 143 print ("|cFFFFAA00Hansgar and Franzok Assist|r invalid time.", t)
Tercio@0 144 end
Tercio@0 145
Tercio@0 146 elseif (command == "test" or command == "show") then
Tercio@0 147 if (f.StampersPhase) then
Tercio@4 148 f:EndTrackPlayerPosition()
Tercio@0 149 return f:StopTracking()
Tercio@0 150 end
Tercio@4 151
Tercio@0 152 f:StartTracking()
Tercio@4 153 f:StartTrackPlayerPosition()
Tercio@0 154
Tercio@0 155 elseif (command == "hide") then
Tercio@0 156 if (f.StampersPhase) then
Tercio@0 157 return f:StopTracking()
Tercio@0 158 end
Tercio@4 159 f:EndTrackPlayerPosition()
Tercio@0 160
Tercio@4 161 elseif (command == "dance") then
Tercio@4 162 db.SHOW_DANCE = not db.SHOW_DANCE
Tercio@4 163 if (db.SHOW_DANCE) then
Tercio@4 164 if (f.on_encounter) then
Tercio@4 165 f:StartTrackPlayerPosition()
Tercio@4 166 end
Tercio@4 167 print ("|cFFFFAA00Hansgar and Franzok Assist|r dance bars enabled.")
Tercio@4 168 else
Tercio@4 169 f:EndTrackPlayerPosition()
Tercio@4 170 print ("|cFFFFAA00Hansgar and Franzok Assist|r dance bars disabled.")
Tercio@4 171 end
Tercio@4 172
Tercio@4 173 elseif (command == "cooldown") then
Tercio@4 174 db.CD_NUMBER = not db.CD_NUMBER
Tercio@4 175 f:RefreshCooldownSettings()
Tercio@4 176
Tercio@0 177 else
Tercio@4 178 print ("|cFFFFAA00Hansgar and Franzok Assist|r |cFF00FF00v0.5|r Commands:")
Tercio@0 179 print ("|cFFFFFF00/hansgar delay <time>|r: time in seconds until the percentage goes from 0 to 100.")
Tercio@4 180 print ("|cFFFFFF00/hansgar cooldown|r: show the countdown for each stamper go back up to the ceiling.")
Tercio@4 181 --print ("|cFFFFFF00/hansgar dance|r: toggle dance bar (used to dodge regular stampers and searing plates).")
Tercio@0 182 print ("|cFFFFFF00/hansgar test|r: active the addon on test mode.")
Tercio@0 183 print ("|cFFFFFF00/hansgar show|r: show the window and start test mode.")
Tercio@0 184 print ("|cFFFFFF00/hansgar hide|r: hide the window.")
Tercio@0 185 end
Tercio@0 186 end
Tercio@0 187
Tercio@0 188 elseif (event == "ENCOUNTER_START" or event == "ENCOUNTER_END") then
Tercio@0 189
Tercio@0 190 local encounterID, encounterName, difficultyID, raidSize = select (1, ...)
Tercio@4 191
Tercio@4 192 if (encounterID == 1693) then
Tercio@4 193 if (event == "ENCOUNTER_START") then
Tercio@4 194 f.on_encounter = true
Tercio@4 195 elseif (event == "ENCOUNTER_END") then
Tercio@4 196 f.on_encounter = false
Tercio@4 197 end
Tercio@4 198 end
Tercio@4 199
Tercio@4 200 if (encounterID == 1693 and db.SHOW_DANCE) then
Tercio@4 201 if (event == "ENCOUNTER_START") then
Tercio@4 202 SetMapToCurrentZone()
Tercio@4 203 f:StartTrackPlayerPosition()
Tercio@4 204 elseif (event == "ENCOUNTER_END") then
Tercio@4 205 f:EndTrackPlayerPosition()
Tercio@4 206 end
Tercio@4 207 end
Tercio@4 208
Tercio@0 209 if (encounterID == 1693 and difficultyID == 16) then
Tercio@0 210
Tercio@0 211 if (event == "ENCOUNTER_START") then
Tercio@0 212
Tercio@0 213 print ("|cFFFFAA00Hansgar and Franzok Assist|r: addon enabled, good look!")
Tercio@0 214
Tercio@0 215 if (f.StampersPhase) then
Tercio@0 216 f:StopTracking()
Tercio@0 217 end
Tercio@0 218 f:RegisterEvent ("COMBAT_LOG_EVENT_UNFILTERED")
Tercio@0 219
Tercio@0 220 elseif (event == "ENCOUNTER_END") then
Tercio@0 221 f:UnregisterEvent ("COMBAT_LOG_EVENT_UNFILTERED")
Tercio@0 222
Tercio@0 223 if (f.StampersPhase) then
Tercio@0 224 f:StopTracking()
Tercio@0 225 end
Tercio@4 226
Tercio@4 227 f:EndTrackPlayerPosition()
Tercio@0 228 end
Tercio@0 229 end
Tercio@0 230 end
Tercio@0 231
Tercio@0 232 end)
Tercio@0 233
Tercio@0 234 --
Tercio@2 235 --f:RegisterEvent ("COMBAT_LOG_EVENT_UNFILTERED")
Tercio@0 236
Tercio@0 237 f:SetScript ("OnEvent", function (self, event, time, token, _, who_serial, who_name, who_flags, _, target_serial, target_name, target_flags, _, spellid, spellname, spellschool, buff_type, ...)
Tercio@0 238
Tercio@2 239 if (token == "SPELL_AURA_APPLIED" and spellid == 162124 and not f.StampersPhase) then
Tercio@0 240 f:StartTracking()
Tercio@0 241
Tercio@2 242 elseif (token == "SPELL_AURA_REMOVED" and spellid == 162124 and f.StampersPhase) then
Tercio@0 243 f:StopTracking()
Tercio@0 244
Tercio@0 245 end
Tercio@0 246
Tercio@0 247 end)
Tercio@0 248
Tercio@0 249 local frame_tracker = CreateFrame ("frame", "Hansgar_And_Franzok_AssistTracker", UIParent)
Tercio@0 250 local on_update_tracker = function (self, elapsed)
Tercio@0 251
Tercio@4 252 local raid_size = GetNumGroupMembers()
Tercio@4 253
Tercio@4 254 for i = 1, raid_size do
Tercio@0 255 local x, y = GetPlayerMapPosition ("raid"..i)
Tercio@0 256 if (UnitExists ("raid"..i) and UnitHealth ("raid"..i) > 1 and x and y) then
Tercio@0 257 local block = f:WhichBlock (x, y)
Tercio@0 258 if (block) then
Tercio@0 259 if (not f.block_tracker [block]) then --> was a clear block
Tercio@0 260 f.block_tracker [block] = GetTime()
Tercio@0 261 f:Paint (f.all_blocks [block])
Tercio@0 262 end
Tercio@0 263 end
Tercio@0 264 end
Tercio@0 265 end
Tercio@0 266
Tercio@0 267 local px, py = GetPlayerMapPosition ("player")
Tercio@0 268 local player_block = f:WhichBlock (px, py)
Tercio@4 269 if (player_block and raid_size > 0) then
Tercio@0 270
Tercio@0 271 local time_limit_at = f.block_tracker [player_block] + db.STAMPERS_DELAY
Tercio@0 272 local time_now = GetTime()
Tercio@0 273
Tercio@0 274 f.player_bar:SetValue ((time_limit_at - time_now) / db.STAMPERS_DELAY * 100)
Tercio@0 275 f.player_bar:Show()
Tercio@0 276
Tercio@0 277 local block_frame = f.all_blocks [player_block]
Tercio@0 278 f.player_loc_box:SetPoint ("center", block_frame, "center")
Tercio@0 279 f.player_loc_box:Show()
Tercio@0 280 player_bar:Show()
Tercio@0 281 else
Tercio@0 282 f.player_loc_box:Hide()
Tercio@0 283 f.player_bar:Hide()
Tercio@0 284 end
Tercio@0 285 end
Tercio@0 286
Tercio@0 287 function f:StartTracking()
Tercio@0 288
Tercio@0 289 print ("|cFFFFAA00Hansgar and Franzok Assist|r: Smart Stampers phase started.")
Tercio@0 290
Tercio@0 291 f.StampersPhase = true
Tercio@0 292
Tercio@0 293 if (not f.frames_built) then
Tercio@0 294 f:CreateWindow()
Tercio@0 295 end
Tercio@0 296
Tercio@0 297 f:ResetBlocks()
Tercio@0 298 f.player_loc_box:Hide()
Tercio@0 299
Tercio@0 300 f.block_tracker = f.block_tracker or {}
Tercio@0 301 table.wipe (f.block_tracker)
Tercio@0 302
Tercio@0 303 SetMapToCurrentZone()
Tercio@0 304
Tercio@0 305 frame_tracker:SetScript ("OnUpdate", on_update_tracker)
Tercio@0 306 f:Show()
Tercio@0 307 end
Tercio@0 308
Tercio@0 309 function f:StopTracking()
Tercio@0 310
Tercio@0 311 print ("|cFFFFAA00Hansgar and Franzok Assist|r: Smart Stampers phase ended.")
Tercio@0 312
Tercio@0 313 f.StampersPhase = false
Tercio@0 314 frame_tracker:SetScript ("OnUpdate", nil)
Tercio@0 315 table.wipe (f.block_tracker)
Tercio@0 316 f.player_loc_box:Hide()
Tercio@0 317 f:Hide()
Tercio@0 318 end
Tercio@0 319
Tercio@0 320 local on_mouse_down = function (self)
Tercio@0 321 if (not self.isMoving) then
Tercio@0 322 self.isMoving = true
Tercio@0 323 f:StartMoving()
Tercio@0 324 end
Tercio@0 325 end
Tercio@0 326 local on_mouse_up = function (self)
Tercio@0 327 if (self.isMoving) then
Tercio@0 328 self.isMoving = nil
Tercio@0 329 f:StopMovingOrSizing()
Tercio@0 330 end
Tercio@0 331 end
Tercio@0 332
Tercio@0 333 local painting = function (self, elapsed)
Tercio@0 334 self.step = self.step + elapsed
Tercio@0 335 self.total_time = self.total_time + elapsed
Tercio@0 336
Tercio@0 337 if (self.step > 0.2) then
Tercio@0 338 self.step = 0
Tercio@0 339 local percent = self.total_time / db.STAMPERS_DELAY * 100
Tercio@0 340
Tercio@0 341 percent = min (percent, 100)
Tercio@0 342
Tercio@0 343 local r, g, b = f:percent_color (percent, true)
Tercio@0 344 self:SetBackdropColor (r, g, b, 0.5)
Tercio@0 345
Tercio@0 346 self.number:SetText (floor (percent) .. "%")
Tercio@0 347 self.number:SetTextColor (1, 1, 1, 1)
Tercio@0 348
Tercio@0 349 if (percent == 100) then
Tercio@0 350 self:SetScript ("OnUpdate", nil)
Tercio@0 351 self.stamper_icon:Show()
Tercio@0 352 self.number:Hide()
Tercio@4 353 self.cooldown:SetCooldown (GetTime(), 37 - db.STAMPERS_DELAY, 0, 0)
Tercio@0 354 end
Tercio@0 355 end
Tercio@0 356 end
Tercio@4 357
Tercio@4 358 function f:UnPaint (block)
Tercio@4 359 f:ResetBlock (block)
Tercio@4 360 end
Tercio@0 361 function f:Paint (block)
Tercio@0 362 block.step = 0
Tercio@0 363 block.total_time = 0
Tercio@0 364 block:SetScript ("OnUpdate", painting)
Tercio@4 365 local unpaint = f:ScheduleTimer ("UnPaint", 37, block)
Tercio@4 366 block.unpaint_process = unpaint
Tercio@4 367 end
Tercio@4 368
Tercio@4 369 function f:ResetBlock (block)
Tercio@4 370 block:SetScript ("OnUpdate", nil)
Tercio@4 371 block:SetBackdropColor (.8, .8, .8, 0.5)
Tercio@4 372 block.number:SetText (block.id)
Tercio@4 373 block.number:SetTextColor (1, 1, 1, 0.5)
Tercio@4 374 block.number:Show()
Tercio@4 375 block.stamper_icon:Hide()
Tercio@4 376 block.cooldown:SetCooldown (0, 0, 0, 0)
Tercio@4 377
Tercio@4 378 f.block_tracker [block.id] = nil
Tercio@4 379 if (block.unpaint_process) then
Tercio@4 380 f:CancelTimer (block.unpaint_process)
Tercio@4 381 block.unpaint_process = nil
Tercio@4 382 end
Tercio@0 383 end
Tercio@0 384
Tercio@0 385 function f:ResetBlocks()
Tercio@0 386 for _, block in ipairs (f.all_blocks) do
Tercio@4 387 f:ResetBlock (block)
Tercio@4 388 end
Tercio@4 389 end
Tercio@4 390
Tercio@4 391 function f:RefreshCooldownSettings()
Tercio@4 392 for _, block in ipairs (f.all_blocks) do
Tercio@4 393 if (not db.CD_NUMBER) then
Tercio@4 394 block.cooldown:SetHideCountdownNumbers (true)
Tercio@4 395 block.cooldown:SetDrawEdge (false)
Tercio@4 396 else
Tercio@4 397 block.cooldown:SetHideCountdownNumbers (false)
Tercio@4 398 block.cooldown:SetDrawEdge (true)
Tercio@4 399 end
Tercio@0 400 end
Tercio@0 401 end
Tercio@0 402
Tercio@0 403 function f:CreateWindow()
Tercio@0 404 local x = 0
Tercio@0 405 local y = 0
Tercio@0 406
Tercio@0 407 f.player_loc_box = frame_event:CreateTexture (nil, "overlay")
Tercio@0 408 f.player_loc_box:SetSize (32, 40)
Tercio@0 409 f.player_loc_box:SetTexture ([[Interface\ContainerFrame\UI-Icon-QuestBorder]])
Tercio@0 410 f.player_loc_box:Hide()
Tercio@0 411
Tercio@0 412 f.all_blocks = {}
Tercio@0 413
Tercio@0 414 for i = 1, 20 do
Tercio@0 415
Tercio@0 416 local block = CreateFrame ("frame", "Hansgar_And_Franzok_Assist_Block" .. i, f)
Tercio@0 417 block:SetSize (30, 38)
Tercio@0 418 block:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0},
Tercio@0 419 })
Tercio@0 420 block:SetBackdropBorderColor (0, 0, 0, 1)
Tercio@0 421 block:SetBackdropColor (.8, .8, .8, 0.5)
Tercio@0 422 block:SetPoint ("TopLeft", f, "TopLeft", x, y)
Tercio@0 423
Tercio@0 424 block:SetScript ("OnMouseDown", on_mouse_down)
Tercio@0 425 block:SetScript ("OnMouseUp", on_mouse_up)
Tercio@0 426
Tercio@4 427 local cooldown = CreateFrame ("cooldown", "Hansgar_And_Franzok_Assist_BlockCooldown" .. i, block, "CooldownFrameTemplate")
Tercio@4 428 cooldown:SetAllPoints()
Tercio@4 429 cooldown:SetFrameLevel (block:GetFrameLevel()+2)
Tercio@4 430
Tercio@4 431 if (not db.CD_NUMBER) then
Tercio@4 432 cooldown:SetHideCountdownNumbers (true)
Tercio@4 433 cooldown:SetDrawEdge (false)
Tercio@4 434 end
Tercio@4 435
Tercio@4 436 block.cooldown = cooldown
Tercio@4 437
Tercio@0 438 block.id = i
Tercio@0 439
Tercio@0 440 local number = block:CreateFontString (nil, "artwork", "GameFontHighlight")
Tercio@0 441 number:SetPoint ("center", block, "center")
Tercio@0 442 number:SetText (i)
Tercio@0 443 number:SetTextColor (1, 1, 1, 0.5)
Tercio@0 444 block.number = number
Tercio@0 445
Tercio@0 446 local stamper_icon = block:CreateTexture (nil, "overlay")
Tercio@0 447 stamper_icon:SetTexture ([[Interface\ICONS\Warrior_talent_icon_LambsToTheSlaughter]])
Tercio@0 448 stamper_icon:SetTexCoord (4/64, 60/64, 4/64, 60/64)
Tercio@0 449 stamper_icon:SetSize (24, 24)
Tercio@0 450 stamper_icon:SetPoint ("center", block, "center")
Tercio@0 451 stamper_icon:Hide()
Tercio@0 452 block.stamper_icon = stamper_icon
Tercio@0 453
Tercio@0 454 x = x + 31
Tercio@0 455 if (x >= 155) then
Tercio@0 456 x = 0
Tercio@0 457 y = y - 40
Tercio@0 458 end
Tercio@0 459
Tercio@0 460 tinsert (f.all_blocks, block)
Tercio@0 461
Tercio@0 462 end
Tercio@0 463
Tercio@0 464 f.frames_built = true
Tercio@0 465
Tercio@0 466 end
Tercio@0 467
Tercio@4 468 local safe_track = {
Tercio@4 469 --space 1
Tercio@4 470 {
Tercio@4 471 block = {x1 = 0.50154542922974, x2 = 0.49563668874741},
Tercio@4 472 left = {x1 = 0.49963343143463, x2 = 0.49963343143463 - 0.000935000000000},
Tercio@4 473 right = {x1 = 0.49710285663605, x2 = 0.49710285663605 + 0.001012229919432},
Tercio@4 474 -- {x1 = 0.49963343143463, y1 = 0.73492467403412} -- {x1 = 0.49710285663605, y1 = 0.74445152282715}
Tercio@4 475 },
Tercio@4 476 --space 2
Tercio@4 477 {
Tercio@4 478 block = {x1 = 0.4858917593956, x2 = 0.48044270277023},
Tercio@4 479 left = {x1 = 0.48433673381805, x2 = 0.48433673381805 - 0.00091059207916},
Tercio@4 480 right = {x1 = 0.48206025362015, x2 = 0.48206025362015 + 0.00075059207916},
Tercio@4 481 -- {x1 = 0.48433673381805, y1 = 0.74292266368866} -- {x1 = 0.48206025362015, y1 = 0.78930181264877}
Tercio@4 482 },
Tercio@4 483 --space 3
Tercio@4 484 {
Tercio@4 485 block = {x1 = 0.47047740221024, x2 = 0.4648859500885},
Tercio@4 486 left = {x1 = 0.46893924474716, x2 = 0.46893924474716 - 0.001032948493956},
Tercio@4 487 right = {x1 = 0.46635687351227, x2 = 0.46635687351227 + 0.001032948493956},
Tercio@4 488 --{x1 = 0.46893924474716, y1 = 0.7981019616127} -- {x1 = 0.46635687351227, y1 = 0.73558133840561}
Tercio@4 489 },
Tercio@4 490 --space 4
Tercio@4 491 {
Tercio@4 492 block = {x1 = 0.45503282546997, x2 = 0.44976264238358},
Tercio@4 493 left = {x1 = 0.4533554315567, x2 = 0.4533554315567 - 0.000774573974608},
Tercio@4 494 right = {x1 = 0.45124399662018, x2 = 0.45124399662018 + 0.000770009999999},
Tercio@4 495 --{x1 = 0.4533554315567, y1 = 0.74078941345215} -- {x1 = 0.45124399662018, y1 = 0.74088287353516}
Tercio@4 496 }
Tercio@4 497 }
Tercio@4 498 Hansgar_safe_track = safe_track
Tercio@4 499
Tercio@4 500 -- /hansgar test
Tercio@4 501 -- /run Hansgar_safe_track [1].block.x1 = 0.50154542922974
Tercio@4 502
Tercio@4 503 local red_alpha_disabled = 0.15
Tercio@4 504 local red_alpha_enabled = 0.5
Tercio@4 505
Tercio@4 506 local green_alpha_disabled = 0.05
Tercio@4 507 local green_alpha_enabled = 0.9
Tercio@4 508
Tercio@4 509 local track_function = function (self, elapsed)
Tercio@4 510
Tercio@4 511 local x, _ = GetPlayerMapPosition ("player")
Tercio@4 512 local block
Tercio@4 513
Tercio@4 514 for i = 1, #safe_track do
Tercio@4 515 local loc = safe_track [i]
Tercio@4 516 if (x >= loc.block.x2 and x <= loc.block.x1) then
Tercio@4 517 block = i
Tercio@4 518 break
Tercio@4 519 end
Tercio@4 520 end
Tercio@4 521
Tercio@4 522 if (block) then
Tercio@4 523
Tercio@4 524 player_pos_frame:Show()
Tercio@4 525 block = safe_track [block]
Tercio@4 526
Tercio@4 527 if (x >= block.left.x2 and x <= block.left.x1) then
Tercio@4 528 t2:SetTexture (0.1, 1, 0.1, green_alpha_enabled)
Tercio@4 529 t3:SetTexture (0.2, 1, 0.2, green_alpha_disabled)
Tercio@4 530
Tercio@4 531 t1:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
Tercio@4 532 t4:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
Tercio@4 533 middle:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
Tercio@4 534
Tercio@4 535 elseif (x <= block.right.x2 and x >= block.right.x1) then
Tercio@4 536 t3:SetTexture (0.1, 1, 0.1, green_alpha_enabled)
Tercio@4 537 t2:SetTexture (0.2, 1, 0.2, green_alpha_disabled)
Tercio@4 538
Tercio@4 539 t1:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
Tercio@4 540 t4:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
Tercio@4 541 middle:SetVertexColor (1, 0.2, 0.2, red_alpha_disabled) --red
Tercio@4 542
Tercio@4 543 else
Tercio@4 544 t1:SetVertexColor (1, 0.2, 0.2, red_alpha_enabled) --red
Tercio@4 545 t4:SetVertexColor (1, 0.2, 0.2, red_alpha_enabled) --red
Tercio@4 546 middle:SetVertexColor (1, 0.2, 0.2, red_alpha_enabled) --red
Tercio@4 547
Tercio@4 548 t2:SetTexture (0.2, 1, 0.2, green_alpha_disabled)
Tercio@4 549 t3:SetTexture (0.2, 1, 0.2, green_alpha_disabled)
Tercio@4 550
Tercio@4 551 end
Tercio@4 552
Tercio@4 553 --x = x - block.block.x2
Tercio@4 554 --local at = abs ((x / (block.block.x1 - block.block.x2) * 100) - 100)
Tercio@4 555 --div:SetPoint ("left", player_pos_frame, "left", self.width_pixel * at, 0)
Tercio@4 556
Tercio@4 557 else
Tercio@4 558 player_pos_frame:Hide()
Tercio@4 559 end
Tercio@4 560 end
Tercio@4 561
Tercio@4 562 function f:StartTrackPlayerPosition()
Tercio@4 563
Tercio@4 564 --> under development
Tercio@4 565 if (true) then
Tercio@4 566 return
Tercio@4 567 end
Tercio@4 568
Tercio@4 569 player_pos_frame:Show()
Tercio@4 570 tframe.width = player_pos_frame:GetWidth()
Tercio@4 571 tframe.width_pixel = tframe.width / 100
Tercio@4 572 tframe:SetScript ("OnUpdate", track_function)
Tercio@4 573 end
Tercio@4 574 function f:EndTrackPlayerPosition()
Tercio@4 575 player_pos_frame:Hide()
Tercio@4 576 tframe:SetScript ("OnUpdate", nil)
Tercio@4 577 end
Tercio@4 578
Tercio@0 579 local locs = {
Tercio@0 580 --block 1:
Tercio@1 581 {x1 = 0.51103663444519, y1 = 0.79726493358612, x2 = 0.50061076879501, y2 = 0.8241291642189},
Tercio@0 582 --block 2:
Tercio@1 583 {x1 = 0.49670505523682, y1 = 0.79692482948303, x2 = 0.48469054698944, y2 = 0.82489335536957},
Tercio@0 584 --block 3:
Tercio@1 585 {x1 = 0.48130965232849, y1 = 0.79742962121964, x2 = 0.46962946653366, y2 = 0.82453238964081},
Tercio@0 586 --block 4:
Tercio@1 587 {x1 = 0.46575212478638, y1 = 0.79766929149628, x2 = 0.45400339365005, y2 = 0.82176661491394},
Tercio@0 588 --block 5:
Tercio@1 589 {x1 = 0.45073217153549, y1 = 0.79751670360565, x2 = 0.43945103883743, y2 = 0.82504689693451},
Tercio@0 590
Tercio@0 591 --block 6
Tercio@1 592 {x1 = 0.51104211807251, y1 = 0.76532691717148, x2 = 0.50021582841873, y2 = 0.79546189308167},
Tercio@1 593 --block 7
Tercio@1 594 {x1 = 0.4964514374733, y1 = 0.76603573560715, x2 = 0.48449218273163, y2 = 0.79527854919434},
Tercio@1 595 --block 8
Tercio@1 596 {x1 = 0.48101079463959, y1 = 0.76503103971481, x2 = 0.46944016218185, y2 = 0.79543298482895},
Tercio@1 597 --block 9
Tercio@1 598 {x1 = 0.46541726589203, y1 = 0.7654857635498, x2 = 0.45369201898575, y2 = 0.79529416561127},
Tercio@1 599 --block 10
Tercio@1 600 {x1 = 0.45051556825638, y1 = 0.76583826541901, x2 = 0.43931984901428, y2 = 0.79570162296295},
Tercio@1 601
Tercio@1 602
Tercio@1 603 --block 11
Tercio@0 604 {x1 = 0.51104187965393, y1 = 0.73422884941101, x2 = 0.49990028142929, y2 = 0.76343530416489},
Tercio@1 605 --block 12
Tercio@0 606 {x1 = 0.49673527479172, y1 = 0.73338270187378, x2 = 0.48483556509018, y2 = 0.76356953382492},
Tercio@1 607 --block 13
Tercio@0 608 {x1 = 0.48133307695389, y1 = 0.73373115062714, x2 = 0.46920585632324, y2 = 0.76366758346558},
Tercio@1 609 --block 14
Tercio@0 610 {x1 = 0.46568286418915, y1 = 0.73440700769424, x2 = 0.45381307601929, y2 = 0.76358675956726},
Tercio@1 611 --block 15
Tercio@0 612 {x1 = 0.45046973228455, y1 = 0.73361301422119, x2 = 0.43929302692413, y2 = 0.76388084888458},
Tercio@0 613
Tercio@0 614 --block 16
Tercio@1 615 {x1 = 0.51104891300201, y1 = 0.70877063274384, x2 = 0.50024521350861, y2 = 0.73220580816269},
Tercio@0 616 --block 17
Tercio@1 617 {x1 = 0.49676024913788, y1 = 0.70914703607559, x2 = 0.48485481739044, y2 = 0.73210543394089},
Tercio@0 618 --block 18
Tercio@1 619 {x1 = 0.48142266273499, y1 = 0.70876735448837, x2 = 0.46925610303879, y2 = 0.73205661773682},
Tercio@0 620 --block 19
Tercio@1 621 {x1 = 0.46603119373322, y1 = 0.70929777622223, x2 = 0.45397216081619, y2 = 0.73167610168457},
Tercio@0 622 --block 20
Tercio@1 623 {x1 = 0.45079308748245, y1 = 0.70926278829575, x2 = 0.43927478790283, y2 = 0.73225915431976},
Tercio@0 624 }
Tercio@0 625
Tercio@0 626 function f:WhichBlock (x, y)
Tercio@0 627 for i = 1, #locs do
Tercio@0 628 local loc = locs [i]
Tercio@0 629 if (x >= loc.x2 and x <= loc.x1 and y >= loc.y1 and y <= loc.y2) then
Tercio@0 630 return i
Tercio@0 631 end
Tercio@0 632 end
Tercio@0 633 end
Tercio@0 634
Tercio@0 635 function f:percent_color (value, inverted)
Tercio@0 636 local r, g
Tercio@0 637 if (value < 50) then
Tercio@0 638 r = 255
Tercio@0 639 else
Tercio@0 640 r = floor ( 255 - (value * 2 - 100) * 255 / 100)
Tercio@0 641 end
Tercio@0 642
Tercio@0 643 if (value > 50) then
Tercio@0 644 g = 255
Tercio@0 645 else
Tercio@0 646 g = floor ( (value * 2) * 255 / 100)
Tercio@0 647 end
Tercio@0 648
Tercio@0 649 if (inverted) then
Tercio@0 650 return g/255, r/255, 0
Tercio@0 651 else
Tercio@0 652 return r/255, g/255, 0
Tercio@0 653 end
Tercio@0 654 end