You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.9 KiB
GDScript
83 lines
2.9 KiB
GDScript
extends Node
|
|
|
|
# Message Bus
|
|
|
|
# Signals
|
|
#signal published()
|
|
|
|
# Variables
|
|
#var Mercur = load("res://entity/Mercur/Mercur.tscn").instance() # mail god
|
|
var current_ref_id = -1
|
|
var topicDict = {}
|
|
var approached_topic = "approached"
|
|
#var approached_handler = load("res://Events/approached/Approach.tscn").instance()
|
|
var died_topic = "died"
|
|
#var died_handler = load("res://Events/died/Died.tscn").instance()
|
|
var duration = "duration"
|
|
var earned_xp_topic = "xp_earned"
|
|
#var earned_xp_handler = load("res://Events/xp_changed/EarnedXP.tscn").instance()
|
|
var equipped_skill_topic = "skill_equipped"
|
|
#var equipped_skill_handler = load("res://Events/skill_equipped/EquipSkill.tscn").instance()
|
|
var gained_level_topic = "level_gained"
|
|
#var gained_level_handler = load("res://Events/xp_changed/GainLevel.tscn").instance()
|
|
var interacted_topic = "interacted"
|
|
#var interacted_handler = load("res://Events/character_interacted/Interact.tscn").instance()
|
|
var item_picked_up_topic = "item_picked_up"
|
|
#var learned_item_handler = load("res://Events/item_picked_up/LearnItem/LearnItem.tscn").instance()
|
|
var learned_skill_topic = "skill_learned"
|
|
#var learned_skill_handler = load("res://Events/skill_learned/LearnSkill.tscn").instance()
|
|
var moved_handler = load("res://events/moved/Char.tscn").instance()
|
|
var moved_topic = "moved"
|
|
|
|
func designate_ref_id():
|
|
current_ref_id += 1
|
|
return current_ref_id
|
|
|
|
# Take data + hand off to Event Handlers subscribed to event
|
|
func publish(topic, data):
|
|
if !topicDict.has(topic):
|
|
# print_debug("publish - unknown topic: " + topic)
|
|
return
|
|
for handler in topicDict[topic]:
|
|
handler.handle(data)
|
|
|
|
# Handler begins listening for topic
|
|
func subscribe(topic, handler):
|
|
if !topicDict.has(topic):
|
|
# print_debug("subscribe - new topic: " + topic)
|
|
topicDict[topic] = []
|
|
#return
|
|
topicDict[topic].append(handler)
|
|
handler.connect("tree_exited", self, "_on_handler_tree_exited", [topic, handler])
|
|
|
|
# Handler no longer listens for topic
|
|
func unsubscribe(topic, handler):
|
|
if !topicDict.has(topic):
|
|
# print_debug("Cannot unsubscribe handler that does not exist")
|
|
return
|
|
topicDict[topic].erase(handler)
|
|
|
|
func _on_handler_tree_exited(topic, handler):
|
|
unsubscribe(topic, handler)
|
|
|
|
# if this character exits tree
|
|
func _on_tree_exited():
|
|
#unsubscribe(died_topic, died_handler)
|
|
#unsubscribe(earned_xp_topic, earned_xp_handler)
|
|
#unsubscribe(gained_level_topic, gained_level_handler)
|
|
#subscribe(gained_level_topic, gained_level_handler)
|
|
#unsubscribe(item_picked_up_topic, learned_item_handler)
|
|
#unsubscribe(learned_skill_topic, learned_skill_handler)
|
|
unsubscribe(moved_topic, moved_handler)
|
|
|
|
func _ready():
|
|
#subscribe(died_topic, died_handler)
|
|
#subscribe(earned_xp_topic, earned_xp_handler)
|
|
#subscribe(gained_level_topic, gained_level_handler)
|
|
#subscribe(interacted_topic, interacted_handler)
|
|
#subscribe(item_picked_up_topic, learned_item_handler)
|
|
#subscribe(learned_skill_topic, learned_skill_handler)
|
|
subscribe(moved_topic, moved_handler)
|
|
# connect("tree_exited", self, "_on_tree_exited")
|
|
|