using System.Threading.Tasks; using UnityEngine; using WS; public class LoadSceneComponent : OperateComponent<LoadSceneData> { private MapController mapPop; ///<summary>��Ƶʵ��</summary> private VoiceEntity Voice; public override void Init() { } public override void StartOperate() { //switch (GameManager.Instance.Data.Pattern) //{ // case PatternType.��ѧ: // break; // case PatternType.��ϰ: // break; // case PatternType.����: // break; //} GameManager.Instance.Data.pos = Player.Inst.transform.position; GameManager.Instance.Data.rot = Player.Inst.transform.rotation; Voice = VoiceManager.Instance.Play(VoiceType.Voice, OperateData.AudioName); mapPop = FacadeComponent.Instance.CreateController<MapController>(); mapPop.OpenView(); mapPop.SetView( OperateData.endSceneName, () => { if (Player.Inst.gameObject != null) { Player.Inst.transform.position = OperateData.pos; Player.Inst.transform.rotation = Quaternion.Euler(OperateData.rot); } IsComplete = true; } ); } public override async Task StartState() { if (OperateData.startSceneName == SceneName.None) { return; } if (mapPop != null) { mapPop.CloseView(); } Player.Inst.transform.position = GameManager.Instance.Data.pos; Player.Inst.transform.rotation = GameManager.Instance.Data.rot; if (OperateData.startSceneName.ToString() != SceneComponent.Instance.ThisScene) { if (OperateData.startSceneName == SceneName.������ͨ��) { await SceneComponent.Instance.LoadSceneAsync(SceneName.�������.ToString()); } else { await SceneComponent.Instance.LoadSceneAsync(OperateData.startSceneName.ToString()); } SceneDataSaveComponent.Instance.LoadScene(OperateData.startSceneName.ToString()); } else { return; } } public override async Task EndState() { if (OperateData.endSceneName == SceneName.None) { return; } GameManager.Instance.Data.pos = Player.Inst.transform.position; GameManager.Instance.Data.rot = Player.Inst.transform.rotation; if (mapPop != null) { mapPop.CloseView(); } if (Player.Inst.gameObject != null) { Player.Inst.transform.position = OperateData.pos; Player.Inst.transform.rotation = Quaternion.Euler(OperateData.rot); } await SceneComponent.Instance.LoadSceneAsync(OperateData.endSceneName.ToString()); SceneDataSaveComponent.Instance.LoadScene(OperateData.endSceneName.ToString()); } public override void Update() { } } public class LoadSceneData { /// <summary> ��ʼ���� </summary> public SceneName startSceneName; /// <summary> Ŀ�곡�� </summary> public SceneName endSceneName; /// <summary> λ�õ� </summary> public string transferPoint; /// <summary> λ�� </summary> public Vector3 pos; /// <summary> ��ת </summary> public Vector3 rot; ///<summary>��Ƶ����</summary> public string AudioName; }