cosmic/scripts/objects/Base.gd
2023-11-16 16:46:31 +03:00

90 lines
3.3 KiB
GDScript

extends Node2D
@export var type : Game.BASE_TYPE
@onready var menu : Area2D = $MenuCollider
@onready var ship : MainShip = get_tree().current_scene.get_node("MainShip")
var want_to_sell : Array[Item] = []
var want_to_buy : Array[Item] = []
var sell_prices : Array[float] = []
var buy_prices : Array[float] = []
var quest : Quest = Quest.new()
const available_quests : Array[Quest.TYPE]= [Quest.TYPE.ELIMINATION]
const restrictions_foreach_type : Dictionary = {
Quest.TYPE.ELIMINATION : [Quest.RESTRICTIONS.NO_DEATHS, Quest.RESTRICTIONS.TIMER]
}
func _ready():
randomize()
ship.minimap.add_marker(self, "base")
match type:
Game.BASE_TYPE.POWER:
want_to_sell.append(Game.get_item("Energy Cell"))
want_to_buy.append(Game.get_item("Raw Materials"))
want_to_buy.append(Game.get_item("Water Barrel"))
want_to_buy.append(Game.get_item("Food Supplies"))
Game.BASE_TYPE.MINING:
want_to_sell.append(Game.get_item("Raw Materials"))
want_to_sell.append(Game.get_item("Water Barrel"))
want_to_buy.append(Game.get_item("Energy Cell"))
want_to_buy.append(Game.get_item("Food Supplies"))
Game.BASE_TYPE.FOOD:
want_to_sell.append(Game.get_item("Food Supplies"))
want_to_buy.append(Game.get_item("Water Barrel"))
want_to_buy.append(Game.get_item("Energy Cell"))
want_to_buy.append(Game.get_item("Raw Materials"))
Game.BASE_TYPE.TRADING:
want_to_sell.append(Game.get_item("Food Supplies"))
want_to_sell.append(Game.get_item("Water Barrel"))
want_to_sell.append(Game.get_item("Energy Cell"))
want_to_sell.append(Game.get_item("Raw Materials"))
want_to_buy.append(Game.get_item("Food Supplies"))
want_to_buy.append(Game.get_item("Water Barrel"))
want_to_buy.append(Game.get_item("Energy Cell"))
want_to_buy.append(Game.get_item("Raw Materials"))
update_prices()
generate_quest()
func update_prices():
sell_prices = []
buy_prices = []
var price : float
for item in want_to_sell:
if type != Game.BASE_TYPE.TRADING:
price = randi_range(item.min_price, item.max_price * 100) / 100.0
else:
price = randi_range((item.max_price + item.min_price) / 2 * 100, item.max_price * 100) / 100.0
sell_prices.append(price)
for item in want_to_buy:
if type != Game.BASE_TYPE.TRADING:
price = randi_range(item.min_price, item.max_price * 100) / 100.0
else:
price = randi_range(item.min_price * 100, (item.max_price + item.min_price) / 2 * 100) / 100.0
buy_prices.append(price)
func generate_quest():
var difficulty : float = randi_range(100, 300) / 100.0
var reward_multi : float = randi_range(100, max(difficulty/1.5 * 100, 100)) / 100.0
var quest_type : Quest.TYPE = available_quests.pick_random()
var progress_max : int
var reward_money : int
var restrictions : Array[Quest.RESTRICTIONS] = []
var data : Dictionary = {}
for restriction in restrictions_foreach_type[quest_type]:
var hit = randi_range(0, 1)
if hit:
restrictions.append(restriction)
match quest_type:
Quest.TYPE.ELIMINATION:
progress_max = difficulty * 2
reward_money = 50 * progress_max * reward_multi
if restrictions.has(Quest.RESTRICTIONS.NO_DEATHS):
reward_money *= 1.5
if restrictions.has(Quest.RESTRICTIONS.NO_WEAPON):
reward_money *= 1.5
if restrictions.has(Quest.RESTRICTIONS.TIMER):
reward_money *= 1.5
data['timer'] = int(difficulty * 30)
quest.create(quest_type, progress_max, reward_money, restrictions, data)