using System.Collections; using System.Collections.Generic; using UnityEngine; using vnxbqy.UI; public class CreateRoleBehaviour { public State state { get; private set; } CreateRoleTimeLine showTimeLine = new CreateRoleTimeLine(); List sfxControllers = new List(); GameObject behaviour; CreateRoleHeroPlatform platform; public void Show(CreateRoleScriptableObject.RoleShowParams showParams) { if (behaviour == null) { var prefab = SceneLoader.LoadCreateRole(showParams.platformPrefabName); behaviour = GameObject.Instantiate(prefab, showParams.platformPosition, Quaternion.identity); behaviour.name = showParams.platformPrefabName; platform = behaviour.GetComponentInChildren(); platform.transform.localScale = showParams.platformScale; var camera = behaviour.GetComponent("CreateRoleCamera"); if (camera != null) { camera.SetActive(false); } } platform.transform.localEulerAngles = new Vector3(0, 180, 0); platform.ForbidSeconds(showParams.animationDuration); CreateRoleManager.Instance.LoadModel(showParams.job, PlayerModelMarkConfig.Get(CreateRoleConfig.Get(showParams.job).modelMark).npcid, (bool ok, UnityEngine.Object @object) => { if (ok) { var model = @object as GameObject; model.transform.SetParentEx(platform.transform, Vector3.zero, Quaternion.identity, Vector3.one * showParams.scale); model.SetActive(true); ReleaseEffects(); state = State.RoutimeShow; showTimeLine.ClearNode(); showTimeLine.AddNone(0f, () => { var animator = model.GetComponent(); animator.runtimeAnimatorController = AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix, NPCConfig.Get(PlayerModelMarkConfig.Get(CreateRoleConfig.Get(showParams.job).modelMark).npcid).MODE); }); showTimeLine.AddNone(0f, () => { WindowCenter.Instance.Open(); }); showTimeLine.OnComplete(() => { state = State.Idle; }); showTimeLine.Begin(); } }); } public void SetActive(bool active) { if (behaviour != null) { behaviour.transform.SetActive(active); } } public void Dispose() { showTimeLine.Dispose(); ReleaseEffects(); showTimeLine = null; behaviour = null; platform = null; } public void ReleaseEffects() { for (var i = sfxControllers.Count - 1; i >= 0; i--) { SFXPlayUtility.Instance.Release(sfxControllers[i]); } sfxControllers.Clear(); } public enum State { Idle, EnterShow, RoutimeShow, } }