vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
TITAN_COORDS_ID = "Coords";
TITAN_COORDS_FREQUENCY = 0.5;

function TitanPanelCoordsButton_OnLoad()
        this.registry = { 
                id = TITAN_COORDS_ID,
                builtIn = 1,
                version = TITAN_VERSION,
                menuText = TITAN_COORDS_MENU_TEXT, 
                buttonTextFunction = "TitanPanelCoordsButton_GetButtonText",
                tooltipTitle = TITAN_COORDS_TOOLTIP, 
                tooltipTextFunction = "TitanPanelCoordsButton_GetTooltipText", 
                frequency = TITAN_COORDS_FREQUENCY, 
                updateType = TITAN_PANEL_UPDATE_BUTTON;
                icon = TITAN_ARTWORK_PATH.."TitanCoords",       
                iconWidth = 16,
                savedVariables = {
                        ShowZoneText = 1,
                        ShowCoordsOnMap = 1,
                        ShowIcon = 1,
                        ShowLabelText = 1,
                        ShowColoredText = 1,
                }
        };

        this:RegisterEvent("ZONE_CHANGED");
        this:RegisterEvent("ZONE_CHANGED_INDOORS");
        this:RegisterEvent("ZONE_CHANGED_NEW_AREA");
        this:RegisterEvent("MINIMAP_ZONE_CHANGED");
        this:RegisterEvent("PLAYER_ENTERING_WORLD");
end 

function TitanPanelCoordsButton_GetButtonText(id)
        local button, id = TitanUtils_GetButton(id, true);

        button.px, button.py = GetPlayerMapPosition("player");
        local locationText = format(TITAN_COORDS_FORMAT, 100 * button.px, 100 * button.py);
        if (TitanGetVar(TITAN_COORDS_ID, "ShowZoneText")) then  
                if (TitanUtils_ToString(button.subZoneText) == '') then
                        locationText = TitanUtils_ToString(button.zoneText)..' '..locationText;
                else
                        locationText = TitanUtils_ToString(button.subZoneText)..' '..locationText;
                end
        end

        local locationRichText;
        if (TitanGetVar(TITAN_COORDS_ID, "ShowColoredText")) then       
                if (this.isArena) then
                        locationRichText = TitanUtils_GetRedText(locationText);         
                elseif (this.pvpType == "friendly") then
                        locationRichText = TitanUtils_GetGreenText(locationText);
                elseif (this.pvpType == "hostile") then
                        locationRichText = TitanUtils_GetRedText(locationText);
                elseif (this.pvpType == "contested") then
                        locationRichText = TitanUtils_GetNormalText(locationText);
                else
                        locationRichText = TitanUtils_GetNormalText(locationText);
                end
        else
                locationRichText = TitanUtils_GetHighlightText(locationText);
        end

        return TITAN_COORDS_BUTTON_LABEL, locationRichText;
end

function TitanPanelCoordsButton_GetTooltipText()
        local pvpInfoRichText;

        if (this.pvpType == "friendly") then
                pvpInfoRichText = TitanUtils_GetGreenText(format(FACTION_CONTROLLED_TERRITORY, this.factionName));
        elseif (this.pvpType == "hostile") then
                pvpInfoRichText = TitanUtils_GetRedText(format(FACTION_CONTROLLED_TERRITORY, this.factionName));
        elseif (this.pvpType == "contested") then
                pvpInfoRichText = TitanUtils_GetNormalText(CONTESTED_TERRITORY);
        else
                pvpInfoRichText = "";
        end
        
        --[[
        local pvpArenaText;
        if (isArena) then
                pvpArenaText = FREE_FOR_ALL_TERRITORY;
                this.subZoneText = TitanUtils_GetRedText(this.subZoneText);
        else
                pvpArenaText = "";
        end
        ]]--

        return ""..
                TITAN_COORDS_TOOLTIP_ZONE.."\t"..TitanUtils_GetHighlightText(this.zoneText).."\n"..
                TitanUtils_Ternary((this.subZoneText == ""), "", TITAN_COORDS_TOOLTIP_SUBZONE.."\t"..TitanUtils_GetHighlightText(this.subZoneText).."\n")..             
                TitanUtils_Ternary((pvpInfoRichText == ""), "", TITAN_COORDS_TOOLTIP_PVPINFO.."\t"..pvpInfoRichText.."\n")..
                "\n"..
                TitanUtils_GetHighlightText(TITAN_COORDS_TOOLTIP_HOMELOCATION).."\n"..
                TITAN_COORDS_TOOLTIP_INN.."\t"..TitanUtils_GetHighlightText(GetBindLocation()).."\n"..
                TitanUtils_GetGreenText(TITAN_COORDS_TOOLTIP_HINTS_1).."\n"..
                TitanUtils_GetGreenText(TITAN_COORDS_TOOLTIP_HINTS_2);
end

function TitanPanelCoordsButton_OnEvent()
        if (event == "ZONE_CHANGED_NEW_AREA") then
                SetMapToCurrentZone();
        end
        TitanPanelCoordsButton_UpdateZoneInfo();
        TitanPanelButton_UpdateTooltip();
end

function TitanPanelCoordsButton_OnClick(button)
        if (button == "LeftButton" and IsShiftKeyDown()) then
                if (ChatFrameEditBox:IsVisible()) then
                        message = TitanUtils_ToString(this.zoneText).." "..
                                format(TITAN_COORDS_FORMAT, 100 * this.px, 100 * this.py);
                        ChatFrameEditBox:Insert(message);
                end
        end
end

function TitanPanelCoordsButton_UpdateZoneInfo()
        this.zoneText = GetZoneText();
        this.subZoneText = GetSubZoneText();
        this.minimapZoneText = GetMinimapZoneText();
        this.pvpType, this.factionName, this.isArena = GetZonePVPInfo();
end

function TitanPanelRightClickMenu_PrepareCoordsMenu()
        TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_COORDS_ID].menuText);
        
        local info = {};
        info.text = TITAN_COORDS_MENU_SHOW_ZONE_ON_PANEL_TEXT;
        info.func = TitanPanelCoordsButton_ToggleDisplay;
        info.checked = TitanGetVar(TITAN_COORDS_ID, "ShowZoneText");
        UIDropDownMenu_AddButton(info);

        info = {};
        info.text = TITAN_COORDS_MENU_SHOW_COORDS_ON_MAP_TEXT;
        info.func = TitanPanelCoordsButton_ToggleCoordsOnMap;
        info.checked = TitanGetVar(TITAN_COORDS_ID, "ShowCoordsOnMap");
        UIDropDownMenu_AddButton(info);

        TitanPanelRightClickMenu_AddSpacer();
        TitanPanelRightClickMenu_AddToggleIcon(TITAN_COORDS_ID);
        TitanPanelRightClickMenu_AddToggleLabelText(TITAN_COORDS_ID);
        TitanPanelRightClickMenu_AddToggleColoredText(TITAN_COORDS_ID);


        TitanPanelRightClickMenu_AddSpacer();
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_COORDS_ID, TITAN_PANEL_MENU_FUNC_HIDE);
end

function TitanPanelCoordsButton_ToggleDisplay()
        TitanToggleVar(TITAN_COORDS_ID, "ShowZoneText");
        TitanPanelButton_UpdateButton(TITAN_COORDS_ID); 
end

function TitanPanelCoordsButton_ToggleCoordsOnMap()
        TitanToggleVar(TITAN_COORDS_ID, "ShowCoordsOnMap");
        if (TitanGetVar(TITAN_COORDS_ID, "ShowCoordsOnMap")) then
                TitanMapCursorCoords:Show();
                TitanMapPlayerCoords:Show();
        else
                TitanMapCursorCoords:Hide();
                TitanMapPlayerCoords:Hide();
        end
end

function TitanPanelCoordsButton_ToggleColor()
        TitanToggleVar(TITAN_COORDS_ID, "ShowColoredText");
        TitanPanelButton_UpdateButton(TITAN_COORDS_ID);
end

local OFFSET_X = 0.0022;
local OFFSET_Y = -0.0262;

function TitanMapFrame_OnUpdate()
        if (TitanGetVar(TITAN_COORDS_ID, "ShowCoordsOnMap")) then
                local x, y = GetCursorPosition();
                x = x / WorldMapFrame:GetScale();
                y = y / WorldMapFrame:GetScale();
        
                this.px, this.py = GetPlayerMapPosition("player");
                local centerX, centerY = WorldMapFrame:GetCenter();
                local width = WorldMapButton:GetWidth();
                local height = WorldMapButton:GetHeight();
                local adjustedX = (x - (centerX - (width/2))) / width;
                local adjustedY = (centerY + (height/2) - y ) / height;
                local cx = (adjustedX + OFFSET_X);
                local cy = (adjustedY + OFFSET_Y);
        
                local cursorCoordsText = format(TITAN_COORDS_MAP_COORDS_TEXT, 100 * cx, 100 * cy);
                local playerCoordsText = format(TITAN_COORDS_MAP_COORDS_TEXT, 100 * this.px, 100 * this.py);                    
                TitanMapCursorCoords:SetText(format(TITAN_COORDS_MAP_CURSOR_COORDS_TEXT, TitanUtils_GetHighlightText(cursorCoordsText)));
                TitanMapPlayerCoords:SetText(format(TITAN_COORDS_MAP_PLAYER_COORDS_TEXT, TitanUtils_GetHighlightText(playerCoordsText)));
        end
end