Advertisement
Kulikodzik

Godot Game HELP!

Jun 6th, 2024 (edited)
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
GDScript 4.08 KB | Source Code | 0 0
  1. ---------------------------------------------------------------------------------------------------------------------------------------
  2. InventoryData.gd
  3.  
  4. extends Resource
  5. class_name InventoryData
  6.  
  7.  
  8. signal inventory_updated(inventory_data: InventoryData) # Sygnał emitowany po zmianie danych ekwipunku
  9. signal inventory_interact(inventory_data: InventoryData, index: int, button: int) # Sygnał dla interakcji ze slotami
  10.  
  11. @export var slot_datas: Array[SlotData] # Tablica do przechowywania danych slotu
  12.  
  13.  
  14. func load_inventory():
  15.     var inventory_data = load("res://test_inventory.tres") as InventoryData
  16.    
  17.     if inventory_data != null:
  18.         slot_datas = inventory_data.slot_datas
  19.        
  20.        
  21. func save_inventory():
  22.     var inventory_data := InventoryData.new()
  23.     inventory_data.slot_datas = slot_datas
  24.    
  25.  
  26.        
  27. # Pobranie danych z okreslonego slotu
  28. func grab_slot_data(index: int) -> SlotData:
  29.     var slot_data = slot_datas[index] # Pobierz dane ze wskazanego indeksu
  30.  
  31.     if slot_data: # Jeśli są dane
  32.         slot_datas[index] = null # Usuń dane ze slotu
  33.         inventory_updated.emit(self) # Wyemituj sygnał inventory_updated
  34.         return slot_data # Zwróć dane slotu
  35.     else:
  36.         return null #Jesli brak danych, zwroc null
  37.  
  38.  
  39.  
  40.  
  41. # Funkja upuszczenia danych slotu
  42. func drop_slot_data(grabbed_slot_data: SlotData, index: int) -> SlotData:
  43.     var slot_data = slot_datas[index]
  44.     var return_slot_data: SlotData
  45.    
  46.     # Jeśli istnieją dane i mogą być całkowicie scalone
  47.     if slot_data and slot_data.can_fully_merge_with(grabbed_slot_data):
  48.         slot_data.fully_merge_with(grabbed_slot_data)
  49.     else:
  50.         # Jeśli brak istniejących danych lub nie można scalić całkowicie, zastąp dane slotu
  51.         slot_datas[index] = grabbed_slot_data
  52.         return_slot_data = slot_data
  53.  
  54.     inventory_updated.emit(self) # Wyemituj sygnał inventory_updated
  55.     return return_slot_data # Zwróć potencjalnie zastąpione dane
  56.  
  57.  
  58.  
  59. # Funkja upuszczenia jednego przedmiotu ze slotu
  60. func drop_single_slot_data(grabbed_slot_data: SlotData, index: int) -> SlotData:
  61.     var slot_data = slot_datas[index]
  62.  
  63.     if not slot_data:
  64.         slot_datas[index] = grabbed_slot_data.create_single_slot_data()
  65.     elif slot_data.can_merge_with(grabbed_slot_data):
  66.         slot_data.fully_merge_with(grabbed_slot_data.create_single_slot_data())
  67.  
  68.     inventory_updated.emit(self)
  69.  
  70.     if grabbed_slot_data.quantity > 0:
  71.         return grabbed_slot_data
  72.     else:
  73.         return null
  74.  
  75.  
  76.  
  77.  
  78. # Obsługa kliknięcia na slot
  79. func on_slot_clicked(index: int, button: int) -> void:
  80.     inventory_interact.emit(self, index, button)
  81.  
  82. func is_inventory_full() -> bool:
  83.     for slot_data in slot_datas:
  84.         if not slot_data:
  85.             return false # Znaleziono pusty slot, więc ekwipunek nie jest pełny
  86.     return true # W ekwipunku nie ma pustych slotów, więc jest pełny
  87.  
  88. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  89. Meteor.gd --- func add_crystal check
  90.  
  91. extends Node3D
  92.  
  93. # Licznik trafień
  94. var hit_count:int = 0
  95. @onready var particles1 = $GPUParticles3D2
  96. @onready var particles_red = $CrystalRedParticle
  97.  
  98. # Funkcja do aktualizacji licznika trafień
  99. func increment_hit_count():
  100.     hit_count += 1
  101.     if hit_count >= 2:
  102.         particles1.emitting = true
  103.         particles_red.emitting = true
  104.         await get_tree().create_timer(0.5).timeout
  105.         queue_free()  # Usuń meteoryt z gry
  106.         add_crystal() # Dodaje Red Crystal do ekwipunku
  107.  
  108.  
  109. func _on_area_3d_area_entered(_area):
  110.     particles1.amount_ratio = 8
  111.     particles1.emitting = true
  112.     particles1.amount_ratio = 60
  113.     increment_hit_count()
  114.    
  115. func add_crystal():
  116.     var inventory_data = load("res://test_inventory.tres")
  117.     # Utwórz SlotData dla Czerwonego Kryształu
  118.     var Red_Crystal = SlotData.new()
  119.     Red_Crystal.item_data = load("res://Items/Red_Crystla.tres")
  120.     Red_Crystal.quantity = randi_range(5, 15)
  121.     # Dodaj Czerwony Kryształ do slotu 0
  122.     inventory_data.drop_slot_data(Red_Crystal, 0)
  123.     inventory_data.save_inventory()
  124.     #inventory_data.save_slots("res://Manager/save.json")
  125.  
  126.  
  127.  
Tags: godot 4.2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement