Files
Nitrox/NitroxClient/MonoBehaviours/Overrides/MultiplayerBench.cs
2025-07-06 00:23:46 +02:00

72 lines
2.8 KiB
C#

using System;
using NitroxClient.Unity.Helper;
using UnityEngine;
namespace NitroxClient.MonoBehaviours.Overrides
{
public class MultiplayerBench : Bench
{
private Side side;
public static MultiplayerBench FromBench(Bench origin, GameObject target, Side side, GameObject animatorRoot)
{
Animator animator = animatorRoot.GetComponent<Animator>();
Transform playerTarget = animatorRoot.transform.Find("root/cine_loc/player_target");
Transform playerOutTarget = animatorRoot.transform.Find("out_target");
MultiplayerBench bench = target.AddComponent<MultiplayerBench>();
bench.frontObstacleCheck = origin.frontObstacleCheck;
bench.backObstacleCheck = origin.backObstacleCheck;
bench.frontAnimRotation = origin.frontAnimRotation;
bench.backAnimRotation = origin.backAnimRotation;
bench.checkDistance = origin.checkDistance;
bench.handText = origin.handText;
bench.triggerType = origin.triggerType;
bench.volumeTriggerType = origin.volumeTriggerType;
bench.standUpCinematicController = origin.standUpCinematicController;
bench.cinematicController = origin.cinematicController;
bench.onCinematicStart = new CinematicModeEvent();
bench.onCinematicEnd = new CinematicModeEvent();
bench.side = side;
bench.animator = animator;
bench.playerTarget = playerTarget;
bench.cinematicController.animatedTransform = playerTarget;
bench.cinematicController.animator = animator;
bench.cinematicController.informGameObject = target;
bench.standUpCinematicController.animatedTransform = playerTarget;
bench.standUpCinematicController.endTransform = playerOutTarget;
bench.standUpCinematicController.animator = animator;
bench.standUpCinematicController.informGameObject = target;
return bench;
}
public override void OnHandClick(GUIHand hand)
{
// Prevent users from sitting on a not fully-constructed bench
if (gameObject.TryGetComponentInParent(out Constructable constructable, true) && !constructable.constructed)
{
return;
}
standUpCinematicController.transform.localPosition = side switch
{
Side.LEFT => new Vector3(-0.75f, 0.082f, 0),
Side.CENTER => new Vector3(0, 0.082f, 0),
Side.RIGHT => new Vector3(0.75f, 0.082f, 0),
_ => throw new ArgumentOutOfRangeException()
};
base.OnHandClick(hand);
}
public enum Side
{
LEFT,
CENTER,
RIGHT
}
}
}