Diffstat (limited to 'dots/dot.gd')
| -rw-r--r-- | dots/dot.gd | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/dots/dot.gd b/dots/dot.gd new file mode 100644 index 0000000..d7b915e --- /dev/null +++ b/dots/dot.gd @@ -0,0 +1,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) + |