106 lines
2.7 KiB
C#
106 lines
2.7 KiB
C#
|
using RoR2.ConVar;
|
||
|
using RoR2.UI;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace RoR2;
|
||
|
|
||
|
[DisallowMultipleComponent]
|
||
|
public class TutorialManager : MonoBehaviour
|
||
|
{
|
||
|
private static BoolConVar cvIsTutorialEnabled = new BoolConVar("enable_tutorial", ConVarFlags.None, "0", "Enables the tutorial.");
|
||
|
|
||
|
private LocalUser _cachedLocalUser;
|
||
|
|
||
|
private Inventory _cachedInventory;
|
||
|
|
||
|
private float itemTriggerTimeBuffer = 5f;
|
||
|
|
||
|
public static bool isTutorialEnabled => cvIsTutorialEnabled.value;
|
||
|
|
||
|
private void Start()
|
||
|
{
|
||
|
if (isTutorialEnabled)
|
||
|
{
|
||
|
_cachedLocalUser = LocalUserManager.GetFirstLocalUser();
|
||
|
if (_cachedLocalUser != null)
|
||
|
{
|
||
|
_cachedLocalUser.onBodyChanged += OnBodyChanged;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void OnBodyChanged()
|
||
|
{
|
||
|
_cachedInventory = _cachedLocalUser.cachedMasterController.master.inventory;
|
||
|
if ((bool)_cachedInventory)
|
||
|
{
|
||
|
_cachedLocalUser.onBodyChanged -= OnBodyChanged;
|
||
|
BindPickups();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void BindPickups()
|
||
|
{
|
||
|
_cachedInventory.onItemAddedClient += OnItemAddedClient;
|
||
|
_cachedInventory.onEquipmentChangedClient += OnEquipmentChangedClient;
|
||
|
}
|
||
|
|
||
|
private void UnbindPickups()
|
||
|
{
|
||
|
_cachedInventory.onItemAddedClient -= OnItemAddedClient;
|
||
|
_cachedInventory.onEquipmentChangedClient -= OnEquipmentChangedClient;
|
||
|
}
|
||
|
|
||
|
private void OnItemAddedClient(ItemIndex itemIndex)
|
||
|
{
|
||
|
CameraRigController cameraRigController = _cachedLocalUser.cameraRigController;
|
||
|
if (!cameraRigController)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
HUD hud = cameraRigController.hud;
|
||
|
if (!hud)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
InspectPanelController inspectPanelController = hud.inspectPanelController;
|
||
|
if ((bool)inspectPanelController && (!Run.instance || !(Run.instance.GetRunStopwatch() < itemTriggerTimeBuffer)))
|
||
|
{
|
||
|
hud.scoreboardPanel.SetActive(value: true);
|
||
|
if (_cachedLocalUser.userProfile.useInspectFeature)
|
||
|
{
|
||
|
InspectInfo inspectInfo = ItemCatalog.GetItemDef(itemIndex);
|
||
|
inspectInfo.MarkForceShowInfo();
|
||
|
inspectPanelController.Show(inspectInfo);
|
||
|
}
|
||
|
UnbindPickups();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void OnEquipmentChangedClient(EquipmentIndex newEquipmentIndex, uint equipmentSlot)
|
||
|
{
|
||
|
CameraRigController cameraRigController = _cachedLocalUser.cameraRigController;
|
||
|
if (!cameraRigController)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
HUD hud = cameraRigController.hud;
|
||
|
if (!hud)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
InspectPanelController inspectPanelController = hud.inspectPanelController;
|
||
|
if ((bool)inspectPanelController && (!Run.instance || !(Run.instance.GetRunStopwatch() < itemTriggerTimeBuffer)))
|
||
|
{
|
||
|
hud.scoreboardPanel.SetActive(value: true);
|
||
|
if (_cachedLocalUser.userProfile.useInspectFeature)
|
||
|
{
|
||
|
InspectInfo inspectInfo = EquipmentCatalog.GetEquipmentDef(newEquipmentIndex);
|
||
|
inspectInfo.MarkForceShowInfo();
|
||
|
inspectPanelController.Show(inspectInfo);
|
||
|
}
|
||
|
UnbindPickups();
|
||
|
}
|
||
|
}
|
||
|
}
|