59 lines
2.4 KiB
C#
59 lines
2.4 KiB
C#
using Unity.Netcode;
|
|
using UnityEngine;
|
|
|
|
public class KitchenObject : NetworkBehaviour {
|
|
public KitchenObjectSO KitchenObjectSO;
|
|
private FollowTransform followTransform;
|
|
private IKitchenObjectParent kitchenObjectParent;
|
|
|
|
protected virtual void Awake() => followTransform = GetComponent<FollowTransform>();
|
|
|
|
// 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<IKitchenObjectParent>();
|
|
|
|
// 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);
|
|
}
|
|
} |