Files
2026-03-03 05:27:03 +05:00

70 lines
2.0 KiB
C#

using System;
using ThunderWire.Attributes;
using UnityEngine;
namespace UHFPS.Runtime
{
[InspectorHeader("Feature Disable Trigger")]
public class FeatureDisableTrigger : MonoBehaviour
{
private GameManager gameManager;
private PlayerStateMachine player;
[Flags]
public enum Features
{
None = 0,
SaveGame = 1 << 0,
LoadGame = 1 << 1,
Jump = 1 << 2,
Run = 1 << 3,
Crouch = 1 << 4
}
public Features FeaturesToDisable = Features.None;
private void Awake()
{
gameManager = GameManager.Instance;
player = gameManager.PlayerPresence.StateMachine;
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
SetFeature(false);
}
}
private void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player"))
{
SetFeature(true);
}
}
private void SetFeature(bool state)
{
bool saveDisable = FeaturesToDisable.HasFlag(Features.SaveGame);
bool loadDisable = FeaturesToDisable.HasFlag(Features.LoadGame);
if(saveDisable || loadDisable)
{
bool saveState = !saveDisable || state;
bool loadState = !loadDisable || state;
gameManager.SetSaveInteractable(saveState, loadState);
}
if (FeaturesToDisable.HasFlag(Features.Jump))
player.SetStateEnabled(PlayerStateMachine.JUMP_STATE, state);
if (FeaturesToDisable.HasFlag(Features.Run))
player.SetStateEnabled(PlayerStateMachine.RUN_STATE, state);
if (FeaturesToDisable.HasFlag(Features.Crouch))
player.SetStateEnabled(PlayerStateMachine.CROUCH_STATE, state);
}
}
}