Added generic item_generator scene. using it as the ore conveyor in dev_akshay for testing

This commit is contained in:
akshay 2022-08-14 21:23:41 -04:00
parent 11826ef9d5
commit a5567a8132
4 changed files with 107 additions and 12 deletions

View File

@ -1,13 +1,12 @@
[gd_scene load_steps=10 format=2]
[gd_scene load_steps=9 format=2]
[ext_resource path="res://scenes/player.tscn" type="PackedScene" id=1]
[ext_resource path="res://assets/moonbase_whitebox/Moonbase_Whitebox.tscn" type="PackedScene" id=2]
[ext_resource path="res://scenes/power_station.tscn" type="PackedScene" id=3]
[ext_resource path="res://scenes/crafting_machine.tscn" type="PackedScene" id=4]
[ext_resource path="res://scenes/item_holder.tscn" type="PackedScene" id=5]
[ext_resource path="res://scenes/item_generator.tscn" type="PackedScene" id=5]
[ext_resource path="res://item_types/ore.tres" type="Resource" id=6]
[ext_resource path="res://recipes/all_recipes.tres" type="Resource" id=7]
[ext_resource path="res://item_types/raw_yam.tres" type="Resource" id=8]
[ext_resource path="res://scripts/main_camera.gd" type="Script" id=9]
[node name="dev_akshay" type="Spatial"]
@ -28,13 +27,9 @@ transform = Transform( 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 1, 0 )
time_to_generate = 5.0
[node name="crafting_machine" parent="." instance=ExtResource( 4 )]
transform = Transform( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0.974658, 0.0662553, -4.70336 )
transform = Transform( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 2.40238, 0.0662553, -5.76668 )
recipes = ExtResource( 7 )
[node name="item_holder" parent="." instance=ExtResource( 5 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.01389, 0, -8.61939 )
start_with_item = ExtResource( 6 )
[node name="item_holder2" parent="." instance=ExtResource( 5 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.14543, 0, -8.61939 )
start_with_item = ExtResource( 8 )
[node name="item_generator" parent="." instance=ExtResource( 5 )]
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -6.07693, 0, 0.312646 )
gen_item = ExtResource( 6 )

View File

@ -0,0 +1,35 @@
[gd_scene load_steps=5 format=2]
[ext_resource path="res://scenes/coin_machine.tscn" type="PackedScene" id=1]
[ext_resource path="res://scenes/item_holder.tscn" type="PackedScene" id=2]
[ext_resource path="res://scripts/item_generator.gd" type="Script" id=3]
[sub_resource type="CylinderMesh" id=1]
[node name="item_generator" type="Spatial"]
script = ExtResource( 3 )
[node name="MeshInstance" type="MeshInstance" parent="."]
mesh = SubResource( 1 )
[node name="progress_text" type="Label3D" parent="MeshInstance"]
unique_name_in_owner = true
transform = Transform( 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2.11515, 0 )
modulate = Color( 0, 0, 0, 1 )
text = "Progress: 20%"
[node name="item_slot_1" parent="." groups=["item_slots"] instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0, 0 )
[node name="item_slot_2" parent="." groups=["item_slots"] instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0, 0 )
[node name="coin_machine" parent="." instance=ExtResource( 1 )]
unique_name_in_owner = true
[node name="gen_timer" type="Timer" parent="."]
unique_name_in_owner = true
one_shot = true
[connection signal="coin_requirement_met" from="coin_machine" to="." method="_on_coin_machine_coin_requirement_met"]
[connection signal="timeout" from="gen_timer" to="." method="_on_gen_timer_timeout"]

View File

@ -4,7 +4,6 @@
[ext_resource path="res://scripts/item_holder.gd" type="Script" id=2]
[sub_resource type="SphereShape" id=4]
radius = 1.4
[node name="item_holder" type="Area"]
script = ExtResource( 2 )

66
scripts/item_generator.gd Normal file
View File

@ -0,0 +1,66 @@
extends Spatial
export var gen_item : Resource
export var gen_time : float = 5.0
export var gen_count : int = 2
var item_slots
func _ready():
assert(gen_item != null)
item_slots = get_tree().get_nodes_in_group("item_slots")
assert(item_slots != null)
for item_slot in item_slots:
item_slot.connect("item_changed", self, "_on_item_slot_item_changed")
update_coin_machine_status()
$"%gen_timer".one_shot = true
$"%progress_text".visible = false
func update_progress_viz():
if not $"%progress_text".visible:
return
var time_left : float = $"%gen_timer".time_left
var time_passed : float = gen_time - time_left
var percent_complete : float = (time_passed / gen_time) * 100.0
$"%progress_text".text = "Progress: %.2f " % percent_complete
func _process(delta):
update_progress_viz()
func is_generating() -> bool:
return $"%gen_timer".time_left > 0
func start_generation():
$"%progress_text".visible = true
$"%gen_timer".start(gen_time)
update_coin_machine_status()
for item_slot in item_slots:
item_slot.add_enabled = false
func _on_coin_machine_coin_requirement_met(player):
assert(is_generator_ready())
start_generation()
func is_generator_ready():
for item_slot in item_slots:
if item_slot.has_item():
return false
return not is_generating()
func update_coin_machine_status():
$"%coin_machine".enabled = is_generator_ready()
#Note(asr): dynamically connect item_changed signal
#on all nodes in the "item_slots" group. See _ready()
func _on_item_slot_item_changed(item):
update_coin_machine_status()
func _on_gen_timer_timeout():
var count : int = 0
for item_slot in item_slots:
if count < gen_count:
item_slot.spawn_item(gen_item)
count += 1
item_slot.add_enabled = true
update_coin_machine_status()
$"%progress_text".visible = false