Files
ft/Client/Assets/Scripts/Activity/EventSubscriber/ItemAddedEventSubscriber.cs
2026-06-29 21:18:33 +08:00

66 lines
2.0 KiB
C#

using System;
using asap.core;
using GameCore.Events;
using UniRx;
using cfg;
namespace Activity.EventSubscriber
{
/// <summary>
/// 物品添加事件订阅者
/// 监听玩家获得物品事件,通过配置表反向查找活动并添加代币
/// </summary>
public class ItemAddedEventSubscriber : IActivityEventSubscriber
{
private ActivityManager _manager;
private Tables _tables;
private IDisposable _subscription;
public void Subscribe(ActivityManager manager)
{
_manager = manager;
_tables = GContext.container.Resolve<Tables>();
// 初始化配置表索引
_tables.TbFishingEventCycleItem.BuildItemIdIndex();
_subscription = GContext.OnEvent<ItemAddedEvent>()
.Subscribe(OnItemAdded);
}
private void OnItemAdded(ItemAddedEvent evt)
{
// 通过配置表查找物品对应的活动周期配置
var cycleItem = _tables.TbFishingEventCycleItem.FindByItemId(evt.ItemId);
if (cycleItem == null)
{
// 不是活动代币物品,跳过
return;
}
// 获取活动哨兵
var sentry = _manager.GetSentry((cycleItem.Type, cycleItem.SubType));
if (sentry?.CurrentEventConfig == null)
{
// 活动未开启,跳过
return;
}
// 添加代币到活动代币服务
var tokenService = GContext.container.Resolve<Services.IEventTokenService>();
tokenService.AddToken(sentry.CurrentEventConfig.ID, evt.Count);
#if UNITY_EDITOR
UnityEngine.Debug.Log($"[ItemAddedEventSubscriber] Added {evt.Count} tokens to event {sentry.CurrentEventConfig.ID} for item {evt.ItemId}");
#endif
}
public void Unsubscribe()
{
_subscription?.Dispose();
_subscription = null;
}
}
}