Skip to content

Commit 94f35b5

Browse files
committed
color api cleanup
1 parent a954bbe commit 94f35b5

25 files changed

+264
-385
lines changed

config/stdlib.cfg

+11-215
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ SND_NOFILTER = (<< 1 13)
2626
SND_PREVIEW = (<< 1 14)
2727
SND_DUCKING = (<< 1 15)
2828

29+
COLMASK_H = (<< 1 0)
30+
COLMASK_S = (<< 1 1)
31+
COLMASK_V = (<< 1 2)
32+
COLMASK_HS = (| $COLMASK_H $COLMASK_S)
33+
COLMASK_HV = (| $COLMASK_H $COLMASK_V)
34+
COLMASK_SV = (| $COLMASK_S $COLMASK_V)
35+
COLMASK_HSV = (| $COLMASK_H $COLMASK_S $COLMASK_V)
36+
2937
// creates locals as varname[1..N]
3038
setlist = [
3139
local s
@@ -94,27 +102,12 @@ editbindmod = [
94102

95103
quine = [echo (format "quine = [%1]" $quine)]; setcomplete quine 1
96104

97-
// Returns given RGB color as an INT color
98-
// usage: (rgbtoint R G B)
99-
rgbtoint = [+ (<< $arg1 16) (<< $arg2 8) $arg3]
100-
101-
// 1:<hsv>
102-
hsvtohex = [
103-
local _hsv
104-
_hsv = (hsvtorgb $arg1)
105-
tohex (tool_colour_toint [@(at $_hsv 0) @(at $_hsv 1) @(at $_hsv 2)])
106-
]
107-
108-
// 1:<int>
109-
inttohsv = [
110-
local _r _g _b
111-
inttorgb $arg1 _r _g _b
112-
rgbtohsv [@(divf $_r 255) @(divf $_g 255) @(divf $_b 255)]
113-
]
105+
// 1:<hue> 2:<saturation> 3:<value>
106+
hsvtohex = [tohex (intcolourhsv $arg1 $arg2 $arg3) 6]
114107

115108
// Returns given RGB color as a HEX color
116109
// usage: (rgbtohex R G B)
117-
rgbtohex = [tohex (rgbtoint $arg1 $arg2 $arg3) 6]
110+
rgbtohex = [tohex (intcolour $arg1 $arg2 $arg3) 6]
118111

119112
// Returns given INT color as an RGB color
120113
// usage: (inttorgb <value> R-var G-var B-var)
@@ -133,203 +126,6 @@ inttorgba = [
133126
$arg5 = (& $arg1 0xFF)
134127
]
135128

136-
// usage: (rgbtohsl R-var G-var B-var)
137-
// Returns: [H-var S-var L-var]
138-
rgbtohsl = [
139-
local r g b h s l
140-
r = (divf $arg1 255)
141-
g = (divf $arg2 255)
142-
b = (divf $arg3 255)
143-
144-
l = (divf (+f (maxf $r $g $b) (minf $r $g $b)) 2)
145-
146-
if (=f $r $g $b) [
147-
s = 0
148-
] [
149-
if (<f $l 0.5) [
150-
s = (divf (-f (maxf $r $g $b) (minf $r $g $b)) (+f (maxf $r $g $b) (minf $r $g $b)))
151-
] [ // > 0.5
152-
s = (divf (-f (maxf $r $g $b) (minf $r $g $b)) (-f 2 (maxf $r $g $b) (minf $r $g $b)))
153-
]
154-
]
155-
156-
if (=f (maxf $r $g $b) $r) [
157-
h = (divf (-f $g $b) (-f (maxf $r $g $b) (minf $r $g $b)))
158-
]
159-
160-
if (=f (maxf $r $g $b) $g) [
161-
h = (+f 2 (divf (-f $b $r) (-f (maxf $r $g $b) (minf $r $g $b))))
162-
]
163-
164-
if (=f (maxf $r $g $b) $b) [
165-
h = (+f 4 (divf (-f $r $g) (-f (maxf $r $g $b) (minf $r $g $b))))
166-
]
167-
168-
h = (*f $h 60)
169-
170-
if (<f $h 0) [
171-
h = (+f $h 360)
172-
]
173-
174-
result (concat $h $s $l)
175-
]
176-
177-
// usage: (hsltorgb H-var S-var L-var)
178-
// Returns: [R-var G-var B-var]
179-
hsltorgb = [
180-
local r g b h s l t1 t2 tr tg tb
181-
h = (divf $arg1 360)
182-
s = $arg2
183-
l = $arg3
184-
185-
if (>f $s 0) [
186-
if (<f $l 0.5) [
187-
t1 = (*f $l (+f 1 $s))
188-
] [ // > 0.5
189-
t1 = (-f (+f $l $s) (*f $l $s))
190-
]
191-
192-
t2 = (-f (*f 2 $l) $t1)
193-
194-
tr = (+f $h (divf 1 3))
195-
tg = $h
196-
tb = (-f $h (divf 1 3))
197-
198-
if (<f $tr 0) [tr = (+f $tr 1)] [if (>f $tr 1) [tr = (-f $tr 1)]]
199-
if (<f $tg 0) [tg = (+f $tg 1)] [if (>f $tg 1) [tg = (-f $tg 1)]]
200-
if (<f $tb 0) [tb = (+f $tb 1)] [if (>f $tb 1) [tb = (-f $tb 1)]]
201-
202-
if (<f (*f 6 $tr) 1) [ // RED
203-
r = (+f $t2 (*f (*f (-f $t1 - $t2) 6) $tr))
204-
] [ // > 1
205-
if (<f (*f 2 $tr) 1) [
206-
r = $t1
207-
] [ // > 1
208-
if (<f (*f 3 $tr) 2) [
209-
r = (+f $t2 (*f (*f (-f $t1 $t2) (-f (divf 4 6) $tr)) 6))
210-
] [ // > 1
211-
r = $t2
212-
]
213-
]
214-
]
215-
216-
if (<f (*f 6 $tg) 1) [ // GREEN
217-
g = (+f $t2 (*f (*f (-f $t1 - $t2) 6) $tg))
218-
] [ // > 1
219-
if (<f (*f 2 $tg) 1) [
220-
g = $t1
221-
] [ // > 1
222-
if (<f (*f 3 $tg) 2) [
223-
g = (+f $t2 (*f (*f (-f $t1 $t2) (-f (divf 4 6) $tg)) 6))
224-
] [ // > 1
225-
g = $t2
226-
]
227-
]
228-
]
229-
230-
if (<f (*f 6 $tb) 1) [ // BLUE
231-
b = (+f $t2 (*f (*f (-f $t1 - $t2) 6) $tb))
232-
] [ // > 1
233-
if (<f (*f 2 $tb) 1) [
234-
b = $t1
235-
] [ // > 1
236-
if (<f (*f 3 $tb) 2) [
237-
b = (+f $t2 (*f (*f (-f $t1 $t2) (-f (divf 4 6) $tb)) 6))
238-
] [ // > 1
239-
b = $t2
240-
]
241-
]
242-
]
243-
] [
244-
r = $l
245-
g = $l
246-
b = $l
247-
]
248-
249-
result (concat (round (*f $r 255)) (round (*f $g 255)) (round (*f $b 255)))
250-
]
251-
252-
// 1:<rgb> 2:<range>
253-
rgbtohsv = [
254-
local range
255-
range = $arg2
256-
257-
if $range [] [
258-
range = 1
259-
]
260-
261-
local col_r col_g col_b col_max col_min
262-
col_r = (divf (at $arg1 0) $range)
263-
col_g = (divf (at $arg1 1) $range)
264-
col_b = (divf (at $arg1 2) $range)
265-
266-
col_max = (maxf $col_r $col_g $col_b)
267-
col_min = (minf $col_r $col_g $col_b)
268-
269-
local delta
270-
delta = (-f $col_max $col_min)
271-
272-
local hue sat val
273-
274-
caseif (=f $delta 0) [
275-
hue = 0
276-
] (=f $col_max $col_r) [
277-
hue = (divf (-f $col_g $col_b) $delta)
278-
] (=f $col_max $col_g) [
279-
hue = (+f (divf (-f $col_b $col_r) $delta) 2)
280-
] (=f $col_max $col_b) [
281-
hue = (+f (divf (-f $col_r $col_g) $delta) 4)
282-
]
283-
284-
hue = (*f $hue 60)
285-
286-
if (<f $hue 0) [
287-
hue = (+f $hue 360)
288-
]
289-
290-
hue = (toint (round $hue))
291-
292-
if $delta [
293-
sat = (divf $delta $col_max)
294-
] [
295-
sat = 0
296-
]
297-
298-
val = $col_max
299-
300-
concat $hue $sat $val
301-
]
302-
303-
// 1:<hsv> 2:<range>
304-
hsvtorgb = [
305-
local range
306-
range = $arg2
307-
308-
if $range [] [
309-
range = 1
310-
]
311-
312-
local hue sat val
313-
hue = (at $arg1 0)
314-
sat = (at $arg1 1)
315-
val = (at $arg1 2)
316-
317-
local C X m
318-
C = (*f $val $sat)
319-
X = (*f $C (-f 1 (absf (-f (modf (divf $hue 60) 2) 1))))
320-
m = (-f $val $C)
321-
322-
local hue_sel
323-
hue_sel = (div $hue 60)
324-
325-
local col_r col_g col_b
326-
col_r = (*f (+f (at [@C @X 0 0 @X @C] $hue_sel) $m) $range)
327-
col_g = (*f (+f (at [@X @C @C @X 0 0] $hue_sel) $m) $range)
328-
col_b = (*f (+f (at [0 0 @X @C @C @X] $hue_sel) $m) $range)
329-
330-
concat $col_r $col_g $col_b
331-
]
332-
333129
//pluralize
334130
//pluralizes words (appends "s") depending upon value passed to it (e.g. pluralise 1 "word" outputs "word"; pluralize 2 "word" outputs "words")
335131
//Arguments:

config/tool/templates/env.cfg

+19-20
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,8 @@ tool_template_env_cloudgen = [
295295
setenv envlayer "skyboxes/clouds01"
296296
setenv cloudbox "skyboxes/clouds2"
297297
setenv cloudblend (*f $arg2 0.5 $p_cloud_blend)
298-
p_cloud_colour1 = (tool_colour_hsvmod_int $p_cloud_colour1 v $p_cloud_overcast_dark)
299-
p_cloud_colour2 = (tool_colour_hsvmod_int $p_cloud_colour2 v $p_cloud_overcast_dark)
298+
p_cloud_colour1 = (modcolourhsv $p_cloud_colour1 1 1 $p_cloud_overcast_dark)
299+
p_cloud_colour2 = (modcolourhsv $p_cloud_colour2 1 1 $p_cloud_overcast_dark)
300300
] (>=f $arg2 0.5) [
301301
setenv cloudlayer "skyboxes/clouds01"
302302
setenv envlayer "skyboxes/clouds02"
@@ -308,8 +308,8 @@ tool_template_env_cloudgen = [
308308
]
309309

310310
if (=s $arg1 day) [
311-
p_cloud_colour1 = (tool_colour_lerp_int $p_cloud_colour1 $arg4 (*f (-f 1 $_sunfactor) $p_cloud_sunlight1) [ 1 1 0 ])
312-
p_cloud_colour2 = (tool_colour_lerp_int $p_cloud_colour2 $arg4 (*f (-f 1 $_sunfactor) $p_cloud_sunlight2) [ 1 1 0 ])
311+
p_cloud_colour1 = (lerpcolourhsv $p_cloud_colour1 $arg4 (*f (-f 1 $_sunfactor) $p_cloud_sunlight1) $COLMASK_HS)
312+
p_cloud_colour2 = (lerpcolourhsv $p_cloud_colour2 $arg4 (*f (-f 1 $_sunfactor) $p_cloud_sunlight2) $COLMASK_HS)
313313

314314
if (>f $arg2 0.1) [
315315
setenv cloudshadow $p_shadow
@@ -318,8 +318,8 @@ tool_template_env_cloudgen = [
318318
] [
319319
setenv cloudlayerblend (*f $cloudlayerblend $p_cloud_night_blend)
320320
setenv envlayerblend (*f $envlayerblend $p_cloud_night_blend)
321-
p_cloud_colour1 = (tool_colour_hsvmod_int $p_cloud_colour1 v $p_cloud_night_dark)
322-
p_cloud_colour2 = (tool_colour_hsvmod_int $p_cloud_colour2 v $p_cloud_night_dark)
321+
p_cloud_colour1 = (modcolourhsv $p_cloud_colour1 1 1 $p_cloud_night_dark)
322+
p_cloud_colour2 = (modcolourhsv $p_cloud_colour2 1 1 $p_cloud_night_dark)
323323
]
324324

325325
setenv cloudcolour $p_cloud_colour1
@@ -349,19 +349,18 @@ tool_template_env_atmogen = [
349349

350350
if (=s $arg1 day) [
351351
local _ambient _sunlight
352-
_ambient = (tool_colour_hsvmod_int $p_ambient_colour s $_sunfactor)
353-
_ambient = (tool_colour_hsvmod_int $_ambient v (maxf $_sunfactor 0.25))
354-
_sunlight = (tool_colour_lerp_int $p_dusk_colour $p_sun_colour $_sunfactor)
352+
_ambient = (modcolourhsv $p_ambient_colour 1 $_sunfactor (maxf $_sunfactor 0.25))
353+
_sunlight = (lerpcolourhsv $p_dusk_colour $p_sun_colour $_sunfactor)
355354

356-
setenv fogcolour (tool_colour_lerp_int $p_fog_day_colour $p_fog_dusk_colour (-f 1 $_sunfactor) [ 1 0 1 ])
355+
setenv fogcolour (lerpcolourhsv $p_fog_day_colour $p_fog_dusk_colour (-f 1 $_sunfactor) $COLMASK_HV)
357356

358357
setenv sunlight $_sunlight
359358
setenv atmodisk $p_sun_colour
360-
setenv skylight (tool_colour_hsvmod_int $_ambient v 0.5)
361-
setenv ambient (tool_colour_hsvmod_int $_ambient v 0.4)
359+
setenv skylight (modcolourhsv $_ambient 1 1 0.5)
360+
setenv ambient (modcolourhsv $_ambient 1 1 0.4)
362361
setenv atmo 1
363362
] [
364-
setenv sunlight (tool_colour_hsvmod_int $p_night_suncolour v $arg2)
363+
setenv sunlight (modcolourhsv $p_night_suncolour 1 1 $arg2)
365364
setenv atmodisk $p_night_diskcolour
366365
setenv atmodisksize 6
367366
setenv atmodiskcorona 0
@@ -406,10 +405,10 @@ tool_template_env_lowfog = [
406405
setenv fog 800
407406

408407
if (=s $arg1 day) [
409-
setenv fogcolour (tool_colour_hsvmod_int $fogcolour s 0.5)
408+
setenv fogcolour (modcolourhsv $fogcolour 1 0.5 1)
410409
]
411410

412-
setenv sunlight (tool_colour_hsvmod_int $sunlight v 0.8)
411+
setenv sunlight (modcolourhsv $sunlight 1 1 0.8)
413412
setenv fogdomecolour $fogcolour
414413
setenv fogdomemin 0.25
415414
setenv fogdomemax 1
@@ -422,7 +421,7 @@ tool_template_env_foggy = [
422421
setenv fog 500
423422

424423
if (=s $arg1 day) [
425-
setenv fogcolour (tool_colour_hsvmod_int $fogcolour s 0.5)
424+
setenv fogcolour (modcolourhsv $fogcolour 1 0.5 1)
426425
]
427426

428427
setenv sunlightpitch 90
@@ -442,7 +441,7 @@ tool_template_env_overcast = [
442441
tool_template_env_atmogen $arg1 $arg3
443442

444443
if (=s $arg1 day) [
445-
setenv fogcolour (tool_colour_hsvmod_int $fogcolour s 0.5)
444+
setenv fogcolour (modcolourhsv $fogcolour 1 0.5 1)
446445
]
447446

448447
setenv sunlightpitch 90
@@ -469,7 +468,7 @@ tool_template_env_beforestorm = [
469468
]
470469

471470
setenv windspeed 4
472-
setenv fogdomecolour (tool_colour_hsvmod_int (tool_colour_hsvmod_int $fogcolour s 0.5) v 0.05)
471+
setenv fogdomecolour (modcolourhsv $fogcolour 1 0.5 0.05)
473472
setenv fogdomemax 1
474473
]
475474

@@ -492,10 +491,10 @@ tool_template_env_sandstorm = [
492491
setenv fog 800
493492

494493
if (=s $arg1 day) [
495-
setenv fogcolour (tool_colour_hsvmod_int $fogcolour s 0.5)
494+
setenv fogcolour (modcolourhsv $fogcolour 1 0.5 1)
496495
]
497496

498-
setenv sunlight (tool_colour_hsvmod_int $sunlight v 0.8)
497+
setenv sunlight (modcolourhsv $sunlight 1 1 0.8)
499498
setenv fogdomecolour $fogcolour
500499
setenv fogdomemin 0.25
501500
setenv fogdomemax 1

0 commit comments

Comments
 (0)