Citizens now take stuff from producers. Also added build hologram when building a thingy.
This commit is contained in:
parent
78bfcde7a0
commit
a23db504ca
162
node_3d.tscn
162
node_3d.tscn
File diff suppressed because one or more lines are too long
|
@ -6,6 +6,7 @@
|
|||
[ext_resource type="Resource" uid="uid://dxlb2ixt3fx7l" path="res://items/ore.tres" id="3_w18nb"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_0gk2u"]
|
||||
albedo_color = Color(0.245167, 1, 0, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_cee1v"]
|
||||
material = SubResource("StandardMaterial3D_0gk2u")
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
[node name="Miner" instance=ExtResource("1_8r86l")]
|
||||
script = ExtResource("2_k13eg")
|
||||
mine_period = 1.0
|
||||
hologram_build_min = 0.0
|
||||
hologram_build_max = 2.0
|
||||
build_materials_needed = Dictionary[ExtResource("3_8y6s2"), int]({})
|
||||
can_stack = false
|
||||
|
||||
|
|
|
@ -1,20 +1,14 @@
|
|||
[gd_scene load_steps=12 format=3 uid="uid://c6e1nifka3h4v"]
|
||||
[gd_scene load_steps=10 format=3 uid="uid://c6e1nifka3h4v"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://b1fnsl3k1mo5c" path="res://objects/buildings/building.tscn" id="1_hxugg"]
|
||||
[ext_resource type="Script" uid="uid://c3bqfgoof2c83" path="res://scripts/buildings/processor.gd" id="2_evfwj"]
|
||||
[ext_resource type="Script" uid="uid://kcdpck5ufgcc" path="res://scripts/item.gd" id="3_dx8de"]
|
||||
[ext_resource type="Resource" uid="uid://ed64yksg1y6m" path="res://items/bullets.tres" id="4_3h7kv"]
|
||||
[ext_resource type="Script" uid="uid://bshiyw2k3op02" path="res://scripts/building_components/consumer.gd" id="4_dx8de"]
|
||||
[ext_resource type="Shader" uid="uid://c7ahmb00sly4d" path="res://shaders/hologram.gdshader" id="5_dx8de"]
|
||||
[ext_resource type="Script" uid="uid://c4fquatkjmsgu" path="res://scripts/building_components/producer.gd" id="5_p3dou"]
|
||||
[ext_resource type="Resource" uid="uid://dxlb2ixt3fx7l" path="res://items/ore.tres" id="7_dx8de"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_p3dou"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("5_dx8de")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_evfwj"]
|
||||
next_pass = SubResource("ShaderMaterial_p3dou")
|
||||
albedo_color = Color(0.023159, 1, 0, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_3h7kv"]
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://buoyeprlof38x"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://b1fnsl3k1mo5c" path="res://objects/buildings/building.tscn" id="1_7qwib"]
|
||||
[ext_resource type="Script" uid="uid://bshiyw2k3op02" path="res://scripts/building_components/consumer.gd" id="2_36s1u"]
|
||||
[ext_resource type="Script" uid="uid://ba5aqcwabpfp0" path="res://scripts/buildings/storage.gd" id="2_evbsr"]
|
||||
[ext_resource type="Script" uid="uid://c4fquatkjmsgu" path="res://scripts/building_components/producer.gd" id="3_evbsr"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nr174"]
|
||||
albedo_color = Color(0, 1, 0.979857, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_36s1u"]
|
||||
material = SubResource("StandardMaterial3D_nr174")
|
||||
size = Vector3(2, 2, 2)
|
||||
|
||||
[node name="Building" instance=ExtResource("1_7qwib")]
|
||||
script = ExtResource("2_evbsr")
|
||||
|
||||
[node name="MeshInstance3D" parent="." index="0"]
|
||||
mesh = SubResource("BoxMesh_36s1u")
|
||||
|
||||
[node name="Consumer" type="Node" parent="." index="6"]
|
||||
script = ExtResource("2_36s1u")
|
||||
storage_size = 250
|
||||
max_inputs = 3
|
||||
metadata/_custom_type_script = "uid://bshiyw2k3op02"
|
||||
|
||||
[node name="Producer" type="Node" parent="." index="7"]
|
||||
script = ExtResource("3_evbsr")
|
||||
metadata/_custom_type_script = "uid://c4fquatkjmsgu"
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://cw3vtaevqx20y"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://cw3vtaevqx20y"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://b1fnsl3k1mo5c" path="res://objects/buildings/building.tscn" id="1_cgb0l"]
|
||||
[ext_resource type="Script" uid="uid://bl78fqp1abxd6" path="res://scripts/buildings/turret.gd" id="2_brx0q"]
|
||||
|
@ -8,6 +8,10 @@
|
|||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cgb0l"]
|
||||
albedo_color = Color(0, 0.00397563, 1, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_kpsgq"]
|
||||
material = SubResource("StandardMaterial3D_cgb0l")
|
||||
size = Vector3(2, 2, 2)
|
||||
|
||||
[sub_resource type="CylinderMesh" id="CylinderMesh_kpsgq"]
|
||||
material = SubResource("StandardMaterial3D_cgb0l")
|
||||
top_radius = 1.0
|
||||
|
@ -36,7 +40,7 @@ compensate_for_gravity = true
|
|||
use_artillery_firing_solution = false
|
||||
|
||||
[node name="MeshInstance3D" parent="." index="0"]
|
||||
material_override = SubResource("StandardMaterial3D_cgb0l")
|
||||
mesh = SubResource("BoxMesh_kpsgq")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="MeshInstance3D" index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25, 0)
|
||||
|
|
|
@ -28,6 +28,7 @@ run/main_scene="uid://bwftban1ppo17"
|
|||
config/features=PackedStringArray("4.4")
|
||||
config/icon="uid://u1hpdb62rxlc"
|
||||
addons/icon_finder/preview_size=25
|
||||
config/git_describe="78bfcde"
|
||||
|
||||
[autoload]
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ func remove_task(task: Task):
|
|||
task_queue.remove_at(idx)
|
||||
|
||||
func add_task(task: Task):
|
||||
print("Task added to queue: %s" % task.name)
|
||||
print("Task added to queue: %s" % task.get_task_name())
|
||||
var idx: int = task_queue.bsearch_custom(task, sort_tasks, false)
|
||||
task_queue.insert(idx, task)
|
||||
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
extends Node3D
|
||||
class_name Building
|
||||
|
||||
@export var hologram_material: Material = preload("res://shaders/hologram_material.tres")
|
||||
@export var hologram_build_min: float = -1
|
||||
@export var hologram_build_max: float = 1
|
||||
|
||||
@export_group("Construction", "build")
|
||||
@export var build_time: float = 5.0 ## Worker-time taken for 1 citizen to finish the building, in citizen-seconds.
|
||||
@export var build_materials_needed: Dictionary[Item, int] = {}
|
||||
|
@ -157,5 +161,12 @@ func set_visual_build_progress(ratio: float) -> void:
|
|||
var geometries: Array[Node] = find_children("", "GeometryInstance3D", true)
|
||||
for node in geometries:
|
||||
var geometry: GeometryInstance3D = node as GeometryInstance3D
|
||||
var opacity: float = 0.5 + (ratio * 0.5)
|
||||
geometry.transparency = 1.0 - opacity
|
||||
if geometry != null:
|
||||
if ratio >= 1.0:
|
||||
geometry.material_override = null
|
||||
else:
|
||||
geometry.material_override = hologram_material
|
||||
var built_amount: float = remap(ratio, 0, 1, hologram_build_min, hologram_build_max)
|
||||
geometry.set_instance_shader_parameter("built_amount", built_amount)
|
||||
#var opacity: float = 0.5 + (ratio * 0.5)
|
||||
#geometry.transparency = 1.0 - opacity
|
||||
|
|
|
@ -10,11 +10,18 @@ var last_consumer_idx: int = 0
|
|||
#var output_timer: float = 0.0
|
||||
#var output_item: Item
|
||||
|
||||
#func _process(delta: float) -> void:
|
||||
#output_timer += delta
|
||||
#if output_timer >= output_period:
|
||||
#output_timer -= output_period
|
||||
#output()
|
||||
class ItemRequest:
|
||||
var item: Item
|
||||
var timeout: float
|
||||
var requests: Array[ItemRequest] = []
|
||||
signal requested_item_received(request: ItemRequest)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
for request in requests:
|
||||
request.timeout -= delta
|
||||
if request.timeout <= 0:
|
||||
cancel_request(request)
|
||||
|
||||
func can_produce() -> bool:
|
||||
return can_send_item(produced_item)
|
||||
|
||||
|
@ -24,6 +31,9 @@ func produce() -> bool:
|
|||
func can_send_item(item: Item) -> bool:
|
||||
if !enabled:
|
||||
return false
|
||||
for request in requests:
|
||||
if request.item == item:
|
||||
return true
|
||||
for consumer in consumers:
|
||||
if consumer.can_accept_item(item):
|
||||
return true
|
||||
|
@ -32,6 +42,8 @@ func can_send_item(item: Item) -> bool:
|
|||
func send_item(item: Item) -> bool:
|
||||
if !enabled:
|
||||
return false
|
||||
if check_requested_items(item):
|
||||
return true
|
||||
if consumers.is_empty():
|
||||
return false
|
||||
var start_idx: int = last_consumer_idx
|
||||
|
@ -50,4 +62,24 @@ func send_item(item: Item) -> bool:
|
|||
return true
|
||||
return false
|
||||
|
||||
func check_requested_items(new_item: Item) -> bool:
|
||||
for request in requests:
|
||||
if new_item == request.item:
|
||||
requested_item_received.emit(request)
|
||||
return true
|
||||
return false
|
||||
|
||||
func cancel_request(request: ItemRequest):
|
||||
requested_item_received.emit(request)
|
||||
|
||||
## Waits for an item to be available at this storage, or a timeout to be reached.
|
||||
func wait_for_item(item: Item, timeout: float) -> bool:
|
||||
var request: ItemRequest = ItemRequest.new()
|
||||
request.item = item
|
||||
request.timeout = timeout
|
||||
requests.append(request)
|
||||
var finished_request: ItemRequest = null
|
||||
while finished_request != request:
|
||||
finished_request = await requested_item_received
|
||||
requests.erase(request)
|
||||
return finished_request.timeout > 0
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
extends Building
|
||||
|
||||
var held_item: Item = null
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if !producer.consumers.is_empty():
|
||||
held_item = consumer.take_any_item_from_storage()
|
||||
|
||||
if held_item != null and producer.send_item(held_item):
|
||||
held_item = null
|
|
@ -0,0 +1 @@
|
|||
uid://ba5aqcwabpfp0
|
|
@ -1,7 +1,7 @@
|
|||
extends RefCounted
|
||||
class_name Task
|
||||
|
||||
var name: String
|
||||
#var name: String
|
||||
#var source: TaskManager
|
||||
var solicitation_time: float = 1.0
|
||||
var priority: int = TASK_PRIORITY_ANYTIME
|
||||
|
@ -15,6 +15,8 @@ const TASK_PRIORITY_ANYTIME = 0
|
|||
const TASK_PRIORITY_BY_WAVE_START = 10
|
||||
const TASK_PRIORITY_ASAP = 20
|
||||
|
||||
func get_task_name() -> String:
|
||||
return ""
|
||||
func is_ready_to_start() -> bool:
|
||||
return true
|
||||
func get_location() -> Vector3:
|
||||
|
@ -63,9 +65,13 @@ class FetchItemTask extends Task:
|
|||
for building2 in worker.get_tree().get_nodes_in_group("Buildings"):
|
||||
if building2 is not Building:
|
||||
continue
|
||||
if building2.consumer == null:
|
||||
continue
|
||||
if building2.consumer.check_storage_for_item(item):
|
||||
var item_found: bool = false
|
||||
#if building2.consumer != null:
|
||||
#item_found |= building2.consumer.check_storage_for_item(item)
|
||||
if building2.producer != null:
|
||||
item_found = building2.producer.produced_item == item
|
||||
|
||||
if item_found:
|
||||
var distance_sqr: float = building2.global_position.distance_squared_to(worker.position)
|
||||
if distance_sqr < closest:
|
||||
storage_building = building2
|
||||
|
|
|
@ -148,11 +148,14 @@ func go_to_destination(destination: Vector3) -> bool:
|
|||
func take_item_from_building(item: Item, building: Building) -> bool:
|
||||
if held_item != null:
|
||||
return false
|
||||
if building.consumer == null:
|
||||
return false
|
||||
if await building.consumer.wait_for_item(item, 3.0):
|
||||
if !building.consumer.take_item_from_storage(item):
|
||||
if building.producer != null:
|
||||
if !await building.producer.wait_for_item(item, 3.0):
|
||||
return false
|
||||
#if building.consumer == null:
|
||||
#return false
|
||||
#if await building.consumer.wait_for_item(item, 3.0):
|
||||
#if !building.consumer.take_item_from_storage(item):
|
||||
#return false
|
||||
held_item = item
|
||||
return true
|
||||
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://8s2tly6ax07u"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://bqr6jesnetffs" path="res://shaders/hologram.gdshader" id="1_p0wwg"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_p0wwg")
|
||||
shader_parameter/albedo_color = Color(1, 1, 1, 1)
|
||||
shader_parameter/enable_warp = true
|
||||
shader_parameter/warp_vector = Vector3(0.1, 0, 0.1)
|
||||
shader_parameter/warp_strength = 0.576
|
||||
shader_parameter/warp_rate = 29.667
|
Loading…
Reference in New Issue