Skip to content

Commit be7c779

Browse files
committed
improved testing functions. imrpoved gradient calculation. added .value to GradientEditor, to get the resulting list of colors.
1 parent 87fae3a commit be7c779

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

ursina/prefabs/color_picker.py

+16-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
from ursina import Entity, Slider, color, Button, camera, Quad, copy
1+
from ursina import Entity, Slider, color, Button, camera, Quad, copy, Color
22

33

44
class ColorPicker(Entity):
5+
default_values = dict(parent=camera.ui)
6+
57
def __init__(self, dynamic=True, **kwargs):
6-
super().__init__(parent=camera.ui, **kwargs)
8+
super().__init__(**(__class__.default_values | kwargs))
79

810
self.bg = Entity(parent=self, z=.01, model=Quad(aspect=.5/.2), scale=[.5,.225], origin=[0,.5], color=color.black66)
911
self.h_slider = Slider(parent=self, max=360, step=1, dynamic=dynamic, on_value_changed=self._calculate_color)
@@ -36,6 +38,18 @@ def __init__(self, dynamic=True, **kwargs):
3638
for key, value in kwargs.items():
3739
setattr(self, key, value)
3840

41+
@property
42+
def value(self):
43+
return color.hsv(self.h_slider.value, self.s_slider.value/100, self.v_slider.value/100, self.a_slider.value/100)
44+
45+
@value.setter
46+
def value(self, value:Color):
47+
value = value.hsv
48+
self.h_slider.value = value[0]
49+
self.s_slider.value = value[1]*100
50+
self.v_slider.value = value[2]*100
51+
self.a_slider.value = value[3]*100
52+
3953

4054
def _calculate_color(self):
4155
self.color = color.hsv(self.h_slider.value, self.s_slider.value/100, self.v_slider.value/100, self.a_slider.value/100)

ursina/ursinamath.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,11 @@ def make_gradient(index_value_dict):
154154
given a dict of positions and values (usually colors), interpolates the values into a list of with the interpolated values.
155155
example input: {'0':color.hex('#9d9867'), '38':color.hex('#828131'), '54':color.hex('#5d5b2a'), '255':color.hex('#000000')}
156156
'''
157+
min_index = min(int(e) for e in index_value_dict.keys())
157158
max_index = max(int(e) for e in index_value_dict.keys())
158-
gradient = [None for _ in range(max_index+1)]
159+
# default_value = index_value_dict.values()[0]
160+
# print('-------------', tuple(index_value_dict.values())[0])
161+
gradient = [None for _ in range(max_index+1-min_index)]
159162

160163
sorted_dict = [(idx, index_value_dict[str(idx)]) for idx in sorted([int(key) for key in index_value_dict.keys()])]
161164
# print(sorted_dict)
@@ -166,7 +169,7 @@ def make_gradient(index_value_dict):
166169
# print(start_index, '-->', next_index, ':', start_value, '-->', next_value)
167170
dist = next_index - start_index
168171
for j in range(dist+1):
169-
gradient[start_index+j] = lerp(start_value, next_value, j/dist)
172+
gradient[start_index+j-min_index] = lerp(start_value, next_value, j/dist)
170173

171174
return gradient
172175

@@ -185,6 +188,8 @@ def make_gradient(index_value_dict):
185188
])
186189
_test(make_gradient, ({'0':16, '2':0}, ), expected_result=[16, 8, 0])
187190

191+
_test(make_gradient, ({'6':0, '8':8}, ), expected_result=[0, 4, 8])
192+
188193

189194
def sample_gradient(list_of_values, t): # distribute list_of_values equally on a line and get the interpolated value at t (0-1).
190195
l = len(list_of_values)

ursina/ursinastuff.py

+19
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,25 @@ def _test(function, test_input, expected_result):
221221
print('\33[41mFAILED\033[0m', function.__name__)
222222
print('result:', result)
223223
print('expected result:', expected_result)
224+
if type(result) != type(expected_result):
225+
print(f'result should be: {type(expected_result)}, not: {type(result)}')
226+
227+
if isinstance(expected_result, (tuple, list)):
228+
if len(result) != len(expected_result):
229+
print(f'resulting tuple/list should be {len(expected_result)} long, not {len(result)}')
230+
231+
if type(result[0]) != type(expected_result[0]):
232+
print(f'resulting list/tuple should contain: {type(expected_result[0])}, not: {type(result[0])}')
233+
return result
234+
235+
def _assert(passed:bool, name=''):
236+
if passed:
237+
print('\33[42mPASSED\033[0m', name)
238+
else:
239+
print('\33[41mFAILED\033[0m', name)
240+
return passed
241+
242+
224243

225244

226245
# define a new metaclass which overrides the "__call__" function

0 commit comments

Comments
 (0)