feat(upserver): 接入认证与KV存档并完成限定钓鱼闭环
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user