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="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="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="PackedScene" uid="uid://f7nkbsrxy4r6" path="res://Scenes/Prefabs/PersonPos.tscn" id="9_k1k40"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_dn7et"]
|
||||
render_priority = 0
|
||||
@@ -79,3 +80,13 @@ shape = SubResource("SphereShape3D_c1046")
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="ActionNode/Area3d"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.839141, 0.470829)
|
||||
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
|
||||
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="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
|
||||
|
||||
[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
|
||||
extends Node
|
||||
|
||||
signal action_stoped
|
||||
|
||||
var can_pick: bool
|
||||
|
||||
var can_store: bool
|
||||
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!")
|
||||
|
||||
|
||||
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)
|
||||
|
||||
func _on_interact(person, object):
|
||||
object.action(person)
|
||||
object.ActionNode.start_action(person, object)
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
extends Interactable
|
||||
|
||||
func _ready() -> void:
|
||||
func _init() -> void:
|
||||
can_pick = false
|
||||
can_store = false
|
||||
max_person_using = 2
|
||||
|
||||
|
||||
func action(person):
|
||||
|
||||
func _ready() -> void:
|
||||
persons_position.append($PersonPos1)
|
||||
|
||||
func start_action(person, object):
|
||||
person.visible = false
|
||||
set_person_pos(person)
|
||||
print(str(person) + " is sleeping")
|
||||
PersonAction.sleep(person, object, self)
|
||||
|
||||
@@ -8,6 +8,12 @@ var meshI: MeshInstance3D
|
||||
var start_pos: Vector3
|
||||
var target_object: Node3D
|
||||
|
||||
var is_in_action: bool
|
||||
var action: Interactable
|
||||
|
||||
var is_target_reached: bool
|
||||
|
||||
var timer: Timer
|
||||
func _ready() -> void:
|
||||
nav_agent = $NavigationAgent3D
|
||||
meshI = $MeshInstance3D
|
||||
@@ -19,10 +25,14 @@ func _ready() -> void:
|
||||
|
||||
start_pos = global_position
|
||||
|
||||
is_in_action = false
|
||||
|
||||
timer = $Timer
|
||||
#nav_agent.target_position = Vector3(-15.955,3.486,-58.942)
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var new_velocity = global_position.direction_to(nav_agent.get_next_path_position()) * 5.0
|
||||
if !is_target_reached:
|
||||
look_at(nav_agent.target_position)
|
||||
velocity = new_velocity
|
||||
move_and_slide()
|
||||
@@ -42,18 +52,30 @@ func set_random_shirt():
|
||||
|
||||
|
||||
func set_target(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
|
||||
func set_target_position():
|
||||
is_target_reached = false
|
||||
var newPos = target_object.ActionNode.global_position
|
||||
newPos.y = self.position.y
|
||||
nav_agent.target_position = newPos
|
||||
|
||||
print(target_object.ActionNode.can_be_used())
|
||||
|
||||
#nav_agent.target_position = start_pos
|
||||
|
||||
|
||||
func _on_navigation_agent_3d_target_reached() -> void:
|
||||
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
|
||||
|
||||
|
||||
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"
|
||||
BuildManager="*res://Scripts/build_manager.gd"
|
||||
PersonAction="*res://Scripts/person_action.gd"
|
||||
|
||||
[editor_plugins]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user