1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
$gtk.reset
def draw_blendmode args, mode
w = 160
h = w
args.state.x += (1280-w) / (args.state.blendmodes.length + 1)
x = args.state.x
y = (720 - h) / 2
s = 'sprites/blue-feathered.png'
args.outputs.sprites << { blendmode_enum: mode.value, x: x, y: y, w: w, h: h, path: s }
args.outputs.labels << [x + (w/2), y, mode.name.to_s, 1, 1, 255, 255, 255]
end
def tick args
# Different blend modes do different things, depending on what they
# blend against (in this case, the pixels of the background color).
args.state.bg_element ||= 1
args.state.bg_color ||= 255
args.state.bg_color_direction ||= 1
bg_r = (args.state.bg_element == 1) ? args.state.bg_color : 0
bg_g = (args.state.bg_element == 2) ? args.state.bg_color : 0
bg_b = (args.state.bg_element == 3) ? args.state.bg_color : 0
args.state.bg_color += args.state.bg_color_direction
if (args.state.bg_color_direction > 0) && (args.state.bg_color >= 255)
args.state.bg_color_direction = -1
args.state.bg_color = 255
elsif (args.state.bg_color_direction < 0) && (args.state.bg_color <= 0)
args.state.bg_color_direction = 1
args.state.bg_color = 0
args.state.bg_element += 1
if args.state.bg_element >= 4
args.state.bg_element = 1
end
end
args.outputs.background_color = [ bg_r, bg_g, bg_b, 255 ]
args.state.blendmodes ||= [
{ name: :none, value: 0 },
{ name: :blend, value: 1 },
{ name: :add, value: 2 },
{ name: :mod, value: 3 },
{ name: :mul, value: 4 }
]
args.state.x = 0 # reset this, draw_blendmode will increment it.
args.state.blendmodes.each { |blendmode| draw_blendmode args, blendmode }
end
|