diff --git a/incantation.gd b/incantation.gd index 5e790ab..7317ef9 100644 --- a/incantation.gd +++ b/incantation.gd @@ -1,28 +1,38 @@ extends Path2D +signal completed var is_mouse_in_path_follow_area: bool = false var is_incantation_started: bool = false var incantation_progress: float = 0.0 +var is_incantation_completed: bool = false -@onready var path_follow: Node2D = $PathFollow2D -@onready var path_follow_area: Area2D = $PathFollow2D/Area2D +@onready var area: Area2D = $Area2D +@onready var incantation_text: IncantationText = $IncantationText func _ready(): - path_follow_area.mouse_entered.connect(func(): is_mouse_in_path_follow_area = true) - path_follow_area.mouse_exited.connect(func(): + area.mouse_entered.connect(func(): is_mouse_in_path_follow_area = true) + area.mouse_exited.connect(func(): is_mouse_in_path_follow_area = false reset_incantation() ) func _draw(): - var points = curve.get_baked_points() - for i in points.size(): - if i == 0: continue - draw_line(points[i-1], points[i], Color.BLACK, 2.0) + # Draws debug line accross the path in game + #var points = curve.get_baked_points() + #for i in points.size(): + # if i == 0: continue + # draw_line(points[i-1], points[i], Color.BLACK, 2.0) + pass + +var previous_offset: float: + set(new_value): + previous_offset = new_value + incantation_text.colored_offset = previous_offset -var previous_offset: float func _input(event): + if is_incantation_completed: return + if event is InputEventMouseButton: if event.is_pressed() and is_mouse_in_path_follow_area and not is_incantation_started: is_incantation_started = true @@ -30,15 +40,19 @@ func _input(event): var motion_event = event as InputEventMouseMotion var next_point = curve.get_closest_point(to_local(motion_event.global_position)) var next_offset = curve.get_closest_offset(next_point) - print(previous_offset, " " ,next_offset) if previous_offset <= 0.0: previous_offset = next_offset elif next_offset - previous_offset <= 0: return previous_offset = next_offset - path_follow.position = next_point + area.position = next_point + if next_point == curve.get_point_position(curve.point_count - 1): + completed.emit() + is_incantation_completed = true func reset_incantation(): + if is_incantation_completed: return + is_incantation_started = false - path_follow.position = curve.get_point_position(0) + area.position = curve.get_point_position(0) previous_offset = 0.0 diff --git a/incantation_text.gd b/incantation_text.gd new file mode 100644 index 0000000..56b24b1 --- /dev/null +++ b/incantation_text.gd @@ -0,0 +1,29 @@ +@tool +class_name IncantationText +extends Control + +@export_multiline var text: String: + set(new_value): + text = new_value + queue_redraw() +@export var colored_offset: float = 0: + set(new_value): + colored_offset = new_value + queue_redraw() + +var curve: Curve2D + +func _ready(): + curve = (get_parent() as Path2D).curve + +func _draw(): + if text.length() < 2: return + + var offset = 0 + for c in text: + var t = curve.sample_baked_with_rotation(offset) + draw_set_transform(t.origin - (Vector2.UP * 5).rotated(t.get_rotation()), t.get_rotation()) + #t.rotated_local() + + draw_char(get_theme_default_font(), Vector2.ZERO, c, 16, Color.WHITE if offset >= colored_offset else Color.RED) + offset += 10 diff --git a/test.gd.uid b/incantation_text.gd.uid similarity index 100% rename from test.gd.uid rename to incantation_text.gd.uid diff --git a/project.godot b/project.godot index e963e1d..b5eef93 100644 --- a/project.godot +++ b/project.godot @@ -27,6 +27,10 @@ cutter="" grabber="" patience_bar="" +[gui] + +theme/default_font_multichannel_signed_distance_field=true + [layer_names] 2d_physics/layer_1="Scalpel" diff --git a/prototype_ritual_book.gd b/prototype_ritual_book.gd new file mode 100644 index 0000000..12c1135 --- /dev/null +++ b/prototype_ritual_book.gd @@ -0,0 +1,6 @@ +extends Node2D + +signal incantation_completed + +func _on_incantation_completed(): + incantation_completed.emit() diff --git a/prototype_ritual_book.gd.uid b/prototype_ritual_book.gd.uid new file mode 100644 index 0000000..bdc87d4 --- /dev/null +++ b/prototype_ritual_book.gd.uid @@ -0,0 +1 @@ +uid://dsiaa53vt3y6e diff --git a/prototype_ritual_book.tscn b/prototype_ritual_book.tscn index 98e0446..21b5056 100644 --- a/prototype_ritual_book.tscn +++ b/prototype_ritual_book.tscn @@ -1,6 +1,8 @@ [gd_scene load_steps=8 format=3 uid="uid://qkwh186nbcya"] [ext_resource type="Script" uid="uid://dak6uc4v3us7w" path="res://incantation.gd" id="1_v6csu"] +[ext_resource type="Script" uid="uid://dsiaa53vt3y6e" path="res://prototype_ritual_book.gd" id="1_yc2mw"] +[ext_resource type="Script" uid="uid://cpscp5a5nxfop" path="res://incantation_text.gd" id="2_5ntyk"] [sub_resource type="Gradient" id="Gradient_2cqfq"] offsets = PackedFloat32Array(0.80212, 0.978799, 1) @@ -18,15 +20,10 @@ _data = { point_count = 11 [sub_resource type="CircleShape2D" id="CircleShape2D_v6csu"] - -[sub_resource type="Gradient" id="Gradient_v6csu"] - -[sub_resource type="GradientTexture2D" id="GradientTexture2D_5ntyk"] -gradient = SubResource("Gradient_v6csu") -width = 10 -height = 10 +radius = 13.8924 [node name="PrototypeRitualBook" type="Node2D"] +script = ExtResource("1_yc2mw") [node name="Left" type="Sprite2D" parent="."] position = Vector2(306, 311) @@ -42,16 +39,21 @@ position = Vector2(-1, 1) curve = SubResource("Curve2D_5ntyk") script = ExtResource("1_v6csu") -[node name="PathFollow2D" type="Node2D" parent="Incantation"] +[node name="Area2D" type="Area2D" parent="Incantation"] position = Vector2(202, 149) rotation = 0.562498 - -[node name="Area2D" type="Area2D" parent="Incantation/PathFollow2D"] collision_layer = 512 collision_mask = 512 -[node name="CollisionShape2D" type="CollisionShape2D" parent="Incantation/PathFollow2D/Area2D"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="Incantation/Area2D"] shape = SubResource("CircleShape2D_v6csu") -[node name="Sprite2D" type="Sprite2D" parent="Incantation/PathFollow2D"] -texture = SubResource("GradientTexture2D_5ntyk") +[node name="IncantationText" type="Control" parent="Incantation"] +layout_mode = 3 +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 23.0 +script = ExtResource("2_5ntyk") +text = "Hallo dies ist ein langer TExt, er könnte auch eine Ritual sein. Wir werden sehen" + +[connection signal="completed" from="Incantation" to="." method="_on_incantation_completed"] diff --git a/test.gd b/test.gd deleted file mode 100644 index 7e35a97..0000000 --- a/test.gd +++ /dev/null @@ -1,6 +0,0 @@ -extends Label - - - -func _draw(): - (get_parent() as Path2D).curve.sample_baked_with_rotation()