102 lines
2.8 KiB
GDScript
102 lines
2.8 KiB
GDScript
extends Node2D
|
|
|
|
@onready var CURSOR = $Cursor
|
|
var is_drawing : bool = false
|
|
|
|
func _ready() -> void:
|
|
for x in range(64, get_viewport_rect().size.x, 96):
|
|
for y in range(64, get_viewport_rect().size.y, 96):
|
|
var c = Globals.SCENE_COLLECTABLE.instantiate()
|
|
c.global_position = Vector2(x, y)
|
|
c.type = randi() % 2
|
|
add_child(c)
|
|
$Camera2D.position = get_viewport_rect().size / 2
|
|
|
|
#func _draw() -> void:
|
|
#var trail = CURSOR.get_tail(Globals.HISTORY_LENGTH)
|
|
#
|
|
#if trail.size() <= 0:
|
|
#return
|
|
#
|
|
#for i in range(trail.size() - 1):
|
|
#var color
|
|
#if trail.size() > Globals.HISTORY_LENGTH * .66:
|
|
#color = Color(.5,0,0,1)
|
|
#elif trail.size() > Globals.HISTORY_LENGTH * .33:
|
|
#color = Color(.5,.5,0,1)
|
|
#else:
|
|
#color = Color(0,.5,0,1)
|
|
#draw_line(trail[i], trail[i + 1], color , Globals.LINE_THICC, false)
|
|
|
|
func _process(delta: float) -> void:
|
|
if is_drawing:
|
|
var trail = CURSOR.get_tail(Globals.HISTORY_LENGTH)
|
|
$LineProgress/InkWell.points = PackedVector2Array(trail)
|
|
|
|
while CURSOR.loop_stack.size() > 0:
|
|
var loop = CURSOR.loop_stack.pop_back()
|
|
create_loop_object(loop)
|
|
|
|
func create_loop_object(loop:Array):
|
|
var scene = Globals.SCENE_LOOP.instantiate()
|
|
scene.points = loop
|
|
if Geometry2D.decompose_polygon_in_convex(PackedVector2Array(loop)).size() == 0:
|
|
scene.is_error = true
|
|
add_child(scene)
|
|
await get_tree().create_timer(.2).timeout
|
|
var contents = scene.get_contained_nodes()
|
|
process_collection(contents)
|
|
|
|
func process_collection(contents:Array) -> void:
|
|
var collectables = get_tree().get_nodes_in_group("collectable")
|
|
var type : int = -1
|
|
var count : int = 0
|
|
var mistakes : int = 0
|
|
|
|
for i in range(len(contents)):
|
|
var obj = contents[i]
|
|
|
|
if not (obj in collectables):
|
|
continue
|
|
|
|
if type == -1 or obj.type == type:
|
|
type = obj.type
|
|
count += 1
|
|
else:
|
|
obj.is_good = false
|
|
mistakes += 1
|
|
|
|
obj.remove(i)
|
|
|
|
print("Good: " + str(count) + "; Bad: " + str(mistakes))
|
|
|
|
func _on_cursor_started_drawing(pos:Vector2) -> void:
|
|
print("started drawing")
|
|
var cam = get_viewport().get_camera_2d()
|
|
var t = get_tree().create_tween()
|
|
t.tween_property(Engine, "time_scale", 0.2, .2)
|
|
$StartMarker.global_position = pos
|
|
$StartMarker.visible = true
|
|
$LineProgress.visible = true
|
|
is_drawing = true
|
|
$AudioSlowDownStart.play()
|
|
await $AudioSlowDownStart.finished
|
|
$AudioSlowDownLoop.play()
|
|
|
|
func _on_cursor_stopped_drawing(data:Array) -> void:
|
|
print("stopped drawing")
|
|
var cam = get_viewport().get_camera_2d()
|
|
var t = get_tree().create_tween()
|
|
t.tween_property(Engine, "time_scale", 1.0, .2)
|
|
$StartMarker.visible = false
|
|
$LineProgress.visible = false
|
|
is_drawing = false
|
|
if CURSOR.loop_stack.size() == 0:
|
|
var err_loop = Globals.SCENE_LOOP.instantiate()
|
|
err_loop.is_error = true
|
|
err_loop.points = data
|
|
add_child(err_loop)
|
|
$AudioSlowDownStart.stop()
|
|
$AudioSlowDownLoop.stop()
|
|
$AudioSlowDownEnd.play()
|