diff --git a/scenes/rooms/floor0/EmergencyRoom.tscn b/scenes/rooms/floor0/EmergencyRoom.tscn index 1438b5d..b8d369f 100644 --- a/scenes/rooms/floor0/EmergencyRoom.tscn +++ b/scenes/rooms/floor0/EmergencyRoom.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://cozypaw_emergency"] +[gd_scene load_steps=4 format=3 uid="uid://cozypaw_emergency"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] [ext_resource type="PackedScene" path="res://scenes/objects/Ambulance.tscn" id="2_ambulance"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="3_snap"] [node name="EmergencyRoom" type="Node2D"] @@ -73,3 +74,8 @@ position = Vector2(550, 440) position = Vector2(500, 570) trigger_floor = 0 trigger_room = 3 + +[node name="SnapMedicalTable" type="Node2D" parent="."] +position = Vector2(310, 480) +script = ExtResource("3_snap") +pose = "lying" diff --git a/scenes/rooms/floor0/GiftShop.tscn b/scenes/rooms/floor0/GiftShop.tscn index 6c8b3f6..61a6301 100644 --- a/scenes/rooms/floor0/GiftShop.tscn +++ b/scenes/rooms/floor0/GiftShop.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://cozypaw_giftshop"] +[gd_scene load_steps=3 format=3 uid="uid://cozypaw_giftshop"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="2_snap"] [node name="GiftShop" type="Node2D"] @@ -63,3 +64,7 @@ position = Vector2(900, 330) [node name="GiftBox" parent="." instance=ExtResource("1_iobj")] position = Vector2(640, 510) + +[node name="SnapCounter" type="Node2D" parent="."] +position = Vector2(640, 528) +script = ExtResource("2_snap") diff --git a/scenes/rooms/floor0/Reception.tscn b/scenes/rooms/floor0/Reception.tscn index f38e11b..5ebf8d9 100644 --- a/scenes/rooms/floor0/Reception.tscn +++ b/scenes/rooms/floor0/Reception.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://cozypaw_reception"] +[gd_scene load_steps=3 format=3 uid="uid://cozypaw_reception"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="2_snap"] [node name="Reception" type="Node2D"] @@ -85,3 +86,19 @@ position = Vector2(530, 510) [node name="PottedPlant" parent="." instance=ExtResource("1_iobj")] position = Vector2(1180, 560) + +[node name="SnapBenchLeft1" type="Node2D" parent="."] +position = Vector2(150, 555) +script = ExtResource("2_snap") + +[node name="SnapBenchLeft2" type="Node2D" parent="."] +position = Vector2(240, 555) +script = ExtResource("2_snap") + +[node name="SnapBenchRight1" type="Node2D" parent="."] +position = Vector2(990, 555) +script = ExtResource("2_snap") + +[node name="SnapBenchRight2" type="Node2D" parent="."] +position = Vector2(1080, 555) +script = ExtResource("2_snap") diff --git a/scenes/rooms/floor0/Restaurant.tscn b/scenes/rooms/floor0/Restaurant.tscn index bbf5d72..19f8eef 100644 --- a/scenes/rooms/floor0/Restaurant.tscn +++ b/scenes/rooms/floor0/Restaurant.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://cozypaw_restaurant"] +[gd_scene load_steps=3 format=3 uid="uid://cozypaw_restaurant"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="2_snap"] [node name="Restaurant" type="Node2D"] @@ -93,3 +94,27 @@ position = Vector2(1060, 490) [node name="CashRegister" parent="." instance=ExtResource("1_iobj")] position = Vector2(640, 210) + +[node name="SnapTable1Left" type="Node2D" parent="."] +position = Vector2(160, 510) +script = ExtResource("2_snap") + +[node name="SnapTable1Right" type="Node2D" parent="."] +position = Vector2(280, 510) +script = ExtResource("2_snap") + +[node name="SnapTable2Left" type="Node2D" parent="."] +position = Vector2(580, 510) +script = ExtResource("2_snap") + +[node name="SnapTable2Right" type="Node2D" parent="."] +position = Vector2(700, 510) +script = ExtResource("2_snap") + +[node name="SnapTable3Left" type="Node2D" parent="."] +position = Vector2(1000, 510) +script = ExtResource("2_snap") + +[node name="SnapTable3Right" type="Node2D" parent="."] +position = Vector2(1120, 510) +script = ExtResource("2_snap") diff --git a/scenes/rooms/floor1/Lab.tscn b/scenes/rooms/floor1/Lab.tscn index a1054d4..3c7d001 100644 --- a/scenes/rooms/floor1/Lab.tscn +++ b/scenes/rooms/floor1/Lab.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://cozypaw_lab"] +[gd_scene load_steps=3 format=3 uid="uid://cozypaw_lab"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="2_snap"] [node name="Lab" type="Node2D"] @@ -68,3 +69,11 @@ position = Vector2(820, 450) [node name="PetriDish" parent="." instance=ExtResource("1_iobj")] position = Vector2(490, 450) + +[node name="SnapLabBench1" type="Node2D" parent="."] +position = Vector2(450, 470) +script = ExtResource("2_snap") + +[node name="SnapLabBench2" type="Node2D" parent="."] +position = Vector2(750, 470) +script = ExtResource("2_snap") diff --git a/scenes/rooms/floor1/PatientRoom.tscn b/scenes/rooms/floor1/PatientRoom.tscn index e3f4ec7..455bc1b 100644 --- a/scenes/rooms/floor1/PatientRoom.tscn +++ b/scenes/rooms/floor1/PatientRoom.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://cozypaw_patientroom"] +[gd_scene load_steps=3 format=3 uid="uid://cozypaw_patientroom"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="2_snap"] [node name="PatientRoom" type="Node2D"] @@ -82,3 +83,13 @@ position = Vector2(1100, 265) [node name="BedsideTable" parent="." instance=ExtResource("1_iobj")] position = Vector2(500, 540) + +[node name="SnapBed1" type="Node2D" parent="."] +position = Vector2(250, 465) +script = ExtResource("2_snap") +pose = "lying" + +[node name="SnapBed2" type="Node2D" parent="."] +position = Vector2(810, 465) +script = ExtResource("2_snap") +pose = "lying" diff --git a/scenes/rooms/floor1/Pharmacy.tscn b/scenes/rooms/floor1/Pharmacy.tscn index 1e09dc0..59d4ea9 100644 --- a/scenes/rooms/floor1/Pharmacy.tscn +++ b/scenes/rooms/floor1/Pharmacy.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://cozypaw_pharmacy"] +[gd_scene load_steps=3 format=3 uid="uid://cozypaw_pharmacy"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="2_snap"] [node name="Pharmacy" type="Node2D"] @@ -68,3 +69,7 @@ position = Vector2(900, 270) [node name="MedicineBox" parent="." instance=ExtResource("1_iobj")] position = Vector2(640, 430) + +[node name="SnapCounter" type="Node2D" parent="."] +position = Vector2(640, 520) +script = ExtResource("2_snap") diff --git a/scenes/rooms/floor1/XRay.tscn b/scenes/rooms/floor1/XRay.tscn index 93c760e..a483fb8 100644 --- a/scenes/rooms/floor1/XRay.tscn +++ b/scenes/rooms/floor1/XRay.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://cozypaw_xray"] +[gd_scene load_steps=4 format=3 uid="uid://cozypaw_xray"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] [ext_resource type="PackedScene" path="res://scenes/objects/XRayMachine.tscn" id="2_xraymachine"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="3_snap"] [node name="XRay" type="Node2D"] @@ -53,3 +54,8 @@ position = Vector2(500, 510) [node name="PlasterStation" parent="." instance=ExtResource("1_iobj")] position = Vector2(900, 560) + +[node name="SnapExamTable" type="Node2D" parent="."] +position = Vector2(640, 480) +script = ExtResource("3_snap") +pose = "lying" diff --git a/scenes/rooms/floor2/DeliveryRoom.tscn b/scenes/rooms/floor2/DeliveryRoom.tscn index 88f4d98..9b49223 100644 --- a/scenes/rooms/floor2/DeliveryRoom.tscn +++ b/scenes/rooms/floor2/DeliveryRoom.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://cozypaw_deliveryroom"] +[gd_scene load_steps=4 format=3 uid="uid://cozypaw_deliveryroom"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] [ext_resource type="PackedScene" path="res://scenes/objects/DeliveryBed.tscn" id="2_deliverybed"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="3_snap"] [node name="DeliveryRoom" type="Node2D"] @@ -36,3 +37,8 @@ position = Vector2(1020, 540) [node name="BabyBlanket" parent="." instance=ExtResource("1_iobj")] position = Vector2(880, 540) + +[node name="SnapDeliveryBed" type="Node2D" parent="."] +position = Vector2(540, 480) +script = ExtResource("3_snap") +pose = "lying" diff --git a/scenes/rooms/floor2/Nursery.tscn b/scenes/rooms/floor2/Nursery.tscn index e6a3616..74f0466 100644 --- a/scenes/rooms/floor2/Nursery.tscn +++ b/scenes/rooms/floor2/Nursery.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://cozypaw_nursery"] +[gd_scene load_steps=4 format=3 uid="uid://cozypaw_nursery"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] [ext_resource type="PackedScene" path="res://scenes/objects/Cradle.tscn" id="2_cradle"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="3_snap"] [node name="Nursery" type="Node2D"] @@ -47,3 +48,21 @@ position = Vector2(1100, 540) [node name="MilkBottle" parent="." instance=ExtResource("1_iobj")] position = Vector2(960, 540) + +[node name="SnapCradle1" type="Node2D" parent="."] +position = Vector2(340, 240) +script = ExtResource("3_snap") +pose = "lying" +baby_only = true + +[node name="SnapCradle2" type="Node2D" parent="."] +position = Vector2(600, 240) +script = ExtResource("3_snap") +pose = "lying" +baby_only = true + +[node name="SnapCradle3" type="Node2D" parent="."] +position = Vector2(860, 240) +script = ExtResource("3_snap") +pose = "lying" +baby_only = true diff --git a/scenes/rooms/floor2/Ultrasound.tscn b/scenes/rooms/floor2/Ultrasound.tscn index 88a4028..4a76d51 100644 --- a/scenes/rooms/floor2/Ultrasound.tscn +++ b/scenes/rooms/floor2/Ultrasound.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://cozypaw_ultrasound"] +[gd_scene load_steps=4 format=3 uid="uid://cozypaw_ultrasound"] [ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"] [ext_resource type="PackedScene" path="res://scenes/objects/UltrasoundMachine.tscn" id="2_ultrasound"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="3_snap"] [node name="Ultrasound" type="Node2D"] @@ -51,3 +52,8 @@ position = Vector2(920, 450) [node name="Blanket" parent="." instance=ExtResource("1_iobj")] position = Vector2(480, 450) + +[node name="SnapExamTable" type="Node2D" parent="."] +position = Vector2(470, 480) +script = ExtResource("3_snap") +pose = "lying" diff --git a/scenes/rooms/home/GardenParty.tscn b/scenes/rooms/home/GardenParty.tscn index 13b19de..8cf4e8d 100644 --- a/scenes/rooms/home/GardenParty.tscn +++ b/scenes/rooms/home/GardenParty.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=4 format=3 uid="uid://cozypaw_gardenparty"] +[gd_scene load_steps=5 format=3 uid="uid://cozypaw_gardenparty"] [ext_resource type="PackedScene" path="res://scenes/objects/GiftBox.tscn" id="1_giftbox"] [ext_resource type="PackedScene" path="res://scenes/objects/TeaPot.tscn" id="2_teapot"] [ext_resource type="PackedScene" path="res://scenes/objects/HomeButton.tscn" id="3_homebtn"] +[ext_resource type="Script" path="res://scripts/objects/snap_point.gd" id="4_snap"] [node name="GardenParty" type="Node2D"] @@ -84,3 +85,11 @@ color = Color(0.56, 0.76, 0.96, 1) [node name="HomeButtonReturn" parent="." instance=ExtResource("3_homebtn")] position = Vector2(100, 620) go_to_garden = false + +[node name="SnapTableLeft" type="Node2D" parent="."] +position = Vector2(530, 455) +script = ExtResource("4_snap") + +[node name="SnapTableRight" type="Node2D" parent="."] +position = Vector2(750, 455) +script = ExtResource("4_snap") diff --git a/test/unit/test_snap_points_floor0.gd b/test/unit/test_snap_points_floor0.gd new file mode 100644 index 0000000..bc706d7 --- /dev/null +++ b/test/unit/test_snap_points_floor0.gd @@ -0,0 +1,67 @@ +## Tests verifying SnapPoints exist in all EG (Erdgeschoss) room scenes. +extends GutTest + + +func _count_snaps(room: Node2D) -> int: + var count: int = 0 + for child: Node in room.get_children(): + if child is SnapPoint: + count += 1 + return count + + +func _count_snaps_with_pose(room: Node2D, pose: String) -> int: + var count: int = 0 + for child: Node in room.get_children(): + var snap: SnapPoint = child as SnapPoint + if snap != null and snap.pose == pose: + count += 1 + return count + + +func test_reception_has_four_snap_points() -> void: + var room: Node2D = preload("res://scenes/rooms/floor0/Reception.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 4) + + +func test_reception_all_snaps_are_sitting() -> void: + var room: Node2D = preload("res://scenes/rooms/floor0/Reception.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "sitting"), 4) + + +func test_giftshop_has_one_snap_point() -> void: + var room: Node2D = preload("res://scenes/rooms/floor0/GiftShop.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 1) + + +func test_giftshop_snap_is_sitting() -> void: + var room: Node2D = preload("res://scenes/rooms/floor0/GiftShop.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "sitting"), 1) + + +func test_restaurant_has_six_snap_points() -> void: + var room: Node2D = preload("res://scenes/rooms/floor0/Restaurant.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 6) + + +func test_restaurant_all_snaps_are_sitting() -> void: + var room: Node2D = preload("res://scenes/rooms/floor0/Restaurant.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "sitting"), 6) + + +func test_emergency_room_has_one_snap_point() -> void: + var room: Node2D = preload("res://scenes/rooms/floor0/EmergencyRoom.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 1) + + +func test_emergency_room_snap_is_lying() -> void: + var room: Node2D = preload("res://scenes/rooms/floor0/EmergencyRoom.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "lying"), 1) diff --git a/test/unit/test_snap_points_floor1.gd b/test/unit/test_snap_points_floor1.gd new file mode 100644 index 0000000..5e5b8be --- /dev/null +++ b/test/unit/test_snap_points_floor1.gd @@ -0,0 +1,67 @@ +## Tests verifying SnapPoints exist in all 1.OG room scenes. +extends GutTest + + +func _count_snaps(room: Node2D) -> int: + var count: int = 0 + for child: Node in room.get_children(): + if child is SnapPoint: + count += 1 + return count + + +func _count_snaps_with_pose(room: Node2D, pose: String) -> int: + var count: int = 0 + for child: Node in room.get_children(): + var snap: SnapPoint = child as SnapPoint + if snap != null and snap.pose == pose: + count += 1 + return count + + +func test_xray_has_one_snap_point() -> void: + var room: Node2D = preload("res://scenes/rooms/floor1/XRay.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 1) + + +func test_xray_snap_is_lying() -> void: + var room: Node2D = preload("res://scenes/rooms/floor1/XRay.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "lying"), 1) + + +func test_pharmacy_has_one_snap_point() -> void: + var room: Node2D = preload("res://scenes/rooms/floor1/Pharmacy.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 1) + + +func test_pharmacy_snap_is_sitting() -> void: + var room: Node2D = preload("res://scenes/rooms/floor1/Pharmacy.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "sitting"), 1) + + +func test_lab_has_two_snap_points() -> void: + var room: Node2D = preload("res://scenes/rooms/floor1/Lab.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 2) + + +func test_lab_all_snaps_are_sitting() -> void: + var room: Node2D = preload("res://scenes/rooms/floor1/Lab.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "sitting"), 2) + + +func test_patient_room_has_two_snap_points() -> void: + var room: Node2D = preload("res://scenes/rooms/floor1/PatientRoom.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 2) + + +func test_patient_room_all_snaps_are_lying() -> void: + var room: Node2D = preload("res://scenes/rooms/floor1/PatientRoom.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "lying"), 2) diff --git a/test/unit/test_snap_points_floor2.gd b/test/unit/test_snap_points_floor2.gd new file mode 100644 index 0000000..88dd10f --- /dev/null +++ b/test/unit/test_snap_points_floor2.gd @@ -0,0 +1,82 @@ +## Tests verifying SnapPoints exist in all 2.OG and Garten room scenes. +extends GutTest + + +func _count_snaps(room: Node2D) -> int: + var count: int = 0 + for child: Node in room.get_children(): + if child is SnapPoint: + count += 1 + return count + + +func _count_snaps_with_pose(room: Node2D, pose: String) -> int: + var count: int = 0 + for child: Node in room.get_children(): + var snap: SnapPoint = child as SnapPoint + if snap != null and snap.pose == pose: + count += 1 + return count + + +func _count_snaps_baby_only(room: Node2D) -> int: + var count: int = 0 + for child: Node in room.get_children(): + var snap: SnapPoint = child as SnapPoint + if snap != null and snap.baby_only: + count += 1 + return count + + +func test_ultrasound_has_one_snap_point() -> void: + var room: Node2D = preload("res://scenes/rooms/floor2/Ultrasound.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 1) + + +func test_ultrasound_snap_is_lying() -> void: + var room: Node2D = preload("res://scenes/rooms/floor2/Ultrasound.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "lying"), 1) + + +func test_delivery_room_has_one_snap_point() -> void: + var room: Node2D = preload("res://scenes/rooms/floor2/DeliveryRoom.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 1) + + +func test_delivery_room_snap_is_lying() -> void: + var room: Node2D = preload("res://scenes/rooms/floor2/DeliveryRoom.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "lying"), 1) + + +func test_nursery_has_three_snap_points() -> void: + var room: Node2D = preload("res://scenes/rooms/floor2/Nursery.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 3) + + +func test_nursery_all_snaps_are_baby_only() -> void: + var room: Node2D = preload("res://scenes/rooms/floor2/Nursery.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_baby_only(room), 3) + + +func test_nursery_all_snaps_are_lying() -> void: + var room: Node2D = preload("res://scenes/rooms/floor2/Nursery.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "lying"), 3) + + +func test_garden_party_has_two_snap_points() -> void: + var room: Node2D = preload("res://scenes/rooms/home/GardenParty.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps(room), 2) + + +func test_garden_party_all_snaps_are_sitting() -> void: + var room: Node2D = preload("res://scenes/rooms/home/GardenParty.tscn").instantiate() as Node2D + add_child_autofree(room) + assert_eq(_count_snaps_with_pose(room, "sitting"), 2)