2024-12-23 01:29:31 +00:00
|
|
|
extends Node
|
|
|
|
|
2025-05-13 11:45:33 +00:00
|
|
|
# # 事件注册表
|
|
|
|
# # { entity: [MatcherConsumer] }
|
|
|
|
# var _event_registry: Dictionary = {}
|
2024-12-23 01:29:31 +00:00
|
|
|
|
|
|
|
|
2025-05-13 11:45:33 +00:00
|
|
|
# class MatcherConsumer:
|
|
|
|
# extends RefCounted
|
|
|
|
# var matcher: GameEventMatcher
|
|
|
|
# var consumer: Callable
|
2025-01-13 08:09:57 +00:00
|
|
|
|
2025-05-13 11:45:33 +00:00
|
|
|
# func _init(m: GameEventMatcher, c: Callable) -> void:
|
|
|
|
# self.matcher = m
|
|
|
|
# self.consumer = c
|
2025-01-13 08:09:57 +00:00
|
|
|
|
2024-12-23 01:29:31 +00:00
|
|
|
|
2025-05-13 11:45:33 +00:00
|
|
|
# # 注册事件
|
|
|
|
# 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)
|
2024-12-23 01:29:31 +00:00
|
|
|
|
2025-01-13 08:09:57 +00:00
|
|
|
|
2025-05-13 11:45:33 +00:00
|
|
|
# # 触发事件
|
|
|
|
# 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)
|
2025-01-13 08:09:57 +00:00
|
|
|
|
|
|
|
|
2025-05-13 11:45:33 +00:00
|
|
|
# func _save_event(event) -> void:
|
|
|
|
# # 保存事件
|
|
|
|
# pass
|
2025-01-13 08:09:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
func prop_interacted(name, prop_key, interacted_times) -> void:
|
|
|
|
print("Event: %s interacted with %s. total times: %s" % [name, prop_key, interacted_times])
|