Compare commits
2 Commits
5637c82eb7
...
a62d2e29bc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a62d2e29bc | ||
|
|
c073bb555f |
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=18 format=3 uid="uid://0t0cvsitlfmm"]
|
[gd_scene load_steps=19 format=3 uid="uid://0t0cvsitlfmm"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://c61rr6to3q566" path="res://Scripts/build_object.gd" id="1_nn5da"]
|
[ext_resource type="Script" uid="uid://c61rr6to3q566" path="res://Scripts/build_object.gd" id="1_nn5da"]
|
||||||
[ext_resource type="ArrayMesh" uid="uid://cahq2fdeqqwhx" path="res://Blends/Mobel/DoubleBeds.obj" id="2_8ssp7"]
|
[ext_resource type="ArrayMesh" uid="uid://cahq2fdeqqwhx" path="res://Blends/Mobel/DoubleBeds.obj" id="2_8ssp7"]
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
[ext_resource type="Shader" uid="uid://c08eg1piwoy3t" path="res://Shaders/outline.gdshader" id="5_c1046"]
|
[ext_resource type="Shader" uid="uid://c08eg1piwoy3t" path="res://Shaders/outline.gdshader" id="5_c1046"]
|
||||||
[ext_resource type="Texture2D" uid="uid://kl1jplui8wfq" path="res://Blends/Mobel/textures/Material.003 Base Color.png" id="5_sp2kd"]
|
[ext_resource type="Texture2D" uid="uid://kl1jplui8wfq" path="res://Blends/Mobel/textures/Material.003 Base Color.png" id="5_sp2kd"]
|
||||||
[ext_resource type="Script" uid="uid://fjdtka5s1dxi" path="res://Scripts/objects/DoubleBeds.gd" id="8_c1046"]
|
[ext_resource type="Script" uid="uid://fjdtka5s1dxi" path="res://Scripts/objects/DoubleBeds.gd" id="8_c1046"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://f7nkbsrxy4r6" path="res://Scenes/Prefabs/PersonPos.tscn" id="9_k1k40"]
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_dn7et"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_dn7et"]
|
||||||
render_priority = 0
|
render_priority = 0
|
||||||
@@ -79,3 +80,13 @@ shape = SubResource("SphereShape3D_c1046")
|
|||||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="ActionNode/Area3d"]
|
[node name="CSGSphere3D" type="CSGSphere3D" parent="ActionNode/Area3d"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.839141, 0.470829)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.839141, 0.470829)
|
||||||
radius = 0.886475
|
radius = 0.886475
|
||||||
|
|
||||||
|
[node name="PersonPos1" 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, -1.07055, -1.60941)
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="Timer" type="Timer" parent="ActionNode"]
|
||||||
|
wait_time = 4.0
|
||||||
|
one_shot = true
|
||||||
|
|
||||||
|
[connection signal="timeout" from="ActionNode/Timer" to="ActionNode" method="_on_timer_timeout"]
|
||||||
|
|||||||
@@ -29,5 +29,10 @@ shape = SubResource("ConvexPolygonShape3D_dbviw")
|
|||||||
avoidance_enabled = true
|
avoidance_enabled = true
|
||||||
debug_enabled = true
|
debug_enabled = true
|
||||||
|
|
||||||
|
[node name="Timer" type="Timer" parent="."]
|
||||||
|
wait_time = 4.0
|
||||||
|
one_shot = true
|
||||||
|
|
||||||
[connection signal="navigation_finished" from="NavigationAgent3D" to="." method="_on_navigation_agent_3d_navigation_finished"]
|
[connection signal="navigation_finished" from="NavigationAgent3D" to="." method="_on_navigation_agent_3d_navigation_finished"]
|
||||||
[connection signal="target_reached" from="NavigationAgent3D" to="." method="_on_navigation_agent_3d_target_reached"]
|
[connection signal="target_reached" from="NavigationAgent3D" to="." method="_on_navigation_agent_3d_target_reached"]
|
||||||
|
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]
|
||||||
|
|||||||
16
Scenes/Prefabs/PersonPos.tscn
Normal file
16
Scenes/Prefabs/PersonPos.tscn
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://f7nkbsrxy4r6"]
|
||||||
|
|
||||||
|
[ext_resource type="ArrayMesh" uid="uid://dwd6ylq5xn6kj" path="res://Blends/Person/Person.obj" id="1_njeso"]
|
||||||
|
[ext_resource type="Shader" uid="uid://bm15rdsdxldwl" path="res://Shaders/shirt.gdshader" id="2_hdsev"]
|
||||||
|
[ext_resource type="Script" uid="uid://cstn6v7wfnwwb" path="res://Scripts/person_pos.gd" id="3_q4csl"]
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_q4csl"]
|
||||||
|
render_priority = 0
|
||||||
|
shader = ExtResource("2_hdsev")
|
||||||
|
shader_parameter/shirt_color = Vector3(0, 0, 0)
|
||||||
|
|
||||||
|
[node name="PersonPos" type="MeshInstance3D"]
|
||||||
|
transform = Transform3D(0.3, 0, 0, 0, 0.3, 0, 0, 0, 0.3, 0, 0, 0)
|
||||||
|
mesh = ExtResource("1_njeso")
|
||||||
|
surface_material_override/1 = SubResource("ShaderMaterial_q4csl")
|
||||||
|
script = ExtResource("3_q4csl")
|
||||||
@@ -146,4 +146,4 @@ focus_mode = 1
|
|||||||
mouse_filter = 2
|
mouse_filter = 2
|
||||||
|
|
||||||
[node name="Marker3D" type="Marker3D" parent="."]
|
[node name="Marker3D" type="Marker3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.90278, -57.5436)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.439, 2.74, -59.25)
|
||||||
|
|||||||
@@ -1,10 +1,50 @@
|
|||||||
class_name Interactable
|
class_name Interactable
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
signal action_stoped
|
||||||
|
|
||||||
var can_pick: bool
|
var can_pick: bool
|
||||||
|
|
||||||
var can_store: bool
|
var can_store: bool
|
||||||
var stored_objects: Array
|
var stored_objects: Array
|
||||||
|
|
||||||
func action(person):
|
var max_person_using
|
||||||
|
var persons_using: Array
|
||||||
|
var persons_position: Array
|
||||||
|
|
||||||
|
func start_action(person, object):
|
||||||
print("action!")
|
print("action!")
|
||||||
|
|
||||||
|
|
||||||
|
func stop_action(person, object):
|
||||||
|
person.is_in_action = false
|
||||||
|
var pose = find_pose(person)
|
||||||
|
pose.remove_person()
|
||||||
|
person.visible = true
|
||||||
|
action_stoped.emit()
|
||||||
|
|
||||||
|
func add_person_using(person):
|
||||||
|
persons_using.append(person)
|
||||||
|
|
||||||
|
func remove_person_using(person):
|
||||||
|
persons_using.erase(person)
|
||||||
|
|
||||||
|
|
||||||
|
func set_person_pos(person):
|
||||||
|
for pose in persons_position:
|
||||||
|
if pose.is_free:
|
||||||
|
pose.set_person(person)
|
||||||
|
|
||||||
|
|
||||||
|
func find_pose(person):
|
||||||
|
return persons_position[persons_position.find(person)]
|
||||||
|
|
||||||
|
func can_be_used():
|
||||||
|
var used_poses = 0
|
||||||
|
for pose in persons_position:
|
||||||
|
if !pose.is_free:
|
||||||
|
used_poses += 1
|
||||||
|
if used_poses < max_person_using:
|
||||||
|
return true
|
||||||
|
else:
|
||||||
|
return false
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ func _ready() -> void:
|
|||||||
interact.connect(_on_interact)
|
interact.connect(_on_interact)
|
||||||
|
|
||||||
func _on_interact(person, object):
|
func _on_interact(person, object):
|
||||||
object.action(person)
|
object.ActionNode.start_action(person, object)
|
||||||
|
|||||||
@@ -1,9 +1,17 @@
|
|||||||
extends Interactable
|
extends Interactable
|
||||||
|
|
||||||
func _ready() -> void:
|
func _init() -> void:
|
||||||
can_pick = false
|
can_pick = false
|
||||||
can_store = false
|
can_store = false
|
||||||
|
max_person_using = 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
persons_position.append($PersonPos1)
|
||||||
|
|
||||||
func action(person):
|
func start_action(person, object):
|
||||||
|
person.visible = false
|
||||||
|
set_person_pos(person)
|
||||||
print(str(person) + " is sleeping")
|
print(str(person) + " is sleeping")
|
||||||
|
PersonAction.sleep(person, object, self)
|
||||||
|
|||||||
@@ -8,6 +8,12 @@ var meshI: MeshInstance3D
|
|||||||
var start_pos: Vector3
|
var start_pos: Vector3
|
||||||
var target_object: Node3D
|
var target_object: Node3D
|
||||||
|
|
||||||
|
var is_in_action: bool
|
||||||
|
var action: Interactable
|
||||||
|
|
||||||
|
var is_target_reached: bool
|
||||||
|
|
||||||
|
var timer: Timer
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
nav_agent = $NavigationAgent3D
|
nav_agent = $NavigationAgent3D
|
||||||
meshI = $MeshInstance3D
|
meshI = $MeshInstance3D
|
||||||
@@ -19,11 +25,15 @@ func _ready() -> void:
|
|||||||
|
|
||||||
start_pos = global_position
|
start_pos = global_position
|
||||||
|
|
||||||
|
is_in_action = false
|
||||||
|
|
||||||
|
timer = $Timer
|
||||||
#nav_agent.target_position = Vector3(-15.955,3.486,-58.942)
|
#nav_agent.target_position = Vector3(-15.955,3.486,-58.942)
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
var new_velocity = global_position.direction_to(nav_agent.get_next_path_position()) * 5.0
|
var new_velocity = global_position.direction_to(nav_agent.get_next_path_position()) * 5.0
|
||||||
look_at(nav_agent.target_position)
|
if !is_target_reached:
|
||||||
|
look_at(nav_agent.target_position)
|
||||||
velocity = new_velocity
|
velocity = new_velocity
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
|
|
||||||
@@ -42,18 +52,30 @@ func set_random_shirt():
|
|||||||
|
|
||||||
|
|
||||||
func set_target(object):
|
func set_target(object):
|
||||||
target_object = object
|
|
||||||
|
#if !is_in_action and object.ActionNode.can_be_used():
|
||||||
|
if !is_in_action:
|
||||||
|
target_object = object
|
||||||
#nav_agent.target_position = target_object.ActionNode.global_position
|
#nav_agent.target_position = target_object.ActionNode.global_position
|
||||||
func set_target_position():
|
func set_target_position():
|
||||||
|
is_target_reached = false
|
||||||
var newPos = target_object.ActionNode.global_position
|
var newPos = target_object.ActionNode.global_position
|
||||||
newPos.y = self.position.y
|
newPos.y = self.position.y
|
||||||
nav_agent.target_position = newPos
|
nav_agent.target_position = newPos
|
||||||
|
print(target_object.ActionNode.can_be_used())
|
||||||
|
|
||||||
#nav_agent.target_position = start_pos
|
#nav_agent.target_position = start_pos
|
||||||
|
|
||||||
|
|
||||||
func _on_navigation_agent_3d_target_reached() -> void:
|
func _on_navigation_agent_3d_target_reached() -> void:
|
||||||
if target_object != null:
|
if target_object != null:
|
||||||
Global.interact.emit(self, target_object.ActionNode)
|
is_target_reached = true
|
||||||
|
nav_agent.target_position = self.global_position
|
||||||
|
Global.interact.emit(self, target_object)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
func _on_timer_timeout() -> void:
|
||||||
|
if action != null:
|
||||||
|
print("action stoped")
|
||||||
|
action.stop_action(self,target_object)
|
||||||
|
|||||||
9
Scripts/person_action.gd
Normal file
9
Scripts/person_action.gd
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
func sleep(person, object, 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)
|
||||||
1
Scripts/person_action.gd.uid
Normal file
1
Scripts/person_action.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://dpvx655hc86ct
|
||||||
20
Scripts/person_pos.gd
Normal file
20
Scripts/person_pos.gd
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
extends MeshInstance3D
|
||||||
|
|
||||||
|
var is_free: bool
|
||||||
|
var person: CharacterBody3D
|
||||||
|
var shirt_shader: ShaderMaterial
|
||||||
|
|
||||||
|
|
||||||
|
func _init() -> void:
|
||||||
|
is_free = true
|
||||||
|
func set_person(newPerson):
|
||||||
|
self.person = newPerson
|
||||||
|
self.shirt_shader = newPerson.shirt_shader
|
||||||
|
self.set_surface_override_material(1,self.shirt_shader)
|
||||||
|
self.visible = true
|
||||||
|
|
||||||
|
func get_person():
|
||||||
|
return person
|
||||||
|
|
||||||
|
func remove_person():
|
||||||
|
self.visible = false
|
||||||
1
Scripts/person_pos.gd.uid
Normal file
1
Scripts/person_pos.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://cstn6v7wfnwwb
|
||||||
@@ -19,6 +19,7 @@ config/icon="res://icon.svg"
|
|||||||
|
|
||||||
Global="*res://Scripts/global_script.gd"
|
Global="*res://Scripts/global_script.gd"
|
||||||
BuildManager="*res://Scripts/build_manager.gd"
|
BuildManager="*res://Scripts/build_manager.gd"
|
||||||
|
PersonAction="*res://Scripts/person_action.gd"
|
||||||
|
|
||||||
[editor_plugins]
|
[editor_plugins]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user