mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-01-16 07:10:35 +00:00
94 lines
2.5 KiB
C#
94 lines
2.5 KiB
C#
using OWML.Common;
|
|
using QSB.PlayerBodySetup.Remote;
|
|
using QSB.Utility;
|
|
using UnityEngine;
|
|
|
|
namespace QSB.Animation.Player;
|
|
|
|
[UsedInUnityProject]
|
|
public class HelmetAnimator : MonoBehaviour
|
|
{
|
|
public Transform FakeHelmet;
|
|
public Transform FakeHead;
|
|
public GameObject SuitGroup;
|
|
|
|
private QSBDitheringAnimator _fakeHelmetDitheringAnimator;
|
|
|
|
private const float ANIM_TIME = 0.5f;
|
|
private bool _isPuttingOnHelmet;
|
|
private bool _isTakingOffHelmet;
|
|
|
|
public void Start()
|
|
{
|
|
_fakeHelmetDitheringAnimator = FakeHelmet.GetComponent<QSBDitheringAnimator>();
|
|
|
|
FakeHead.gameObject.SetActive(false);
|
|
}
|
|
|
|
public void RemoveHelmet()
|
|
{
|
|
if (!SuitGroup.activeSelf)
|
|
{
|
|
DebugLog.DebugWrite($"Trying to remove helmet when player is not wearing suit!", MessageType.Error);
|
|
return;
|
|
}
|
|
|
|
_fakeHelmetDitheringAnimator.SetVisible(true);
|
|
FakeHelmet.gameObject.SetActive(true);
|
|
FakeHead.gameObject.SetActive(true);
|
|
_fakeHelmetDitheringAnimator.SetVisible(false, ANIM_TIME);
|
|
_isTakingOffHelmet = true;
|
|
}
|
|
|
|
public void PutOnHelmet()
|
|
{
|
|
if (!SuitGroup.activeSelf)
|
|
{
|
|
DebugLog.DebugWrite($"Trying to put on helmet when player is not wearing suit!", MessageType.Error);
|
|
return;
|
|
}
|
|
|
|
_fakeHelmetDitheringAnimator.SetVisible(false);
|
|
FakeHead.gameObject.SetActive(true);
|
|
FakeHelmet.gameObject.SetActive(true);
|
|
_fakeHelmetDitheringAnimator.SetVisible(true, ANIM_TIME);
|
|
_isPuttingOnHelmet = true;
|
|
}
|
|
|
|
public void SetHelmetInstant(bool helmetOn)
|
|
{
|
|
if (helmetOn)
|
|
{
|
|
FakeHelmet.gameObject.SetActive(true);
|
|
_fakeHelmetDitheringAnimator.SetVisible(true);
|
|
FakeHead.gameObject.SetActive(false);
|
|
}
|
|
else
|
|
{
|
|
_fakeHelmetDitheringAnimator.SetVisible(false);
|
|
FakeHelmet.gameObject.SetActive(false);
|
|
// If the player is currently wearing their suit but has no helmet on, make sure to make the head visible (#655)
|
|
FakeHead.gameObject.SetActive(SuitGroup.activeSelf);
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (_isPuttingOnHelmet && _fakeHelmetDitheringAnimator.FullyVisible)
|
|
{
|
|
_isPuttingOnHelmet = false;
|
|
FakeHead.gameObject.SetActive(false);
|
|
}
|
|
|
|
if (_isTakingOffHelmet && _fakeHelmetDitheringAnimator.FullyInvisible)
|
|
{
|
|
FakeHelmet.gameObject.SetActive(false);
|
|
|
|
if (!SuitGroup.activeSelf)
|
|
{
|
|
FakeHead.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
}
|