r2mods/ilspy_dump/ror2_csproj/RoR2.UI/HUDTutorialController.cs

102 lines
2.6 KiB
C#

using EntityStates;
using UnityEngine;
namespace RoR2.UI;
[RequireComponent(typeof(HUD))]
public class HUDTutorialController : MonoBehaviour
{
private HUD hud;
[Tooltip("The tutorial popup object.")]
[Header("Equipment Tutorial")]
public GameObject equipmentTutorialObject;
[Tooltip("The equipment icon to monitor for a change to trigger the tutorial popup.")]
public EquipmentIcon equipmentIcon;
[Tooltip("The tutorial popup object.")]
[Header("Sprint Tutorial")]
public GameObject sprintTutorialObject;
[Tooltip("How long to wait for the player to sprint before showing the tutorial popup.")]
public float sprintTutorialTriggerTime = 30f;
private float sprintTutorialStopwatch;
private void Awake()
{
hud = GetComponent<HUD>();
if ((bool)equipmentTutorialObject)
{
equipmentTutorialObject.SetActive(value: false);
}
if ((bool)sprintTutorialObject)
{
sprintTutorialObject.SetActive(value: false);
}
}
private UserProfile GetUserProfile()
{
if ((bool)hud && hud.localUserViewer != null)
{
return hud.localUserViewer.userProfile;
}
return null;
}
private void HandleTutorial(GameObject tutorialPopup, ref UserProfile.TutorialProgression tutorialProgression, bool dismiss = false, bool progress = true)
{
if ((bool)tutorialPopup && !dismiss)
{
tutorialPopup.SetActive(value: true);
}
tutorialProgression.shouldShow = false;
if (progress)
{
tutorialProgression.showCount++;
}
}
private void Update()
{
if (!hud || hud.localUserViewer == null)
{
return;
}
UserProfile userProfile = GetUserProfile();
CharacterBody cachedBody = hud.localUserViewer.cachedBody;
if (userProfile == null || !cachedBody)
{
return;
}
if (userProfile.tutorialEquipment.shouldShow && equipmentIcon.hasEquipment)
{
HandleTutorial(equipmentTutorialObject, ref userProfile.tutorialEquipment);
}
if (userProfile.tutorialSprint.shouldShow)
{
if (cachedBody.isSprinting)
{
HandleTutorial(null, ref userProfile.tutorialSprint, dismiss: true);
return;
}
if (cachedBody.GetComponent<EntityStateMachine>()?.state is GenericCharacterMain)
{
sprintTutorialStopwatch += Time.deltaTime;
}
if (sprintTutorialStopwatch >= sprintTutorialTriggerTime)
{
HandleTutorial(sprintTutorialObject, ref userProfile.tutorialSprint, dismiss: false, progress: false);
}
}
else if ((bool)sprintTutorialObject && sprintTutorialObject.activeInHierarchy && cachedBody.isSprinting)
{
Object.Destroy(sprintTutorialObject);
sprintTutorialObject = null;
userProfile.tutorialSprint.showCount++;
}
}
}