@@ -11,9 +11,9 @@ var _tween = Tween.new()
1111var _level : ComparisonSort
1212var _rects = []
1313var _positions = []
14- var _unit_width : int
15- var _unit_height : int
1614var _viewport = Viewport .new ()
15+ var _pointer = null
16+ var _pointer_size : int
1717onready var _separation = 128 / _level .array .size
1818
1919func _init (level ):
@@ -26,38 +26,58 @@ func _init(level):
2626
2727func _ready ():
2828 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 )
3231 # 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
3433 var accumulated = 0
3534 var x = 0
3635 _level .connect ("mistake" , get_parent (), "flash" )
36+ var width = unit_width - _separation
37+ var height = rect_size .y - _pointer_size * 2
3738 for i in range (_level .array .size ):
3839 var rect = Polygon2D .new ()
3940 if accumulated >= 1 :
4041 x += 1
4142 accumulated -= 1
4243 rect .polygon = [
4344 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 ),
4748 ]
4849 accumulated += error
4950 rect .position = Vector2 (x , rect_size .y )
5051 _positions .append (x )
51- x += _unit_width
52+ x += unit_width
5253 _rects .append (rect )
5354 _viewport .add_child (rect )
5455 _level .array .connect ("swapped" , self , "_on_ArrayModel_swapped" )
5556 _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 )
5666
5767func _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 ()
5875 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 )
6181
6282func _on_ArrayModel_swapped (i , j ):
6383 var time = ANIM_DURATION * (1 + float (j - i ) / _level .array .size )
0 commit comments