vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
TITAN_MONEY_ID = "Money";
TITAN_MONEY_FREQUENCY = 1;

local startMoney;
local startSessionTime;

function TitanPanelMoneyButton_OnLoad()
        this.registry = { 
                id = TITAN_MONEY_ID,
                builtIn = 1,
                version = TITAN_VERSION,
                menuText = TITAN_MONEY_MENU_TEXT, 
                tooltipTitle = TITAN_MONEY_TOOLTIP,
                tooltipTextFunction = "TitanPanelMoneyButton_GetTooltipText",
                frequency = TITAN_MONEY_FREQUENCY,
                updateType = TITAN_PANEL_UPDATE_TOOLTIP,
        };

        SmallMoneyFrame_OnLoad();
        this:RegisterEvent("PLAYER_ENTERING_WORLD");

        WoW_OpenCoinPickupFrame = OpenCoinPickupFrame;  
        OpenCoinPickupFrame = Titan_OpenCoinPickupFrame;
end

function TitanPanelMoneyButton_OnEvent() 
        MoneyFrame_OnEvent()
        if (event == "PLAYER_ENTERING_WORLD") then
                MoneyFrame_UpdateMoney();
                if (not startMoney) then
                        startMoney = GetMoney();
                        startSessionTime = 0;
                end
        end
end

function TitanPanelMoneyCopperButton_OnClick(button)
        if (button == "LeftButton") then
                local parent = this:GetParent();
                OpenCoinPickupFrame(1, MoneyTypeInfo[parent.moneyType].UpdateFunc(), parent);
                parent.hasPickup = 1;
        end
end

function TitanPanelMoneySilverButton_OnClick(button)
        if (button == "LeftButton") then
                local parent = this:GetParent();
                OpenCoinPickupFrame(COPPER_PER_SILVER, MoneyTypeInfo[parent.moneyType].UpdateFunc(), parent);
                parent.hasPickup = 1;
        end
end

function TitanPanelMoneyGoldButton_OnClick(button)
        if (button == "LeftButton") then
                local parent = this:GetParent();
                OpenCoinPickupFrame(COPPER_PER_GOLD, MoneyTypeInfo[parent.moneyType].UpdateFunc(), parent);
                parent.hasPickup = 1;
        end
end

function TitanPanelMoneyButton_GetTooltipText()
        local sessionTime = TitanUtils_GetSessionTime() - startSessionTime;
        local initialMoney = startMoney;
        local fluctMoney = GetMoney() - initialMoney;
        local fluctMoneyPerHour = TitanPanelMoneyButton_GetMoneyPerHour(fluctMoney, sessionTime);
        
        if fluctMoneyPerHour == nil then
                fluctMoneyPerHour = 0;
        end
        -- Current money Text
        local currentMoneyRichText = TITAN_MONEY_TOOLTIP_CURRENT.."\t"..
                        TitanUtils_GetHighlightText(format(TITAN_MONEY_FORMAT, TitanPanelMoneyButton_BreakMoney(GetMoney())));

        -- Initial money Text
        local initialMoneyRichText = TITAN_MONEY_TOOLTIP_INITIAL.."\t"..
                        TitanUtils_GetHighlightText(format(TITAN_MONEY_FORMAT, TitanPanelMoneyButton_BreakMoney(initialMoney)));
        
        -- Money Fluctuation Text
        local fluctMoneyRichText;
        local fluctMoneyPerHourRichText;
        if (fluctMoney < 0) then                
                fluctMoneyRichText = TITAN_MONEY_TOOLTIP_LOST.."\t"..
                        TitanUtils_GetRedText(format(TITAN_MONEY_FORMAT, TitanPanelMoneyButton_BreakMoney(0 - fluctMoney)));
                fluctMoneyPerHourRichText = TITAN_MONEY_TOOLTIP_LOST_HOUR.."\t"..
                        TitanUtils_GetRedText(format(TITAN_MONEY_FORMAT, TitanPanelMoneyButton_BreakMoney(0 - fluctMoneyPerHour)));
        elseif (fluctMoney == 0) then
                fluctMoneyRichText = TITAN_MONEY_TOOLTIP_EARNED.."\t"..
                        TitanUtils_GetHighlightText(format(TITAN_MONEY_FORMAT, TitanPanelMoneyButton_BreakMoney(0)));
                fluctMoneyPerHourRichText = TITAN_MONEY_TOOLTIP_EARNED_HOUR.."\t"..
                        TitanUtils_GetHighlightText(format(TITAN_MONEY_FORMAT, TitanPanelMoneyButton_BreakMoney(0)));
        else
                fluctMoneyRichText = TITAN_MONEY_TOOLTIP_EARNED.."\t"..
                        TitanUtils_GetGreenText(format(TITAN_MONEY_FORMAT, TitanPanelMoneyButton_BreakMoney(fluctMoney)));
                fluctMoneyPerHourRichText = TITAN_MONEY_TOOLTIP_EARNED_HOUR.."\t"..
                        TitanUtils_GetGreenText(format(TITAN_MONEY_FORMAT, TitanPanelMoneyButton_BreakMoney(fluctMoneyPerHour)));
        end
        
        return ""..
                currentMoneyRichText.."\n"..
                initialMoneyRichText.."\n"..
                fluctMoneyRichText.."\n"..
                fluctMoneyPerHourRichText.."\n"..
                TitanUtils_GetGreenText(TITAN_MONEY_TOOLTIP_HINTS);
end

function TitanPanelRightClickMenu_PrepareMoneyMenu()
        TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_MONEY_ID].menuText);
        TitanPanelRightClickMenu_AddCommand(TITAN_MONEY_MENU_RESET_SESSION, TITAN_MONEY_ID, "TitanPanelMoneyButton_ResetSession");
        TitanPanelRightClickMenu_AddSpacer();   
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_MONEY_ID, TITAN_PANEL_MENU_FUNC_HIDE);
end

function TitanPanelMoneyButton_ResetSession()
        startMoney = GetMoney();
        startSessionTime = TitanUtils_GetSessionTime();
end

function TitanPanelMoneyButton_GetMoneyPerHour(money, session)
        if (money and session and session > 0) then
                return money / session * 3600;
        end
end

function TitanPanelMoneyButton_BreakMoney(money)
        -- Non-negative money only
        if (money >= 0) then
                local gold = floor(money / (COPPER_PER_SILVER * SILVER_PER_GOLD));
                local silver = floor((money - (gold * COPPER_PER_SILVER * SILVER_PER_GOLD)) / COPPER_PER_SILVER);
                local copper = mod(money, COPPER_PER_SILVER);
                return gold, silver, copper;
        end
end

function Titan_OpenCoinPickupFrame(multiplier, maxMoney, parent)
        if ( CoinPickupFrame.owner ) then
                CoinPickupFrame.owner.hasPickup = 0;
        end

        if ( GetCursorMoney() > 0 ) then
                if ( CoinPickupFrame.owner ) then
                        MoneyTypeInfo[parent.moneyType].DropFunc();
                        PlaySound("igBackPackCoinSelect");
                end
                CoinPickupFrame:Hide();
                return;
        end

        CoinPickupFrame.multiplier = multiplier;
        CoinPickupFrame.maxMoney = floor(maxMoney / multiplier);
        if ( CoinPickupFrame.maxMoney == 0 ) then
                CoinPickupFrame:Hide();
                return;
        end

        CoinPickupFrame.owner = parent;
        CoinPickupFrame.money = 1;
        CoinPickupFrame.typing = 0;
        CoinPickupText:SetText(CoinPickupFrame.money);
        CoinPickupLeftButton:Disable();
        CoinPickupRightButton:Enable();

        if ( multiplier == 1 ) then
                CoinPickupCopperIcon:Show();
        else
                CoinPickupCopperIcon:Hide();
        end

        if ( multiplier == COPPER_PER_SILVER ) then
                CoinPickupSilverIcon:Show();
        else
                CoinPickupSilverIcon:Hide();
        end

        if ( multiplier == (COPPER_PER_GOLD) ) then
                CoinPickupGoldIcon:Show();
        else
                CoinPickupGoldIcon:Hide();
        end

        position = TitanUtils_GetRealPosition(TITAN_MONEY_ID);


        local scale = TitanPanelGetVar("Scale");
        if scale == nil then scale = 1; end

        if (parent:GetName() == "TitanPanelMoneyButton") then
                if (position == TITAN_PANEL_PLACE_TOP) then 
                        CoinPickupFrame:ClearAllPoints();
                        CoinPickupFrame:SetPoint("TOPLEFT", parent:GetName(), "BOTTOMLEFT", -10, -4 * scale);
                else
                        CoinPickupFrame:ClearAllPoints();
                        CoinPickupFrame:SetPoint("BOTTOMLEFT", parent:GetName(), "TOPLEFT", -10, 0);
                end             
        else
                CoinPickupFrame:ClearAllPoints();
                CoinPickupFrame:SetPoint("BOTTOMRIGHT", parent:GetName(), "TOPRIGHT", 0, 0);
                if (position == TITAN_PANEL_PLACE_TOP) then 
                        CoinPickupFrame:ClearAllPoints();
                        CoinPickupFrame:SetPoint("TOPLEFT", parent:GetName(), "BOTTOMLEFT", -10, -4 * scale);
                else
                        CoinPickupFrame:ClearAllPoints();
                        CoinPickupFrame:SetPoint("BOTTOMLEFT", parent:GetName(), "TOPLEFT", -10, 0);
                end             
        end
        CoinPickupFrame:Show();
        PlaySound("igBackPackCoinSelect");
end