port newest WeakAurasStopMotion and include it

https://www.patreon.com/posts/new-stop-motion-119300059
This commit is contained in:
NoM0Re
2025-02-06 23:22:05 +01:00
parent d3c8a9bf3e
commit 5cdb9aed28
66 changed files with 668 additions and 121 deletions
+2 -2
View File
@@ -7,8 +7,8 @@ local default = {
progressSource = {-1, "" }, progressSource = {-1, "" },
adjustedMax = "", adjustedMax = "",
adjustedMin = "", adjustedMin = "",
foregroundTexture = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\StopMotion", foregroundTexture = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\stopmotion",
backgroundTexture = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\StopMotion", backgroundTexture = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\stopmotion",
desaturateBackground = false, desaturateBackground = false,
desaturateForeground = false, desaturateForeground = false,
sameTexture = true, sameTexture = true,
+1 -1
View File
@@ -9,7 +9,7 @@ local default = function(parentType)
stopmotionVisible = true, stopmotionVisible = true,
barModelClip = true, barModelClip = true,
stopmotionTexture = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\StopMotion", stopmotionTexture = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\stopmotion",
stopmotionDesaturate = false, stopmotionDesaturate = false,
stopmotionColor = {1, 1, 1, 1}, stopmotionColor = {1, 1, 1, 1},
stopmotionBlendMode = "BLEND", stopmotionBlendMode = "BLEND",
+22 -116
View File
@@ -3124,126 +3124,32 @@ Private.reset_ranged_swing_spells = {
[GetSpellInfo(5384)] = true, -- Feign Death [GetSpellInfo(5384)] = true, -- Feign Death
} }
WeakAuras.StopMotion = {} WeakAuras.StopMotion = WeakAuras.StopMotion or {}
WeakAuras.StopMotion.texture_types = { WeakAuras.StopMotion.texture_types = WeakAuras.StopMotion.texture_types or {}
} WeakAuras.StopMotion.texture_data = WeakAuras.StopMotion.texture_data or {}
WeakAuras.StopMotion.texture_types.Basic = { WeakAuras.StopMotion.texture_types.Basic = {
["Interface\\AddOns\\WeakAuras\\Media\\Textures\\StopMotion"] = "Example", ["Interface\\AddOns\\WeakAuras\\Media\\Textures\\stopmotion"] = "Example",
} }
WeakAuras.StopMotion.texture_data = { WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAuras\\Media\\Textures\\stopmotion"] = { count = 64, rows = 8, columns = 8 }
} WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\circle"] = { count = 256, rows = 16, columns = 16 }
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\checkmark"] = { count = 64, rows = 8, columns = 8 }
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAuras\\Media\\Textures\\StopMotion"] = { WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\redx"] = { count = 64, rows = 8, columns = 8 }
["count"] = 64, WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\leftarc"] = { count = 256, rows = 16, columns = 16 }
["rows"] = 8, WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\rightarc"] = { count = 256, rows = 16, columns = 16 }
["columns"] = 8 WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\fireball"] = { count = 7, rows = 5, columns = 5 }
} WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\AURARUNE8"] = { count = 256, rows = 16, columns = 16 }
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionv"] = { count = 64, rows = 8, columns = 8 }
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\circle"] = { WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionw"] = { count = 64, rows = 8, columns = 8 }
["count"] = 256, WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionf"] = { count = 64, rows = 8, columns = 8 }
["rows"] = 16, WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionword"] = { count = 64, rows = 8, columns = 8 }
["columns"] = 16 WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\CellRing"] = { count = 32, rows = 8, columns = 4 }
} WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Gadget"] = { count = 32, rows = 8, columns = 4 }
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Radar"] = { count = 32, rows = 8, columns = 4 }
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\checkmark"] = { WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\RadarComplex"] = { count = 32, rows = 8, columns = 4 }
["count"] = 64, WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Saber"] = { count = 32, rows = 8, columns = 4 }
["rows"] = 8, WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Waveform"] = { count = 32, rows = 8, columns = 4 }
["columns"] = 8
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\redx"] = {
["count"] = 64,
["rows"] = 8,
["columns"] = 8
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\leftarc"] = {
["count"] = 256,
["rows"] = 16,
["columns"] = 16
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\rightarc"] = {
["count"] = 256,
["rows"] = 16,
["columns"] = 16
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\fireball"] = {
["count"] = 7,
["rows"] = 5,
["columns"] = 5
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\AURARUNE8"] = {
["count"] = 256,
["rows"] = 16,
["columns"] = 16
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionv"] = {
["count"] = 64,
["rows"] = 8,
["columns"] = 8
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionw"] = {
["count"] = 64,
["rows"] = 8,
["columns"] = 8
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionf"] = {
["count"] = 64,
["rows"] = 8,
["columns"] = 8
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionword"] = {
["count"] = 64,
["rows"] = 8,
["columns"] = 8
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\CellRing"] = {
["count"] = 32,
["rows"] = 8,
["columns"] = 4
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Gadget"] = {
["count"] = 32,
["rows"] = 8,
["columns"] = 4
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Radar"] = {
["count"] = 32,
["rows"] = 8,
["columns"] = 4
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\RadarComplex"] = {
["count"] = 32,
["rows"] = 8,
["columns"] = 4
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Saber"] = {
["count"] = 32,
["rows"] = 8,
["columns"] = 4
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Waveform"] = {
["count"] = 32,
["rows"] = 8,
["columns"] = 4
}
WeakAuras.StopMotion.animation_types = { WeakAuras.StopMotion.animation_types = {
loop = L["Loop"], loop = L["Loop"],
@@ -583,7 +583,7 @@ local function modifyThumbnail(parent, region, data, fullModify, size)
frame = floor(region.startFrame + (region.endFrame - region.startFrame) * 0.75); frame = floor(region.startFrame + (region.endFrame - region.startFrame) * 0.75);
end end
local texture = data.foregroundTexture or "Interface\\AddOns\\WeakAuras\\Media\\Textures\\StopMotion"; local texture = data.foregroundTexture or "Interface\\AddOns\\WeakAuras\\Media\\Textures\\stopmotion";
if (region.foreground.rows and region.foreground.columns) then if (region.foreground.rows and region.foreground.columns) then
region.texture:SetTexture(texture); region.texture:SetTexture(texture);
@@ -634,7 +634,7 @@ local function createIcon()
local data = { local data = {
height = 30, height = 30,
width = 30, width = 30,
foregroundTexture = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\StopMotion", foregroundTexture = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\stopmotion",
foregroundColor = {1, 1, 1, 1}, foregroundColor = {1, 1, 1, 1},
blendMode = "ADD", blendMode = "ADD",
rotate = false, rotate = false,
@@ -0,0 +1,59 @@
WeakAuras.StopMotion.texture_types.Basic = {
["Interface\\AddOns\\WeakAuras\\Media\\Textures\\stopmotion"] = "Example",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\circle"] = "Circle",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\checkmark"] = "Check Mark",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\redx"] = "Red X",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\leftarc"] = "Left Arc",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\rightarc"] = "Right Arc",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\fireball"] = "Fireball",
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Basic\\circle"] = {
["count"] = 256,
["rows"] = 16,
["columns"] = 16
}
WeakAuras.StopMotion.texture_types.Runes = {
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\AURARUNE8"] = "Spike-Ringed Aura Rune",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionv"] = "Legion V",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionw"] = "Legion W",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionf"] = "Legion F",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Runes\\legionword"] = "Legion Word"
}
WeakAuras.StopMotion.texture_types.Kaitan = {
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\CellRing"] = "CellRing",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Gadget"] = "Gadget",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Radar"] = "Radar",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\RadarComplex"] = "RadarComplex",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Saber"] = "Saber",
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\Kaitan\\Waveform"] = "Waveform",
}
WeakAuras.StopMotion.texture_types.IconOverlays = {
["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\IconOverlays\\Electric"] = "Electric",
}
WeakAuras.StopMotion.texture_data["Interface\\AddOns\\WeakAurasStopMotion\\Textures\\IconOverlays\\Electric"] = {
count = 60,
rows = 8,
columns = 8
}
local frames64IconOverlays = {
"ArcReactor", "Core", "Energize", "Fire", "Frost", "Ghostbuster", "Haze", "Heat", "Kryptonite",
"Rainbow", "SimpleOrange", "SimpleOrange2", "SimplePurple2", "Water", "Zap"
}
local frames64Data = {
count = 64,
rows = 8,
columns = 8
}
for _, key in ipairs(frames64IconOverlays) do
local file = "Interface\\AddOns\\WeakAurasStopMotion\\Textures\\IconOverlays\\" .. key
WeakAuras.StopMotion.texture_types.IconOverlays[file] = key
WeakAuras.StopMotion.texture_data[file] = frames64Data
end
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+573
View File
@@ -0,0 +1,573 @@
(define (postproces-layer layer i x y name)
(gimp-drawable-set-visible layer 1)
(gimp-layer-set-offsets layer x y)
(gimp-layer-set-name layer (string-append name " " (number->string i)))
)
(define (postproces-layers layer i x y name)
(if (list? layer)
(map (lambda (l) (postproces-layer l i x y name)) layer)
(postproces-layer layer i x y name)))
(define (ease-linear p)
p)
(define (ease-quadratic p)
(* p p))
(define (ease-cubic p)
(* p p p))
(define (ease-out func)
(lambda (p) (- 1 (func (- 1 p)))))
(define (ease-in-out func)
(lambda (p)
(if (< p 0.5) (/ (func (* 2 p)) 2)
(- 1 (/ (func (* (- 1 p) 2)) 2)))))
(define wa-easing-functions
(list ease-linear
ease-quadratic
(ease-out ease-quadratic)
(ease-in-out ease-quadratic)
ease-cubic
(ease-out ease-cubic)
(ease-in-out ease-cubic))
)
(define wa-easing-functions-desc
(list "Linear"
"Quadratic Ease In" "Quadratic Ease Out" "Quadratic Ease In/Out"
"Cubic Ease In" "Cubic Ease Out" "Cubic Ease In/Out")
)
(define (script-fu-wa img layer rows columns function args)
(define (create-layers i rows columns width height img layer function args)
(let* ((newlayer (car (gimp-layer-new-from-drawable layer img)))
(total (- (* rows columns) 1))
(row (floor (/ i columns)))
(col (remainder i columns)))
(gimp-image-insert-layer img newlayer (car (gimp-item-get-parent layer)) -10)
(let* ((modifiedlayer (function img newlayer i total args)))
(postproces-layers modifiedlayer i (* col width) (* row height) (car (gimp-layer-get-name layer))))
(if (< i total)
(create-layers (+ i 1) rows columns width height img layer function args))
))
; Start gimp2 with --console-messages
; (gimp-message-set-handler CONSOLE)
; (gimp-message "foobar")
(let* ((width (car (gimp-drawable-width layer)))
(height (car (gimp-drawable-height layer)))
(imgwidth (car (gimp-image-width img)))
(imgheight (car (gimp-image-height img)))
)
(gimp-undo-push-group-start img)
(if (or (not (= imgwidth (* width columns))) (not (= imgheight (* height rows))))
(gimp-image-resize img (* width columns)
(* height rows)
0 0))
(gimp-item-set-linked layer 0)
(create-layers 0 rows columns width height img layer function args)
(gimp-layer-set-visible layer 0)
(gimp-undo-push-group-end img)
(gimp-displays-flush)
)
)
(define (wa-blur-horizontal img newlayer i total args)
(let* ((blur-length (car args))
(fade-in (cadr args))
(easing (caddr args))
(percent (/ i total))
(len (* (- 1 (easing percent)) blur-length))
(opacity-until (or (and (= fade-in 1) (/ total 3)) -1))
(opacity (or (and (< i opacity-until) (* (/ i opacity-until) 100)) 100))
(width (car (gimp-drawable-width newlayer)))
(height (car (gimp-drawable-height newlayer)))
)
(plug-in-mblur 1 img newlayer 0 len 0 (/ width 2) (/ height 2))
(gimp-layer-set-opacity newlayer opacity))
newlayer)
(define (wa-blur-radial img newlayer i total args)
(let* ((max-blur (nth 0 args))
(maxrotate (* (/ (nth 1 args) 180) (* 4 (atan 1.0))))
(blureasing (nth 2 args))
(rotateeasing (nth 3 args))
(fade-in (nth 4 args))
(percent (/ i total))
(a (* (- (blureasing percent) 1) max-blur))
(opacity-until (or (and (= fade-in 1) (/ total 3)) -1))
(opacity (or (and (< i opacity-until) (* (/ i opacity-until) 100)) 100))
(width (car (gimp-drawable-width newlayer)))
(height (car (gimp-drawable-height newlayer)))
)
(plug-in-mblur 1 img newlayer 1 0 a (/ width 2) (/ height 2))
(gimp-item-transform-rotate newlayer (* (- 1 (rotateeasing percent)) maxrotate) TRUE 0 0)
(let* ((nwidth (car (gimp-drawable-width newlayer)))
(nheight (car (gimp-drawable-height newlayer))))
(gimp-layer-resize newlayer width height (/ (- width nwidth) 2) (/ (- height nheight) 2))
)
(gimp-layer-set-opacity newlayer opacity)
)
newlayer)
(define (wa-spotlight-horizontal-word img newlayer i total args)
(let* ((newlayer2 (car (gimp-layer-new-from-drawable newlayer img)))
(newlayer3 (car (gimp-layer-new-from-drawable newlayer img)))
(width (car (gimp-drawable-width newlayer)))
(height (car (gimp-drawable-height newlayer)))
(percent (/ i total))
(gradientwidth (car args))
(gradientwidth2 (cadr args))
(offset (caddr args))
(coveredwidth (- width (* 2 offset)))
(x1 (+ offset (* percent coveredwidth)))
(x2 (+ offset gradientwidth (* percent coveredwidth)))
(x3 (+ offset gradientwidth2 (* percent coveredwidth)))
(oldforeground (car (gimp-context-get-foreground)))
(oldbackground (car (gimp-context-get-background)))
)
(gimp-context-set-background '(0 0 0) )
(gimp-context-set-foreground '(255 255 255) )
(gimp-image-insert-layer img newlayer2 (car (gimp-item-get-parent newlayer)) -10)
(gimp-image-insert-layer img newlayer3 (car (gimp-item-get-parent newlayer)) -10)
(gimp-layer-set-mode newlayer3 16)
(let* ((mask (car (gimp-layer-create-mask newlayer3 0))))
(gimp-layer-add-mask newlayer3 mask)
(gimp-edit-blend newlayer3 0 0 1 100 0 0 0 1 5 4 1 x1 0 x2 0))
(let* ((mask (car (gimp-layer-create-mask newlayer2 0))))
(gimp-layer-add-mask newlayer2 mask)
(gimp-edit-blend mask 0 0 1 100 0 0 0 1 5 4 1 x1 0 x3 0))
(gimp-desaturate newlayer)
(gimp-layer-set-opacity newlayer 80)
(gimp-context-set-background oldbackground)
(gimp-context-set-foreground oldforeground)
(list newlayer newlayer2 newlayer3)))
(define (wa-spotlight-vertical-word img newlayer i total args)
(let* ((newlayer2 (car (gimp-layer-new-from-drawable newlayer img)))
(newlayer3 (car (gimp-layer-new-from-drawable newlayer img)))
(width (car (gimp-drawable-width newlayer)))
(height (car (gimp-drawable-height newlayer)))
(percent (/ i total))
(gradientheight (car args))
(gradientheight2 (cadr args))
(offset (caddr args))
(coveredheight (- height (* 2 offset)))
(y1 (+ offset (* percent coveredheight)))
(y2 (+ offset gradientheight (* percent coveredheight)))
(y3 (+ offset gradientheight2 (* percent coveredheight)))
(oldforeground (car (gimp-context-get-foreground)))
(oldbackground (car (gimp-context-get-background)))
)
(gimp-context-set-background '(0 0 0) )
(gimp-context-set-foreground '(255 255 255) )
(gimp-image-insert-layer img newlayer2 (car (gimp-item-get-parent newlayer)) -10)
(gimp-image-insert-layer img newlayer3 (car (gimp-item-get-parent newlayer)) -10)
(gimp-layer-set-mode newlayer3 16)
(let* ((mask (car (gimp-layer-create-mask newlayer3 0))))
(gimp-layer-add-mask newlayer3 mask)
(gimp-edit-blend newlayer3 0 0 1 100 0 0 0 1 5 4 1 0 y1 0 y2))
(let* ((mask (car (gimp-layer-create-mask newlayer2 0))))
(gimp-layer-add-mask newlayer2 mask)
(gimp-edit-blend mask 0 0 1 100 0 0 0 1 5 4 1 0 y1 0 y3))
(gimp-desaturate newlayer)
(gimp-layer-set-opacity newlayer 80)
(gimp-context-set-background oldbackground)
(gimp-context-set-foreground oldforeground)
(list newlayer newlayer2 newlayer3)))
(define (wa-spotlight-horizontal img newlayer i total args)
(let* ((newlayer2 (car (gimp-layer-new-from-drawable newlayer img)))
(width (car (gimp-drawable-width newlayer)))
(height (car (gimp-drawable-height newlayer)))
(percent (/ i total))
(gradientwidth (car args))
(offset (cadr args))
(coveredwidth (- width (* 2 offset)))
(x1 (+ offset (* percent coveredwidth)))
(x2 (+ offset gradientwidth (* percent coveredwidth)))
(oldforeground (car (gimp-context-get-foreground)))
(oldbackground (car (gimp-context-get-background)))
)
(gimp-context-set-background '(0 0 0) )
(gimp-context-set-foreground '(255 255 255) )
(gimp-image-insert-layer img newlayer2 (car (gimp-item-get-parent newlayer)) -10)
(gimp-layer-set-mode newlayer2 16)
(let* ((mask (car (gimp-layer-create-mask newlayer2 0))))
(gimp-layer-add-mask newlayer2 mask)
(gimp-edit-blend newlayer2 0 0 1 100 0 0 0 1 5 4 1 x1 0 x2 0))
(gimp-context-set-background oldbackground)
(gimp-context-set-foreground oldforeground)
(car (gimp-image-merge-down img newlayer2 0))))
(define (wa-spotlight-vertical img newlayer i total args)
(let* ((newlayer2 (car (gimp-layer-new-from-drawable newlayer img)))
(width (car (gimp-drawable-width newlayer)))
(height (car (gimp-drawable-height newlayer)))
(percent (/ i total))
(gradientheight (car args))
(offset (cadr args))
(coveredheight (- width (* 2 offset)))
(y1 (+ offset (* percent coveredheight)))
(y2 (+ offset gradientheight (* percent coveredheight)))
(oldforeground (car (gimp-context-get-foreground)))
(oldbackground (car (gimp-context-get-background)))
)
(gimp-context-set-background '(0 0 0) )
(gimp-context-set-foreground '(255 255 255) )
(gimp-image-insert-layer img newlayer2 (car (gimp-item-get-parent newlayer)) -10)
(gimp-layer-set-mode newlayer2 16)
(let* ((mask (car (gimp-layer-create-mask newlayer2 0))))
(gimp-layer-add-mask newlayer2 mask)
(gimp-edit-blend newlayer2 0 0 1 100 0 0 0 1 5 4 1 0 y1 0 y2))
(gimp-context-set-background oldbackground)
(gimp-context-set-foreground oldforeground)
(car (gimp-image-merge-down img newlayer2 0))))
(define (wa-circle-mask img newlayer i total args)
(define (wa-add-stroke path stroke cx cy radians width height)
(let* ((s (* (sin radians) width 3))
(c (* (cos radians) height 3)))
(gimp-vectors-bezier-stroke-lineto path stroke (+ cx s) (- cy c))))
(define (interpolate start end percent)
(+ start (* percent (- end start))))
(let* ((width (car (gimp-drawable-width newlayer)))
(height (car (gimp-drawable-height newlayer)))
(rotate-center (cadddr args))
(mx (if (= rotate-center TRUE) (/ width 2) (cadr (cdddr args))))
(my (if (= rotate-center TRUE) (/ height 2) (caddr (cdddr args))))
(percent (/ i total))
(pi (* 4 (atan 1.0)))
(startradians (/ (* (car args) pi) 180))
(endradians (/ (* (cadr args) pi) 180))
(radians (interpolate startradians endradians percent))
(path (car (gimp-vectors-new img "path")))
(inverse (caddr args)))
(gimp-image-insert-vectors img path 0 -1)
(let* ((stroke (car (gimp-vectors-bezier-stroke-new-moveto path mx my))))
(wa-add-stroke path stroke mx my startradians width height)
(if (>= percent 0.25)
(wa-add-stroke path stroke mx my (interpolate startradians endradians 0.25) width height))
(if (>= percent 0.50)
(wa-add-stroke path stroke mx my (interpolate startradians endradians 0.5) width height))
(if (>= percent 0.75)
(wa-add-stroke path stroke mx my (interpolate startradians endradians 0.75) width height))
(wa-add-stroke path stroke mx my radians width height)
(gimp-vectors-bezier-stroke-lineto path stroke mx my)
(gimp-image-select-item img 2 path)
(if (= inverse TRUE) (gimp-selection-invert img))
(let* ((mask (car (gimp-layer-create-mask newlayer 4))))
(gimp-layer-add-mask newlayer mask))
(gimp-selection-none img)
(gimp-image-remove-vectors img path))
)
newlayer)
(define (wa-spinning-orb img newlayer i total args)
(let*
((percent (/ i total))
(a (* percent 360)))
(plug-in-map-object 1 img newlayer
1 ; mapping type
0.5 0.5 2 ; viewport
0.5 0.5 0.0 ; object position
1.0 0 0 ; first axis
0.0 1.0 0.0 ; second axis
0 a 0.0 ; axis rotation
1 '(255 255 255) ; light source
-0.5 -0.5 2 ; light position
-1.0 -1.0 1.0 ; light direction
0.3 1.2 0.7 0.0 27 ; material (amb, diff, refl, spec, high)
TRUE ; antialias
TRUE ; tile
FALSE ; newimage
TRUE ; transparency
.3 ; radius
0.5 0.5 0.5 ; scale
1 ; Cylinder length
-1 -1 -1 -1 -1 -1; Box drawables
-1 -1 ; Cylinder drawables
))
newlayer)
(define (wa-stroke-path img layer i total args)
(define (draw-point layer position path-length path stroke brush spacing)
(let* ((pos (gimp-vectors-stroke-get-point-at-dist path stroke position 1))
(point (cons-array 2 'double)))
(aset point 0 (car pos))
(aset point 1 (cadr pos))
(if (cadddr pos)
(gimp-paintbrush-default layer 2 point)))
(if (< (+ position spacing) path-length)
(draw-point layer (+ position spacing) path-length path stroke brush spacing)))
(gimp-context-push)
(gimp-image-undo-group-start img)
(let* ((path (car args))
(stroke-width (cadr args))
(spacing (caddr args))
(startFrame (cadddr args))
(endFrame (cadddr (cdr args)))
(easing-function (cadddr (cddr args)))
(brush (car (gimp-brush-new "WA-TMP-STROKE-BRUSH")))
(first-stroke (aref (cadr (gimp-vectors-get-strokes path)) 0))
(percent (easing-function (min (/ (- i startFrame) (+ (- endFrame startFrame) 1)) 1)))
(path-length (* percent (car (gimp-vectors-stroke-get-length path first-stroke 1)))))
(gimp-message (string-append (number->string i) " : " (number->string percent)))
(gimp-brush-set-shape brush BRUSH-GENERATED-CIRCLE)
(gimp-brush-set-radius brush stroke-width)
(gimp-context-set-brush brush)
(if (>= i startFrame)
(draw-point layer 0 path-length path first-stroke brush spacing))
(gimp-brush-delete brush)
)
(gimp-image-undo-group-end img)
(gimp-context-pop)
(gimp-displays-flush)
layer
)
(define (wa-noop img newlayer i total args)
newlayer)
(define (script-fu-wa-blur-horizontal img layer rows columns blur-length fade-in easing)
(script-fu-wa img layer rows columns wa-blur-horizontal (list blur-length fade-in (nth easing wa-easing-functions))))
(define (script-fu-wa-blur-radial img layer rows columns max-blur maxrotate blureasing rotateeasing fade-in)
(script-fu-wa img layer rows columns wa-blur-radial
(list max-blur maxrotate (nth blureasing wa-easing-functions) (nth rotateeasing wa-easing-functions) fade-in)))
(define (script-fu-wa-spotlight-horizontal img layer rows columns highlight-width offset)
(script-fu-wa img layer rows columns wa-spotlight-horizontal (list highlight-width offset)))
(define (script-fu-wa-spotlight-vertical img layer rows columns highlight-width offset)
(script-fu-wa img layer rows columns wa-spotlight-vertical (list highlight-width offset)))
(define (script-fu-wa-spotlight-horizontal-word img layer rows columns highlight-width colored-width offset)
(script-fu-wa img layer rows columns wa-spotlight-horizontal-word (list highlight-width colored-width offset)))
(define (script-fu-wa-spotlight-vertical-word img layer rows columns highlight-width colored-width offset)
(script-fu-wa img layer rows columns wa-spotlight-vertical-word (list highlight-width colored-width offset)))
(define (script-fu-wa-circle-mask img layer rows columns sangle eangle inverse rotate-center mx my)
(script-fu-wa img layer rows columns wa-circle-mask (list sangle eangle inverse rotate-center mx my)))
(define (script-fu-wa-spinning-orb img layer rows columns)
(script-fu-wa img layer rows columns wa-spinning-orb '()))
(define (script-fu-wa-noop img layer rows columns)
(script-fu-wa img layer rows columns wa-noop '()))
(define (script-fu-wa-duplicate-layer-once img layer rows columns)
(let* ((iwidth (car (gimp-image-width img)))
(iheight (car (gimp-image-height img)))
(lwidth (/ iwidth columns))
(lheight (/ iheight rows))
(offsets (gimp-drawable-offsets layer))
(posx (car offsets))
(posy (cadr offsets))
(newlayer (car (gimp-layer-new-from-drawable layer img))))
(gimp-undo-push-group-start img)
(gimp-image-insert-layer img newlayer (car (gimp-item-get-parent layer)) -10)
(if (< (+ posx lwidth (/ lwidth 2)) iwidth)
(gimp-layer-set-offsets newlayer (+ posx lwidth) posy)
(gimp-layer-set-offsets newlayer 0 (+ posy lheight)))
(gimp-displays-flush)
(gimp-undo-push-group-end img)
))
(define (script-fu-wa-stroke-path img layer rows columns startFrame endFrame path stroke-width spacing easing)
(script-fu-wa img layer rows columns wa-stroke-path
(list path stroke-width spacing startFrame endFrame (nth easing wa-easing-functions))))
(script-fu-register "script-fu-wa-blur-horizontal"
"Linear Movement Blur"
"Movement Blur + Grid"
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Blur Length" (list 45 -100 100 1 10 0 SF-SPINNER)
SF-TOGGLE "Fade In" TRUE
SF-OPTION "Easing" wa-easing-functions-desc)
(script-fu-register "script-fu-wa-blur-radial"
"Radial Movement Blur"
"Movement Blur + Grid"
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Max Blur" (list -180 -360 360 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Max Rotate" (list -180 -720 720 1 10 0 SF-SPINNER)
SF-OPTION "Blur Easing" wa-easing-functions-desc
SF-OPTION "Rotate Easing" wa-easing-functions-desc
SF-TOGGLE "Fade In" TRUE
)
(script-fu-register "script-fu-wa-spotlight-horizontal"
"Horizontal Spotlight"
""
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Highlight Width" (list 8 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Offset" (list 16 1 128 1 10 0 SF-SPINNER)
)
(script-fu-register "script-fu-wa-spotlight-vertical"
"Vertical Spotlight"
""
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Highlight Width" (list 8 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Offset" (list 16 1 128 1 10 0 SF-SPINNER)
)
(script-fu-register "script-fu-wa-spotlight-horizontal-word"
"Horizontal Spotlight Word"
""
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Highlight Width" (list 32 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Colored Width" (list 32 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Offset" (list 4 1 128 1 10 0 SF-SPINNER)
)
(script-fu-register "script-fu-wa-spotlight-vertical-word"
"Vertical Spotlight Word"
""
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Highlight Width" (list 32 0 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Colored Width" (list 32 0 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Offset" (list 4 -5 128 1 10 0 SF-SPINNER)
)
(script-fu-register "script-fu-wa-circle-mask"
"Circle Mask"
""
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Start Angle" (list 0 -360 720 1 15 1 SF-SPINNER)
SF-ADJUSTMENT "End Angle" (list 360 -360 720 1 15 1 SF-SPINNER)
SF-TOGGLE "Inverse" FALSE
SF-TOGGLE "Rotate around Center" TRUE
SF-ADJUSTMENT "Rotation Center X" (list 64 -1024 1024 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Rotation Center Y" (list 64 -1024 1024 1 10 0 SF-SPINNER)
)
(script-fu-register "script-fu-wa-spinning-orb"
"Orb spinning"
"Spins a orb"
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 16 1 128 1 10 0 SF-SPINNER))
(script-fu-register "script-fu-wa-noop"
"Duplicate Layers"
"Creates a grid"
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 16 1 128 1 10 0 SF-SPINNER))
(script-fu-register "script-fu-wa-duplicate-layer-once"
"Duplicate Layer to next frame"
""
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 16 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 16 1 128 1 10 0 SF-SPINNER))
(script-fu-register "script-fu-wa-stroke-path"
"Paint Stroke along a Path"
""
"Infus <infus@squorn.de>"
"Infus"
"8.3.2016"
""
SF-IMAGE "image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Rows" (list 8 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Columns" (list 8 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "Start Frame" (list 1 1 128 1 10 0 SF-SPINNER)
SF-ADJUSTMENT "End Frame" (list 64 1 255 1 10 0 SF-SPINNER)
SF-VECTORS "Path to Stroke" -1
SF-ADJUSTMENT "Stroke Width" (list 5 0.1 100 1 10 1 SF-SLIDER)
SF-ADJUSTMENT "Spacing" (list 3 0.1 100 1 10 1 SF-SLIDER)
SF-OPTION "Easing" wa-easing-functions-desc
)
(script-fu-menu-register "script-fu-wa-blur-horizontal" "<Image>/WA")
(script-fu-menu-register "script-fu-wa-blur-radial" "<Image>/WA")
(script-fu-menu-register "script-fu-wa-spotlight-horizontal" "<Image>/WA")
(script-fu-menu-register "script-fu-wa-spotlight-vertical" "<Image>/WA")
(script-fu-menu-register "script-fu-wa-spotlight-horizontal-word" "<Image>/WA")
(script-fu-menu-register "script-fu-wa-spotlight-vertical-word" "<Image>/WA")
(script-fu-menu-register "script-fu-wa-circle-mask" "<Image>/WA")
(script-fu-menu-register "script-fu-wa-spinning-orb" "<Image>/WA")
(script-fu-menu-register "script-fu-wa-noop" "<Image>/WA")
(script-fu-menu-register "script-fu-wa-duplicate-layer-once" "<Image>/WA")
(script-fu-menu-register "script-fu-wa-stroke-path" "<Image>/WA")
@@ -0,0 +1,9 @@
## Interface: 33000
## Title: WeakAuras Stop Motion Textures
## Author: Infus
## Notes: Textures for Stop Motion
## X-Category: Interface Enhancements
## DefaultState: Enabled
## Dependencies: WeakAuras, WeakAurasOptions
StopMotionTextures.lua