56 lines
2.8 KiB
C#
56 lines
2.8 KiB
C#
using Unity.Netcode;
|
|
using UnityEngine;
|
|
|
|
public class KitchenGameMultiplayer : NetworkBehaviour {
|
|
[SerializeField] private KitchenObjectListSO kitchenObjectListSO;
|
|
public static KitchenGameMultiplayer Instance { get; private set; }
|
|
|
|
private void Awake() {
|
|
Instance = this;
|
|
}
|
|
|
|
public void SpawnKitchenObject(KitchenObjectSO kitchenObjectSO, IKitchenObjectParent kitchenObjectParent) {
|
|
SpawnKitchenObjectServerRpc(GetKitchenObjectSOIndex(kitchenObjectSO), kitchenObjectParent.GetNetworkObject());
|
|
}
|
|
|
|
[ServerRpc(RequireOwnership = false)]
|
|
public void SpawnKitchenObjectServerRpc(int kitchenObjectSOIndex, NetworkObjectReference kitchenObjectParentNetworkObjectReference) {
|
|
KitchenObjectSO kitchenObjectSO = GetKitchenObjectSOFromIndex(kitchenObjectSOIndex);
|
|
Transform kitchenObjectTransform = Instantiate(kitchenObjectSO.prefab);
|
|
|
|
NetworkObject kitchenObjectNetworkObject = kitchenObjectTransform.GetComponent<NetworkObject>();
|
|
kitchenObjectNetworkObject.Spawn(true);
|
|
|
|
KitchenObject kitchenObject = kitchenObjectTransform.GetComponent<KitchenObject>();
|
|
kitchenObjectParentNetworkObjectReference.TryGet(out NetworkObject kitchenObjectParentNetworkObject);
|
|
|
|
IKitchenObjectParent kitchenObjectParent = kitchenObjectParentNetworkObject.GetComponent<IKitchenObjectParent>();
|
|
kitchenObject.SetKitchenObjectParent(kitchenObjectParent);
|
|
Debug.Log($"Will spawn {kitchenObjectSO.objectName} on {kitchenObjectParent}...");
|
|
}
|
|
|
|
private int GetKitchenObjectSOIndex(KitchenObjectSO kitchenObjectSO) =>
|
|
kitchenObjectListSO.kitchenObjectSOList.IndexOf(kitchenObjectSO);
|
|
|
|
private KitchenObjectSO GetKitchenObjectSOFromIndex(int kitchenObjectSOIndex) =>
|
|
kitchenObjectListSO.kitchenObjectSOList[kitchenObjectSOIndex];
|
|
|
|
public void DestroyKitchenObject(KitchenObject kitchenObject) {
|
|
DestroyKitchenObjectServerRpc(kitchenObject.NetworkObject);
|
|
}
|
|
|
|
[ServerRpc(RequireOwnership = false)]
|
|
public void DestroyKitchenObjectServerRpc(NetworkObjectReference kitchenObjectNetworkObjectReference) {
|
|
kitchenObjectNetworkObjectReference.TryGet(out NetworkObject kitchenObjectNetworkObject);
|
|
KitchenObject kitchenObject = kitchenObjectNetworkObject.GetComponent<KitchenObject>();
|
|
ClearKitchenObjectOnParentClientRpc(kitchenObjectNetworkObjectReference);
|
|
kitchenObject.DestroySelf();
|
|
}
|
|
|
|
[ClientRpc]
|
|
public void ClearKitchenObjectOnParentClientRpc(NetworkObjectReference kitchenObjectNetworkObjectReference) {
|
|
kitchenObjectNetworkObjectReference.TryGet(out NetworkObject kitchenObjectNetworkObject);
|
|
KitchenObject kitchenObject = kitchenObjectNetworkObject.GetComponent<KitchenObject>();
|
|
kitchenObject.ClearKitchenObjectOnParent();
|
|
}
|
|
} |