using Unity.Netcode; using UnityEngine; public class KitchenObject : NetworkBehaviour { public KitchenObjectSO KitchenObjectSO; private FollowTransform followTransform; private IKitchenObjectParent kitchenObjectParent; protected virtual void Awake() => followTransform = GetComponent(); // ReSharper disable Unity.PerformanceAnalysis public void SetKitchenObjectParent(IKitchenObjectParent kOP) => SetKitchenObjectParentServerRpc(kOP.GetNetworkObject()); [ServerRpc(RequireOwnership = false)] public void SetKitchenObjectParentServerRpc(NetworkObjectReference kitchenObjectParentNetworkObjectReference) => SetKitchenObjectParentClientRpc(kitchenObjectParentNetworkObjectReference); [ClientRpc] public void SetKitchenObjectParentClientRpc(NetworkObjectReference kitchenObjectParentNetworkObjectReference) { kitchenObjectParentNetworkObjectReference.TryGet(out NetworkObject kitchenObjectParentNetworkObject); IKitchenObjectParent kitchenOP = kitchenObjectParentNetworkObject.GetComponent(); // if (kitchenObjectParent != null) kitchenObjectParent = null; kitchenObjectParent = kitchenOP; if (kitchenOP.KitchenObject != null) Debug.LogError($"IKitchenObjectParent {kitchenOP} already has a KitchenObject {kitchenOP.KitchenObject}"); kitchenObjectParent.KitchenObject = this; followTransform.TargetTransform = kitchenObjectParent.GetKitchenObjectFollowTransform(); } public void DestroySelf() { Destroy(gameObject); } public void ClearKitchenObjectOnParent() { kitchenObjectParent.KitchenObject = null; } public bool TryGetPlate(out PlateKitchenObject plateKitchenObject) { if (this is PlateKitchenObject) { plateKitchenObject = this as PlateKitchenObject; return true; } plateKitchenObject = null; return false; } // ReSharper disable Unity.PerformanceAnalysis public static void SpawnKitchenObject(KitchenObjectSO kitchenObjectSO, IKitchenObjectParent kitchenObjectParent) { KitchenGameMultiplayer.Instance.SpawnKitchenObject(kitchenObjectSO, kitchenObjectParent); } public static void DestroyKitchenObject(KitchenObject kitchenObject) { KitchenGameMultiplayer.Instance.DestroyKitchenObject(kitchenObject); } }