Initial task creation and storage
This commit is contained in:
parent
99da16474a
commit
0130d89553
@ -2,7 +2,7 @@ extends Node3D
|
|||||||
|
|
||||||
class_name Actor
|
class_name Actor
|
||||||
|
|
||||||
enum ACTOR_STATE {INACTIVE, ACTIVE}
|
enum ACTOR_STATE {INACTIVE, ACTIVE, IDLE}
|
||||||
|
|
||||||
var actor_state = null: set = state_change
|
var actor_state = null: set = state_change
|
||||||
|
|
||||||
@ -17,6 +17,12 @@ var time = 0
|
|||||||
var current_tile = null: set = change_current_tile
|
var current_tile = null: set = change_current_tile
|
||||||
var current_room = null
|
var current_room = null
|
||||||
|
|
||||||
|
var lookup_actor_to_task = []
|
||||||
|
var current_task: Dictionary
|
||||||
|
|
||||||
|
|
||||||
|
@onready var task_creator: TaskCreator = $TaskCreator
|
||||||
|
|
||||||
signal current_tile_request
|
signal current_tile_request
|
||||||
|
|
||||||
func state_change(state):
|
func state_change(state):
|
||||||
@ -24,22 +30,47 @@ func state_change(state):
|
|||||||
match state:
|
match state:
|
||||||
ACTOR_STATE.ACTIVE:
|
ACTOR_STATE.ACTIVE:
|
||||||
$SelfMesh.set_material_override(red)
|
$SelfMesh.set_material_override(red)
|
||||||
next_step = Vector3(1, 0, 1)
|
ACTOR_STATE.IDLE:
|
||||||
|
if lookup_actor_to_task:
|
||||||
|
current_task = lookup_actor_to_task[0]
|
||||||
|
else:
|
||||||
|
var target = Vector3i(randi_range(1, 32), 0, randi_range(1, 32))
|
||||||
|
$SelfMesh.set_material_override(null)
|
||||||
|
task_creator.create_task(
|
||||||
|
self,
|
||||||
|
self,
|
||||||
|
target,
|
||||||
|
)
|
||||||
|
|
||||||
|
#func task_check():
|
||||||
|
#if lookup_actor_to_task:
|
||||||
|
#current_task = lookup_actor_to_task[0]
|
||||||
|
#next_step = current_task.location
|
||||||
|
#actor_state = ACTOR_STATE.ACTIVE
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
#var velocity = Vector3.ZERO
|
#var velocity = Vector3.ZERO
|
||||||
|
|
||||||
if actor_state == ACTOR_STATE.ACTIVE:
|
match actor_state:
|
||||||
|
ACTOR_STATE.ACTIVE:
|
||||||
|
get_current_tile()
|
||||||
|
|
||||||
get_current_tile()
|
if next_step:
|
||||||
|
if self.position.distance_to(next_step) > 1:
|
||||||
|
#velocity = self.position.direction_to(next_step) * temp_speed
|
||||||
|
position = lerp(Vector3(next_step), self.position, 0.995)
|
||||||
|
else:
|
||||||
|
var completed_task = lookup_actor_to_task.pop_front()
|
||||||
|
current_task = {}
|
||||||
|
task_creator.complete_task(self, completed_task)
|
||||||
|
actor_state = ACTOR_STATE.IDLE
|
||||||
|
|
||||||
if next_step:
|
ACTOR_STATE.IDLE:
|
||||||
if self.position.distance_to(next_step) > .1:
|
if lookup_actor_to_task:
|
||||||
#velocity = self.position.direction_to(next_step) * temp_speed
|
current_task = lookup_actor_to_task[0]
|
||||||
position = lerp(next_step, self.position, 0.995)
|
next_step = current_task.location
|
||||||
else:
|
actor_state = ACTOR_STATE.ACTIVE
|
||||||
actor_state = ACTOR_STATE.INACTIVE
|
pass
|
||||||
|
|
||||||
func get_current_tile():
|
func get_current_tile():
|
||||||
emit_signal("current_tile_request", self)
|
emit_signal("current_tile_request", self)
|
||||||
|
|||||||
@ -1,11 +1,14 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://jcmf542by4e6"]
|
[gd_scene load_steps=4 format=3 uid="uid://jcmf542by4e6"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dilighbu5t233" path="res://actors/base_actor/base_actor.gd" id="1_fkyrj"]
|
[ext_resource type="Script" uid="uid://dilighbu5t233" path="res://actors/base_actor/base_actor.gd" id="1_fkyrj"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://btpcj4sv1qgck" path="res://task_creator.tscn" id="2_onjxy"]
|
||||||
|
|
||||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_wghh8"]
|
[sub_resource type="CapsuleMesh" id="CapsuleMesh_wghh8"]
|
||||||
|
|
||||||
[node name="BaseActor" type="Node3D"]
|
[node name="BaseActor" type="Node3D"]
|
||||||
script = ExtResource("1_fkyrj")
|
script = ExtResource("1_fkyrj")
|
||||||
|
|
||||||
|
[node name="TaskCreator" parent="." instance=ExtResource("2_onjxy")]
|
||||||
|
|
||||||
[node name="SelfMesh" type="MeshInstance3D" parent="."]
|
[node name="SelfMesh" type="MeshInstance3D" parent="."]
|
||||||
mesh = SubResource("CapsuleMesh_wghh8")
|
mesh = SubResource("CapsuleMesh_wghh8")
|
||||||
|
|||||||
@ -8,6 +8,8 @@ var load_room = preload("res://places/base_place/base_room.tscn")
|
|||||||
var load_door = preload("res://tiles/base_tile/base_door.tscn")
|
var load_door = preload("res://tiles/base_tile/base_door.tscn")
|
||||||
var load_actor = preload("res://actors/base_actor/base_actor.tscn")
|
var load_actor = preload("res://actors/base_actor/base_actor.tscn")
|
||||||
|
|
||||||
|
@onready var task_list: Node = $TaskList
|
||||||
|
|
||||||
#Contains all tiles in a workplace.
|
#Contains all tiles in a workplace.
|
||||||
var lookup_place_to_tile: Dictionary = {}
|
var lookup_place_to_tile: Dictionary = {}
|
||||||
#Contains all rooms in a workplace.
|
#Contains all rooms in a workplace.
|
||||||
@ -326,7 +328,7 @@ func confirm_object():
|
|||||||
current_object.lookup_door_to_tile[tile_2] = tile_2_door_face
|
current_object.lookup_door_to_tile[tile_2] = tile_2_door_face
|
||||||
|
|
||||||
elif current_object is Actor:
|
elif current_object is Actor:
|
||||||
current_object.actor_state = Actor.ACTOR_STATE.ACTIVE
|
current_object.actor_state = Actor.ACTOR_STATE.IDLE
|
||||||
|
|
||||||
current_room = null
|
current_room = null
|
||||||
current_placement = []
|
current_placement = []
|
||||||
@ -358,3 +360,13 @@ func give_tile(actor):
|
|||||||
|
|
||||||
func _on_actor_container_child_entered_tree(node: Node) -> void:
|
func _on_actor_container_child_entered_tree(node: Node) -> void:
|
||||||
node.connect("current_tile_request", give_tile)
|
node.connect("current_tile_request", give_tile)
|
||||||
|
if node.has_node("TaskCreator"):
|
||||||
|
var tasker = node.get_node("TaskCreator")
|
||||||
|
tasker.connect("record_task", record_task)
|
||||||
|
tasker.connect("finish_task", finish_task)
|
||||||
|
|
||||||
|
func record_task(task):
|
||||||
|
task_list.record_task(task)
|
||||||
|
|
||||||
|
func finish_task(source, task):
|
||||||
|
task_list.finish_task(source, task)
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://bujuwgn3y42ek"]
|
[gd_scene load_steps=3 format=3 uid="uid://bujuwgn3y42ek"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://n4vvqmlmq5fp" path="res://places/base_place/base_place.gd" id="1_uq3a8"]
|
[ext_resource type="Script" uid="uid://n4vvqmlmq5fp" path="res://places/base_place/base_place.gd" id="1_uq3a8"]
|
||||||
|
[ext_resource type="Script" uid="uid://3tnkke3ugl3t" path="res://places/base_place/task_list.gd" id="2_tkpnh"]
|
||||||
|
|
||||||
[node name="BasePlace" type="Node3D" groups=["SaveObjects"]]
|
[node name="BasePlace" type="Node3D" groups=["SaveObjects"]]
|
||||||
script = ExtResource("1_uq3a8")
|
script = ExtResource("1_uq3a8")
|
||||||
@ -16,5 +17,8 @@ transform = Transform3D(1, 0, 0, 0, 0.345446, 0.938439, 0, -0.938439, 0.345446,
|
|||||||
|
|
||||||
[node name="ActorContainer" type="Node" parent="."]
|
[node name="ActorContainer" type="Node" parent="."]
|
||||||
|
|
||||||
|
[node name="TaskList" type="Node" parent="."]
|
||||||
|
script = ExtResource("2_tkpnh")
|
||||||
|
|
||||||
[connection signal="child_entered_tree" from="TileContainer" to="." method="_on_tile_container_child_entered_tree"]
|
[connection signal="child_entered_tree" from="TileContainer" to="." method="_on_tile_container_child_entered_tree"]
|
||||||
[connection signal="child_entered_tree" from="ActorContainer" to="." method="_on_actor_container_child_entered_tree"]
|
[connection signal="child_entered_tree" from="ActorContainer" to="." method="_on_actor_container_child_entered_tree"]
|
||||||
|
|||||||
26
places/base_place/task_list.gd
Normal file
26
places/base_place/task_list.gd
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
class_name TaskList
|
||||||
|
|
||||||
|
var unassigned_tasks = []
|
||||||
|
|
||||||
|
var assigned_task_dict: Dictionary = {}
|
||||||
|
|
||||||
|
func record_task(task):
|
||||||
|
if task.assignment:
|
||||||
|
var assignment: Actor = task["assignment"]
|
||||||
|
var assignment_task_list: Array = []
|
||||||
|
assign_task(task, assignment)
|
||||||
|
#assignment_task_list.append(task)
|
||||||
|
if not assigned_task_dict.has(assignment):
|
||||||
|
assigned_task_dict[assignment] = []
|
||||||
|
assigned_task_dict[assignment].append(task)
|
||||||
|
|
||||||
|
func finish_task(source, task):
|
||||||
|
var source_task_array = assigned_task_dict[source]
|
||||||
|
var finished_task_index = source_task_array.find(task)
|
||||||
|
var finished_task = source_task_array.pop_at(finished_task_index)
|
||||||
|
print(finished_task)
|
||||||
|
|
||||||
|
func assign_task(task, assignment: Actor):
|
||||||
|
assignment.lookup_actor_to_task.append(task)
|
||||||
1
places/base_place/task_list.gd.uid
Normal file
1
places/base_place/task_list.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://3tnkke3ugl3t
|
||||||
@ -94,9 +94,3 @@ func _on_area_3d_input_event(_camera, _event, event_position, _normal, _shade_id
|
|||||||
emit_signal("room_built")
|
emit_signal("room_built")
|
||||||
else:
|
else:
|
||||||
place.hover_object(event_position)
|
place.hover_object(event_position)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pass # Replace with function body.
|
|
||||||
|
|||||||
33
task_creator.gd
Normal file
33
task_creator.gd
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
class_name TaskCreator
|
||||||
|
|
||||||
|
signal record_task
|
||||||
|
signal finish_task
|
||||||
|
|
||||||
|
var task_list = null
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func create_task(
|
||||||
|
source: Object,
|
||||||
|
assignment = null,
|
||||||
|
location = null,
|
||||||
|
interaction = null,
|
||||||
|
urgency = null,
|
||||||
|
):
|
||||||
|
var task: Dictionary = {
|
||||||
|
"source": source,
|
||||||
|
"assignment": assignment,
|
||||||
|
"location": location,
|
||||||
|
"interaction": interaction,
|
||||||
|
"urgency": urgency,
|
||||||
|
}
|
||||||
|
emit_signal("record_task", task)
|
||||||
|
|
||||||
|
func complete_task(
|
||||||
|
source,
|
||||||
|
task
|
||||||
|
):
|
||||||
|
emit_signal("finish_task", source, task)
|
||||||
1
task_creator.gd.uid
Normal file
1
task_creator.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://crchqrpts6q1i
|
||||||
6
task_creator.tscn
Normal file
6
task_creator.tscn
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://btpcj4sv1qgck"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://crchqrpts6q1i" path="res://task_creator.gd" id="1_atcl4"]
|
||||||
|
|
||||||
|
[node name="TaskCreator" type="Node"]
|
||||||
|
script = ExtResource("1_atcl4")
|
||||||
Loading…
Reference in New Issue
Block a user