from retail
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
if not WeakAuras.IsLibsOK() then return end
|
||||
|
||||
local AddonName, Private = ...
|
||||
|
||||
local L = WeakAuras.L
|
||||
|
||||
Private.TextureBase = {}
|
||||
|
||||
local SQRT2 = sqrt(2)
|
||||
local function GetRotatedPoints(degrees, scaleForFullRotate)
|
||||
local angle = rad(135 - degrees)
|
||||
local factor = scaleForFullRotate and 1 or SQRT2
|
||||
local vx = math.cos(angle) / factor
|
||||
local vy = math.sin(angle) / factor
|
||||
|
||||
return 0.5+vx,0.5-vy , 0.5-vy,0.5-vx , 0.5+vy,0.5+vx , 0.5-vx,0.5+vy
|
||||
end
|
||||
|
||||
local funcs = {
|
||||
ClearAllPoints = function(self)
|
||||
self.texture:ClearAllPoints()
|
||||
end,
|
||||
|
||||
SetAllPoints = function(self, ...)
|
||||
self.texture:SetAllPoints(...)
|
||||
end,
|
||||
|
||||
DoTexCoord = function(self)
|
||||
local mirror_h, mirror_v = self.mirror_h, self.mirror_v
|
||||
if(self.mirror) then
|
||||
mirror_h = not mirror_h
|
||||
end
|
||||
local ulx,uly , llx,lly , urx,ury , lrx,lry
|
||||
= GetRotatedPoints(self.effectiveRotation, self.canRotate)
|
||||
if(mirror_h) then
|
||||
if(mirror_v) then
|
||||
self.texture:SetTexCoord(lrx,lry , urx,ury , llx,lly , ulx,uly)
|
||||
else
|
||||
self.texture:SetTexCoord(urx,ury , lrx,lry , ulx,uly , llx,lly)
|
||||
end
|
||||
else
|
||||
if(mirror_v) then
|
||||
self.texture:SetTexCoord(llx,lly , ulx,uly , lrx,lry , urx,ury)
|
||||
else
|
||||
self.texture:SetTexCoord(ulx,uly , llx,lly , urx,ury , lrx,lry)
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
SetMirrorFromScale = function(self, h, v)
|
||||
if self.mirror_h == h and self.mirror_v == v then
|
||||
return
|
||||
end
|
||||
self.mirror_h = h
|
||||
self.mirror_v = v
|
||||
self:DoTexCoord()
|
||||
end,
|
||||
|
||||
SetMirror = function(self, b)
|
||||
if self.mirror == b then
|
||||
return
|
||||
end
|
||||
self.mirror = b
|
||||
self:DoTexCoord()
|
||||
end,
|
||||
|
||||
SetTexture = function(self, file)
|
||||
self.textureName = file
|
||||
self.texture:SetTexture(file)
|
||||
self:DoTexCoord()
|
||||
end,
|
||||
|
||||
SetVertexColor = function(self, r, g, b, a)
|
||||
self.texture:SetVertexColor(r, g, b,a)
|
||||
end,
|
||||
|
||||
SetDesaturated = function(self, b)
|
||||
self.texture:SetDesaturated(b)
|
||||
end,
|
||||
|
||||
SetAnimRotation = function(self, degrees)
|
||||
self.animRotation = degrees
|
||||
self:UpdateEffectiveRotation()
|
||||
end,
|
||||
|
||||
SetRotation = function(self, degrees)
|
||||
self.rotation = degrees
|
||||
self:UpdateEffectiveRotation()
|
||||
end,
|
||||
|
||||
UpdateEffectiveRotation = function(self)
|
||||
self.effectiveRotation = self.animRotation or self.rotation
|
||||
self:DoTexCoord()
|
||||
end,
|
||||
|
||||
GetBaseRotation = function(self)
|
||||
return self.rotation
|
||||
end
|
||||
}
|
||||
|
||||
function Private.TextureBase.create(frame)
|
||||
local base = {}
|
||||
|
||||
for funcName, func in pairs(funcs) do
|
||||
base[funcName] = func
|
||||
end
|
||||
|
||||
local texture = frame:CreateTexture()
|
||||
|
||||
base.texture = texture
|
||||
|
||||
return base
|
||||
end
|
||||
|
||||
-- TODO better type for options
|
||||
function Private.TextureBase.modify(base, options)
|
||||
base.canRotate = options.canRotate
|
||||
base.mirror = options.mirror
|
||||
base.rotation = options.rotation
|
||||
base.effectiveRotation = base.rotation
|
||||
base.textureWrapMode = options.textureWrapMode
|
||||
|
||||
base.texture:SetDesaturated(options.desaturate)
|
||||
base.texture:SetBlendMode(options.blendMode)
|
||||
base:DoTexCoord()
|
||||
end
|
||||
Reference in New Issue
Block a user