From e32a58f416010a429e9026d3b32ef87d409dc251 Mon Sep 17 00:00:00 2001 From: Nikolai Fesenko <152747946+NikolaiFesenko-code@users.noreply.github.com> Date: Thu, 21 Aug 2025 19:32:40 +0200 Subject: [PATCH] update --- Scenes/Prefabs/DoubleBeds.tscn | 4 ++++ Scenes/Prefabs/Pot.tscn | 27 ++++++++++++++++++++++-- Scripts/Interactable.gd | 2 ++ Scripts/build_manager.gd | 15 ++++++++++++++ Scripts/objects/DoubleBeds.gd | 3 ++- Scripts/objects/pot_object.gd | 17 ++++++++++++++++ Scripts/objects/pot_object.gd.uid | 1 + Scripts/objects/shelf_object.gd | 1 + Scripts/person.gd | 6 +++++- Scripts/person_action.gd | 34 ++++++++++++++++++++++++++++++- 10 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 Scripts/objects/pot_object.gd create mode 100644 Scripts/objects/pot_object.gd.uid diff --git a/Scenes/Prefabs/DoubleBeds.tscn b/Scenes/Prefabs/DoubleBeds.tscn index ba39d26..06bbcd9 100644 --- a/Scenes/Prefabs/DoubleBeds.tscn +++ b/Scenes/Prefabs/DoubleBeds.tscn @@ -92,4 +92,8 @@ visible = false wait_time = 4.0 one_shot = true +[node name="PersonPos2" parent="ActionNode" instance=ExtResource("9_k1k40")] +transform = Transform3D(0.0323901, -0.298156, -0.00732965, 0.298245, 0.0323998, 0, 0.000791598, -0.00728678, 0.29991, -0.0940391, 0.820194, -1.60941) +visible = false + [connection signal="timeout" from="ActionNode/Timer" to="ActionNode" method="_on_timer_timeout"] diff --git a/Scenes/Prefabs/Pot.tscn b/Scenes/Prefabs/Pot.tscn index d4b28ca..2bca260 100644 --- a/Scenes/Prefabs/Pot.tscn +++ b/Scenes/Prefabs/Pot.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=20 format=3 uid="uid://bcme5mx8nf5kf"] +[gd_scene load_steps=23 format=3 uid="uid://bcme5mx8nf5kf"] [ext_resource type="Script" uid="uid://c61rr6to3q566" path="res://Scripts/build_object.gd" id="1_c5d30"] [ext_resource type="ArrayMesh" uid="uid://dqs5joeucls8u" path="res://Blends/Pot/pot.obj" id="1_ps8qt"] @@ -11,6 +11,8 @@ [ext_resource type="Texture2D" uid="uid://bxgm6oovlxdjq" path="res://Blends/Pot/wood_n.png" id="6_r71lq"] [ext_resource type="Texture2D" uid="uid://run700pxmcyc" path="res://Blends/Pot/brick_t.png" id="7_e7ek7"] [ext_resource type="Shader" uid="uid://c08eg1piwoy3t" path="res://Shaders/outline.gdshader" id="7_gtq0i"] +[ext_resource type="Script" uid="uid://cpg631v6q60xo" path="res://Scripts/objects/pot_object.gd" id="12_r71lq"] +[ext_resource type="PackedScene" uid="uid://f7nkbsrxy4r6" path="res://Scenes/Prefabs/PersonPos.tscn" id="13_e7ek7"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_vv7mx"] render_priority = 0 @@ -60,13 +62,19 @@ shader_parameter/color = Vector3(0.95, 0.71, 0.01) next_pass = SubResource("ShaderMaterial_dn6sd") albedo_texture = ExtResource("7_e7ek7") -[node name="Pot" type="Node3D" node_paths=PackedStringArray("meshInstance")] +[sub_resource type="SphereShape3D" id="SphereShape3D_dn6sd"] +radius = 0.870929 + +[node name="Pot" type="Node3D" node_paths=PackedStringArray("meshInstance", "ActionNode", "static_body")] script = ExtResource("1_c5d30") meshInstance = NodePath("Pot") preview_shader = SubResource("ShaderMaterial_vv7mx") +ActionNode = NodePath("ActionNode") +static_body = NodePath("StaticBody3D") [node name="StaticBody3D" type="StaticBody3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2.14194, 0) +input_ray_pickable = false [node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"] transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.916585, 0.0207213) @@ -79,3 +87,18 @@ surface_material_override/0 = SubResource("StandardMaterial3D_dn6sd") surface_material_override/1 = SubResource("StandardMaterial3D_uhv8u") surface_material_override/2 = SubResource("StandardMaterial3D_dn6sd") surface_material_override/3 = SubResource("StandardMaterial3D_rbvpf") + +[node name="ActionNode" type="Node3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.26206, 2.41965) +script = ExtResource("12_r71lq") + +[node name="Area3d" type="Area3D" parent="ActionNode"] +input_ray_pickable = false + +[node name="CollisionShape3D" type="CollisionShape3D" parent="ActionNode/Area3d"] +shape = SubResource("SphereShape3D_dn6sd") + +[node name="PersonPos1" parent="ActionNode" instance=ExtResource("13_e7ek7")] +transform = Transform3D(-1.31134e-08, 0, 0.3, 0, 0.3, 0, -0.3, 0, -1.31134e-08, 0, -0.452533, -0.708748) +visible = false +skeleton = NodePath("") diff --git a/Scripts/Interactable.gd b/Scripts/Interactable.gd index 251b759..6bfa314 100644 --- a/Scripts/Interactable.gd +++ b/Scripts/Interactable.gd @@ -4,6 +4,8 @@ extends Node signal action_stoped signal object_placed() +var build_name: String = "None" + var can_pick: bool diff --git a/Scripts/build_manager.gd b/Scripts/build_manager.gd index a638eee..f3b80cf 100644 --- a/Scripts/build_manager.gd +++ b/Scripts/build_manager.gd @@ -59,3 +59,18 @@ func _on_object_selected(): func add_object_to_array(object): builded_objects.append(object) object_added.emit(object) + + +func set_person_target_build(build_name, is_free): + var result = find_building(build_name, is_free) + if result != null: + return result + else: + return result + +func find_building(build_name,is_free): + for build in builded_objects: + if build.ActionNode.build_name == build_name: + if build.ActionNode.can_be_used() == is_free: + return build + return null diff --git a/Scripts/objects/DoubleBeds.gd b/Scripts/objects/DoubleBeds.gd index 233b58f..fa661f5 100644 --- a/Scripts/objects/DoubleBeds.gd +++ b/Scripts/objects/DoubleBeds.gd @@ -4,11 +4,12 @@ func _init() -> void: can_pick = false can_store = false max_person_using = 2 - + build_name = "bed" func _ready() -> void: persons_position.append($PersonPos1) + persons_position.append($PersonPos2) func start_action(person, object): person.visible = false diff --git a/Scripts/objects/pot_object.gd b/Scripts/objects/pot_object.gd new file mode 100644 index 0000000..103f9ee --- /dev/null +++ b/Scripts/objects/pot_object.gd @@ -0,0 +1,17 @@ +extends Interactable + + +func _init() -> void: + max_person_using = 1 + build_name = "pot" + +func _ready() -> void: + persons_position.append($PersonPos1) + + +func start_action(person, object): + person.action = self + person.set_timer(5) + +func stop_action(person, object): + print("action stoped") diff --git a/Scripts/objects/pot_object.gd.uid b/Scripts/objects/pot_object.gd.uid new file mode 100644 index 0000000..3056bc3 --- /dev/null +++ b/Scripts/objects/pot_object.gd.uid @@ -0,0 +1 @@ +uid://cpg631v6q60xo diff --git a/Scripts/objects/shelf_object.gd b/Scripts/objects/shelf_object.gd index 0e1dd30..a67cd76 100644 --- a/Scripts/objects/shelf_object.gd +++ b/Scripts/objects/shelf_object.gd @@ -10,6 +10,7 @@ var item_poses: Array func _init() -> void: max_person_using = 1 can_store = true + build_name = "shelf" func _ready() -> void: self.owner = $".." #object_placed.connect(_on_object_placed.bind(self)) diff --git a/Scripts/person.gd b/Scripts/person.gd index 083394c..5a60346 100644 --- a/Scripts/person.gd +++ b/Scripts/person.gd @@ -79,18 +79,22 @@ func set_target_position(): var newPos = target_object.global_position newPos.y = self.position.y nav_agent.target_position = newPos - print(target_object.can_be_used()) #nav_agent.target_position = start_pos func _on_navigation_agent_3d_target_reached() -> void: if target_object != null: + print("I reached a target") is_target_reached = true nav_agent.target_position = self.global_position Global.interact.emit(self, target_object) pass +func set_timer(time): + timer.wait_time = time + timer.one_shot = true + timer.start() func _on_timer_timeout() -> void: if action != null: diff --git a/Scripts/person_action.gd b/Scripts/person_action.gd index 27d053e..d607b81 100644 --- a/Scripts/person_action.gd +++ b/Scripts/person_action.gd @@ -7,7 +7,17 @@ func get_context_buttons(): go_eat_button.text = "Go Eat" go_eat_button.pressed.connect(go_eat) buttons.append(go_eat_button) + # go sleep + var go_sleep_button = Button.new() + go_sleep_button.text = "Go Sleep" + go_sleep_button.pressed.connect(go_sleep) + buttons.append(go_sleep_button) + # go cook + var go_cook_button = Button.new() + go_cook_button.text = "Go Cook" + go_cook_button.pressed.connect(go_cook) + buttons.append(go_cook_button) return buttons func go_eat(): @@ -22,9 +32,31 @@ func go_eat(): print("I found food") Global.hide_context_menu.emit() +func go_sleep(): + print("I will go to sleep") + var selected_person = Global.object_selected + selected_person.target_action = "sleep" + var result = BuildManager.set_person_target_build("bed", true) + print(result) + if result != null: + selected_person.set_target(result.ActionNode) + else: + print("I cant find free bed") + func sleep(person, object, action): - person.action = action + person.action = action person.timer.wait_time = 2.0 person.timer.one_shot = true person.timer.start() person.timer.timeout.connect(person._on_timer_timeout) + + +func go_cook(): + print("I will go cooking") + var selected_person = Global.object_selected + var result = BuildManager.set_person_target_build("pot", true) + if result != null: + selected_person.set_target(result) + else: + print("I cant find free pot") + pass