FullScreenSkillEffect.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using UnityEngine;
  2. using System.Collections;
  3. public class FullScreenSkillEffect : MonoBehaviour
  4. {
  5. static FullScreenSkillEffect mActiveInstance;
  6. public static FullScreenSkillEffect ActiveInstance { get { return mActiveInstance; } }
  7. float time;
  8. float playTime;
  9. GameObject go;
  10. int avatarLayerBackup = -1;
  11. bool restoreAvatarMirror = false;
  12. bool isPlaying = false;
  13. FighterGoCtrl mFighterGoCtrl;
  14. Camera mCurrentFighterCamera;
  15. public Camera ActiveFighterCamera { get { return mCurrentFighterCamera; } }
  16. public void Play (string name, float time, bool follow, bool hideSelf, bool mirrorCamera)
  17. {
  18. go = BattlePrepareManager.Instance.GetMonsterPrefabGo (name);
  19. if (go == null) {
  20. enabled = false;
  21. return;
  22. }
  23. mFighterGoCtrl = gameObject.GetComponent<FighterGoCtrl> ();
  24. if (mFighterGoCtrl == null)
  25. return;
  26. this.time = time;
  27. PocHelper.SetObjectCameraMirror (go.transform, mirrorCamera, Screen.width);
  28. if (follow) {
  29. go.transform.SetParent (transform);
  30. go.transform.localPosition = Vector3.zero;
  31. go.transform.localEulerAngles = Vector3.zero;
  32. } else {
  33. go.transform.position = transform.position;
  34. go.transform.eulerAngles = transform.eulerAngles;
  35. }
  36. avatarLayerBackup = -1;
  37. restoreAvatarMirror = false;
  38. Transform avatar = transform.Find ("avatar");
  39. if (avatar != null) {
  40. if (hideSelf) {
  41. avatarLayerBackup = mFighterGoCtrl.Fighter.Layer;
  42. mFighterGoCtrl.Fighter.LayerName = BattleCamera.DisableLayerName;
  43. }
  44. if (avatar.localScale.x < 0) {
  45. avatar.localScale = avatar.localScale.SetX (-avatar.localScale.x);
  46. restoreAvatarMirror = true;
  47. }
  48. SkinnedMeshRenderer[] skinnedMeshRenderer = avatar.GetComponentsInChildren<SkinnedMeshRenderer> ();
  49. for (int i = 0; i < skinnedMeshRenderer.Length; i++)
  50. skinnedMeshRenderer [i].updateWhenOffscreen = true;
  51. }
  52. BattleMgr.Instance.DisableBattleCamera ();
  53. BattleCamera.CurrentEffectLayerName = BattleCamera.FighterLayerName;
  54. EffectManager.Instance.OnFullScreenEffectStart ();
  55. go.SetActive (true);
  56. playTime = 0;
  57. isPlaying = true;
  58. enabled = true;
  59. mActiveInstance = this;
  60. mCurrentFighterCamera = GetActiveFighterCamera ();
  61. }
  62. void Update ()
  63. {
  64. if (mCurrentFighterCamera == null ||
  65. !mCurrentFighterCamera.enabled
  66. || mCurrentFighterCamera.gameObject.activeInHierarchy)
  67. mCurrentFighterCamera = GetActiveFighterCamera ();
  68. }
  69. void FixedUpdate ()
  70. {
  71. playTime += Time.fixedDeltaTime;
  72. enabled &= playTime < time;
  73. }
  74. void OnDisable ()
  75. {
  76. if (isPlaying) {
  77. if (go != null) {
  78. go.transform.SetParent (null);
  79. go.SetActive (false);
  80. }
  81. Transform avatar = transform.Find ("avatar");
  82. if (avatar != null) {
  83. if (avatarLayerBackup >= 0 && mFighterGoCtrl != null)
  84. mFighterGoCtrl.Fighter.Layer = avatarLayerBackup;
  85. if (restoreAvatarMirror && avatar.transform.localScale.x > 0)
  86. avatar.transform.localScale = avatar.transform.localScale.SetX (-avatar.transform.localScale.x);
  87. SkinnedMeshRenderer[] skinnedMeshRenderer = avatar.GetComponentsInChildren<SkinnedMeshRenderer> ();
  88. for (int i = 0; i < skinnedMeshRenderer.Length; i++)
  89. skinnedMeshRenderer [i].updateWhenOffscreen = false;
  90. }
  91. if (BattleMgr.Instance != null && BattleMgr.Instance.Battle != null) {
  92. BattleMgr.Instance.EnableBattleCamera ();
  93. BattleCamera.CurrentEffectLayerName = BattleCamera.SceneEffectLayerName;
  94. }
  95. isPlaying = false;
  96. EffectManager.Instance.OnFullScreenEffectEnd ();
  97. }
  98. if (mActiveInstance == this)
  99. mActiveInstance = null;
  100. }
  101. Camera GetActiveFighterCamera ()
  102. {
  103. if (go == null)
  104. return null;
  105. foreach (var cam in go.GetComponentsInChildren<Camera> ())
  106. if (cam.gameObject.activeInHierarchy && (cam.cullingMask & LayerMask.GetMask (new [] { BattleCamera.FighterLayerName })) != 0)
  107. return cam;
  108. return null;
  109. }
  110. }