Initial task creation and storage

This commit is contained in:
effie 2025-07-30 20:32:06 +10:00
parent 99da16474a
commit 0130d89553
10 changed files with 133 additions and 22 deletions

View File

@ -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)

View File

@ -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")

View File

@ -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)

View File

@ -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"]

View 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)

View File

@ -0,0 +1 @@
uid://3tnkke3ugl3t

View File

@ -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
View 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
View File

@ -0,0 +1 @@
uid://crchqrpts6q1i

6
task_creator.tscn Normal file
View 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")