Add cut points

This commit is contained in:
Antonio Dell'Annunziata 2025-02-23 15:53:34 +01:00
parent 25b98a46f8
commit 1759022dee
No known key found for this signature in database
GPG key ID: 8D2BB16641F06E94
6 changed files with 236 additions and 65 deletions

18
guideline_point.gd Normal file
View file

@ -0,0 +1,18 @@
class_name GuidelinePoint
extends Sprite2D
@export_node_path("Node2D") var connections: Array[NodePath] = []
@onready var area = $Area2D
var scalpel: Scalpel
func _ready():
area.connect("area_exited", _on_area_entered)
scalpel = get_tree().get_first_node_in_group("cutter")
func _on_area_entered(area: Area2D):
if area != scalpel.cut_area or not scalpel.is_cutting: return
queue_free()

13
guidelines.gd Normal file
View file

@ -0,0 +1,13 @@
extends Node2D
class Connection:
var source: NodePath
var targets: Array[NodePath]
var guideline_points: Array[Node]
func _ready():
guideline_points = get_children().filter(func(c): return c is GuidelinePoint)
func _process(delta):
if get_child_count() == 0: get_parent().operation_succeeded()

View file

@ -15,6 +15,10 @@ run/main_scene="res://prototype_dark_cut.tscn"
config/features=PackedStringArray("4.3", "GL Compatibility")
config/icon="res://icon.svg"
[display]
window/stretch/mode="viewport"
[rendering]
renderer/rendering_method="gl_compatibility"

View file

@ -5,3 +5,7 @@ extends Node
func _on_patience_bar_value_changed(value):
if value <= 0:
get_tree().reload_current_scene()
func operation_succeeded():
get_tree().reload_current_scene()

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=11 format=3 uid="uid://be0rqt7sk1da0"]
[gd_scene load_steps=14 format=3 uid="uid://be0rqt7sk1da0"]
[ext_resource type="Texture2D" uid="uid://bicjfwpoa3pma" path="res://test_table.png" id="1_7i8d4"]
[ext_resource type="Script" path="res://prototype_dark_cut.gd" id="1_vl0qk"]
@ -6,6 +6,8 @@
[ext_resource type="Texture2D" uid="uid://cg3dg7iqif56d" path="res://test_scalpel.png" id="3_a4jra"]
[ext_resource type="Script" path="res://test_scalpel.gd" id="4_5ba3g"]
[ext_resource type="Texture2D" uid="uid://gf7us6an3mhu" path="res://test_star.png" id="4_frsoy"]
[ext_resource type="Script" path="res://guidelines.gd" id="6_0fd2w"]
[ext_resource type="Script" path="res://guideline_point.gd" id="8_5qgyw"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_pgu75"]
bg_color = Color(0.417457, 0, 0.105249, 1)
@ -20,6 +22,8 @@ height = 142.904
[sub_resource type="CircleShape2D" id="CircleShape2D_qmwrh"]
radius = 5.65684
[sub_resource type="CircleShape2D" id="CircleShape2D_0bwgd"]
[node name="PrototypeDarkCut" type="Node"]
script = ExtResource("1_vl0qk")
@ -62,7 +66,6 @@ texture = ExtResource("1_7i8d4")
[node name="Area2D" type="Area2D" parent="UtilsDropoff"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="UtilsDropoff/Area2D"]
scale = Vector2(1, 1)
shape = SubResource("RectangleShape2D_m114t")
[node name="TestTable" type="Sprite2D" parent="."]
@ -78,7 +81,7 @@ texture = ExtResource("2_atjyl")
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="TestBody1/Area2D"]
polygon = PackedVector2Array(0, -250, -39.2, -250, -45.6, -246, -48.9, -246, -54.9, -239, -56.2, -239, -61.1, -230, -62.6, -230, -67.5, -210, -69, -210, -69, -181.7, -65, -168, -65, -163.3, -49, -143, -47, -128.8, -47, -124.8, -63.3, -122, -67.3, -122, -102.9, -109.8, -113.5, -116, -124.4, -116, -148.3, -106, -150, -106, -150, 49.2, -146, 67.4, -146, 71.4, -138, 93.4, -138, 99.7, -132, 106.7, -132, 109, -115.2, 109, -108.2, 102, -106.5, 102, -101.5, 86, -100, 86, -99, 35, -99, 16.8, -96.5, 26, -96, 93, -100, 140.9, -100, 163.1, -95.7, 192, -94.9, 192, -91, 246.1, -91, 250, 61, 250, 61, 236.5, 58, 230.5, 58, 217.1, 68, 38.1, 68, 64.3, 74, 82.3, 74, 85, 82, 91, 82, 92.8, 93, 93.8, 93, 95, 109.8, 95, 117.7, 88, 119.8, 88, 128.8, 9, 129.9, 9, 131.9, -42, 133.1, -42, 132, -84, 132, -90.7, 121, -103.8, 121, -105.6, 113, -107.6, 113, -109.2, 90.1, -107.1, 87, -112.5, 87, -114.9, 75, -125, 75, -127.2, 44.8, -124, 31.2, -124, 33, -144.9, 33, -151.3, 48.9, -169, 50.4, -169, 54.4, -179, 56, -179, 56, -200.6, 43, -219.7, 43, -222, 30, -232, 30, -233.2, 0, -248.3)
[node name="TestScalpel" type="Sprite2D" parent="."]
[node name="TestScalpel" type="Sprite2D" parent="." groups=["cutter"]]
position = Vector2(949, 41)
rotation = -2.0542
scale = Vector2(0.5, 0.5)
@ -88,7 +91,6 @@ script = ExtResource("4_5ba3g")
[node name="PickupArea" type="Area2D" parent="TestScalpel"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="TestScalpel/PickupArea"]
scale = Vector2(1, 1)
shape = SubResource("CapsuleShape2D_jndi4")
[node name="CutArea" type="Area2D" parent="TestScalpel"]
@ -102,86 +104,199 @@ debug_color = Color(0.879882, 0.304191, 0.394852, 0.42)
unique_name_in_owner = true
[node name="Guidelines" type="Node2D" parent="."]
script = ExtResource("6_0fd2w")
[node name="TestStar3" type="Sprite2D" parent="Guidelines"]
[node name="TestStar_1" type="Sprite2D" parent="Guidelines"]
position = Vector2(557, 313)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_2")])
[node name="TestStar8" type="Sprite2D" parent="Guidelines"]
position = Vector2(594, 399)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_1"]
[node name="TestStar11" type="Sprite2D" parent="Guidelines"]
position = Vector2(552, 398)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_1/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar17" type="Sprite2D" parent="Guidelines"]
position = Vector2(572, 398)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="TestStar12" type="Sprite2D" parent="Guidelines"]
position = Vector2(666, 403)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="TestStar16" type="Sprite2D" parent="Guidelines"]
position = Vector2(646, 402)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="TestStar9" type="Sprite2D" parent="Guidelines"]
position = Vector2(626, 401)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="TestStar2" type="Sprite2D" parent="Guidelines"]
position = Vector2(609, 385)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="TestStar4" type="Sprite2D" parent="Guidelines"]
position = Vector2(609, 345)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="TestStar13" type="Sprite2D" parent="Guidelines"]
position = Vector2(608, 368)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="TestStar5" type="Sprite2D" parent="Guidelines"]
position = Vector2(647, 322)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="TestStar15" type="Sprite2D" parent="Guidelines"]
position = Vector2(627, 324)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
[node name="TestStar10" type="Sprite2D" parent="Guidelines"]
[node name="TestStar_2" type="Sprite2D" parent="Guidelines"]
position = Vector2(574, 318)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_1"), NodePath("../TestStar_3")])
[node name="TestStar14" type="Sprite2D" parent="Guidelines"]
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_2"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_2/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_3" type="Sprite2D" parent="Guidelines"]
position = Vector2(593, 323)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_2"), NodePath("../TestStar_4")])
[node name="TestStar6" type="Sprite2D" parent="Guidelines"]
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_3"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_3/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_4" type="Sprite2D" parent="Guidelines"]
position = Vector2(609, 324)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_3"), NodePath("../TestStar_5"), NodePath("../TestStar_8")])
[node name="TestStar7" type="Sprite2D" parent="Guidelines"]
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_4"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_4/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_5" type="Sprite2D" parent="Guidelines"]
position = Vector2(627, 324)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_4"), NodePath("../TestStar_6")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_5"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_5/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_6" type="Sprite2D" parent="Guidelines"]
position = Vector2(647, 322)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_5"), NodePath("../TestStar_7")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_6"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_6/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_7" type="Sprite2D" parent="Guidelines"]
position = Vector2(666, 318)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_6")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_7"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_7/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_8" type="Sprite2D" parent="Guidelines"]
position = Vector2(609, 345)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_4"), NodePath("../TestStar_9")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_8"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_8/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_9" type="Sprite2D" parent="Guidelines"]
position = Vector2(608, 368)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_8"), NodePath("../TestStar_910")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_9"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_9/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_910" type="Sprite2D" parent="Guidelines"]
position = Vector2(609, 385)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_9"), NodePath("../TestStar_911"), NodePath("../TestStar_914")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_910"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_910/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_911" type="Sprite2D" parent="Guidelines"]
position = Vector2(594, 399)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_910"), NodePath("../TestStar_912")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_911"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_911/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_912" type="Sprite2D" parent="Guidelines"]
position = Vector2(572, 398)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_911"), NodePath("../TestStar_913")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_912"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_912/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_913" type="Sprite2D" parent="Guidelines"]
position = Vector2(552, 398)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_912")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_913"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_913/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_914" type="Sprite2D" parent="Guidelines"]
position = Vector2(626, 401)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_910"), NodePath("../TestStar_915")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_914"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_914/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar_915" type="Sprite2D" parent="Guidelines"]
position = Vector2(646, 402)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_914"), NodePath("../TestStar1_916")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar_915"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar_915/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[node name="TestStar1_916" type="Sprite2D" parent="Guidelines"]
position = Vector2(666, 403)
scale = Vector2(0.5, 0.5)
texture = ExtResource("4_frsoy")
script = ExtResource("8_5qgyw")
connections = Array[NodePath]([NodePath("../TestStar_915")])
[node name="Area2D" type="Area2D" parent="Guidelines/TestStar1_916"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Guidelines/TestStar1_916/Area2D"]
shape = SubResource("CircleShape2D_0bwgd")
[connection signal="value_changed" from="UI/HBoxContainer/PatienceBar" to="." method="_on_patience_bar_value_changed"]
[connection signal="area_entered" from="UtilsDropoff/Area2D" to="TestScalpel" method="_on_dropoff_area_entered"]

View file

@ -1,3 +1,4 @@
class_name Scalpel
extends Sprite2D
var is_clickable = false
@ -17,12 +18,12 @@ func _input(event: InputEvent):
if event is InputEventMouseButton and event.is_pressed():
if is_picked_up:
if is_dropable:
is_picked_up = false
_drop_scalpel()
elif is_cutting_possible:
start_cutting()
elif is_clickable:
is_picked_up = true
elif event is InputEventMouseButton and event.is_released():
_pickup_scalpel()
if event is InputEventMouseButton and event.is_released():
if is_cutting:
stop_cutting()
if is_picked_up and event is InputEventMouseMotion:
@ -49,9 +50,24 @@ func _on_body_area_exited(area):
is_cutting_possible = false
stop_cutting()
func _pickup_scalpel():
is_picked_up = true
Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
func _drop_scalpel():
is_picked_up = false
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
func _exit_tree():
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
var _scalpel_degrees_default: float
const SCALPEL_ROTATION_CUTTING = -90.0
func start_cutting():
if is_cutting: return
print("Start cut")
_scalpel_degrees_default = rotation_degrees
rotation_degrees = SCALPEL_ROTATION_CUTTING
_on_cut_hurt_timer_timeout()
%CutHurtTimer.start(1)
is_cutting = true
@ -59,6 +75,7 @@ func start_cutting():
func stop_cutting():
if not is_cutting: return
print("Stop cut")
rotation_degrees = _scalpel_degrees_default
%CutHurtTimer.stop()
is_cutting = false