InventoryGenerationComponent + TagRegistryComponent 收口

This commit is contained in:
SepComet
2026-03-13 11:06:14 +08:00
parent 0c92fd9886
commit aa44170d56
23 changed files with 967 additions and 251 deletions
@@ -2,7 +2,6 @@ using System;
using System.Collections.Generic;
using GeometryTD.Definition;
using UnityEngine;
using Random = UnityEngine.Random;
namespace GeometryTD.UI
{
@@ -19,6 +18,7 @@ namespace GeometryTD.UI
private bool _allowRefreshOnce = true;
private bool _allowGiveUp = true;
private bool _hasRefreshed;
private int _selectionOffset;
private string _tipText = "Select one reward";
public void ConfigureRewardPool(
@@ -49,6 +49,7 @@ namespace GeometryTD.UI
_allowGiveUp = allowGiveUp;
_tipText = string.IsNullOrWhiteSpace(tipText) ? "Select one reward" : tipText;
_hasRefreshed = false;
_selectionOffset = 0;
_currentModel = null;
}
@@ -80,6 +81,7 @@ namespace GeometryTD.UI
_allowGiveUp = allowGiveUp;
_tipText = string.IsNullOrWhiteSpace(tipText) ? "Select one reward" : tipText;
_hasRefreshed = false;
_selectionOffset = 0;
_currentModel = null;
}
@@ -115,6 +117,11 @@ namespace GeometryTD.UI
}
_hasRefreshed = true;
if (_rewardPool.Count > 0)
{
_selectionOffset = (_selectionOffset + _displayCount) % _rewardPool.Count;
}
_currentModel = BuildModel();
return _currentModel;
}
@@ -172,22 +179,11 @@ namespace GeometryTD.UI
}
int finalCount = Mathf.Clamp(_displayCount, 1, _rewardPool.Count);
int[] indexes = new int[_rewardPool.Count];
for (int i = 0; i < indexes.Length; i++)
{
indexes[i] = i;
}
for (int i = 0; i < finalCount; i++)
{
int randomIndex = Random.Range(i, indexes.Length);
(indexes[i], indexes[randomIndex]) = (indexes[randomIndex], indexes[i]);
}
RewardSelectItemRawData[] results = new RewardSelectItemRawData[finalCount];
for (int i = 0; i < finalCount; i++)
{
RewardSelectItemRawData source = _rewardPool[indexes[i]];
int sourceIndex = (_selectionOffset + i) % _rewardPool.Count;
RewardSelectItemRawData source = _rewardPool[sourceIndex];
results[i] = source;
}