8const SINGLE_MARKUP := 1.15
12func get_marked_up_price(base_price:int, markup:float = SINGLE_MARKUP) -> int:
13 return int(ceil(
float(base_price) * markup))
17func buy_item(item_id:String, unit_price:int, quantity:int, economy_manager, inventory_manager, markup:float = 1.0) -> bool:
18 var total_price = get_marked_up_price(unit_price * quantity, markup)
19 if quantity <= 0
or not economy_manager.spend(total_price):
21 inventory_manager.add_item(item_id, quantity)
26func sell_item(item_id:String, unit_value:int, quantity:int, economy_manager, inventory_manager) -> bool:
27 if quantity <= 0
or not inventory_manager.remove_item(item_id, quantity):
29 economy_manager.add_money(unit_value * quantity)
34func generate_singles(card_manager, count:int = 4) -> Array:
36 for i
in range(count):
37 var card = card_manager.get_random_card()
38 if not card.is_empty():
45func buy_pack(pack:Dictionary, economy_manager, pack_manager, card_manager, inventory_manager, modifier_manager = null) -> Array:
46 var cost =
int(pack.get(
"cost", 0))
47 if not economy_manager.spend(cost):
49 var cards = pack_manager.open_pack(str(pack.get(
"id",
"")), card_manager)
52 if modifier_manager != null:
53 var instance = modifier_manager.roll_card_instance(card)
54 var record = modifier_manager.get_instance_record(instance)
55 record[
"locked"] = false
56 inventory_manager.add_card_instance(record)
57 instance[
"locked"] = bool(record[
"locked"])
58 purchased.append(instance)
60 inventory_manager.add_card(card.get(
"id",
""))
61 purchased.append(card)
66func get_single_price(card:Dictionary) -> int:
67 return get_marked_up_price(
int(card.get(
"value", 0)), SINGLE_MARKUP)
72func buy_single(card:Dictionary, economy_manager, inventory_manager, modifier_manager = null) -> Dictionary:
73 var cost = get_single_price(card)
74 if card.is_empty()
or not economy_manager.spend(cost):
76 if modifier_manager != null:
77 var instance = modifier_manager.roll_card_instance(card)
78 var record = modifier_manager.get_instance_record(instance)
79 record[
"locked"] = false
80 inventory_manager.add_card_instance(record)
81 instance[
"locked"] = bool(record[
"locked"])
83 inventory_manager.add_card(card.get(
"id",
""))
88func sell_card(card_id_or_uid, card_manager, inventory_manager, economy_manager, modifier_manager = null) -> bool:
89 var instance = inventory_manager.get_instance(str(card_id_or_uid))
90 var base_id = str(instance.get(
"base_id", card_id_or_uid))
91 var card = card_manager.get_card(base_id)
92 if card.is_empty()
or not inventory_manager.remove_card(card_id_or_uid):
94 if modifier_manager != null
and not instance.is_empty():
95 card = modifier_manager.apply_instance(card, instance)
96 economy_manager.add_money(
int(card.get(
"value", 0)))
int
Generate a random singles market from the card library.
float
Return a rounded price with a reusable markup.