67 lines
1.3 KiB
GDScript
67 lines
1.3 KiB
GDScript
extends Reference
|
|
class_name Quest
|
|
signal complete
|
|
signal failed
|
|
signal started
|
|
var _objectives = []
|
|
var _children = []
|
|
var _title: String
|
|
var _description: String
|
|
var _active: bool = false
|
|
var _complete: bool = false
|
|
func _init(title: String, description: String):
|
|
_title = title
|
|
_description = description
|
|
func add_child(quest: Quest):
|
|
_children.push_back(quest)
|
|
func is_complete():
|
|
return _complete
|
|
func is_active():
|
|
return _active
|
|
func update():
|
|
if !_active:
|
|
return
|
|
var m = get_meta("quest")
|
|
if m != null:
|
|
for k in _objectives:
|
|
k.set_meta("quest", m)
|
|
for k in _objectives:
|
|
k.update()
|
|
for k in _children:
|
|
k.update()
|
|
_complete = true
|
|
for k in _objectives:
|
|
if !k.is_complete():
|
|
_complete = false
|
|
break
|
|
if !_complete:
|
|
return
|
|
for k in _children:
|
|
if !k.is_complete():
|
|
_complete = false
|
|
break
|
|
if _complete:
|
|
emit_signal("complete", self)
|
|
_active = false
|
|
func start():
|
|
_active = true
|
|
for k in _children:
|
|
k.start()
|
|
emit_signal("started", self)
|
|
func get_cur_task_text():
|
|
var ret: String = "No current task"
|
|
if _active:
|
|
for p in _children:
|
|
if p.is_active():
|
|
ret = p.get_cur_task_text()
|
|
return ret
|
|
for p in _objectives:
|
|
if !p.is_complete():
|
|
return p.get_title()
|
|
return _title
|
|
return ret
|
|
func get_title():
|
|
return _title
|
|
func get_description():
|
|
return _description
|