KitchenChaos/Assets/Scripts/KitchenObject.cs

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);
}
}