diff --git a/Character.lua b/Character.lua
index 51beeb6..39f9de6 100644
--- a/Character.lua
+++ b/Character.lua
@@ -4,6 +4,8 @@ local addonName, addonTable = ...;
Usage note:
The methods of this object manipulate the Blizzard APIs to populate the fields of the Character object.
To retrieve the final data, access the tables directly.
+
+ Rather than getter+setter, I've gone with updater+getter here. I feel like it makes sense.
--]]
local Character = {};
Character.__index = Character;
@@ -60,46 +62,20 @@ function Character:new(db)
setmetatable(self, Character);
self.db = db;
- self.db.currencies = {}; -- <name, count>
- self.db.heirlooms = {}; -- <name, location>
- self.db.conveyable = {}; -- <name, count>
- self.miscData = {}; -- <key, data>
-
-
-
- -- Subtle bug averted here. If these functions are defined using colon syntax, it creates conflicting "self" references as written
- local function UpdateCurrencies()
- self:GetCurrencyData();
- self.db.char.currency = self.currencies;
- addon:RedrawCurrencyFrame()
- end
-
- local function UpdateItems()
- self:GetHeirloomData(1);
- self:GetConveyableData(1);
- if self.isBankOpen then
- -- print("Scanning bank too!")
- self:GetHeirloomData(0);
- self:GetConveyableData(0);
- end
- self.db.char.heirloom = self.heirlooms
- self.db.char.conveyable = self.conveyable
- end
+ -- self.db.currencies = {}; -- <name, count>
+ -- self.db.heirlooms = {}; -- <name, location>
+ -- self.db.conveyable = {}; -- <name, count>
+ -- self.miscData = {}; -- <key, data>
return self;
end
-function Character:GetName()
- return GetUnitName("player")
-end
-
--[[
Collects the names and quantities of the character's Currencies.
NOTE: Includes gold as well, though this is not considered a Currency by Blizzard
- @return currencies - an associative array mapping currency names to their quantities
--]]
-function Character:GetCurrencyData()
- local currencies = {};
+function Character:UpdateCurrencies()
+ wipe(self.db.currencies)
self:ExpandCurrencyHeaders();
@@ -108,15 +84,12 @@ function Character:GetCurrencyData()
local name, isHeader, isExpanded, isUnused, isWatched, count, extraCurrencyType, icon, itemID = GetCurrencyListInfo(i);
if (not isHeader) then
- currencies[name] = count;
+ self.db.currencies[name] = count;
end
end
-- Using a global string, en-US "Money", as key.
- currencies[MONEY] = GetMoney();
-
- self.currencies = currencies;
- return currencies;
+ self.db.currencies[MONEY] = GetMoney();
end
--[[
@@ -139,106 +112,50 @@ function Character:ExpandCurrencyHeaders()
end
--[[
- Collects a list of the heirloom items the character possesses, and their general locations (bank, bags, equipped).
- NOTE: Will fail to detect any heirlooms currently in a mailbox.
- @params location - 1 for bags, 2 for bank
- @return heirlooms - an associative array mapping heirloom itemIDs to their general location
--]]
function Character:GetHeirloomData(location)
- local heirlooms = {};
-
- local link
- if location == 1 then
- for bag = 0, NUM_BAG_SLOTS do
- for slot = 1, GetContainerNumSlots(bag) do
- link = GetContainerItemLink(bag, slot)
- if link then
- ItemScanner:AddToItemPool(link, function(link)
- local name, id, rarity = GetItemInfo(link)
- if rarity == 7 then
- heirlooms[name] = {bag, slot}
- end
- end)
- end
- end
- end
- else
- for bag = NUM_BAG_SLOTS, NUM_BAG_SLOTS+NUM_BANKBAGSLOTS do
- if bag == NUM_BAG_SLOTS then bag = 0 end -- a little hackish; the main bank inventory is slot 0 and bank bags start at NUM_BAG_SLOTS+1
- for slot = 1, GetContainerNumSlots(bag) do
- link = GetContainerItemLink(bag, slot)
- if link then
- ItemScanner:AddToItemPool(link, function(link)
- local name, id, rarity = GetItemInfo(link)
- if rarity == 7 then
- heirlooms[name] = {bag, slot}
- end
- end)
- end
- end
- end
- end
- self.heirlooms = heirlooms;
- return heirlooms;
end
+function Character:GetBags()
+
+end
--[[
- Collects the names and quantities of conveyable items the character possesses, and their general locations (bank, bags, equipped).
- Conveyable is defined as any item that is not soulbound or an heirloom.
- @params location - 1 for bags, 2 for bank
- @return conveyables - an associative array mapping conveyable itemIDs to their general locations
--]]
-function Character:UpdateBags(location)
- local conveyables = {};
+function Character:UpdateBags()
+ wipe(self.db.bags)
local link, name, link, rarity, count
- if location == 1 then
- for bag = 0, NUM_BAG_SLOTS do
- for slot = 1, GetContainerNumSlots(bag) do
- link = GetContainerItemLink(bag, slot)
- if link then
- ItemScanner:AddToItemPool(link, function(link)
- -- local name, id, rarity = GetItemInfo(link)
- -- if rarity > 1 and rarity < 7 and not IsSoulboundItem(bag, slot) then -- skip heirlooms and vendor trash
- -- count = select(2, GetContainerItemInfo(bag, slot))
- -- if not conveyables[name] then
- -- conveyables[name] = count
- -- else
- -- conveyables[name] = conveyables[name] +count
- -- end
- -- end
-
- end)
- end
+
+ for bag = 0, NUM_BAG_SLOTS do
+ for slot = 1, GetContainerNumSlots(bag) do
+ link = GetContainerItemLink(bag, slot)
+ if link then
+ ItemScanner:AddToItemPool(link, function(link)
+ tinsert(self.db.bags, {bag, slot, link, count})
+ end)
end
end
- else
- for bag = NUM_BAG_SLOTS, NUM_BAG_SLOTS+NUM_BANKBAGSLOTS do
- if bag == NUM_BAG_SLOTS then bag = 0 end -- a little hackish; the main bank inventory is slot 0 and bank bags start at NUM_BAG_SLOTS+1
- for slot = 1, GetContainerNumSlots(bag) do
- link = GetContainerItemLink(bag, slot)
- if link then
- ItemScanner:AddToItemPool(link, function(link)
- local name, id, rarity = GetItemInfo(link)
- if rarity > 1 and rarity < 7 and not IsSoulboundItem(bag, slot) then -- skip heirlooms and vendor trash
- count = select(2, GetContainerItemInfo(bag, slot))
- if not conveyables[name] then
- conveyables[name] = count
- else
- conveyables[name] = conveyables[name] +count
- end
- end
- end)
- end
+ end
+end
+
+function Character:UpdateBank()
+ wipe(self.db.bank)
+
+ local link, name, link, rarity, count
+ for bag = NUM_BAG_SLOTS, NUM_BAG_SLOTS+NUM_BANKBAGSLOTS do
+ if bag == NUM_BAG_SLOTS then bag = 0 end -- a little hackish; the main bank inventory is slot 0 and bank bags start at NUM_BAG_SLOTS+1
+ for slot = 1, GetContainerNumSlots(bag) do
+ link = GetContainerItemLink(bag, slot)
+ if link then
+ ItemScanner:AddToItemPool(link, function(link)
+ tinsert(self.db.bank, {bag, slot, link, count})
+ end)
end
end
end
-
- self.conveyables = conveyables;
- return conveyables;
end
--[[
diff --git a/ChillEffectAlts.lua b/ChillEffectAlts.lua
index f2bb6b4..d230c9a 100644
--- a/ChillEffectAlts.lua
+++ b/ChillEffectAlts.lua
@@ -1,6 +1,9 @@
local addonName, addonTable = ...;
ChillEffectAlts = LibStub("AceAddon-3.0"):NewAddon("ChillEffectAlts", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("ChillEffectAlts", true)
+local CurrenciesModule = addonTable.Currencies
+local CharacterModule = addonTable.Character
+local Character
function ChillEffectAlts:OnInitialize()
local defaults = {
@@ -10,7 +13,7 @@ function ChillEffectAlts:OnInitialize()
inventory = {},
},
}
- self.db = LibStub("AceDB-3.0"):New("CEAltsDB")
+ self.db = LibStub("AceDB-3.0"):New("CEAltsDB", defaults)
SLASH_ChillEffectAlts1 = "/alt"
SlashCmdList["ChillEffectAlts"] = function()
@@ -82,41 +85,53 @@ function ChillEffectAlts:OnInitialize()
end)
end
+local function UpdateCurrencies()
+ assert(Character)
+ Character:UpdateCurrencies()
+ CurrenciesModule:RedrawCurrencyFrame()
+end
+
+local function UpdateBags()
+ assert(Character)
+ Character:UpdateBags()
+end
+
+local function UpdateBank()
+ assert(Character)
+ Character:UpdateBank()
+end
+
+local function UpdateVoidStorage()
+ assert(Character)
+ Character:UpdateVoidStorage()
+end
+
+function ChillEffectAlts:BANKFRAME_OPENED()
+ self.isBankOpen = true
+ self:UpdateBank()
+end
+
+function ChillEffectAlts:BANKFRAME_CLOSED()
+ self.isBankOpen = false
+end
+
local gui_built = false
function ChillEffectAlts:OnEnable()
if not gui_built then
- addonTable.Currencies:CreateCurrencyFrame()
+ CurrenciesModule:CreateCurrencyFrame()
end
- local character = addonTable.Character:new(self.db.char)
- function self:RedrawCurrencyFrame(self, currencyOrder)
- addonTable.Currencies:RedrawCurrencyFrame(currencyOrder)
- end
+ Character = CharacterModule:new(self.db.char)
-- Track the open state of the bank. Can't check for IsShown, because addons
self.isBankOpen = false;
- addon:RegisterEvent("BANKFRAME_OPENED", function() self.isBankOpen = true self.UpdateItems() end)
- addon:RegisterEvent("BANKFRAME_CLOSED", function() self.isBankOpen = false end)
-
- local function UpdateCurrencies()
- character.UpdateCurrencies()
- self.db.char.currencies = character.GetCurrencies()
- self:RedrawCurrencyFrame()
- end
+ self:RegisterEvent("BANKFRAME_OPENED")
+ self:RegisterEvent("BANKFRAME_CLOSED")
- local function UpdateBags()
- character.UpdateBags()
- self.db.char.bags = character.GetBags()
- self.db.char.heirlooms = character.GetHeirlooms()
- end
-
- local function UpdateInventory()
-
- end
- addon:RegisterEvent("PLAYER_ENTERING_WORLD", UpdateCurrencies)
- addon:RegisterEvent("PLAYER_MONEY", UpdateCurrencies)
- addon:RegisterEvent("CURRENCY_DISPLAY_UPDATE", UpdateCurrencies)
+ self:RegisterEvent("PLAYER_ENTERING_WORLD", UpdateCurrencies)
+ self:RegisterEvent("PLAYER_MONEY", UpdateCurrencies)
+ self:RegisterEvent("CURRENCY_DISPLAY_UPDATE", UpdateCurrencies)
- addon:RegisterEvent("BAG_UPDATE_DELAYED", UpdateBags)
+ self:RegisterEvent("BAG_UPDATE_DELAYED", UpdateBags)
end
\ No newline at end of file