2024-02-22 06:22:22 +11:00
|
|
|
class_name Inventory extends Node
|
2023-11-08 14:28:55 +11:00
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
signal item_added(item: Item)
|
|
|
|
signal item_removed(item: Item)
|
2023-11-08 14:28:55 +11:00
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
@export var max_size: int = 0
|
|
|
|
var contents: Dictionary = {}
|
|
|
|
var size: int :
|
2023-11-08 14:28:55 +11:00
|
|
|
get:
|
2024-02-22 06:22:22 +11:00
|
|
|
var x: int = 0
|
|
|
|
for key: Item in contents:
|
2023-12-17 02:02:16 +11:00
|
|
|
x += contents[key]
|
|
|
|
return x
|
2023-11-08 14:28:55 +11:00
|
|
|
set(_value):
|
|
|
|
return
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func add(item: Item) -> bool:
|
2023-12-17 02:02:16 +11:00
|
|
|
if item != null and max_size == 0 or size < max_size:
|
|
|
|
if contents.has(item):
|
|
|
|
contents[item] += 1
|
|
|
|
else:
|
|
|
|
contents[item] = 1
|
2023-12-08 03:05:11 +11:00
|
|
|
item_added.emit(item)
|
|
|
|
networked_add.rpc(Data.cards.find(item))
|
2023-11-08 14:28:55 +11:00
|
|
|
return true
|
|
|
|
return false
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func remove_at(index: int) -> Item:
|
|
|
|
var item: Item = contents.keys()[index]
|
2023-12-17 02:02:16 +11:00
|
|
|
contents[item] -= 1
|
|
|
|
if contents[item] == 0:
|
|
|
|
contents.erase(item)
|
2023-12-08 03:05:11 +11:00
|
|
|
item_removed.emit(item)
|
2023-11-08 14:28:55 +11:00
|
|
|
networked_remove_at.rpc(index)
|
2023-12-08 03:05:11 +11:00
|
|
|
return item
|
2023-11-08 14:28:55 +11:00
|
|
|
|
|
|
|
|
2023-11-13 19:36:35 +11:00
|
|
|
@rpc("reliable", "any_peer")
|
2024-02-22 06:22:22 +11:00
|
|
|
func networked_add(value: int) -> void:
|
|
|
|
var item: Item = Data.cards[value]
|
2023-12-17 02:02:16 +11:00
|
|
|
if contents.has(item):
|
|
|
|
contents[item] += 1
|
|
|
|
else:
|
|
|
|
contents[item] = 0
|
|
|
|
item_added.emit(item)
|
2023-11-08 14:28:55 +11:00
|
|
|
|
|
|
|
|
2023-11-13 19:36:35 +11:00
|
|
|
@rpc("reliable", "any_peer")
|
2024-02-22 06:22:22 +11:00
|
|
|
func networked_remove_at(value: int) -> void:
|
|
|
|
var item: Item = contents.keys[value]
|
2023-12-17 02:02:16 +11:00
|
|
|
contents[item] -= 1
|
|
|
|
if contents[item] == 0:
|
|
|
|
contents.erase(item)
|
2023-11-08 14:28:55 +11:00
|
|
|
item_removed.emit(item)
|