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
50
extends KinematicBody2D
class_name dot

var dotCollider = preload("res://dots/dot_extras/dotcollider.tscn"	)

onready var dotcollider : CollisionShape2D
onready var ray : RayCast2D

var tween = Tween.new()

export(Color) var color
export(GlobalVars.type) var dot_type

func _ready():
	Events.connect("level_initialized", self, "move")
	Events.connect("turn_over", self, "move")
	add_child(tween)
	var new_dotcollider = dotCollider.instance()
	add_child(new_dotcollider)
	dotcollider = new_dotcollider
	ray = dotcollider.get_ray()
	dotcollider.move_ray($dotsprite/pos.global_position)
	$dotsprite.change_color(color)

func move():
	if ! GlobalVars.state == GlobalVars.states.level_turn:
		return
	var go_to = extend_ray_until_collides()
	tween.interpolate_property(self, "global_position",
			global_position, go_to, 2,
			Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)
	tween.start()
	Events.emit_signal("done_moving")

func extend_ray_until_collides() -> Vector2:
	for i in get_viewport_rect().size.y:
		if not ray.is_colliding(): 
			ray.cast_to.y += 1
			ray.force_raycast_update()
	var size = ray.cast_to.y
	print(ray.get_collider())
	ray.cast_to = Vector2.ZERO
	return Vector2(global_position.x, global_position.y + size)

func turn_off_collision():
	dotcollider.disabled = true

func _on_dot_input(viewport, event : InputEvent, shape_idx):
	InputHandler._pressed(event, self)