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"]
|
[ext_resource type="Resource" uid="uid://dxlb2ixt3fx7l" path="res://items/ore.tres" id="3_w18nb"]
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_0gk2u"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_0gk2u"]
|
||||||
|
albedo_color = Color(0.245167, 1, 0, 1)
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_cee1v"]
|
[sub_resource type="BoxMesh" id="BoxMesh_cee1v"]
|
||||||
material = SubResource("StandardMaterial3D_0gk2u")
|
material = SubResource("StandardMaterial3D_0gk2u")
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
[node name="Miner" instance=ExtResource("1_8r86l")]
|
[node name="Miner" instance=ExtResource("1_8r86l")]
|
||||||
script = ExtResource("2_k13eg")
|
script = ExtResource("2_k13eg")
|
||||||
mine_period = 1.0
|
mine_period = 1.0
|
||||||
|
hologram_build_min = 0.0
|
||||||
|
hologram_build_max = 2.0
|
||||||
build_materials_needed = Dictionary[ExtResource("3_8y6s2"), int]({})
|
build_materials_needed = Dictionary[ExtResource("3_8y6s2"), int]({})
|
||||||
can_stack = false
|
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="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://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="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="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="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="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"]
|
[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"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_evfwj"]
|
||||||
next_pass = SubResource("ShaderMaterial_p3dou")
|
|
||||||
albedo_color = Color(0.023159, 1, 0, 1)
|
albedo_color = Color(0.023159, 1, 0, 1)
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_3h7kv"]
|
[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="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"]
|
[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"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cgb0l"]
|
||||||
albedo_color = Color(0, 0.00397563, 1, 1)
|
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"]
|
[sub_resource type="CylinderMesh" id="CylinderMesh_kpsgq"]
|
||||||
material = SubResource("StandardMaterial3D_cgb0l")
|
material = SubResource("StandardMaterial3D_cgb0l")
|
||||||
top_radius = 1.0
|
top_radius = 1.0
|
||||||
|
@ -36,7 +40,7 @@ compensate_for_gravity = true
|
||||||
use_artillery_firing_solution = false
|
use_artillery_firing_solution = false
|
||||||
|
|
||||||
[node name="MeshInstance3D" parent="." index="0"]
|
[node name="MeshInstance3D" parent="." index="0"]
|
||||||
material_override = SubResource("StandardMaterial3D_cgb0l")
|
mesh = SubResource("BoxMesh_kpsgq")
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="MeshInstance3D" index="0"]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="MeshInstance3D" index="0"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25, 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/features=PackedStringArray("4.4")
|
||||||
config/icon="uid://u1hpdb62rxlc"
|
config/icon="uid://u1hpdb62rxlc"
|
||||||
addons/icon_finder/preview_size=25
|
addons/icon_finder/preview_size=25
|
||||||
|
config/git_describe="78bfcde"
|
||||||
|
|
||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ func remove_task(task: Task):
|
||||||
task_queue.remove_at(idx)
|
task_queue.remove_at(idx)
|
||||||
|
|
||||||
func add_task(task: Task):
|
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)
|
var idx: int = task_queue.bsearch_custom(task, sort_tasks, false)
|
||||||
task_queue.insert(idx, task)
|
task_queue.insert(idx, task)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
extends Node3D
|
extends Node3D
|
||||||
class_name Building
|
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_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_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] = {}
|
@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)
|
var geometries: Array[Node] = find_children("", "GeometryInstance3D", true)
|
||||||
for node in geometries:
|
for node in geometries:
|
||||||
var geometry: GeometryInstance3D = node as GeometryInstance3D
|
var geometry: GeometryInstance3D = node as GeometryInstance3D
|
||||||
var opacity: float = 0.5 + (ratio * 0.5)
|
if geometry != null:
|
||||||
geometry.transparency = 1.0 - opacity
|
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_timer: float = 0.0
|
||||||
#var output_item: Item
|
#var output_item: Item
|
||||||
|
|
||||||
#func _process(delta: float) -> void:
|
class ItemRequest:
|
||||||
#output_timer += delta
|
var item: Item
|
||||||
#if output_timer >= output_period:
|
var timeout: float
|
||||||
#output_timer -= output_period
|
var requests: Array[ItemRequest] = []
|
||||||
#output()
|
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:
|
func can_produce() -> bool:
|
||||||
return can_send_item(produced_item)
|
return can_send_item(produced_item)
|
||||||
|
|
||||||
|
@ -24,6 +31,9 @@ func produce() -> bool:
|
||||||
func can_send_item(item: Item) -> bool:
|
func can_send_item(item: Item) -> bool:
|
||||||
if !enabled:
|
if !enabled:
|
||||||
return false
|
return false
|
||||||
|
for request in requests:
|
||||||
|
if request.item == item:
|
||||||
|
return true
|
||||||
for consumer in consumers:
|
for consumer in consumers:
|
||||||
if consumer.can_accept_item(item):
|
if consumer.can_accept_item(item):
|
||||||
return true
|
return true
|
||||||
|
@ -32,6 +42,8 @@ func can_send_item(item: Item) -> bool:
|
||||||
func send_item(item: Item) -> bool:
|
func send_item(item: Item) -> bool:
|
||||||
if !enabled:
|
if !enabled:
|
||||||
return false
|
return false
|
||||||
|
if check_requested_items(item):
|
||||||
|
return true
|
||||||
if consumers.is_empty():
|
if consumers.is_empty():
|
||||||
return false
|
return false
|
||||||
var start_idx: int = last_consumer_idx
|
var start_idx: int = last_consumer_idx
|
||||||
|
@ -50,4 +62,24 @@ func send_item(item: Item) -> bool:
|
||||||
return true
|
return true
|
||||||
return false
|
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
|
extends RefCounted
|
||||||
class_name Task
|
class_name Task
|
||||||
|
|
||||||
var name: String
|
#var name: String
|
||||||
#var source: TaskManager
|
#var source: TaskManager
|
||||||
var solicitation_time: float = 1.0
|
var solicitation_time: float = 1.0
|
||||||
var priority: int = TASK_PRIORITY_ANYTIME
|
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_BY_WAVE_START = 10
|
||||||
const TASK_PRIORITY_ASAP = 20
|
const TASK_PRIORITY_ASAP = 20
|
||||||
|
|
||||||
|
func get_task_name() -> String:
|
||||||
|
return ""
|
||||||
func is_ready_to_start() -> bool:
|
func is_ready_to_start() -> bool:
|
||||||
return true
|
return true
|
||||||
func get_location() -> Vector3:
|
func get_location() -> Vector3:
|
||||||
|
@ -63,9 +65,13 @@ class FetchItemTask extends Task:
|
||||||
for building2 in worker.get_tree().get_nodes_in_group("Buildings"):
|
for building2 in worker.get_tree().get_nodes_in_group("Buildings"):
|
||||||
if building2 is not Building:
|
if building2 is not Building:
|
||||||
continue
|
continue
|
||||||
if building2.consumer == null:
|
var item_found: bool = false
|
||||||
continue
|
#if building2.consumer != null:
|
||||||
if building2.consumer.check_storage_for_item(item):
|
#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)
|
var distance_sqr: float = building2.global_position.distance_squared_to(worker.position)
|
||||||
if distance_sqr < closest:
|
if distance_sqr < closest:
|
||||||
storage_building = building2
|
storage_building = building2
|
||||||
|
|
|
@ -148,11 +148,14 @@ func go_to_destination(destination: Vector3) -> bool:
|
||||||
func take_item_from_building(item: Item, building: Building) -> bool:
|
func take_item_from_building(item: Item, building: Building) -> bool:
|
||||||
if held_item != null:
|
if held_item != null:
|
||||||
return false
|
return false
|
||||||
if building.consumer == null:
|
if building.producer != null:
|
||||||
return false
|
if !await building.producer.wait_for_item(item, 3.0):
|
||||||
if await building.consumer.wait_for_item(item, 3.0):
|
|
||||||
if !building.consumer.take_item_from_storage(item):
|
|
||||||
return false
|
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
|
held_item = item
|
||||||
return true
|
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