extends Node # 事件注册表 # { entity: [MatcherConsumer] } var _event_registry: Dictionary = {} class MatcherConsumer: extends RefCounted var matcher: GameEventMatcher var consumer: Callable func _init(m: GameEventMatcher, c: Callable) -> void: self.matcher = m self.consumer = c # 注册事件 func register_event_matcher(event_matcher: GameEventMatcher, consumer: Callable) -> void: if !event_matcher.entity: return var matcher_consumer = MatcherConsumer.new(event_matcher, consumer) if event_matcher.entity not in _event_registry: _event_registry[event_matcher.entity] = [] _event_registry[event_matcher.entity].append(matcher_consumer) # 触发事件 func trigger_event(event: GameEvent) -> void: if event.entity not in _event_registry: return for matcher_consumer in _event_registry[event.entity]: # matcher_consumer = matcher_consumer as MatcherConsumer if matcher_consumer._matcher.match(event): matcher_consumer._consumer.call(event) if event.need_to_save: _save_event(event) func _save_event(event) -> void: # 保存事件 pass func prop_interacted(name, prop_key, interacted_times) -> void: print("Event: %s interacted with %s. total times: %s" % [name, prop_key, interacted_times]) pass