Started quest system implementation
This commit is contained in:
66
proto2/system/quest.gd
Normal file
66
proto2/system/quest.gd
Normal file
@@ -0,0 +1,66 @@
|
||||
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
|
||||
Reference in New Issue
Block a user