Skip to content

Commit

Permalink
prewarm preafb pools
Browse files Browse the repository at this point in the history
  • Loading branch information
Aeroluna committed Jan 18, 2025
1 parent 07f8ea9 commit 961bfec
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 2 deletions.
47 changes: 46 additions & 1 deletion Vivify/Events/AssignObjectPrefab.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
namespace Vivify.Events;

[CustomEvent(ASSIGN_OBJECT_PREFAB)]
internal class AssignObjectPrefab : ICustomEvent
internal class AssignObjectPrefab : IInitializable, ICustomEvent
{
private readonly BeatmapObjectPrefabManager _beatmapObjectPrefabManager;
private readonly DebrisPrefabManager _debrisPrefabManager;
Expand All @@ -38,6 +38,51 @@ private AssignObjectPrefab(
_saberPrefabManager = saberPrefabManager;
}

public void Initialize()
{
foreach (ICustomEventCustomData customEventCustomData in _deserializedData.CustomEventCustomDatas.Values)
{
if (customEventCustomData is not AssignObjectPrefabData data)
{
continue;
}

foreach ((string? key, AssignObjectPrefabData.IPrefabInfo value) in data.Assets)
{
if (key == null)
{
continue;
}

if (value is not AssignObjectPrefabData.ObjectPrefabInfo objectPrefabInfo)
{
continue;
}

string? asset = objectPrefabInfo.Asset;
if (!string.IsNullOrEmpty(asset))
{
_beatmapObjectPrefabManager.PrewarmGameObjectPrefabPool(asset!, 10);
}

string? debrisAsset = objectPrefabInfo.DebrisAsset;
if (!string.IsNullOrEmpty(debrisAsset))
{
_beatmapObjectPrefabManager.PrewarmGameObjectPrefabPool(asset!, 10);
}

string? anyDirectionAsset = objectPrefabInfo.AnyDirectionAsset;
if (!string.IsNullOrEmpty(anyDirectionAsset) &&
key == NOTE_PREFAB)
{
_beatmapObjectPrefabManager.PrewarmGameObjectPrefabPool(asset!, 10);
}

break;
}
}
}

public void Callback(CustomEventData customEventData)
{
if (!_deserializedData.Resolve(customEventData, out AssignObjectPrefabData? data))
Expand Down
6 changes: 6 additions & 0 deletions Vivify/ObjectPrefab/Managers/BeatmapObjectPrefabManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ public void Dispose()
_prefabPools.Values.Do(n => n.Dispose());
}

internal void PrewarmGameObjectPrefabPool(string assetName, int count)
{
PrefabPool? prefabPool = GetGameObjectPrefabPool(assetName);
prefabPool?.Prewarm(count);
}

internal void AssignGameObjectPrefab(
PrefabList prefabList,
string? assetName,
Expand Down
13 changes: 12 additions & 1 deletion Vivify/ObjectPrefab/Pools/PrefabPool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public GameObject Spawn(Component component, float startTime)
GameObject spawned;
if (_inactive.Count == 0)
{
spawned = Object.Instantiate(_original);
spawned = _instantiator.InstantiatePrefab(_original);
}
else
{
Expand All @@ -65,4 +65,15 @@ public GameObject Spawn(Component component, float startTime)
_instantiator.SongSynchronize(spawned, startTime);
return spawned;
}

internal void Prewarm(int count)
{
for (int i = 0; i < count; i++)
{
GameObject result = _instantiator.InstantiatePrefab(_original);
result.SetActive(false);
_inactive.Push(result);
_instantiator.SongSynchronize(result, 0);
}
}
}

0 comments on commit 961bfec

Please sign in to comment.