using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
public class SceneComponent : GameComponent
{
public UnityAction beginLoad;
public float LoadProgress { get; private set; }
public void Awake()
{
Initinalize();
}
public override void Initinalize()
{
base.Initinalize();
}
public override void Release()
{
}
public override void Update()
{
}
public void LoadScene(string name)
{
SceneManager.LoadScene(name);
if (beginLoad!=null)
{
beginLoad();
}
}
public void LoadSceneAsync(string name, bool showLoadingUI=false, Action onComplete = null)
{
StartCoroutine(LoadSceneAsyn(name,showLoadingUI,onComplete));
}
private IEnumerator LoadSceneAsyn(string name,bool showLoadingUI=false,Action onComplete=null)
{
AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(name);
asyncOperation.allowSceneActivation = false;
if (beginLoad!=null)
{
beginLoad();
}
if (showLoadingUI)
{
m_GameManager.GetGameSystem<UISystem>().GetUIView<LoadingView>().Show();
yield return null;
}
LoadProgress = 0;
while (asyncOperation.progress<0.9f)
{
LoadProgress = asyncOperation.progress;
yield return null;
}
yield return new WaitForSeconds(2);
while (LoadProgress < 1)
{
LoadProgress += 0.1f;
yield return null;
}
asyncOperation.allowSceneActivation = true;
if (showLoadingUI)
{
m_GameManager.GetGameSystem<UISystem>().GetUIView<LoadingView>().Hide();
}
if (onComplete != null)
{
onComplete();
}
}
}