You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
286 lines
12 KiB
286 lines
12 KiB
local MDT = MDT
|
|
local L = MDT.L
|
|
local MDTcommsObject = MDTcommsObject
|
|
local twipe,tinsert = table.wipe,table.insert
|
|
|
|
local timer
|
|
local requestTimer
|
|
---LiveSession_Enable
|
|
function MDT:LiveSession_Enable()
|
|
if self.liveSessionActive then return end
|
|
self.main_frame.LiveSessionButton:SetText(L["*Live*"])
|
|
self.main_frame.LiveSessionButton.text:SetTextColor(0,1,0)
|
|
self.main_frame.LinkToChatButton:SetDisabled(true)
|
|
self.main_frame.LinkToChatButton.text:SetTextColor(0.5,0.5,0.5)
|
|
self.main_frame.sidePanelDeleteButton:SetDisabled(true)
|
|
self.main_frame.sidePanelDeleteButton.text:SetTextColor(0.5,0.5,0.5)
|
|
self.liveSessionActive = true
|
|
--check if there is other clients having live mode active
|
|
self:LiveSession_RequestSession()
|
|
--set id here incase there is no other sessions
|
|
self:SetUniqueID(self:GetCurrentPreset())
|
|
self.livePresetUID = self:GetCurrentPreset().uid
|
|
self:UpdatePresetDropdownTextColor()
|
|
self:SetThrottleValues()
|
|
timer = C_Timer.NewTimer(2, function()
|
|
self.liveSessionRequested = false
|
|
local distribution = self:IsPlayerInGroup()
|
|
local preset = self:GetCurrentPreset()
|
|
local prefix = "[MDTLive: "
|
|
local dungeon = self:GetDungeonName(preset.value.currentDungeonIdx)
|
|
local presetName = preset.text
|
|
local name, realm = UnitFullName("player")
|
|
local fullName = name.."+"..realm
|
|
SendChatMessage(prefix..fullName.." - "..dungeon..": "..presetName.."]",distribution)
|
|
end)
|
|
end
|
|
|
|
---LiveSession_Disable
|
|
function MDT:LiveSession_Disable()
|
|
local widget = MDT.main_frame.LiveSessionButton
|
|
widget.text:SetTextColor(widget.normalTextColor.r,widget.normalTextColor.g,widget.normalTextColor.b)
|
|
widget.text:SetText(L["Live"])
|
|
MDT.main_frame.LinkToChatButton:SetDisabled(false)
|
|
self.main_frame.LinkToChatButton.text:SetTextColor(1,0.8196,0)
|
|
local db = MDT:GetDB()
|
|
if db.presets[db.currentDungeonIdx][1] == MDT:GetCurrentPreset() then
|
|
MDT.main_frame.sidePanelDeleteButton:SetDisabled(true)
|
|
MDT.main_frame.sidePanelDeleteButton.text:SetTextColor(0.5,0.5,0.5)
|
|
else
|
|
self.main_frame.sidePanelDeleteButton:SetDisabled(false)
|
|
self.main_frame.sidePanelDeleteButton.text:SetTextColor(1,0.8196,0)
|
|
end
|
|
self.liveSessionActive = false
|
|
self.liveSessionAcceptingPreset = false
|
|
self:UpdatePresetDropdownTextColor()
|
|
self.main_frame.liveReturnButton:Hide()
|
|
self.main_frame.setLivePresetButton:Hide()
|
|
if timer then timer:Cancel() end
|
|
self.liveSessionRequested = false
|
|
self.main_frame.SendingStatusBar:Hide()
|
|
self:SetThrottleValues(true)
|
|
if self.main_frame.LoadingSpinner then
|
|
self.main_frame.LoadingSpinner:Hide()
|
|
self.main_frame.LoadingSpinner.Anim:Stop()
|
|
end
|
|
end
|
|
|
|
---Notify specific group member that my live session is active
|
|
local lastNotify
|
|
function MDT:LiveSession_NotifyEnabled()
|
|
local now = GetTime()
|
|
if not lastNotify or lastNotify < now - 0.2 then
|
|
lastNotify = now
|
|
local distribution = self:IsPlayerInGroup()
|
|
if (not distribution) or (not self.liveSessionActive) then return end
|
|
local uid = self.livePresetUID
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.enabled, uid, distribution, nil, "ALERT")
|
|
end
|
|
--self:SendToGroup(self:IsPlayerInGroup(),true,self:GetCurrentLivePreset())
|
|
end
|
|
|
|
---Send a request to the group to send notify messages for active sessions
|
|
function MDT:LiveSession_RequestSession()
|
|
local distribution = self:IsPlayerInGroup()
|
|
if (not distribution) or (not self.liveSessionActive) then return end
|
|
self.liveSessionRequested = true
|
|
self.liveSessionActiveSessions = self.liveSessionActiveSessions or {}
|
|
twipe(self.liveSessionActiveSessions)
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.request, "0", distribution, nil, "ALERT")
|
|
end
|
|
|
|
|
|
function MDT:LiveSession_SessionFound(fullName, uid)
|
|
local fullNamePlayer,realm = UnitFullName("player")
|
|
fullNamePlayer = fullNamePlayer.."-"..realm
|
|
|
|
if (not self.liveSessionAcceptingPreset) and fullNamePlayer ~= fullName then
|
|
if timer then timer:Cancel() end
|
|
self.liveSessionAcceptingPreset = true
|
|
--request the preset from one client only after a short delay
|
|
--we have to delay a bit to catch all active clients
|
|
requestTimer = C_Timer.NewTimer(0.5, function()
|
|
if self.liveSessionActiveSessions[1][1] ~= fullNamePlayer then
|
|
self.main_frame.SendingStatusBar:Show()
|
|
self.main_frame.SendingStatusBar:SetValue(0/1)
|
|
self.main_frame.SendingStatusBar.value:SetText(L["Receiving: ..."])
|
|
if not self.main_frame.LoadingSpinner then
|
|
self.main_frame.LoadingSpinner = CreateFrame("Button", "MDTLoadingSpinner", self.main_frame, "LoadingSpinnerTemplate")
|
|
self.main_frame.LoadingSpinner:SetPoint("CENTER",self.main_frame,"CENTER")
|
|
self.main_frame.LoadingSpinner:SetSize(60,60)
|
|
end
|
|
self.main_frame.LoadingSpinner:Show()
|
|
self.main_frame.LoadingSpinner.Anim:Play()
|
|
self:UpdatePresetDropdownTextColor(true)
|
|
|
|
self.liveSessionRequested = false
|
|
self:LiveSession_RequestPreset(self.liveSessionActiveSessions[1][1])
|
|
self.livePresetUID = self.liveSessionActiveSessions[1][2]
|
|
else
|
|
self.liveSessionAcceptingPreset = false
|
|
self.liveSessionRequested = false
|
|
end
|
|
end)
|
|
end
|
|
--catch clients
|
|
tinsert(self.liveSessionActiveSessions,{fullName,uid})
|
|
end
|
|
|
|
function MDT:LiveSession_RequestPreset(fullName)
|
|
local distribution = self:IsPlayerInGroup()
|
|
if (not distribution) or (not self.liveSessionActive) then return end
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.reqPre, fullName, distribution,nil, "ALERT")
|
|
end
|
|
|
|
---Sends a map ping
|
|
function MDT:LiveSession_SendPing(x, y, sublevel)
|
|
--only send ping if we are in the livesession preset
|
|
if self:GetCurrentPreset().uid == self.livePresetUID then
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
local scale = self:GetScale()
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.ping, x*(1/scale)..":"..y*(1/scale)..":"..sublevel, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
end
|
|
|
|
---Sends a preset object
|
|
function MDT:LiveSession_SendObject(obj)
|
|
if self:GetCurrentPreset().uid == self.livePresetUID then
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
local export = MDT:TableToString(obj,false,5)
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.obj, export, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
end
|
|
|
|
---Sends updated object offsets (move object)
|
|
function MDT:LiveSession_SendObjectOffsets(objIdx, x, y)
|
|
if self:GetCurrentPreset().uid == self.livePresetUID then
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.objOff, objIdx..":"..x..":"..y, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
end
|
|
|
|
---Sends updated objects - instead of sending an update every time we erase a part of an object we send one message after mouse up
|
|
function MDT:LiveSession_SendUpdatedObjects(changedObjects)
|
|
if self:GetCurrentPreset().uid == self.livePresetUID then
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
local export = MDT:TableToString(changedObjects,false,5)
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.objChg, export, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
end
|
|
|
|
---Sends various commands: delete all drawings, clear preset, undo, redo
|
|
function MDT:LiveSession_SendCommand(cmd)
|
|
if self:GetCurrentPreset().uid == self.livePresetUID then
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.cmd, cmd, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
end
|
|
|
|
---Sends a note text update
|
|
function MDT:LiveSession_SendNoteCommand(cmd, noteIdx, text, y)
|
|
if self:GetCurrentPreset().uid == self.livePresetUID then
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
text = text..":"..(y or "0")
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.note, cmd..":"..noteIdx..":"..text, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
end
|
|
|
|
---Sends a new preset to be used as the new live session preset
|
|
function MDT:LiveSession_SendPreset(preset)
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
local db = self:GetDB()
|
|
preset.mdiEnabled = db.MDI.enabled
|
|
preset.difficulty = db.currentDifficulty
|
|
local export = MDT:TableToString(preset,false,5)
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.preset, export, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
|
|
---Sends all pulls
|
|
function MDT:LiveSession_SendPulls(pulls)
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
local msg = MDT:TableToString(pulls,false,5)
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.pull, msg, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
|
|
---Sends Affix Week Change
|
|
function MDT:LiveSession_SendAffixWeek(week)
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.week, week.."", distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
|
|
---Sends freehold selector updates
|
|
function MDT:LiveSession_SendFreeholdSelector(value, week)
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
value = value and "T:" or "F:"
|
|
local msg = value..week
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.free, msg, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
|
|
---sends boralus selector updates
|
|
function MDT:LiveSession_SendBoralusSelector(faction)
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
local msg = faction..""
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.bora, msg, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
|
|
---Sends MDI selector updates
|
|
function MDT:LiveSession_SendMDI(action, data)
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
local msg = action..":"..data
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.mdi, msg, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
|
|
do
|
|
local timer
|
|
---LiveSession_QueueColorUpdate
|
|
---Disgusting workaround for shitty colorpicker
|
|
---Only send an update once a color of a pull has not changed for 0.2 seconds
|
|
function MDT:LiveSession_QueueColorUpdate()
|
|
if timer then timer:Cancel() end
|
|
timer = C_Timer.NewTimer(0.2, function()
|
|
self:LiveSession_SendPulls(self:GetPulls())
|
|
end)
|
|
end
|
|
end
|
|
|
|
---Sends Corrupted NPC Offset Positions
|
|
function MDT:LiveSession_SendCorruptedPositions(offsets)
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
local export = MDT:TableToString(offsets,false,5)
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.corrupted, export, distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
|
|
---Sends current difficulty
|
|
function MDT:LiveSession_SendDifficulty()
|
|
local distribution = self:IsPlayerInGroup()
|
|
if distribution then
|
|
local export = self:GetDB().currentDifficulty
|
|
MDTcommsObject:SendCommMessage(self.liveSessionPrefixes.difficulty, export.."", distribution, nil, "ALERT")
|
|
end
|
|
end
|
|
|