using System.Collections.Generic; using UnityEngine; namespace Cielonos.MainGame.Rewards { /// /// 一次 Combat 节点奖励结算的运行时会话。 /// 用于记录已生成的交互奖励位置和待领取数量,防止玩家在奖励未处理完时进入下一个节点。 /// public class CombatRewardSession { private readonly List _occupiedSpawnPositions = new(); private int _pendingCount; private int _spawnIndex; public CombatRewardSession(CombatRewardContext context) { Context = context; IsActive = true; } public CombatRewardContext Context { get; } public bool IsActive { get; private set; } public int PendingCount => _pendingCount; public IReadOnlyList OccupiedSpawnPositions => _occupiedSpawnPositions; public int NextSpawnIndex() { // 与 ZoneManager 的 SpawnGroup 索引配合,让多个奖励按固定序号寻找出生点。 return _spawnIndex++; } public void RegisterPendingReward(Vector3 spawnPosition) { // 交互奖励实体生成成功后登记,领取时再 Resolve。 _pendingCount++; _occupiedSpawnPositions.Add(spawnPosition); } public bool ResolvePendingReward() { if (_pendingCount <= 0) { return false; } _pendingCount--; return true; } public void End() { IsActive = false; _pendingCount = 0; _occupiedSpawnPositions.Clear(); } } }