feat(upserver): 接入认证与KV存档并完成限定钓鱼闭环

This commit is contained in:
Liubing\LB
2026-09-28 18:14:01 +08:00
parent f40a816cc4
commit 0eb43b2b40
129 changed files with 11612 additions and 573 deletions

View File

@@ -52,6 +52,7 @@ namespace asap.core
private AsyncOperationHandle<AudioMixer> mixerHandle;
private AsyncOperationHandle<GameObject> soundPrefabHandle;
private int initializationVersion;
private Dictionary<Sound, CancellationTokenSource> SoundFadeTaskDic;
private float bgmVol = 0;
@@ -135,33 +136,56 @@ namespace asap.core
public async Task InitAsync(string mixerAddr = "AudioMixer", string soundPrefabAddr = "sound",
string bgmGroupId = "BGM", string fishingGroupId = "Fishing", string uiGroupId = "UI", string voiceGroupId = "Voice")
{
if (mixerHandle.IsValid() || soundPrefabHandle.IsValid() || lowpassEvtDisposable != null) Release();
var version = ++initializationVersion;
SoundFadeTaskDic = new Dictionary<Sound, CancellationTokenSource>();
AsyncOperationHandle<AudioMixer> pendingMixer = default;
AsyncOperationHandle<GameObject> pendingPrefab = default;
IDisposable pendingSubscription = null;
bool transferred = false;
try
{
pendingMixer = Addressables.LoadAssetAsync<AudioMixer>(mixerAddr);
var loadedMixer = await pendingMixer.Task;
if (version != initializationVersion) return;
mixer = loadedMixer;
Assert.IsNotNull(mixer);
mixer.GetFloat(Bgm_Vol_Param_Name, out bgmVol);
mixer.GetFloat(Fishing_Vol_Param_Name, out fishingVol);
mixerHandle = Addressables.LoadAssetAsync<AudioMixer>(mixerAddr);
mixer = await mixerHandle.Task;
Assert.IsNotNull(mixer);
mixer.GetFloat(Bgm_Vol_Param_Name, out bgmVol);
mixer.GetFloat(Fishing_Vol_Param_Name, out fishingVol);
bgmGroup = FindMixerGroup(bgmGroupId);
fishingGroup = FindMixerGroup(fishingGroupId);
uiGroup = FindMixerGroup(uiGroupId);
voiceGroup = FindMixerGroup(voiceGroupId);
normal = mixer.FindSnapshot("Snapshot");
Assert.IsNotNull(bgmGroup);
Assert.IsNotNull(fishingGroup);
Assert.IsNotNull(uiGroup);
bgmGroup = FindMixerGroup(bgmGroupId);
fishingGroup = FindMixerGroup(fishingGroupId);
uiGroup = FindMixerGroup(uiGroupId);
voiceGroup = FindMixerGroup(voiceGroupId);
normal = mixer.FindSnapshot("Snapshot");// ("normal");
//lowpass = mixer.FindSnapshot("lowpass");
Assert.IsNotNull(bgmGroup);
Assert.IsNotNull(fishingGroup);
Assert.IsNotNull(uiGroup);
pendingPrefab = Addressables.LoadAssetAsync<GameObject>(soundPrefabAddr);
var soundPrefab = await pendingPrefab.Task;
if (version != initializationVersion) return;
Assert.IsNotNull(soundPrefab);
var sound = soundPrefab.GetComponent<Sound>();
Assert.IsNotNull(sound);
soundPrefabHandle = Addressables.LoadAssetAsync<GameObject>(soundPrefabAddr);
var soundPrefab = await soundPrefabHandle.Task;
Assert.IsNotNull(soundPrefab);
var sound = soundPrefab.GetComponent<Sound>();
Assert.IsNotNull(sound);
lowpassEvtDisposable = GContext.OnEvent<LowpassEffectEvt>().Subscribe(OnLowpassEffectEvt);
poolService.CreatePool<Sound>(sound, 10, 50);
poolService.CreatePool<Sound>(sound, 10, 50);
pendingSubscription = GContext.OnEvent<LowpassEffectEvt>().Subscribe(OnLowpassEffectEvt);
mixerHandle = pendingMixer;
soundPrefabHandle = pendingPrefab;
lowpassEvtDisposable = pendingSubscription;
transferred = true;
}
finally
{
if (!transferred)
{
pendingSubscription?.Dispose();
if (version == initializationVersion) Release();
if (pendingPrefab.IsValid()) Addressables.Release(pendingPrefab);
if (pendingMixer.IsValid()) Addressables.Release(pendingMixer);
}
}
}
private void OnLowpassEffectEvt(LowpassEffectEvt evt)
@@ -176,18 +200,24 @@ namespace asap.core
public void Release()
{
foreach (var source in SoundFadeTaskDic.Values)
initializationVersion++;
if (SoundFadeTaskDic != null)
{
source.Cancel();
foreach (var source in SoundFadeTaskDic.Values)
{
source.Cancel();
}
SoundFadeTaskDic.Clear();
SoundFadeTaskDic = null;
}
SoundFadeTaskDic.Clear();
SoundFadeTaskDic = null;
poolService.DestroyPool<Sound>();
Addressables.Release(mixerHandle);
Addressables.Release(soundPrefabHandle);
poolService?.DestroyPool<Sound>();
if (mixerHandle.IsValid()) Addressables.Release(mixerHandle);
mixerHandle = default;
if (soundPrefabHandle.IsValid()) Addressables.Release(soundPrefabHandle);
soundPrefabHandle = default;
lowpassEvtDisposable.Dispose();
lowpassEvtDisposable?.Dispose();
lowpassEvtDisposable = null;
}