xiandie/manager/event_manager/event_manager.gd

48 lines
1.2 KiB
GDScript3
Raw Normal View History

2024-12-23 01:29:31 +00:00
extends Node
# 事件注册表
# { entity: [MatcherConsumer] }
var _event_registry: Dictionary = {}
2025-01-13 08:09:57 +00:00
class MatcherConsumer:
extends RefCounted
2025-04-20 13:35:13 +00:00
var matcher: GameEventMatcher
var consumer: Callable
2025-01-13 08:09:57 +00:00
func _init(m: GameEventMatcher, c: Callable) -> void:
self.matcher = m
self.consumer = c
2024-12-23 01:29:31 +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)
2025-01-13 08:09:57 +00:00
2024-12-23 01:29:31 +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)
2025-01-13 08:09:57 +00:00
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