/
mrFeld
/
Platformer
Обзор
Документация
Войти
/
mrFeld
/
Platformer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Script/Quests/quest_manager.gd
86 строк
2 KB
Neterov Vladimir
item_questV0.1
04 янв 2026, 15:42
04 янв 2026, 15:42
40fc304
Код
Авторство
О чём код?
class_name QuestManager extends Node2D @onready var UI: CanvasLayer = get_tree().root.get_node("Main/Player/UserInterface/UI") @onready var QuestBox: CanvasLayer = UI.get_node("QuestBox") @onready var QuestTitle:RichTextLabel = QuestBox.get_node("QuestTitle") @onready var QuestDescription: RichTextLabel = QuestBox.get_node("QuestDescription") @export_group('Quest Settings') @export var quest_name: String @export var quest_description: String @export var reached_goal_text: String @export var goal: float = 1.0 @export var required_item_name: String = "" enum QuestStatus{ available, started, reached_goal, finished, } @export var quest_status: QuestStatus = QuestStatus.available @export_group('Reward Settings') @export var reward: Array = [] signal quest_added(quest_id: String, data: Dictionary) signal quest_updated(quest_id: String, data: Dictionary) signal quest_completed(quest_id: String, data: Dictionary) var active_quests: Dictionary = {} var completed_quests: Dictionary = {} func make_quest_data() -> Dictionary: var data: Dictionary = { "title": quest_name, "description": quest_description, "reached_goal_text": reached_goal_text, "status": "available", "progress": 0.0, "goal": goal, "reward": reward, } return data func add_quest(quest_id: String, data: Dictionary) -> void: if active_quests.has(quest_id) or completed_quests.has(quest_id): return active_quests[quest_id] = data quest_added.emit(quest_id, data) func set_progress(quest_id: String, value: float) -> void: if not active_quests.has(quest_id): return var quest: Dictionary = active_quests[quest_id] var goal: float = float(quest.get("goal", 1.0)) quest["progress"] = clampf(value, 0.0, goal) if quest["progress"] >= goal: quest["status"] = "reached_goal" active_quests[quest_id] = quest quest_updated.emit(quest_id, quest) func add_progress(quest_id: String, delta: float) -> void: if not active_quests.has(quest_id): return var quest: Dictionary = active_quests[quest_id] var current_progress: float = float(quest.get("progress", 0.0)) set_progress(quest_id, current_progress + delta) func _complete_quest(quest_id: String) -> void: if not active_quests.has(quest_id): return var quest: Dictionary = active_quests[quest_id] active_quests.erase(quest_id) quest["status"] = "finished" completed_quests[quest_id] = quest quest_completed.emit(quest_id, quest)