mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-22 12:39:51 +00:00
QSBWorldSync: simplify async
This commit is contained in:
parent
4680911cac
commit
01e1acfc0f
@ -29,8 +29,8 @@ namespace QSB.WorldSync
|
|||||||
public static bool AllObjectsReady { get; private set; }
|
public static bool AllObjectsReady { get; private set; }
|
||||||
|
|
||||||
private static CancellationTokenSource _cts;
|
private static CancellationTokenSource _cts;
|
||||||
private static readonly Dictionary<WorldObjectManager, UniTask> _managersBuilding = new();
|
private static readonly List<UniTask> _managerTasks = new();
|
||||||
private static readonly Dictionary<IWorldObject, UniTask> _objectsIniting = new();
|
private static readonly List<UniTask> _objectTasks = new();
|
||||||
|
|
||||||
public static async UniTaskVoid BuildWorldObjects(OWScene scene)
|
public static async UniTaskVoid BuildWorldObjects(OWScene scene)
|
||||||
{
|
{
|
||||||
@ -59,26 +59,21 @@ namespace QSB.WorldSync
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var task = UniTask.Create(async () =>
|
var task = manager.Try("building world objects", async () =>
|
||||||
{
|
{
|
||||||
await manager.Try("building world objects", async () =>
|
await manager.BuildWorldObjects(scene, _cts.Token);
|
||||||
{
|
DebugLog.DebugWrite($"Built {manager}", MessageType.Info);
|
||||||
await manager.BuildWorldObjects(scene, _cts.Token);
|
|
||||||
DebugLog.DebugWrite($"Built {manager}", MessageType.Info);
|
|
||||||
});
|
|
||||||
_managersBuilding.Remove(manager);
|
|
||||||
});
|
});
|
||||||
if (!task.Status.IsCompleted())
|
_managerTasks.Add(task);
|
||||||
{
|
|
||||||
_managersBuilding.Add(manager, task);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await _managersBuilding.Values;
|
await _managerTasks;
|
||||||
|
_managerTasks.Clear();
|
||||||
AllObjectsAdded = true;
|
AllObjectsAdded = true;
|
||||||
DebugLog.DebugWrite("World Objects added.", MessageType.Success);
|
DebugLog.DebugWrite("World Objects added.", MessageType.Success);
|
||||||
|
|
||||||
await _objectsIniting.Values;
|
await _objectTasks;
|
||||||
|
_objectTasks.Clear();
|
||||||
AllObjectsReady = true;
|
AllObjectsReady = true;
|
||||||
DebugLog.DebugWrite("World Objects ready.", MessageType.Success);
|
DebugLog.DebugWrite("World Objects ready.", MessageType.Success);
|
||||||
|
|
||||||
@ -97,22 +92,24 @@ namespace QSB.WorldSync
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var count = _managerTasks.Count(x => !x.Status.IsCompleted());
|
||||||
|
if (count > 0)
|
||||||
|
{
|
||||||
|
DebugLog.DebugWrite($"{count} managers still building", MessageType.Warning);
|
||||||
|
}
|
||||||
|
|
||||||
|
count = _objectTasks.Count(x => !x.Status.IsCompleted());
|
||||||
|
if (count > 0)
|
||||||
|
{
|
||||||
|
DebugLog.DebugWrite($"{count} objects still initing", MessageType.Warning);
|
||||||
|
}
|
||||||
|
|
||||||
_cts.Cancel();
|
_cts.Cancel();
|
||||||
_cts.Dispose();
|
_cts.Dispose();
|
||||||
_cts = null;
|
_cts = null;
|
||||||
|
|
||||||
if (_managersBuilding.Count > 0)
|
_managerTasks.Clear();
|
||||||
{
|
_objectTasks.Clear();
|
||||||
DebugLog.DebugWrite($"{_managersBuilding.Count} managers still building", MessageType.Warning);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_objectsIniting.Count > 0)
|
|
||||||
{
|
|
||||||
DebugLog.DebugWrite($"{_objectsIniting.Count} objects still initing", MessageType.Warning);
|
|
||||||
}
|
|
||||||
|
|
||||||
_managersBuilding.Clear();
|
|
||||||
_objectsIniting.Clear();
|
|
||||||
AllObjectsAdded = false;
|
AllObjectsAdded = false;
|
||||||
AllObjectsReady = false;
|
AllObjectsReady = false;
|
||||||
|
|
||||||
@ -299,15 +296,8 @@ namespace QSB.WorldSync
|
|||||||
WorldObjects.Add(worldObject);
|
WorldObjects.Add(worldObject);
|
||||||
UnityObjectsToWorldObjects.Add(unityObject, worldObject);
|
UnityObjectsToWorldObjects.Add(unityObject, worldObject);
|
||||||
|
|
||||||
var task = UniTask.Create(async () =>
|
var task = worldObject.Try("initing", () => worldObject.Init(_cts.Token));
|
||||||
{
|
_objectTasks.Add(task);
|
||||||
await worldObject.Try("initing", () => worldObject.Init(_cts.Token));
|
|
||||||
_objectsIniting.Remove(worldObject);
|
|
||||||
});
|
|
||||||
if (!task.Status.IsCompleted())
|
|
||||||
{
|
|
||||||
_objectsIniting.Add(worldObject, task);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SetDialogueCondition(string name, bool state)
|
public static void SetDialogueCondition(string name, bool state)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user