diff --git a/scenes/dev-akshay.tscn b/scenes/dev-akshay.tscn index 0ca6c87..fb7d3fc 100644 --- a/scenes/dev-akshay.tscn +++ b/scenes/dev-akshay.tscn @@ -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 ) diff --git a/scenes/item_generator.tscn b/scenes/item_generator.tscn new file mode 100644 index 0000000..20df10b --- /dev/null +++ b/scenes/item_generator.tscn @@ -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"] diff --git a/scenes/item_holder.tscn b/scenes/item_holder.tscn index 75f5d3c..cdde60a 100644 --- a/scenes/item_holder.tscn +++ b/scenes/item_holder.tscn @@ -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 ) diff --git a/scripts/item_generator.gd b/scripts/item_generator.gd new file mode 100644 index 0000000..ca6f389 --- /dev/null +++ b/scripts/item_generator.gd @@ -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