82 lines
2.8 KiB
C#
82 lines
2.8 KiB
C#
using UnityEngine;
|
|
using UHFPS.Tools;
|
|
using ThunderWire.Attributes;
|
|
|
|
namespace UHFPS.Runtime
|
|
{
|
|
[Docs("https://docs.twgamesdev.com/uhfps/guides/save-load-manager/previous-scene-persistency")]
|
|
public class LevelInteract : MonoBehaviour, IInteractStart
|
|
{
|
|
public enum TriggerTypeEnum { Trigger, Interact, Event }
|
|
public enum LevelTypeEnum { NextLevel, WorldState, PlayerData }
|
|
|
|
public TriggerTypeEnum TriggerType = TriggerTypeEnum.Interact;
|
|
public LevelTypeEnum LevelType = LevelTypeEnum.NextLevel;
|
|
public string NextLevelName;
|
|
|
|
public bool CustomTransform;
|
|
public Transform TargetTransform;
|
|
public float LookUpDown;
|
|
|
|
private void OnTriggerEnter(Collider other)
|
|
{
|
|
if (TriggerType != TriggerTypeEnum.Trigger)
|
|
return;
|
|
|
|
if (other.CompareTag("Player"))
|
|
SwitchLevel();
|
|
}
|
|
|
|
public void InteractStart()
|
|
{
|
|
if (TriggerType != TriggerTypeEnum.Interact)
|
|
return;
|
|
|
|
SwitchLevel();
|
|
}
|
|
|
|
public void SwitchLevel()
|
|
{
|
|
if (LevelType == LevelTypeEnum.PlayerData)
|
|
{
|
|
SaveGameManager.SavePlayer();
|
|
GameManager.Instance.LoadNextLevel(NextLevelName);
|
|
}
|
|
else if (CustomTransform)
|
|
{
|
|
SaveGameManager.SaveGame(TargetTransform.position, new Vector2(TargetTransform.eulerAngles.y, LookUpDown), () =>
|
|
{
|
|
if (LevelType == LevelTypeEnum.NextLevel)
|
|
GameManager.Instance.LoadNextLevel(NextLevelName);
|
|
else
|
|
GameManager.Instance.LoadNextWorld(NextLevelName);
|
|
});
|
|
}
|
|
else
|
|
{
|
|
SaveGameManager.SaveGame(() =>
|
|
{
|
|
if (LevelType == LevelTypeEnum.NextLevel)
|
|
GameManager.Instance.LoadNextLevel(NextLevelName);
|
|
else
|
|
GameManager.Instance.LoadNextWorld(NextLevelName);
|
|
});
|
|
}
|
|
}
|
|
|
|
private void OnDrawGizmos()
|
|
{
|
|
if(CustomTransform && TargetTransform != null)
|
|
{
|
|
#if UNITY_EDITOR
|
|
UnityEditor.Handles.color = Color.green.Alpha(0.01f);
|
|
UnityEditor.Handles.DrawSolidDisc(TargetTransform.position, Vector3.up, 1f);
|
|
UnityEditor.Handles.color = Color.green;
|
|
UnityEditor.Handles.DrawWireDisc(TargetTransform.position, Vector3.up, 1f);
|
|
#endif
|
|
Gizmos.DrawSphere(TargetTransform.position, 0.05f);
|
|
GizmosE.DrawGizmosArrow(TargetTransform.position, TargetTransform.forward);
|
|
}
|
|
}
|
|
}
|
|
} |