SpielBackupAlt/Inventory.gd

178 lines
5.5 KiB
GDScript3
Raw Normal View History

2024-12-26 14:54:06 +00:00
extends Panel;
const ItemClass = preload("res://Item.gd");
const ItemSlotClass = preload("res://ItemSlot.gd");
const TooltipClass = preload("res://Tooltip.gd");
const MAX_SLOTS = 45;
const itemImages = [
preload("res://images/Ac_Ring05.png"),
preload("res://images/A_Armor05.png"),
preload("res://images/A_Armour02.png"),
preload("res://images/A_Shoes03.png"),
preload("res://images/C_Elm03.png"),
preload("res://images/E_Wood02.png"),
preload("res://images/P_Red02.png"),
preload("res://images/W_Sword001.png"),
preload("res://images/Ac_Necklace03.png"),
];
const itemDictionary = {
0: {
"itemName": "Capsule",
"itemValue": 456,
"itemIcon": itemImages[0],
"slotType": Global.SlotType.SLOT_DEFAULT
},
1: {
"itemName": "Cube",
"itemValue": 832,
"itemIcon": itemImages[7],
"slotType": Global.SlotType.SLOT_DEFAULT
}
};
var slotList = Array();
var holdingItem = null;
var itemOffset = Vector2(0, 0);
onready var tooltip = get_node("../Tooltip");
onready var characterPanel = get_node("../CharacterPanel");
func _ready():
var slots = get_node("SlotsContainer/Slots");
for _i in range(MAX_SLOTS):
var slot = ItemSlotClass.new();
slot.connect("mouse_entered", self, "mouse_enter_slot", [slot]);
slot.connect("mouse_exited", self, "mouse_exit_slot", [slot]);
slot.connect("gui_input", self, "slot_gui_input", [slot]);
slotList.append(slot);
slots.add_child(slot);
for i in range(10):
if i == 0:
continue;
var panelSlot = characterPanel.slots[i];
if panelSlot:
panelSlot.connect("mouse_entered", self, "mouse_enter_slot", [panelSlot]);
panelSlot.connect("mouse_exited", self, "mouse_exit_slot", [panelSlot]);
panelSlot.connect("gui_input", self, "slot_gui_input", [panelSlot]);
func mouse_enter_slot(_slot : ItemSlotClass):
if _slot.item:
tooltip.display(_slot.item, get_global_mouse_position());
func mouse_exit_slot(_slot : ItemSlotClass):
if tooltip.visible:
tooltip.hide();
func slot_gui_input(event : InputEvent, slot : ItemSlotClass):
if event is InputEventMouseButton:
if event.button_index == BUTTON_LEFT && event.pressed:
if holdingItem:
if slot.slotType != Global.SlotType.SLOT_DEFAULT:
if canEquip(holdingItem, slot):
if !slot.item:
slot.equipItem(holdingItem, false);
holdingItem = null;
else:
var tempItem = slot.item;
slot.pickItem();
tempItem.rect_global_position = event.global_position - itemOffset;
slot.equipItem(holdingItem, false);
holdingItem = tempItem;
elif slot.item:
var tempItem = slot.item;
slot.pickItem();
tempItem.rect_global_position = event.global_position - itemOffset;
slot.putItem(holdingItem);
holdingItem = tempItem;
else:
slot.putItem(holdingItem);
holdingItem = null;
elif slot.item:
holdingItem = slot.item;
itemOffset = event.global_position - holdingItem.rect_global_position;
slot.pickItem();
holdingItem.rect_global_position = event.global_position - itemOffset;
elif event.button_index == BUTTON_RIGHT && !event.pressed:
if slot.slotType != Global.SlotType.SLOT_DEFAULT:
if slot.item:
var freeSlot = getFreeSlot();
if freeSlot:
var item = slot.item;
slot.removeItem();
freeSlot.setItem(item);
else:
if slot.item:
var itemSlotType = slot.item.slotType;
var panelSlot = characterPanel.getSlotByType(slot.item.slotType);
if itemSlotType == Global.SlotType.SLOT_RING:
if panelSlot[0].item && panelSlot[1].item:
var panelItem = panelSlot[0].item;
panelSlot[0].removeItem();
var slotItem = slot.item;
slot.removeItem();
slot.setItem(panelItem);
panelSlot[0].setItem(slotItem);
pass
elif !panelSlot[0].item && panelSlot[1].item || !panelSlot[0].item && !panelSlot[1].item:
var tempItem = slot.item;
slot.removeItem();
panelSlot[0].equipItem(tempItem);
elif panelSlot[0].item && !panelSlot[1].item:
var tempItem = slot.item;
slot.removeItem();
panelSlot[1].equipItem(tempItem);
pass
else:
if panelSlot.item:
var panelItem = panelSlot.item;
panelSlot.removeItem();
var slotItem = slot.item;
slot.removeItem();
slot.setItem(panelItem);
panelSlot.setItem(slotItem);
else:
var tempItem = slot.item;
slot.removeItem();
panelSlot.equipItem(tempItem);
func _input(event : InputEvent):
if holdingItem && holdingItem.picked:
holdingItem.rect_global_position = event.global_position - itemOffset;
func getFreeSlot():
for slot in slotList:
if !slot.item:
return slot;
func canEquip(item, slot):
var ring = Global.SlotType.SLOT_RING;
var ring2 = Global.SlotType.SLOT_RING2;
return item.slotType == slot.slotType || item.slotType == ring && (slot.slotType == ring || slot.slotType == ring2);
func _on_SortRarityButton_pressed():
var items = Array();
for slot in slotList:
if slot.item:
items.append(slot.item);
slot.removeItem();
items.sort_custom(self, "sortItemsByRarity");
for i in range(items.size()):
var item = items[i];
var slot = slotList[i];
slot.setItem(item);
func sortItemsByRarity(itemA : ItemClass, itemB : ItemClass):
return itemA.rarity > itemB.rarity;
func AddToInventory(itemName, itemIcon):
var slot = getFreeSlot()
if not slot:
return false
slot.setItem(ItemClass.new(itemName, itemIcon, null, 100, Global.SlotType.SLOT_DEFAULT))
return true