@@ -11,9 +11,9 @@ var _tween = Tween.new()
11
11
var _level : ComparisonSort
12
12
var _rects = []
13
13
var _positions = []
14
- var _unit_width : int
15
- var _unit_height : int
16
14
var _viewport = Viewport .new ()
15
+ var _pointer = null
16
+ var _pointer_size : int
17
17
onready var _separation = 128 / _level .array .size
18
18
19
19
func _init (level ):
@@ -26,38 +26,58 @@ func _init(level):
26
26
27
27
func _ready ():
28
28
yield (get_tree (), "idle_frame" )
29
- _viewport .size = rect_size
30
- _unit_width = rect_size .x / _level .array .size
31
- _unit_height = rect_size .y / _level .array .size
29
+ var unit_width = rect_size .x / _level .array .size
30
+ _pointer_size = max ((unit_width - _separation ) / 4 , 2 )
32
31
# Keep track of accumulated pixel error from integer division
33
- var error = float (rect_size .x ) / _level .array .size - _unit_width
32
+ var error = float (rect_size .x ) / _level .array .size - unit_width
34
33
var accumulated = 0
35
34
var x = 0
36
35
_level .connect ("mistake" , get_parent (), "flash" )
36
+ var width = unit_width - _separation
37
+ var height = rect_size .y - _pointer_size * 2
37
38
for i in range (_level .array .size ):
38
39
var rect = Polygon2D .new ()
39
40
if accumulated >= 1 :
40
41
x += 1
41
42
accumulated -= 1
42
43
rect .polygon = [
43
44
Vector2 (0 , 0 ),
44
- Vector2 (0 , rect_size . y ),
45
- Vector2 (_unit_width - _separation , rect_size . y ),
46
- Vector2 (_unit_width - _separation , 0 ),
45
+ Vector2 (0 , height ),
46
+ Vector2 (width , height ),
47
+ Vector2 (width , 0 ),
47
48
]
48
49
accumulated += error
49
50
rect .position = Vector2 (x , rect_size .y )
50
51
_positions .append (x )
51
- x += _unit_width
52
+ x += unit_width
52
53
_rects .append (rect )
53
54
_viewport .add_child (rect )
54
55
_level .array .connect ("swapped" , self , "_on_ArrayModel_swapped" )
55
56
_level .array .connect ("sorted" , self , "_on_ArrayModel_sorted" )
57
+ if _level .has_method ("get_pointer" ):
58
+ _pointer = Polygon2D .new ()
59
+ _pointer .polygon = [
60
+ Vector2 (width / 2 , _pointer_size ),
61
+ Vector2 (width / 2 - _pointer_size , 0 ),
62
+ Vector2 (width / 2 + _pointer_size , 0 ),
63
+ ]
64
+ _pointer .color = GlobalTheme .BLUE
65
+ _viewport .add_child (_pointer )
56
66
57
67
func _process (delta ):
68
+ if _pointer != null :
69
+ var pointed = _level .get_pointer ()
70
+ var height = rect_size .y - _pointer_size * 2
71
+ _pointer .position = Vector2 (_rects [pointed ].position .x ,
72
+ height - _level .array .frac (pointed ) * height )
73
+ if _level .done :
74
+ _pointer .queue_free ()
58
75
for i in range (_rects .size ()):
59
- _rects [i ].color = _level .get_effect (i )
60
- _rects [i ].scale .y = - float (_level .array .at (i )) / _level .array .size
76
+ if _level .done :
77
+ _rects [i ].color = ComparisonSort .EFFECTS .NONE
78
+ else :
79
+ _rects [i ].color = _level .get_effect (i )
80
+ _rects [i ].scale .y = - _level .array .frac (i )
61
81
62
82
func _on_ArrayModel_swapped (i , j ):
63
83
var time = ANIM_DURATION * (1 + float (j - i ) / _level .array .size )
0 commit comments