249 lines
6.4 KiB
Lua
249 lines
6.4 KiB
Lua
COINFRAME_BINDING_CACHE = {}
|
|
|
|
function 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(CoinPickupFrame);
|
|
PlaySound("igBackPackCoinSelect");
|
|
end
|
|
CoinPickupFrame:Hide();
|
|
return;
|
|
end
|
|
|
|
CoinPickupFrame.multiplier = multiplier;
|
|
CoinPickupFrame.maxMoney = floor(maxMoney / multiplier);
|
|
if ( CoinPickupFrame.maxMoney == 0 ) then
|
|
CoinPickupFrame:Hide();
|
|
return;
|
|
end
|
|
|
|
if ( ENABLE_COLORBLIND_MODE == "1" ) then
|
|
if ( not CoinPickupFrame.colorBlind ) then
|
|
CoinPickupCopperIcon:Hide();
|
|
CoinPickupSilverIcon:Hide();
|
|
CoinPickupGoldIcon:Hide();
|
|
CoinPickupText:SetPoint("RIGHT", -38, 18);
|
|
CoinPickupFrame.colorBlind = true;
|
|
end
|
|
|
|
if ( multiplier == 1 ) then
|
|
CoinPickupFrame.symbol = COPPER_AMOUNT_SYMBOL;
|
|
elseif ( multiplier == COPPER_PER_SILVER ) then
|
|
CoinPickupFrame.symbol = SILVER_AMOUNT_SYMBOL;
|
|
elseif ( multiplier == COPPER_PER_GOLD ) then
|
|
CoinPickupFrame.symbol = GOLD_AMOUNT_SYMBOL;
|
|
end
|
|
else
|
|
CoinPickupFrame.symbol = "";
|
|
if ( CoinPickupFrame.colorBlind ) then
|
|
CoinPickupText:SetPoint("RIGHT", -38, 18);
|
|
CoinPickupFrame.colorBlind = nil;
|
|
end
|
|
|
|
|
|
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
|
|
end
|
|
|
|
CoinPickupFrame.owner = parent;
|
|
CoinPickupFrame.money = 1;
|
|
CoinPickupFrame.typing = 0;
|
|
CoinPickupText:SetText(CoinPickupFrame.money .. CoinPickupFrame.symbol);
|
|
CoinPickupLeftButton:Disable();
|
|
CoinPickupRightButton:Enable();
|
|
|
|
CoinPickupFrame:SetPoint("BOTTOMRIGHT", parent, "TOPRIGHT", 0, 0);
|
|
CoinPickupFrame:Show();
|
|
PlaySound("igBackPackCoinSelect");
|
|
end
|
|
|
|
function UpdateCoinPickupFrame(maxMoney)
|
|
if ( not CoinPickupFrame.multiplier ) then
|
|
return;
|
|
end
|
|
CoinPickupFrame.maxMoney = floor(maxMoney / CoinPickupFrame.multiplier);
|
|
if ( CoinPickupFrame.maxMoney == 0 ) then
|
|
if ( CoinPickupFrame.owner ) then
|
|
CoinPickupFrame.owner.hasPickup = 0;
|
|
end
|
|
CoinPickupFrame:Hide();
|
|
return;
|
|
end
|
|
|
|
if ( not CoinPickupFrame.money or not CoinPickupFrame.maxMoney ) then
|
|
-- Failsafe
|
|
return;
|
|
end
|
|
|
|
if ( CoinPickupFrame.money > CoinPickupFrame.maxMoney ) then
|
|
CoinPickupFrame.money = CoinPickupFrame.maxMoney;
|
|
CoinPickupText:SetText(CoinPickupFrame.money .. CoinPickupFrame.symbol);
|
|
end
|
|
|
|
if ( CoinPickupFrame.money == CoinPickupFrame.maxMoney ) then
|
|
CoinPickupRightButton:Disable();
|
|
else
|
|
CoinPickupRightButton:Enable();
|
|
end
|
|
|
|
if ( CoinPickupFrame.money == 1 ) then
|
|
CoinPickupLeftButton:Disable();
|
|
else
|
|
CoinPickupLeftButton:Enable();
|
|
end
|
|
end
|
|
|
|
function CoinPickupFrame_OnChar(self, text)
|
|
if ( text < "0" or text > "9" ) then
|
|
return;
|
|
end
|
|
|
|
if ( self.typing == 0 ) then
|
|
self.typing = 1;
|
|
self.money = 0;
|
|
end
|
|
|
|
local money = (self.money * 10) + text;
|
|
if ( money == self.money ) then
|
|
if( self.money == 0 ) then
|
|
self.money = 1;
|
|
end
|
|
return;
|
|
end
|
|
|
|
if ( money <= self.maxMoney ) then
|
|
self.money = money;
|
|
CoinPickupText:SetText(money .. CoinPickupFrame.symbol);
|
|
if ( money == self.maxMoney ) then
|
|
CoinPickupRightButton:Disable();
|
|
else
|
|
CoinPickupRightButton:Enable();
|
|
end
|
|
if ( money == 1 ) then
|
|
CoinPickupLeftButton:Disable();
|
|
else
|
|
CoinPickupLeftButton:Enable();
|
|
end
|
|
elseif ( money == 0 ) then
|
|
self.money = 1;
|
|
end
|
|
end
|
|
|
|
function CoinPickupFrame_OnKeyDown(self, key)
|
|
if ( key == "BACKSPACE" or key == "DELETE" ) then
|
|
if ( self.typing == 0 or self.money == 1 ) then
|
|
return;
|
|
end
|
|
|
|
self.money = floor(self.money / 10);
|
|
if ( self.money <= 1 ) then
|
|
self.money = 1;
|
|
self.typing = 0;
|
|
CoinPickupLeftButton:Disable();
|
|
else
|
|
CoinPickupLeftButton:Enable();
|
|
end
|
|
CoinPickupText:SetText(self.money .. self.symbol);
|
|
if ( self.money == self.maxMoney ) then
|
|
CoinPickupRightButton:Disable();
|
|
else
|
|
CoinPickupRightButton:Enable();
|
|
end
|
|
elseif ( key == "ENTER" ) then
|
|
CoinPickupFrameOkay_Click();
|
|
elseif ( GetBindingFromClick(key) == "TOGGLEGAMEMENU" ) then
|
|
CoinPickupFrameCancel_Click();
|
|
elseif ( key == "LEFT" or key == "DOWN" ) then
|
|
CoinPickupFrameLeft_Click();
|
|
elseif ( key == "RIGHT" or key == "UP" ) then
|
|
CoinPickupFrameRight_Click();
|
|
elseif ( not ( tonumber(key) ) and GetBindingAction(key) ) then
|
|
--Running bindings not used by the CoinPickup frame allows players to retain control of their characters.
|
|
RunBinding(GetBindingAction(key));
|
|
end
|
|
|
|
COINFRAME_BINDING_CACHE[key] = true;
|
|
end
|
|
|
|
function CoinPickupFrame_OnKeyUp(self, key)
|
|
if ( not ( tonumber(key) ) and GetBindingAction(key) ) then
|
|
--If we don't run the up bindings as well, interesting things happen (like you never stop moving)
|
|
RunBinding(GetBindingAction(key), "up");
|
|
end
|
|
|
|
COINFRAME_BINDING_CACHE[key] = nil;
|
|
end
|
|
|
|
function CoinPickupFrameLeft_Click()
|
|
if ( CoinPickupFrame.money == 1 ) then
|
|
return;
|
|
end
|
|
|
|
CoinPickupFrame.money = CoinPickupFrame.money - 1;
|
|
CoinPickupText:SetText(CoinPickupFrame.money .. CoinPickupFrame.symbol);
|
|
if ( CoinPickupFrame.money == 1 ) then
|
|
CoinPickupLeftButton:Disable();
|
|
end
|
|
CoinPickupRightButton:Enable();
|
|
end
|
|
|
|
function CoinPickupFrameRight_Click()
|
|
if ( CoinPickupFrame.money == CoinPickupFrame.maxMoney ) then
|
|
return;
|
|
end
|
|
|
|
CoinPickupFrame.money = CoinPickupFrame.money + 1;
|
|
CoinPickupText:SetText(CoinPickupFrame.money .. CoinPickupFrame.symbol);
|
|
if ( CoinPickupFrame.money == CoinPickupFrame.maxMoney ) then
|
|
CoinPickupRightButton:Disable();
|
|
end
|
|
CoinPickupLeftButton:Enable();
|
|
end
|
|
|
|
function CoinPickupFrameOkay_Click()
|
|
if ( (CoinPickupFrame.money > 0) and CoinPickupFrame.owner ) then
|
|
MoneyTypeInfo[CoinPickupFrame.owner.moneyType].PickupFunc(CoinPickupFrame, CoinPickupFrame.money * CoinPickupFrame.multiplier);
|
|
end
|
|
CoinPickupFrame:Hide();
|
|
PlaySound("igBackPackCoinOK");
|
|
end
|
|
|
|
function CoinPickupFrameCancel_Click()
|
|
CoinPickupFrame:Hide();
|
|
PlaySound("igBackPackCoinCancel");
|
|
end
|
|
|
|
function CoinPickupFrame_OnHide()
|
|
if ( CoinPickupFrame.owner ) then
|
|
CoinPickupFrame.owner.hasPickup = 0;
|
|
end
|
|
|
|
for key in next, COINFRAME_BINDING_CACHE do
|
|
if ( GetBindingAction(key) ) then
|
|
RunBinding(GetBindingAction(key), "up");
|
|
end
|
|
COINFRAME_BINDING_CACHE[key] = nil;
|
|
end
|
|
|
|
PlaySound("MONEYFRAMECLOSE");
|
|
end
|