Initial task creation and storage
This commit is contained in:
parent
99da16474a
commit
0130d89553
@ -2,7 +2,7 @@ extends Node3D
|
||||
|
||||
class_name Actor
|
||||
|
||||
enum ACTOR_STATE {INACTIVE, ACTIVE}
|
||||
enum ACTOR_STATE {INACTIVE, ACTIVE, IDLE}
|
||||
|
||||
var actor_state = null: set = state_change
|
||||
|
||||
@ -17,6 +17,12 @@ var time = 0
|
||||
var current_tile = null: set = change_current_tile
|
||||
var current_room = null
|
||||
|
||||
var lookup_actor_to_task = []
|
||||
var current_task: Dictionary
|
||||
|
||||
|
||||
@onready var task_creator: TaskCreator = $TaskCreator
|
||||
|
||||
signal current_tile_request
|
||||
|
||||
func state_change(state):
|
||||
@ -24,22 +30,47 @@ func state_change(state):
|
||||
match state:
|
||||
ACTOR_STATE.ACTIVE:
|
||||
$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:
|
||||
#var velocity = Vector3.ZERO
|
||||
|
||||
if actor_state == ACTOR_STATE.ACTIVE:
|
||||
|
||||
match actor_state:
|
||||
ACTOR_STATE.ACTIVE:
|
||||
get_current_tile()
|
||||
|
||||
if next_step:
|
||||
if self.position.distance_to(next_step) > .1:
|
||||
if self.position.distance_to(next_step) > 1:
|
||||
#velocity = self.position.direction_to(next_step) * temp_speed
|
||||
position = lerp(next_step, self.position, 0.995)
|
||||
position = lerp(Vector3(next_step), self.position, 0.995)
|
||||
else:
|
||||
actor_state = ACTOR_STATE.INACTIVE
|
||||
var completed_task = lookup_actor_to_task.pop_front()
|
||||
current_task = {}
|
||||
task_creator.complete_task(self, completed_task)
|
||||
actor_state = ACTOR_STATE.IDLE
|
||||
|
||||
ACTOR_STATE.IDLE:
|
||||
if lookup_actor_to_task:
|
||||
current_task = lookup_actor_to_task[0]
|
||||
next_step = current_task.location
|
||||
actor_state = ACTOR_STATE.ACTIVE
|
||||
pass
|
||||
|
||||
func get_current_tile():
|
||||
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="PackedScene" uid="uid://btpcj4sv1qgck" path="res://task_creator.tscn" id="2_onjxy"]
|
||||
|
||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_wghh8"]
|
||||
|
||||
[node name="BaseActor" type="Node3D"]
|
||||
script = ExtResource("1_fkyrj")
|
||||
|
||||
[node name="TaskCreator" parent="." instance=ExtResource("2_onjxy")]
|
||||
|
||||
[node name="SelfMesh" type="MeshInstance3D" parent="."]
|
||||
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_actor = preload("res://actors/base_actor/base_actor.tscn")
|
||||
|
||||
@onready var task_list: Node = $TaskList
|
||||
|
||||
#Contains all tiles in a workplace.
|
||||
var lookup_place_to_tile: Dictionary = {}
|
||||
#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
|
||||
|
||||
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_placement = []
|
||||
@ -358,3 +360,13 @@ func give_tile(actor):
|
||||
|
||||
func _on_actor_container_child_entered_tree(node: Node) -> void:
|
||||
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://3tnkke3ugl3t" path="res://places/base_place/task_list.gd" id="2_tkpnh"]
|
||||
|
||||
[node name="BasePlace" type="Node3D" groups=["SaveObjects"]]
|
||||
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="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="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")
|
||||
else:
|
||||
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