Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ---------------------------------------------------------------------------------------------------------------------------------------
- InventoryData.gd
- extends Resource
- class_name InventoryData
- signal inventory_updated(inventory_data: InventoryData) # Sygnał emitowany po zmianie danych ekwipunku
- signal inventory_interact(inventory_data: InventoryData, index: int, button: int) # Sygnał dla interakcji ze slotami
- @export var slot_datas: Array[SlotData] # Tablica do przechowywania danych slotu
- func load_inventory():
- var inventory_data = load("res://test_inventory.tres") as InventoryData
- if inventory_data != null:
- slot_datas = inventory_data.slot_datas
- func save_inventory():
- var inventory_data := InventoryData.new()
- inventory_data.slot_datas = slot_datas
- # Pobranie danych z okreslonego slotu
- func grab_slot_data(index: int) -> SlotData:
- var slot_data = slot_datas[index] # Pobierz dane ze wskazanego indeksu
- if slot_data: # Jeśli są dane
- slot_datas[index] = null # Usuń dane ze slotu
- inventory_updated.emit(self) # Wyemituj sygnał inventory_updated
- return slot_data # Zwróć dane slotu
- else:
- return null #Jesli brak danych, zwroc null
- # Funkja upuszczenia danych slotu
- func drop_slot_data(grabbed_slot_data: SlotData, index: int) -> SlotData:
- var slot_data = slot_datas[index]
- var return_slot_data: SlotData
- # Jeśli istnieją dane i mogą być całkowicie scalone
- if slot_data and slot_data.can_fully_merge_with(grabbed_slot_data):
- slot_data.fully_merge_with(grabbed_slot_data)
- else:
- # Jeśli brak istniejących danych lub nie można scalić całkowicie, zastąp dane slotu
- slot_datas[index] = grabbed_slot_data
- return_slot_data = slot_data
- inventory_updated.emit(self) # Wyemituj sygnał inventory_updated
- return return_slot_data # Zwróć potencjalnie zastąpione dane
- # Funkja upuszczenia jednego przedmiotu ze slotu
- func drop_single_slot_data(grabbed_slot_data: SlotData, index: int) -> SlotData:
- var slot_data = slot_datas[index]
- if not slot_data:
- slot_datas[index] = grabbed_slot_data.create_single_slot_data()
- elif slot_data.can_merge_with(grabbed_slot_data):
- slot_data.fully_merge_with(grabbed_slot_data.create_single_slot_data())
- inventory_updated.emit(self)
- if grabbed_slot_data.quantity > 0:
- return grabbed_slot_data
- else:
- return null
- # Obsługa kliknięcia na slot
- func on_slot_clicked(index: int, button: int) -> void:
- inventory_interact.emit(self, index, button)
- func is_inventory_full() -> bool:
- for slot_data in slot_datas:
- if not slot_data:
- return false # Znaleziono pusty slot, więc ekwipunek nie jest pełny
- return true # W ekwipunku nie ma pustych slotów, więc jest pełny
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Meteor.gd --- func add_crystal check
- extends Node3D
- # Licznik trafień
- var hit_count:int = 0
- @onready var particles1 = $GPUParticles3D2
- @onready var particles_red = $CrystalRedParticle
- # Funkcja do aktualizacji licznika trafień
- func increment_hit_count():
- hit_count += 1
- if hit_count >= 2:
- particles1.emitting = true
- particles_red.emitting = true
- await get_tree().create_timer(0.5).timeout
- queue_free() # Usuń meteoryt z gry
- add_crystal() # Dodaje Red Crystal do ekwipunku
- func _on_area_3d_area_entered(_area):
- particles1.amount_ratio = 8
- particles1.emitting = true
- particles1.amount_ratio = 60
- increment_hit_count()
- func add_crystal():
- var inventory_data = load("res://test_inventory.tres")
- # Utwórz SlotData dla Czerwonego Kryształu
- var Red_Crystal = SlotData.new()
- Red_Crystal.item_data = load("res://Items/Red_Crystla.tres")
- Red_Crystal.quantity = randi_range(5, 15)
- # Dodaj Czerwony Kryształ do slotu 0
- inventory_data.drop_slot_data(Red_Crystal, 0)
- inventory_data.save_inventory()
- #inventory_data.save_slots("res://Manager/save.json")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement