From 74428fffcbd2aa96d171af0607f290137b1a3c46 Mon Sep 17 00:00:00 2001 From: Lucas Peterson Date: Fri, 25 Oct 2024 13:16:05 +0800 Subject: [PATCH 1/3] Initial attempt at a basic vending machine, located in the breakroom - Added a vending machine scene, which uses a cogito button and the currency check - Added cogito_vendor.gd which handles spawning, manages its own inventory and provides interaction hints - I moved some code in cogito_button.gd from interact() to press() which is both more appropriate and prevents a bug in which I would be charged for a transaction, but the press() signal would never go through because the transaction was invalid --- .../Assets/Audio/vending_machine_sfx.ogg | Bin 0 -> 36457 bytes .../Audio/vending_machine_sfx.ogg.import | 19 +++ addons/cogito/CogitoObjects/cogito_button.gd | 16 ++- addons/cogito/CogitoObjects/cogito_vendor.gd | 98 ++++++++++++++++ addons/cogito/DemoScenes/COGITO_3_Lobby.tscn | 14 ++- .../DemoPrefabs/vending_machine.tscn | 108 ++++++++++++++++++ 6 files changed, 246 insertions(+), 9 deletions(-) create mode 100644 addons/cogito/Assets/Audio/vending_machine_sfx.ogg create mode 100644 addons/cogito/Assets/Audio/vending_machine_sfx.ogg.import create mode 100644 addons/cogito/CogitoObjects/cogito_vendor.gd create mode 100644 addons/cogito/DemoScenes/DemoPrefabs/vending_machine.tscn diff --git a/addons/cogito/Assets/Audio/vending_machine_sfx.ogg b/addons/cogito/Assets/Audio/vending_machine_sfx.ogg new file mode 100644 index 0000000000000000000000000000000000000000..9a285253d5266d1bb72d2827812d4c6300941082 GIT binary patch literal 36457 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 literal 0 HcmV?d00001 diff --git a/addons/cogito/Assets/Audio/vending_machine_sfx.ogg.import b/addons/cogito/Assets/Audio/vending_machine_sfx.ogg.import new file mode 100644 index 00000000..292297dc --- /dev/null +++ b/addons/cogito/Assets/Audio/vending_machine_sfx.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://6thelsn58odx" +path="res://.godot/imported/vending_machine_sfx.ogg-3f07f398ea4fff5864b2a68ca3092113.oggvorbisstr" + +[deps] + +source_file="res://addons/cogito/Assets/Audio/vending_machine_sfx.ogg" +dest_files=["res://.godot/imported/vending_machine_sfx.ogg-3f07f398ea4fff5864b2a68ca3092113.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/addons/cogito/CogitoObjects/cogito_button.gd b/addons/cogito/CogitoObjects/cogito_button.gd index b1a4112e..76faaf78 100644 --- a/addons/cogito/CogitoObjects/cogito_button.gd +++ b/addons/cogito/CogitoObjects/cogito_button.gd @@ -69,10 +69,11 @@ func interact(_player_interaction_component:PlayerInteractionComponent): player_interaction_component = _player_interaction_component - if currency_check and currency_check.currency_cost != 0: - if not currency_check.check_for_currency(player_interaction_component.get_parent()): - player_interaction_component.send_hint(null, currency_check.not_enough_currency_hint) - return + # moved to press(), as currency should only be charged when press is valid + #if currency_check and currency_check.currency_cost != 0: + #if not currency_check.check_for_currency(player_interaction_component.get_parent()): + #player_interaction_component.send_hint(null, currency_check.not_enough_currency_hint) + #return if !allows_repeated_interaction and has_been_used: player_interaction_component.send_hint(null, has_been_used_hint) @@ -85,6 +86,13 @@ func interact(_player_interaction_component:PlayerInteractionComponent): func press(): + # only run the currency check once the press is validated and triggered + # otherwise you can charge for a transaction and still not press the button + if currency_check and currency_check.currency_cost != 0: + if not currency_check.check_for_currency(player_interaction_component.get_parent()): + player_interaction_component.send_hint(null, currency_check.not_enough_currency_hint) + return + pressed.emit() Audio.play_sound_3d(press_sound).global_position = global_position diff --git a/addons/cogito/CogitoObjects/cogito_vendor.gd b/addons/cogito/CogitoObjects/cogito_vendor.gd new file mode 100644 index 00000000..9917e9de --- /dev/null +++ b/addons/cogito/CogitoObjects/cogito_vendor.gd @@ -0,0 +1,98 @@ +extends Node3D + +##How much stock the vendor starts with +@export var starting_amount : int = 3 +@export var object_to_spawn : PackedScene +@export var spawn_delay : float = 1.5 +@export var spawn_rotation : Vector3 = Vector3.ZERO +@export var purchased_hint_text : String = "Purchased a Health Potion" +@export var have_stock_text : String = "In Stock" +@export var stock_empty_text : String = "Sold Out" +@export_group("Sound Settings") +@export var dispensing_sound : AudioStream + +@onready var cogito_button = $GenericButton +@onready var currency_check : CurrencyCheck = $GenericButton/CurrencyCheck +@onready var spawn_point : Marker3D = $Spawnpoint +@onready var stock_label = $StaticBody3D/StockLabel +@onready var stock_counter : Label3D = $StaticBody3D/StockCounter + +var player_interaction_component : PlayerInteractionComponent +var amount_remaining : int +var currency_attribute : CogitoCurrency +var is_dispensing : bool + + +func _ready(): + add_to_group("save_object_state") + amount_remaining = starting_amount + _update_vendor_state() + cogito_button.allows_repeated_interaction = amount_remaining > 1 + currency_check.connect("transaction_success", Callable(self, "_on_transaction_success")) + var player_node = CogitoSceneManager._current_player_node + player_interaction_component = (player_node as CogitoPlayer).player_interaction_component + for attribute in player_node.find_children("", "CogitoCurrency", false): + if attribute is CogitoCurrency and attribute.currency_name == currency_check.currency_name: + currency_attribute = attribute + break + + +func _on_transaction_success() -> void: + # communicate the event + player_interaction_component.send_hint(currency_attribute.currency_icon, purchased_hint_text) + + # update vendor + amount_remaining -= 1 + _update_vendor_state() + + # dispense object + is_dispensing = true + _delayed_object_spawn() + + +func _delayed_object_spawn() -> void: + if dispensing_sound: + Audio.play_sound_3d(dispensing_sound).global_position = spawn_point.global_position + + await get_tree().create_timer(spawn_delay).timeout + is_dispensing = false + + var spawned_object = object_to_spawn.instantiate() + spawned_object.position = spawn_point.global_position + spawned_object.rotation = spawn_rotation + get_tree().current_scene.add_child(spawned_object) + + +func _update_vendor_state() -> void: + # when only 1 is left have the button handle it's own behavior + if amount_remaining == 0: + cogito_button.allows_repeated_interaction = false + stock_label.text = stock_empty_text + elif stock_label.text != have_stock_text: + stock_label.text = have_stock_text + + stock_counter.text = str(amount_remaining) + + +func set_state(): + starting_amount = amount_remaining + _update_vendor_state() + + if is_dispensing: + _delayed_object_spawn() + + +func save(): + var state_dict = { + "node_path" : self.get_path(), + "amount_remaining" : amount_remaining, + "is_dispensing" : is_dispensing, + "pos_x" : position.x, + "pos_y" : position.y, + "pos_z" : position.z, + "rot_x" : rotation.x, + "rot_y" : rotation.y, + "rot_z" : rotation.z, + + } + return state_dict diff --git a/addons/cogito/DemoScenes/COGITO_3_Lobby.tscn b/addons/cogito/DemoScenes/COGITO_3_Lobby.tscn index 34658ed8..ec4bd696 100644 --- a/addons/cogito/DemoScenes/COGITO_3_Lobby.tscn +++ b/addons/cogito/DemoScenes/COGITO_3_Lobby.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=363 format=3 uid="uid://e31n36p8i6an"] +[gd_scene load_steps=364 format=3 uid="uid://e31n36p8i6an"] [ext_resource type="Script" path="res://addons/cogito/SceneManagement/cogito_scene.gd" id="1_dracg"] [ext_resource type="Texture2D" uid="uid://sdcljx8f5dhj" path="res://addons/cogito/Assets/hdris/kloofendal_48d_partly_cloudy_puresky_2k.hdr" id="2_a8imk"] @@ -71,6 +71,7 @@ [ext_resource type="PackedScene" uid="uid://dlhn1jwgx0wjr" path="res://addons/cogito/DemoScenes/DemoPrefabs/table_coffee_glass.tscn" id="61_jhsd0"] [ext_resource type="PackedScene" uid="uid://c0mrdx8eegxuj" path="res://addons/cogito/DemoScenes/DemoPrefabs/rug_round.tscn" id="62_m13s3"] [ext_resource type="PackedScene" uid="uid://c2t21qbkevaof" path="res://addons/cogito/DemoScenes/DemoPrefabs/cogito_demo_hint.tscn" id="62_y3og2"] +[ext_resource type="PackedScene" uid="uid://vlqfhilpj650" path="res://addons/cogito/DemoScenes/DemoPrefabs/vending_machine.tscn" id="63_uchdi"] [ext_resource type="AudioStream" uid="uid://bnqnuewmntcyp" path="res://addons/cogito/Assets/Audio/Kenney/UiAudio/error_008.ogg" id="65_cw5kp"] [ext_resource type="PackedScene" uid="uid://6k5rvlwcpys1" path="res://addons/cogito/DemoScenes/DemoPrefabs/generic_switch.tscn" id="66_4pwwj"] [ext_resource type="PackedScene" uid="uid://qxbx5yllijej" path="res://addons/cogito/DemoScenes/DemoPrefabs/chair_modern_frame_cushion.tscn" id="67_qkgep"] @@ -129,7 +130,7 @@ volumetric_fog_temporal_reprojection_amount = 0.85 density = 0.04 albedo = Color(0.694118, 0.694118, 0.694118, 1) -[sub_resource type="Resource" id="Resource_iiwmy"] +[sub_resource type="Resource" id="Resource_a1mo5"] resource_local_to_scene = true script = ExtResource("4_0kggm") grid = true @@ -2423,7 +2424,7 @@ shadow_mesh = SubResource("ArrayMesh_3ecdw") [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_upcaa"] data = PackedVector3Array(0.6928, 0.0903, -1.6, 0, 0.0903, -1.2, 0.6128, 0.0903, -0.88, 0.6128, 0.0903, -0.88, 0.7728, 0.0903, -0.88, 0.6928, 0.0903, -1.6, 0.7728, 0.0903, -0.88, 1.3856, 0.0903, -1.2, 0.6928, 0.0903, -1.6, 0.7728, 0.0903, -0.88, 0.7728, 0.0903, -0.72, 1.3856, 0.0903, -1.2, 0.6128, 0.0903, -0.72, 0.6128, 0.0903, -0.88, 0, 0.0903, -1.2, 0.6928, 0.0903, 0, 0.6128, 0.0903, -0.72, 0, 0.0903, -1.2, 0.6928, 0.0903, 0, 0.7728, 0.0903, -0.72, 0.6128, 0.0903, -0.72, 0, 0.0903, -0.4, 0.6928, 0.0903, 0, 0, 0.0903, -1.2, 0, 0.0903, -1.2, 0, 0.0903, -0.8, 0, 0.0903, -0.4, 0.6928, 0.0903, 0, 1.3856, 0.0903, -0.4, 0.7728, 0.0903, -0.72, 1.3856, 0.0903, -0.4, 1.3856, 0.0903, -1.2, 0.7728, 0.0903, -0.72, 1.3856, 0.0903, -0.4, 1.3856, 0.0903, -0.8, 1.3856, 0.0903, -1.2, 0.6928, 0.1935, 0, 0, 0.1935, -0.4, 0, 0.1935, -1.2, 0, 0.1935, -1.2, 0.6928, 0.1935, -1.6, 0.6928, 0.1935, 0, 0.6928, 0.1935, -1.6, 1.3856, 0.1935, -0.4, 0.6928, 0.1935, 0, 0.6928, 0.1935, -1.6, 1.3856, 0.1935, -1.2, 1.3856, 0.1935, -0.4, 0.6928, 0.1935, -1.6, 0.6928, 0.0903, -1.6, 1.3856, 0.0903, -1.2, 1.3856, 0.0903, -1.2, 1.3856, 0.1935, -1.2, 0.6928, 0.1935, -1.6, 1.3856, 0.0903, -0.8, 1.3856, 0.0903, -0.4, 1.3856, 0.1935, -0.4, 1.3856, 0.1935, -0.4, 1.3856, 0.1935, -1.2, 1.3856, 0.0903, -0.8, 1.3856, 0.1935, -1.2, 1.3856, 0.0903, -1.2, 1.3856, 0.0903, -0.8, 1.3856, 0.1935, -0.4, 1.3856, 0.0903, -0.4, 0.6928, 0.0903, 0, 0.6928, 0.0903, 0, 0.6928, 0.1935, 0, 1.3856, 0.1935, -0.4, 0.6928, 0.1935, 0, 0.6928, 0.0903, 0, 0, 0.0903, -0.4, 0, 0.0903, -0.4, 0, 0.1935, -0.4, 0.6928, 0.1935, 0, 0, 0.1935, -1.2, 0, 0.1935, -0.4, 0, 0.0903, -0.4, 0, 0.0903, -0.4, 0, 0.0903, -0.8, 0, 0.1935, -1.2, 0, 0.0903, -0.8, 0, 0.0903, -1.2, 0, 0.1935, -1.2, 0, 0.1935, -1.2, 0, 0.0903, -1.2, 0.6928, 0.0903, -1.6, 0.6928, 0.0903, -1.6, 0.6928, 0.1935, -1.6, 0, 0.1935, -1.2, 0.7728, 0.0903, -0.72, 0.7728, -0.4, -0.72, 0.6128, -0.4, -0.72, 0.6128, -0.4, -0.72, 0.6128, 0.0903, -0.72, 0.7728, 0.0903, -0.72, 0.6128, 0.0903, -0.88, 0.6128, 0.0903, -0.72, 0.6128, -0.4, -0.72, 0.6128, -0.4, -0.72, 0.6128, -0.4, -0.88, 0.6128, 0.0903, -0.88, 0.6128, 0.0903, -0.88, 0.6128, -0.4, -0.88, 0.7728, -0.4, -0.88, 0.7728, -0.4, -0.88, 0.7728, 0.0903, -0.88, 0.6128, 0.0903, -0.88, 0.7728, -0.4, -0.88, 0.7728, -0.4, -0.72, 0.7728, 0.0903, -0.72, 0.7728, 0.0903, -0.72, 0.7728, 0.0903, -0.88, 0.7728, -0.4, -0.88, 0.8128, -0.4, -0.68, 0.8128, -0.44, -0.68, 0.5728, -0.44, -0.68, 0.5728, -0.44, -0.68, 0.5728, -0.4, -0.68, 0.8128, -0.4, -0.68, 0.5728, -0.4, -0.92, 0.5728, -0.4, -0.68, 0.5728, -0.44, -0.68, 0.5728, -0.44, -0.68, 0.5728, -0.44, -0.92, 0.5728, -0.4, -0.92, 0.8128, -0.44, -0.92, 0.8128, -0.44, -0.68, 0.8128, -0.4, -0.68, 0.8128, -0.4, -0.68, 0.8128, -0.4, -0.92, 0.8128, -0.44, -0.92, 0.5728, -0.4, -0.68, 0.5728, -0.4, -0.92, 0.6128, -0.4, -0.72, 0.6128, -0.4, -0.72, 0.8128, -0.4, -0.68, 0.5728, -0.4, -0.68, 0.6128, -0.4, -0.72, 0.7728, -0.4, -0.72, 0.8128, -0.4, -0.68, 0.7728, -0.4, -0.72, 0.7728, -0.4, -0.88, 0.8128, -0.4, -0.68, 0.6128, -0.4, -0.88, 0.6128, -0.4, -0.72, 0.5728, -0.4, -0.92, 0.5728, -0.4, -0.92, 0.8128, -0.4, -0.92, 0.6128, -0.4, -0.88, 0.8128, -0.4, -0.92, 0.7728, -0.4, -0.88, 0.6128, -0.4, -0.88, 0.8128, -0.4, -0.92, 0.8128, -0.4, -0.68, 0.7728, -0.4, -0.88, 0.4928, -0.44, -1, 0.4928, -0.44, -0.6, 0.4928, -0.5, -0.6, 0.4928, -0.5, -0.6, 0.4928, -0.5, -1, 0.4928, -0.44, -1, 0.4928, -0.44, -1, 0.4928, -0.5, -1, 0.8928, -0.5, -1, 0.8928, -0.5, -1, 0.8928, -0.44, -1, 0.4928, -0.44, -1, 0.8928, -0.44, -0.6, 0.8928, -0.5, -0.6, 0.4928, -0.5, -0.6, 0.4928, -0.5, -0.6, 0.4928, -0.44, -0.6, 0.8928, -0.44, -0.6, 0.8928, -0.5, -1, 0.8928, -0.5, -0.6, 0.8928, -0.44, -0.6, 0.8928, -0.44, -0.6, 0.8928, -0.44, -1, 0.8928, -0.5, -1, 0.4928, -0.44, -0.6, 0.4928, -0.44, -1, 0.5728, -0.44, -0.68, 0.5728, -0.44, -0.68, 0.8928, -0.44, -0.6, 0.4928, -0.44, -0.6, 0.5728, -0.44, -0.68, 0.8128, -0.44, -0.68, 0.8928, -0.44, -0.6, 0.8128, -0.44, -0.68, 0.8128, -0.44, -0.92, 0.8928, -0.44, -0.6, 0.5728, -0.44, -0.92, 0.5728, -0.44, -0.68, 0.4928, -0.44, -1, 0.4928, -0.44, -1, 0.8928, -0.44, -1, 0.5728, -0.44, -0.92, 0.8928, -0.44, -1, 0.8128, -0.44, -0.92, 0.5728, -0.44, -0.92, 0.8928, -0.44, -1, 0.8928, -0.44, -0.6, 0.8128, -0.44, -0.92, 0.9128, -0.54, -1.02, 0.4728, -0.54, -1.02, 0.4728, -0.54, -0.58, 0.4728, -0.54, -0.58, 0.9128, -0.54, -0.58, 0.9128, -0.54, -1.02, 0.4928, -0.5, -1, 0.4728, -0.54, -1.02, 0.9128, -0.54, -1.02, 0.9128, -0.54, -1.02, 0.8928, -0.5, -1, 0.4928, -0.5, -1, 0.9128, -0.54, -1.02, 0.9128, -0.54, -0.58, 0.8928, -0.5, -0.6, 0.8928, -0.5, -0.6, 0.8928, -0.5, -1, 0.9128, -0.54, -1.02, 0.8928, -0.5, -0.6, 0.9128, -0.54, -0.58, 0.4728, -0.54, -0.58, 0.4728, -0.54, -0.58, 0.4928, -0.5, -0.6, 0.8928, -0.5, -0.6, 0.4928, -0.5, -0.6, 0.4728, -0.54, -0.58, 0.4728, -0.54, -1.02, 0.4728, -0.54, -1.02, 0.4928, -0.5, -1, 0.4928, -0.5, -0.6, 0.5728, -0.4, -0.92, 0.5728, -0.44, -0.92, 0.8128, -0.44, -0.92, 0.8128, -0.44, -0.92, 0.8128, -0.4, -0.92, 0.5728, -0.4, -0.92) -[sub_resource type="Resource" id="Resource_y0qvc"] +[sub_resource type="Resource" id="Resource_h0p8x"] resource_local_to_scene = true script = ExtResource("4_0kggm") grid = true @@ -3165,7 +3166,7 @@ material = SubResource("FogMaterial_4avjx") [node name="Player" parent="." instance=ExtResource("3_mgle8")] transform = Transform3D(-1, 0, 7.45058e-07, 0, 1, 0, -7.45058e-07, 0, -1, 3.03073, 0.905039, -17.9321) -inventory_data = SubResource("Resource_iiwmy") +inventory_data = SubResource("Resource_a1mo5") step_height_camera_lerp = 1.5 [node name="QUESTS" type="Node3D" parent="."] @@ -6989,7 +6990,7 @@ shape = SubResource("ConcavePolygonShape3D_upcaa") [node name="kitchenFridgeContainer2" parent="BREAK_ROOM" instance=ExtResource("57_fdyfl")] transform = Transform3D(-1, 0, -1.50996e-07, 0, 1, 0, 1.50996e-07, 0, -1, 3.65301, -4.84288e-08, 6.17191) -inventory_data = SubResource("Resource_y0qvc") +inventory_data = SubResource("Resource_h0p8x") [node name="kitchenMicrowave" parent="BREAK_ROOM" instance=ExtResource("43_rl17a")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 1.98491, 0.84, 6.39503) @@ -7020,6 +7021,9 @@ transform = Transform3D(-0.927595, 0, -0.373587, 0, 1, 0, 0.373587, 0, -0.927595 [node name="rugRound" parent="BREAK_ROOM" instance=ExtResource("62_m13s3")] +[node name="VendingMachine" parent="BREAK_ROOM" instance=ExtResource("63_uchdi")] +transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 7.35901, 0, 2.81656) + [node name="BATHROOM_STALL" type="Node3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.1, 2.58, -5.9) diff --git a/addons/cogito/DemoScenes/DemoPrefabs/vending_machine.tscn b/addons/cogito/DemoScenes/DemoPrefabs/vending_machine.tscn new file mode 100644 index 00000000..ec23a5e4 --- /dev/null +++ b/addons/cogito/DemoScenes/DemoPrefabs/vending_machine.tscn @@ -0,0 +1,108 @@ +[gd_scene load_steps=11 format=3 uid="uid://vlqfhilpj650"] + +[ext_resource type="Script" path="res://addons/cogito/CogitoObjects/cogito_vendor.gd" id="1_lj27e"] +[ext_resource type="PackedScene" uid="uid://0fj068bj0csc" path="res://addons/cogito/PackedScenes/Pickups/pickup_health_potion.tscn" id="2_1u2dl"] +[ext_resource type="PackedScene" uid="uid://cs6raqlyejqul" path="res://addons/cogito/DemoScenes/DemoPrefabs/generic_button.tscn" id="2_wxk3g"] +[ext_resource type="AudioStream" uid="uid://6thelsn58odx" path="res://addons/cogito/Assets/Audio/vending_machine_sfx.ogg" id="3_7lknv"] +[ext_resource type="Texture2D" uid="uid://bmg715kqyjb77" path="res://addons/cogito/Assets/Graphics/ItemIcons/CogitoHealthPotion.png" id="3_scac8"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_hgrek"] +size = Vector3(1.15, 0.3, 0.8) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6qw18"] +albedo_color = Color(0.3, 0.3, 0.3, 1) + +[sub_resource type="QuadMesh" id="QuadMesh_2himx"] +size = Vector2(0.75, 0.9) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vtrh8"] +shading_mode = 0 +albedo_color = Color(0.25, 0.5, 0.283333, 1) + +[sub_resource type="QuadMesh" id="QuadMesh_ng26b"] +material = SubResource("StandardMaterial3D_vtrh8") +size = Vector2(0.25, 0.25) + +[node name="VendingMachine" type="Node3D"] +script = ExtResource("1_lj27e") +object_to_spawn = ExtResource("2_1u2dl") +spawn_rotation = Vector3(90, 0, 0) +dispensing_sound = ExtResource("3_7lknv") + +[node name="StaticBody3D" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) + +[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.85, 0) +shape = SubResource("BoxShape3D_hgrek") + +[node name="CSGCombiner3D" type="CSGCombiner3D" parent="StaticBody3D"] +operation = 2 +use_collision = true + +[node name="MeshInstance3D" type="CSGBox3D" parent="StaticBody3D/CSGCombiner3D"] +size = Vector3(1.15, 2, 0.8) +material = SubResource("StandardMaterial3D_6qw18") + +[node name="CSGBox3D" type="CSGBox3D" parent="StaticBody3D/CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, 0.990268, -0.139173, 0, 0.139173, 0.990268, -0.1, -0.3893, 0.345541) +operation = 2 +size = Vector3(0.8, 0.4, 0.6) +material = SubResource("StandardMaterial3D_6qw18") + +[node name="CSGBox3D3" type="CSGBox3D" parent="StaticBody3D/CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, 0.965926, -0.258819, 0, 0.258819, 0.965926, -0.1, 0.453041, -0.00217443) +operation = 2 +size = Vector3(0.8, 0.595776, 0.582227) +material = SubResource("StandardMaterial3D_6qw18") + +[node name="CSGBox3D2" type="CSGBox3D" parent="StaticBody3D/CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.1, 0.0707678, 0.184345) +operation = 2 +size = Vector3(0.8, 0.385535, 1.24217) +material = SubResource("StandardMaterial3D_6qw18") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.1, 0.4, 0.405) +mesh = SubResource("QuadMesh_2himx") + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="StaticBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.425, 0.5, 0.405) +mesh = SubResource("QuadMesh_ng26b") + +[node name="StockLabel" type="Label3D" parent="StaticBody3D"] +transform = Transform3D(0.35, 0, 0, 0, 0.35, 0, 0, 0, 0.35, 0.42558, 0.570185, 0.41) +double_sided = false +modulate = Color(0, 0, 0, 1) +text = "In Stock" +outline_size = 0 + +[node name="StockCounter" type="Label3D" parent="StaticBody3D"] +transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0.42558, 0.457513, 0.41) +double_sided = false +modulate = Color(0, 0, 0, 1) +text = "3" +font_size = 42 +outline_size = 6 + +[node name="SpawnedItemIcon" type="Sprite3D" parent="StaticBody3D"] +transform = Transform3D(0.15, 0, 0, 0, 0.15, 0, 0, 0, 0.15, -0.1, 0.4, 0.41) +cast_shadow = 0 +double_sided = false +texture = ExtResource("3_scac8") + +[node name="GenericButton" parent="." instance=ExtResource("2_wxk3g")] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0.425, 1.2, 0.45) +usable_interaction_text = "Buy Health Potion" +press_cooldown_time = 3.0 +has_been_used_hint = "Out of stock" +unusable_interaction_text = "Sold Out" + +[node name="CurrencyCheck" parent="GenericButton" index="6"] +currency_cost = 5 +currency_text_joiner = " | " + +[node name="Spawnpoint" type="Marker3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.1, 1.40788, 0.0261086) + +[editable path="GenericButton"] From 922ea8a672afe06387cbc41f38bea8cbf586e33e Mon Sep 17 00:00:00 2001 From: Lucas Peterson Date: Fri, 25 Oct 2024 13:37:08 +0800 Subject: [PATCH 2/3] Ensure spawn delay is less than button cooldown - Limiting spawn delay to always be less than the button press cooldown time prevents any issues in which the wrong number of items is spawned (due to spamming the vending machine button) --- addons/cogito/CogitoObjects/cogito_vendor.gd | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/cogito/CogitoObjects/cogito_vendor.gd b/addons/cogito/CogitoObjects/cogito_vendor.gd index 9917e9de..aa844c86 100644 --- a/addons/cogito/CogitoObjects/cogito_vendor.gd +++ b/addons/cogito/CogitoObjects/cogito_vendor.gd @@ -18,8 +18,9 @@ extends Node3D @onready var stock_counter : Label3D = $StaticBody3D/StockCounter var player_interaction_component : PlayerInteractionComponent -var amount_remaining : int var currency_attribute : CogitoCurrency + +var amount_remaining : int var is_dispensing : bool @@ -28,6 +29,10 @@ func _ready(): amount_remaining = starting_amount _update_vendor_state() cogito_button.allows_repeated_interaction = amount_remaining > 1 + # spawn delay must be shorter than the press cooldown or spawn count could be affected + if spawn_delay >= cogito_button.press_cooldown_time: + spawn_delay = cogito_button.press_cooldown_time - 0.1 + printerr("spawn_delay exceeded button press cooldown time. It has been set to " + str(spawn_delay)) currency_check.connect("transaction_success", Callable(self, "_on_transaction_success")) var player_node = CogitoSceneManager._current_player_node player_interaction_component = (player_node as CogitoPlayer).player_interaction_component From 80f794ef21cef7409914d4472f910508e0d67de7 Mon Sep 17 00:00:00 2001 From: Lucas Peterson Date: Wed, 30 Oct 2024 10:29:31 +0800 Subject: [PATCH 3/3] Copied the health potion texture to avoid a texture conversion error - Duplicated the health potion texture and assigned the duplicate to the vending machine's Sprite3D to avoid auto-converting the health potion item icon to the wrong format. Thanks to @BrodyB for spotting this! --- ...itoHealthPotion_vending_machine_sprite.png | Bin 0 -> 22458 bytes ...thPotion_vending_machine_sprite.png.import | 35 ++++++++++++++++++ .../ItemIcons/CogitoHealthPotion.png.import | 2 +- .../DemoPrefabs/vending_machine.tscn | 7 ++-- 4 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 addons/cogito/Assets/Graphics/CogitoHealthPotion_vending_machine_sprite.png create mode 100644 addons/cogito/Assets/Graphics/CogitoHealthPotion_vending_machine_sprite.png.import diff --git a/addons/cogito/Assets/Graphics/CogitoHealthPotion_vending_machine_sprite.png b/addons/cogito/Assets/Graphics/CogitoHealthPotion_vending_machine_sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..cebcb958d6eb8bfecb6e89e35420a8f30b7cd870 GIT binary patch literal 22458 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