from retail

This commit is contained in:
NoM0Re
2025-01-26 21:52:59 +01:00
parent f9bf9c3c16
commit 0e761a6814
6 changed files with 416 additions and 69 deletions
+126
View File
@@ -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
+20 -69
View File
@@ -84,7 +84,7 @@ local function create(parent)
region:SetResizable(true);
region:SetMinResize(1, 1);
local texture = region:CreateTexture();
local texture = Private.TextureBase.create(region)
region.texture = texture;
texture:SetAllPoints(region);
@@ -93,73 +93,40 @@ local function create(parent)
return region;
end
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 function modify(parent, region, data)
Private.regionPrototype.modify(parent, region, data);
region.texture:SetDesaturated(data.desaturate)
region:SetWidth(data.width);
region:SetHeight(data.height);
region.width = data.width;
region.height = data.height;
region.scalex = 1;
region.scaley = 1;
region.texture:SetBlendMode(data.blendMode);
region.mirror = data.mirror
local function DoTexCoord()
local mirror_h, mirror_v = region.mirror_h, region.mirror_v;
if(region.mirror) then
mirror_h = not mirror_h;
end
local ulx,uly , llx,lly , urx,ury , lrx,lry
= GetRotatedPoints(region.effectiveRotation, data.rotate)
if(mirror_h) then
if(mirror_v) then
region.texture:SetTexCoord(lrx,lry , urx,ury , llx,lly , ulx,uly);
else
region.texture:SetTexCoord(urx,ury , lrx,lry , ulx,uly , llx,lly);
end
else
if(mirror_v) then
region.texture:SetTexCoord(llx,lly , ulx,uly , lrx,lry , urx,ury);
else
region.texture:SetTexCoord(ulx,uly , llx,lly , urx,ury , lrx,lry);
end
end
end
region.rotation = data.rotation
region.effectiveRotation = region.rotation
Private.TextureBase.modify(region.texture, {
canRotate = data.rotate,
desaturate = data.desaturate,
blendMode = data.blendMode,
mirror = data.mirror,
rotation = data.rotation,
textureWrapMode = data.textureWrapMode
})
function region:Scale(scalex, scaley)
region.scalex = scalex;
region.scaley = scaley;
local mirror_h, mirror_v
if(scalex < 0) then
region.mirror_h = true;
mirror_h = true
scalex = scalex * -1;
else
region.mirror_h = nil;
end
region:SetWidth(region.width * scalex);
if(scaley < 0) then
scaley = scaley * -1;
region.mirror_v = true;
else
region.mirror_v = nil;
mirror_v = true
end
region:SetHeight(region.height * scaley);
DoTexCoord();
region.texture:SetMirrorFromScale(mirror_h, mirror_v)
end
function region:SetRegionWidth(width)
@@ -173,26 +140,17 @@ local function modify(parent, region, data)
end
function region:SetMirror(mirror)
region.mirror = mirror
DoTexCoord()
self.texture:SetMirror(mirror)
end
function region:Update()
if self.state.texture then
self:SetTexture(self.state.texture)
self.texture:SetTexture(self.state.texture)
end
self:UpdateProgress()
end
function region:SetTexture(texture)
if self.textureName == texture then
return
end
self.textureName = texture
self.texture:SetTexture(self.textureName);
DoTexCoord()
end
region:SetTexture(data.texture)
region.texture:SetTexture(data.texture)
function region:Color(r, g, b, a)
region.color_r = r;
@@ -224,26 +182,19 @@ local function modify(parent, region, data)
region:Color(data.color[1], data.color[2], data.color[3], data.color[4]);
function region:SetDesaturated(b)
region.texture:SetDesaturated(b);
self.texture:SetDesaturated(b)
end
function region:SetAnimRotation(degrees)
region.animRotation = degrees
region:UpdateEffectiveRotation()
self.texture:SetAnimRotation(degrees)
end
function region:SetRotation(degrees)
region.rotation = degrees
region:UpdateEffectiveRotation()
end
function region:UpdateEffectiveRotation()
region.effectiveRotation = region.animRotation or region.rotation
DoTexCoord()
self.texture:SetRotation(degrees)
end
function region:GetBaseRotation()
return region.rotation
return self.texture:GetBaseRotation()
end
region:SetRotation(data.rotation)
+161
View File
@@ -0,0 +1,161 @@
if not WeakAuras.IsLibsOK() then return end
local AddonName, Private = ...
local L = WeakAuras.L
local default = function(parentType)
local defaults = {
textureVisible = true,
textureTexture = "Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura3",
textureDesaturate = false,
textureColor = {1, 1, 1, 1},
textureBlendMode = "BLEND",
textureMirror = false,
textureRotate = false,
textureRotation = 0,
anchor_mode = "area",
self_point = "CENTER",
anchor_point = "CENTER",
width = 32,
height = 32,
scale = 1,
mirror = false,
rotate = false,
}
if parentType == "aurabar" then
defaults.anchor_area = "bar"
else
defaults.anchor_area = "ALL"
end
return defaults
end
local properties = {
textureVisible = {
display = L["Visibility"],
setter = "SetVisible",
type = "bool",
defaultProperty = true
},
textureDesaturate = {
display = L["Desaturate"],
setter = "SetDesaturated",
type = "bool",
},
textureColor = {
display = L["Color"],
setter = "SetColor",
type = "color"
},
textureMirror = {
display = L["Mirror"],
setter = "SetMirror",
type = "bool"
},
textureRotation = {
display = L["Rotation"],
setter = "SetRotation",
type = "number",
min = 0,
max = 360,
bigStep = 1,
default = 0
}
-- TODO width?
-- TODO height?
--
}
local funcs = {
SetDesaturated = function(self, b)
self.texture:SetDesaturated(b)
end,
SetColor = function(self, ...)
self.texture:SetVertexColor(...)
end,
SetMirror = function(self, b)
self.texture:SetMirror(b)
end,
SetRotation = function(self, rotation)
self.texture:SetRotation(rotation)
end,
SetVisible = function(self, visible)
self.visible = visible
if visible then
self:Show()
else
self:Hide()
end
end
}
local function create()
local region = CreateFrame("Frame", nil, UIParent)
--region:SetFlattensRenderLayers(true)
for k, v in pairs(funcs) do
region[k] = v
end
region.texture = Private.TextureBase.create(region)
region.texture:ClearAllPoints()
region.texture:SetAllPoints(region)
return region
end
local function onAcquire(subRegion)
subRegion:Show()
end
local function onRelease(subRegion)
subRegion:Hide()
end
local function modify(parent, region, parentData, data, first)
region.parent = parent
region:SetParent(parent)
region.scale = data.scale or 1
local arg1 = data.anchor_mode == "point" and data.anchor_point or data.anchor_area
local arg2 = data.anchor_mode == "point" and data.self_point or nil
if data.anchor_mode == "point" then
region:SetSize(data.width or 0, data.height or 0)
end
region.Anchor = function()
region:ClearAllPoints()
parent:AnchorSubRegion(region, data.anchor_mode, arg1, arg2, data.xOffset, data.yOffset)
end
Private.TextureBase.modify(region.texture, {
canRotate = data.textureRotate,
desaturate = data.textureDesaturate,
blendMode = data.textureBlendMode,
mirror = data.textureMirror,
rotation = data.textureRotation,
textureWrapMode = "CLAMPTOBLACKADDITIVE"
})
region:SetVisible(data.textureVisible)
region:SetDesaturated(data.textureDesaturate)
region:SetColor(data.textureColor[1], data.textureColor[2], data.textureColor[3], data.textureColor[4])
region.texture:SetTexture(data.textureTexture)
end
local function supports(regionType)
return regionType == "texture"
or regionType == "progresstexture"
or regionType == "icon"
or regionType == "aurabar"
or regionType == "text"
end
WeakAuras.RegisterSubRegionType("subtexture", L["Texture"], supports, create, modify, onAcquire, onRelease, default, nil, properties)
+2
View File
@@ -56,6 +56,7 @@ SubscribableObject.lua
RegionTypes\SmoothStatusBarMixin.lua
RegionTypes\RegionPrototype.lua
RegionTypes\ProgressTexture.lua
BaseRegions\Texture.lua
RegionTypes\Texture.lua
RegionTypes\AuraBar.lua
RegionTypes\Icon.lua
@@ -74,6 +75,7 @@ SubRegionTypes\Glow.lua
SubRegionTypes\Tick.lua
SubRegionTypes\Model.lua
SubRegionTypes\StopMotion.lua
SubRegionTypes\Texture.lua
#Misc
DiscordList.lua
@@ -0,0 +1,106 @@
if not WeakAuras.IsLibsOK() then return end
local AddonName, OptionsPrivate = ...
local L = WeakAuras.L;
local function createOptions(parentData, data, index, subIndex)
local pointAnchors = {}
local areaAnchors = {}
for child in OptionsPrivate.Private.TraverseLeafsOrAura(parentData) do
WeakAuras.Mixin(pointAnchors, OptionsPrivate.Private.GetAnchorsForData(child, "point"))
WeakAuras.Mixin(areaAnchors, OptionsPrivate.Private.GetAnchorsForData(child, "area"))
end
-- TODO verfiy order being ordered
local options = {
__title = L["Texture %s"]:format(subIndex),
__order = 1,
textureVisible = {
type = "toggle",
width = WeakAuras.doubleWidth,
name = L["Show Texture"],
order = 1,
},
textureTexture = {
type = "input",
width = WeakAuras.doubleWidth - 0.15,
name = L["Texture"],
order = 2,
},
chooseTexture = {
type = "execute",
width = 0.15,
name = L["Choose"],
order = 2,
func = function()
local path = { "subRegions", index }
local paths = {}
for child in OptionsPrivate.Private.TraverseLeafsOrAura(parentData) do
paths[child.id] = path
end
OptionsPrivate.OpenTexturePicker(parentData, paths, {
texture = "textureTexture",
color = "textureColor",
mirror = "textureMirror",
blendMode = "textureBlendMode"
}, OptionsPrivate.Private.texture_types, nil, true)
end,
imageWidth = 24,
imageHeight = 24,
control = "WeakAurasIcon",
image = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\browse",
},
textureColor = {
type = "color",
width = WeakAuras.normalWidth,
name = L["Color"],
hasAlpha = true,
order = 3
},
textureDesaturate = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Desaturate"],
order = 4,
},
textureBlendMode = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Blend Mode"],
order = 11,
values = OptionsPrivate.Private.blend_types
},
textureMirror = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Mirror"],
order = 12
},
textureRotate = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Allow Full Rotation"],
order = 13,
},
textureRotation = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Rotation"],
min = 0,
max = 360,
step = 1,
bigStep = 3,
order = 14,
},
}
OptionsPrivate.commonOptions.PositionOptionsForSubElement(data, options, 15, areaAnchors, pointAnchors)
OptionsPrivate.AddUpDownDeleteDuplicate(options, parentData, index, "subtexture")
return options
end
WeakAuras.RegisterSubRegionOptions("subtexture", createOptions, L["Shows a Texture"]);
+1
View File
@@ -38,6 +38,7 @@ SubRegionOptions\Glow.lua
SubRegionOptions\Tick.lua
SubRegionOptions\Model.lua
SubRegionOptions\StopMotion.lua
SubRegionOptions\Texture.lua
Cache.lua