59 lines
1.6 KiB
GDScript
59 lines
1.6 KiB
GDScript
class_name DecorCatalog
|
|
extends RefCounted
|
|
|
|
const BASIC_CUBE_ID: StringName = &"basic_cube"
|
|
const MAX_OWNED_PER_PRODUCT: int = 32
|
|
|
|
const _PRODUCTS: Dictionary = {
|
|
BASIC_CUBE_ID: {
|
|
"display_name": "basic cube",
|
|
"description": "a simple piece of decor for testing your RV layout.",
|
|
"price": 1,
|
|
"footprint": Vector2(1.0, 0.8),
|
|
"height": 0.8,
|
|
},
|
|
}
|
|
|
|
|
|
static func get_product_ids() -> Array[StringName]:
|
|
var ids: Array[StringName] = []
|
|
for value: Variant in _PRODUCTS.keys():
|
|
ids.append(StringName(str(value)))
|
|
ids.sort_custom(func(first: StringName, second: StringName) -> bool:
|
|
return String(first) < String(second)
|
|
)
|
|
return ids
|
|
|
|
|
|
static func has_product(product_id: StringName) -> bool:
|
|
return _PRODUCTS.has(product_id)
|
|
|
|
|
|
static func get_product(product_id: StringName) -> Dictionary:
|
|
var value: Variant = _PRODUCTS.get(product_id)
|
|
return (
|
|
(value as Dictionary).duplicate(true)
|
|
if typeof(value) == TYPE_DICTIONARY
|
|
else {}
|
|
)
|
|
|
|
|
|
static func get_display_name(product_id: StringName) -> String:
|
|
return str(get_product(product_id).get("display_name", product_id))
|
|
|
|
|
|
static func get_description(product_id: StringName) -> String:
|
|
return str(get_product(product_id).get("description", ""))
|
|
|
|
|
|
static func get_price(product_id: StringName) -> int:
|
|
return int(get_product(product_id).get("price", -1))
|
|
|
|
|
|
static func get_footprint(product_id: StringName) -> Vector2:
|
|
var value: Variant = get_product(product_id).get("footprint", Vector2.ZERO)
|
|
return value as Vector2 if value is Vector2 else Vector2.ZERO
|
|
|
|
|
|
static func get_height(product_id: StringName) -> float:
|
|
return float(get_product(product_id).get("height", 0.0))
|