class_name QuestBoard extends Interactable @onready var polygon : CollisionPolygon2D = $CollisionPolygon2D @onready var window : QuestBoardWindow = $QuestBoardWindow @onready var btplayer : BTPlayer = $BTPlayer func _ready() -> void: register_board.call_deferred() super._ready() func register_board() -> void: Guild.hall.register_interactables(self) func _input(event : InputEvent) -> void: var evt : InputEventMouseButton = event as InputEventMouseButton if evt and evt.button_index == MOUSE_BUTTON_LEFT and evt.pressed: if Geometry2D.is_point_in_polygon(evt.position - polygon.global_position, polygon.polygon): Game.player.try_interact(self) get_viewport().set_input_as_handled() func interact(interactor, type : String = "") -> void: if interactor is Player: window.populate(Guild.quests.keys()) window.popup_centered() elif type == "quest": var viable_quests : Dictionary[Quest,int] = {} #Go through all quests and create a list of open quests suitable for their level for quest in Guild.quests: if quest.is_eligible(interactor.data): #TODO: Make them weight different quests differently. viable_quests[quest] = 1 #If that list is zero, return without giving them a quest if viable_quests.size() != 0: var rnd_quest = [] for quest in viable_quests.keys(): for i in range(viable_quests[quest]): rnd_quest.append(quest) var quest = rnd_quest.pick_random() Guild.assign_quest(interactor.data, quest) interaction_complete.emit() #Else pick a random quest from the list and assign it to them