Mercurial > wow > askmrrobot
comparison ui/JewelPanel.lua @ 0:ec731d2fe6ba
Version 1.2.12.0
| author | Adam tegen <adam.tegen@gmail.com> |
|---|---|
| date | Tue, 20 May 2014 21:43:23 -0500 |
| parents | |
| children | e77e01abce98 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:ec731d2fe6ba |
|---|---|
| 1 local _, AskMrRobot = ... | |
| 2 | |
| 3 local MAX_GEMS_PER_SLOT = 3 | |
| 4 | |
| 5 -- make the JewelPanel inherit from a dummy frame | |
| 6 AskMrRobot.JewelPanel = AskMrRobot.inheritsFrom(AskMrRobot.Frame) | |
| 7 | |
| 8 -- JewelPanel constructor | |
| 9 function AskMrRobot.JewelPanel:new (name, parent) | |
| 10 -- create a new frame if one isn't supplied | |
| 11 local o = AskMrRobot.Frame:new(name, parent) | |
| 12 | |
| 13 -- make the object a JewelPanel instanct | |
| 14 setmetatable(o, { __index = AskMrRobot.JewelPanel}) | |
| 15 | |
| 16 -- set the height and border of the newly created jewel frame | |
| 17 o:SetHeight(95) | |
| 18 o:SetBackdrop({edgeFile = "Interface/Tooltips/UI-Tooltip-Border", edgeSize = 16}) | |
| 19 | |
| 20 -- setup the slot name | |
| 21 o._slotName = o:CreateFontString(nil, "ARTWORK", "GameFontWhite") | |
| 22 o._slotName:SetPoint("TOPLEFT", 11, -10) | |
| 23 o._slotName:SetWidth(80) | |
| 24 o._slotName:SetJustifyH("LEFT") | |
| 25 | |
| 26 -- setup the item icon frame | |
| 27 o._itemIcon = AskMrRobot.ItemIcon:new() | |
| 28 o._itemIcon:SetParent(o) | |
| 29 o._itemIcon:SetRoundBorder() | |
| 30 o._itemIcon:SetPoint("TOPLEFT", 9, -32) | |
| 31 o._itemIcon:SetWidth(48) | |
| 32 o._itemIcon:SetHeight(48) | |
| 33 | |
| 34 -- initialize the current gems array | |
| 35 o._currentGems = {} | |
| 36 o._optimizedGemText = {} | |
| 37 o._optimizedGemIcons = {} | |
| 38 -- for each row of gems | |
| 39 for i = 1, MAX_GEMS_PER_SLOT do | |
| 40 -- create an item icon for the currently equiped gem | |
| 41 local gemIcon = AskMrRobot.GemIcon:new(nil, o) | |
| 42 gemIcon:SetPoint("TOPLEFT", 100, 18 - 27 * i) | |
| 43 gemIcon:SetWidth(24) | |
| 44 gemIcon:SetHeight(24) | |
| 45 gemIcon:SetRoundBorder() | |
| 46 o._currentGems[i] = gemIcon | |
| 47 | |
| 48 -- create an item icon for the optimized gem | |
| 49 gemIcon = AskMrRobot.GemIcon:new(nil, o) | |
| 50 gemIcon:SetPoint("TOPLEFT", 170, 18 - 27 * i) | |
| 51 gemIcon:SetWidth(24) | |
| 52 gemIcon:SetHeight(24) | |
| 53 gemIcon:SetRoundBorder() | |
| 54 o._optimizedGemIcons[i] = gemIcon | |
| 55 | |
| 56 -- create the optimized gem text | |
| 57 local gemText = o:CreateFontString(nil, "ARTWORK", "GameFontWhite") | |
| 58 gemText:SetPoint("TOPLEFT", 200, 12 - 27 * i) | |
| 59 gemText:SetPoint("RIGHT", -30) | |
| 60 gemText:SetJustifyH("LEFT") | |
| 61 o._optimizedGemText[i] = gemText | |
| 62 end | |
| 63 | |
| 64 -- return the JewelPanel instance | |
| 65 return o | |
| 66 end | |
| 67 | |
| 68 -- set the item link for this JewelPanel | |
| 69 -- this updates the item icon, the slot name, and the tooltip | |
| 70 function AskMrRobot.JewelPanel:SetItemLink(slotName, itemLink) | |
| 71 -- set the item icon and the tooltip | |
| 72 self._itemIcon:SetItemLink(itemLink) | |
| 73 | |
| 74 if itemLink then | |
| 75 local _, _, rarity = GetItemInfo(itemLink) | |
| 76 if rarity then | |
| 77 local r,g,b = GetItemQualityColor(rarity) | |
| 78 self._itemIcon:SetBackdropBorderColor(r,g,b,1) | |
| 79 else | |
| 80 self._itemIcon:SetBackdropBorderColor(1,1,1,1) | |
| 81 end | |
| 82 else | |
| 83 self._itemIcon:SetBackdropBorderColor(1,1,1,1) | |
| 84 end | |
| 85 | |
| 86 -- set the slot name | |
| 87 self._slotName:SetText(slotName) | |
| 88 end | |
| 89 | |
| 90 -- set the optimized gem information (array of {id, color, enchantId}) | |
| 91 -- SetItemLink must be called first | |
| 92 function AskMrRobot.JewelPanel:SetOptimizedGems(optimizedGems, showGems) | |
| 93 | |
| 94 -- get the item link | |
| 95 local itemLink = self._itemIcon.itemLink | |
| 96 | |
| 97 if not itemLink then return end | |
| 98 | |
| 99 -- for all of the gem rows in this control | |
| 100 local itemId = AskMrRobot.getItemIdFromLink(itemLink) | |
| 101 | |
| 102 local gemCount = 0 | |
| 103 | |
| 104 for i = 1, MAX_GEMS_PER_SLOT do | |
| 105 -- get the optimized text, optimized icon, and current icon for the row | |
| 106 local text = self._optimizedGemText[i] | |
| 107 local optimizedIcon = self._optimizedGemIcons[i] | |
| 108 local currentIcon = self._currentGems[i] | |
| 109 | |
| 110 -- get the current gem in the specified slot | |
| 111 local currentGemLink = select(2, GetItemGem(itemLink, i)) | |
| 112 | |
| 113 -- if there is a gem to add (or remove) | |
| 114 --if i <= #optimizedGems or currentGemLink then | |
| 115 if i <= #optimizedGems or currentGemLink then | |
| 116 -- set the current gem icon / tooltip | |
| 117 currentIcon:SetItemLink(currentGemLink) | |
| 118 | |
| 119 local currentGemId = AskMrRobot.getItemIdFromLink(currentGemLink) | |
| 120 | |
| 121 local optimizedGemLink = nil | |
| 122 if i <= #optimizedGems then | |
| 123 -- make a link for the optimized gem | |
| 124 optimizedGemLink = select(2, GetItemInfo(optimizedGems[i].id)) | |
| 125 | |
| 126 if not optimizedGemLink and optimizedGems[i].id and itemId then | |
| 127 AskMrRobot.RegisterItemInfoCallback(optimizedGems[i].id, function(name, link) | |
| 128 optimizedIcon:SetItemLink(link) | |
| 129 end) | |
| 130 end | |
| 131 end | |
| 132 | |
| 133 if showGems[i] and optimizedGems[i] and optimizedGems[i].color then | |
| 134 gemCount = gemCount + 1 | |
| 135 -- set the optimized gem text | |
| 136 text:SetTextColor(1,1,1) | |
| 137 text:SetText(AskMrRobot.alternateGemName[optimizedGems[i].id] or (optimizedGems[i].enchantId ~= 0 and AskMrRobot.getEnchantName(optimizedGems[i].enchantId)) or GetItemInfo(optimizedGems[i].id)) | |
| 138 currentIcon:Show() | |
| 139 | |
| 140 -- load the item image / tooltip | |
| 141 optimizedIcon:SetItemLink(optimizedGemLink) | |
| 142 optimizedIcon:Show() | |
| 143 optimizedIcon:SetBackdropBorderColor(1,1,1) | |
| 144 currentIcon:SetBackdropBorderColor(1,1,1) | |
| 145 else | |
| 146 if optimizedGems[i] and optimizedGems[i].color then | |
| 147 text:SetText("no change") | |
| 148 text:SetTextColor(0.5,0.5,0.5) | |
| 149 currentIcon:Show() | |
| 150 gemCount = gemCount + 1 | |
| 151 else | |
| 152 text:SetText('') | |
| 153 currentIcon:Hide() | |
| 154 end | |
| 155 optimizedIcon:SetItemLink(nil) | |
| 156 optimizedIcon:Hide() | |
| 157 end | |
| 158 | |
| 159 currentIcon:SetGemColor(optimizedGems[i] and optimizedGems[i].color) | |
| 160 optimizedIcon:SetGemColor(optimizedGems[i] and optimizedGems[i].color) | |
| 161 | |
| 162 -- show the gem row | |
| 163 text:Show() | |
| 164 else | |
| 165 -- hide the gem row | |
| 166 text:Hide() | |
| 167 optimizedIcon:Hide() | |
| 168 currentIcon:Hide() | |
| 169 end | |
| 170 end | |
| 171 | |
| 172 local y1 = 0 | |
| 173 local y2 = 0 | |
| 174 if gemCount == 1 then | |
| 175 y1 = 27 | |
| 176 elseif gemCount == 2 then | |
| 177 y1 = 9 | |
| 178 y2 = 4 | |
| 179 end | |
| 180 | |
| 181 for i = 1, MAX_GEMS_PER_SLOT do | |
| 182 self._optimizedGemText[i]:SetPoint("TOPLEFT", 200, 12 - (27 + y2) * i - y1) | |
| 183 self._optimizedGemIcons[i]:SetPoint("TOPLEFT", 170, 18 - (27 + y2) * i - y1) | |
| 184 self._currentGems[i]:SetPoint("TOPLEFT", 100, 18 - (27 + y2) * i - y1) | |
| 185 end | |
| 186 end |
