Commit ac0e80cf by alsunj

remove updating righthanditemvalue for clients

parent 2d41ea35
...@@ -17,12 +17,12 @@ public class Explosive : Pickupable, IExplosive ...@@ -17,12 +17,12 @@ public class Explosive : Pickupable, IExplosive
throw new System.NotImplementedException(); throw new System.NotImplementedException();
} }
public override void Pickup(GameObject pickupingTarget) public override void Pickup()
{ {
_boxCollider.isTrigger = true; _boxCollider.isTrigger = true;
} }
public override void PutDown(Vector3 position) public override void PutDown()
{ {
_boxCollider.isTrigger = false; _boxCollider.isTrigger = false;
// transform.position = position; // transform.position = position;
......
...@@ -2,6 +2,6 @@ using UnityEngine; ...@@ -2,6 +2,6 @@ using UnityEngine;
public interface IPickupable public interface IPickupable
{ {
public void Pickup(GameObject targetobject); public void Pickup();
public void PutDown(Vector3 position); public void PutDown();
} }
\ No newline at end of file
...@@ -13,16 +13,14 @@ public class Key : Pickupable, IPickupable ...@@ -13,16 +13,14 @@ public class Key : Pickupable, IPickupable
} }
public override void Pickup(GameObject pickupingTarget) public override void Pickup()
{ {
_boxCollider.isTrigger = true; _boxCollider.isTrigger = true;
} }
public override void PutDown(Vector3 position) public override void PutDown()
{ {
_boxCollider.isTrigger = false; _boxCollider.isTrigger = false;
// transform.position = position;
// transform.rotation = _startingRotation;
} }
} }
\ No newline at end of file
...@@ -2,7 +2,7 @@ using System; ...@@ -2,7 +2,7 @@ using System;
using Unity.Netcode; using Unity.Netcode;
using UnityEngine; using UnityEngine;
public abstract class Pickupable : NetworkBehaviour, IEquatable<Pickupable> public abstract class Pickupable : NetworkBehaviour, IEquatable<Pickupable>, IPickupable
{ {
private NetworkVariable<bool> isObjectPickedup = new NetworkVariable<bool>(); private NetworkVariable<bool> isObjectPickedup = new NetworkVariable<bool>();
private FollowTransform _followTransform; private FollowTransform _followTransform;
...@@ -15,28 +15,45 @@ public abstract class Pickupable : NetworkBehaviour, IEquatable<Pickupable> ...@@ -15,28 +15,45 @@ public abstract class Pickupable : NetworkBehaviour, IEquatable<Pickupable>
{ {
Debug.LogError("FollowTransform component not found on the GameObject."); Debug.LogError("FollowTransform component not found on the GameObject.");
} }
_startingRotation = transform.rotation;
} }
public void RequestPutDownObject(Vector3 position) public void RequestPutDownObject(NetworkObjectReference pickupingTarget)
{ {
RequestPutDownObjectServerRpc(position); RequestPutDownObjectServerRpc(pickupingTarget);
} }
[ServerRpc(RequireOwnership = false)] [ServerRpc(RequireOwnership = false)]
private void RequestPutDownObjectServerRpc(Vector3 position) private void RequestPutDownObjectServerRpc(NetworkObjectReference pickupingTarget)
{ {
if (isObjectPickedup.Value) if (isObjectPickedup.Value)
{ {
isObjectPickedup.Value = false; isObjectPickedup.Value = false;
_followTransform.SetTargetTransform(null); Vector3 newPosition = Vector3.zero;
PutDownObjectClientRpc(position); if (pickupingTarget.TryGet(out NetworkObject target))
{
newPosition = target.transform.position + target.transform.forward;
PlayerPlacements playerPlacements = target.GetComponent<PlayerPlacements>();
if (playerPlacements != null)
{
playerPlacements.ClearPlayerRightHandItem();
}
}
// Notify all clients to update their visuals
PutDownObjectClientRpc(newPosition);
} }
} }
[ClientRpc] [ClientRpc]
private void PutDownObjectClientRpc(Vector3 position) private void PutDownObjectClientRpc(Vector3 newPosition)
{ {
PutDown(position); _followTransform.SetTargetTransform(null);
transform.position = newPosition;
transform.rotation = _startingRotation;
// Update the visuals on the client
PutDown();
} }
public void RequestPickupObject(NetworkObjectReference pickupingTarget) public void RequestPickupObject(NetworkObjectReference pickupingTarget)
...@@ -56,11 +73,12 @@ public abstract class Pickupable : NetworkBehaviour, IEquatable<Pickupable> ...@@ -56,11 +73,12 @@ public abstract class Pickupable : NetworkBehaviour, IEquatable<Pickupable>
PlayerPlacements playerPlacements = target.GetComponent<PlayerPlacements>(); PlayerPlacements playerPlacements = target.GetComponent<PlayerPlacements>();
if (playerPlacements != null) if (playerPlacements != null)
{ {
playerPlacements.SetPlayerRightHandItemServerRpc(new NetworkObjectReference(this.NetworkObject)); playerPlacements.SetPlayerRightHandItem(new NetworkObjectReference(this.NetworkObject));
_followTransform.SetTargetTransform(playerPlacements.playerRightHand.transform); _followTransform.SetTargetTransform(playerPlacements.playerRightHand.transform);
} }
} }
// Notify all clients to update their visuals
PickupObjectClientRpc(pickupingTarget); PickupObjectClientRpc(pickupingTarget);
} }
} }
...@@ -70,13 +88,19 @@ public abstract class Pickupable : NetworkBehaviour, IEquatable<Pickupable> ...@@ -70,13 +88,19 @@ public abstract class Pickupable : NetworkBehaviour, IEquatable<Pickupable>
{ {
if (pickupingTarget.TryGet(out NetworkObject target)) if (pickupingTarget.TryGet(out NetworkObject target))
{ {
Pickup(target.gameObject); PlayerPlacements playerPlacements = target.GetComponent<PlayerPlacements>();
if (playerPlacements != null)
{
_followTransform.SetTargetTransform(playerPlacements.playerRightHand.transform);
} }
} }
public abstract void PutDown(Vector3 position); Pickup();
}
public abstract void PutDown();
public abstract void Pickup(GameObject pickupingTarget); public abstract void Pickup();
public bool Equals(Pickupable other) public bool Equals(Pickupable other)
{ {
......
...@@ -146,6 +146,12 @@ public class PlayerController : NetworkBehaviour ...@@ -146,6 +146,12 @@ public class PlayerController : NetworkBehaviour
{ {
_rb.isKinematic = false; _rb.isKinematic = false;
} }
_playerPlacements = GetComponent<PlayerPlacements>();
if (_playerPlacements == null)
{
Debug.LogError("PlayerPlacements is null");
}
} }
private void OnSprint(bool state) private void OnSprint(bool state)
...@@ -377,9 +383,17 @@ public class PlayerController : NetworkBehaviour ...@@ -377,9 +383,17 @@ public class PlayerController : NetworkBehaviour
private void PickupObject(Pickupable pickupable) private void PickupObject(Pickupable pickupable)
{ {
// if (!isRightHandFull) // if (!isRightHandFull)
// { if (!_playerPlacements.IsRightHandFull())
{
pickupable.RequestPickupObject( pickupable.RequestPickupObject(
new NetworkObjectReference(gameObject.GetComponent<NetworkObject>())); new NetworkObjectReference(gameObject.GetComponent<NetworkObject>()));
}
else
{
pickupable.RequestPutDownObject(
new NetworkObjectReference(gameObject.GetComponent<NetworkObject>()));
}
//TODO: boolean should be set to true only if the object was picked up //TODO: boolean should be set to true only if the object was picked up
// isRightHandFull = !isRightHandFull; // isRightHandFull = !isRightHandFull;
......
...@@ -9,6 +9,7 @@ public class PlayerPlacements : NetworkBehaviour ...@@ -9,6 +9,7 @@ public class PlayerPlacements : NetworkBehaviour
private NetworkVariable<NetworkObjectReference> playerRightHandItem = new NetworkVariable<NetworkObjectReference>(); private NetworkVariable<NetworkObjectReference> playerRightHandItem = new NetworkVariable<NetworkObjectReference>();
private NetworkVariable<NetworkObjectReference> playerLeftHandItem = new NetworkVariable<NetworkObjectReference>(); private NetworkVariable<NetworkObjectReference> playerLeftHandItem = new NetworkVariable<NetworkObjectReference>();
void Start() void Start()
{ {
playerRightHand = transform.Find("PlayerVisual/Skeleton_Minion/Rig/root/handIK.r/EquippedItemR")?.gameObject; playerRightHand = transform.Find("PlayerVisual/Skeleton_Minion/Rig/root/handIK.r/EquippedItemR")?.gameObject;
...@@ -24,8 +25,13 @@ public class PlayerPlacements : NetworkBehaviour ...@@ -24,8 +25,13 @@ public class PlayerPlacements : NetworkBehaviour
} }
} }
[ServerRpc] public void SetPlayerRightHandItem(NetworkObjectReference newItem)
public void SetPlayerRightHandItemServerRpc(NetworkObjectReference newItem) {
SetPlayerRightHandItemServerRpc(newItem);
}
[ServerRpc(RequireOwnership = false)]
private void SetPlayerRightHandItemServerRpc(NetworkObjectReference newItem)
{ {
if (newItem.TryGet(out NetworkObject networkObject)) if (newItem.TryGet(out NetworkObject networkObject))
{ {
...@@ -33,21 +39,30 @@ public class PlayerPlacements : NetworkBehaviour ...@@ -33,21 +39,30 @@ public class PlayerPlacements : NetworkBehaviour
if (pickupable != null) if (pickupable != null)
{ {
playerRightHandItem.Value = newItem; playerRightHandItem.Value = newItem;
UpdatePlayerRightHandItemClientRpc(newItem); // UpdatePlayerRightHandItemClientRpc(newItem);
} }
} }
} }
[ClientRpc] public void ClearPlayerRightHandItem()
private void UpdatePlayerRightHandItemClientRpc(NetworkObjectReference newItem)
{ {
if (newItem.TryGet(out NetworkObject networkObject)) ClearPlayerRightHandItemServerRpc();
{ }
Pickupable pickupable = networkObject.GetComponent<Pickupable>();
if (pickupable != null) [ServerRpc(RequireOwnership = false)]
private void ClearPlayerRightHandItemServerRpc()
{ {
playerRightHandItem.Value = newItem; playerRightHandItem.Value = new NetworkObjectReference();
// UpdatePlayerRightHandItemClientRpc(playerRightHandItem.Value);
} }
public bool IsRightHandFull()
{
if (playerRightHandItem.Value.TryGet(out NetworkObject networkObject))
{
return networkObject.GetComponent<Pickupable>() != null;
} }
return false;
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment