35 lines
1.0 KiB
C#
Raw Normal View History

using Cysharp.Threading.Tasks;
using Mirror;
2022-03-14 00:51:25 -07:00
using QSB.WorldSync;
using System.Linq;
using System.Threading;
2022-03-14 00:51:25 -07:00
using UnityEngine;
namespace QSB.Utility.LinkedWorldObject;
public static class Extensions
{
/// <summary>
/// link a world object and network object, then spawn it.
/// (host only)
/// </summary>
public static void SpawnLinked(this ILinkedWorldObject<NetworkBehaviour> worldObject, GameObject prefab)
2022-03-14 00:51:25 -07:00
{
var go = Object.Instantiate(prefab);
var networkIdentity = go.GetComponent<NetworkIdentity>();
var networkBehaviour = networkIdentity.NetworkBehaviours.OfType<ILinkedNetworkBehaviour<IWorldObject>>().First();
worldObject.LinkTo((NetworkBehaviour)networkBehaviour);
2022-03-14 00:51:25 -07:00
networkBehaviour.LinkTo(worldObject);
NetworkServer.Spawn(go);
2022-03-14 00:51:25 -07:00
}
/// <summary>
/// wait for a world object to be linked.
/// (non host only)
/// </summary>
public static async UniTask WaitForLink(this ILinkedWorldObject<NetworkBehaviour> worldObject, CancellationToken ct) =>
await UniTask.WaitUntil(() => worldObject.NetworkBehaviour, cancellationToken: ct);
2022-03-14 00:51:25 -07:00
}