Files
tianrunCRM/Assets/CoolapeFrame/Scripts/assets/CLEffect.cs

349 lines
11 KiB
C#
Raw Normal View History

2020-07-04 14:41:25 +08:00
/*
********************************************************************************
*Copyright(C),coolae.net
*Author: chenbin
*Version: 2.0
*Date: 2017-01-09
*Description:
*Others:
*History:
*********************************************************************************
*/
using UnityEngine;
using System.Collections;
namespace Coolape
{
[RequireComponent (typeof(AnimationProc))]
public class CLEffect : MonoBehaviour
{
AnimationProc _animationProc;
public AnimationProc animationProc {
get {
if (_animationProc == null) {
_animationProc = GetComponent<AnimationProc> ();
}
return _animationProc;
}
}
Transform _tr;
public Transform transform {
get {
if (_tr == null) {
_tr = gameObject.transform;
}
return _tr;
}
}
// public string effectName = "";
public object willFinishCallback = null;
public object willFinishCallbackPara;
//回调数
public object finishCallback = null;
public object finishCallbackPara;
//回调数
public bool returnAuto = true;
public float willFinishTimePercent = 0;
/// <summary>
/// Plaies the delay.延迟播放特效
/// </summary>
/// <returns>The delay.</returns>
/// <param name="name">Name.</param>
/// <param name="pos">Position.</param>
/// <param name="parent">Parent.</param>
/// <param name="willFinishTimePercent">Will finish time.</param>
/// <param name="willFinishCallback">Will finish callback.</param>
/// <param name="willFinishCallbackPara">Will finish callback para.</param>
/// <param name="finishCallback">Finish callback.</param>
/// <param name="finishCallbackPara">Finish callback para.</param>
/// <param name="delaySec">Delay sec.</param>
/// <param name="returnAuto">If set to <c>true</c> return auto.</param>
public static CLEffect playDelay (string name, Vector3 pos, Transform parent, float willFinishTimePercent,
object willFinishCallback, object willFinishCallbackPara,
object finishCallback, object finishCallbackPara, float delaySec, bool returnAuto = true)
{
if (string.IsNullOrEmpty (name)) {
return null;
}
if (!CLEffectPool.havePrefab (name)) {
ArrayList list = new ArrayList ();
list.Add (name);
list.Add (pos);
list.Add (parent);
list.Add (willFinishTimePercent);
list.Add (willFinishCallback);
list.Add (willFinishCallbackPara);
list.Add (finishCallback);
list.Add (finishCallbackPara);
list.Add (delaySec);
list.Add (returnAuto);
// CLEffectPool.setPrefab (name, (Callback)onFinishSetPrefab2, list, null);
CLEffectPool.borrowObjAsyn
(name, (Callback)onFinishSetPrefab2, list);
return null;
}
CLEffect effect = CLEffectPool.borrowObj (name);
if (effect == null) {
return null;
}
NGUITools.SetActive (effect.gameObject, false);
CLMainBase.self.StartCoroutine (effect.playDelay (pos, parent, willFinishTimePercent,
willFinishCallback, willFinishCallbackPara,
finishCallback, finishCallbackPara, delaySec, returnAuto));
return effect;
}
public IEnumerator playDelay (Vector3 pos, Transform parent, float willFinishTimePercent,
object willFinishCallback, object willFinishCallbackPara,
object finishCallback, object finishCallbackPara, float delaySec, bool returnAuto)
{
yield return new WaitForSeconds (delaySec);
show (pos, parent, willFinishTimePercent, willFinishCallback, willFinishCallbackPara,
finishCallback, finishCallbackPara, returnAuto);
}
public static CLEffect play (string name, Vector3 pos, Transform parent, object finishCallback, object finishCallbackPara)
{
return play (name, pos, parent, 0, null, null, finishCallback, finishCallbackPara, true);
}
public static CLEffect play (string name, Vector3 pos, object finishCallback, object finishCallbackPara)
{
return play (name, pos, null, 0, null, null, finishCallback, finishCallbackPara, true);
}
public static CLEffect play (string name, Vector3 pos, Transform parent)
{
return play (name, pos, parent, 0, null, null, null, null, true);
}
public static CLEffect play (string name, Vector3 pos)
{
return play (name, pos, null, 0, null, null, null, null, true);
}
public static CLEffect play (string name, Vector3 pos, Transform parent, float willFinishTimePercent,
object willFinishCallback, object willFinishCallbackPara,
object finishCallback, object finishCallbackPara, bool returnAuto)
{
try {
if (string.IsNullOrEmpty (name)) {
return null;
}
if (!CLEffectPool.havePrefab (name)) {
ArrayList list = new ArrayList ();
list.Add (name);
list.Add (pos);
list.Add (parent);
list.Add (willFinishTimePercent);
list.Add (willFinishCallback);
list.Add (willFinishCallbackPara);
list.Add (finishCallback);
list.Add (finishCallbackPara);
list.Add (returnAuto);
CLEffectPool.borrowObjAsyn (name, (Callback)onFinishSetPrefab, list);
return null;
}
CLEffect effect = CLEffectPool.borrowObj (name);
if (effect == null) {
return null;
}
// effect.effectName = name;
effect.show (pos, parent, willFinishTimePercent, willFinishCallback, willFinishCallbackPara,
finishCallback, finishCallbackPara, returnAuto);
return effect;
} catch (System.Exception e) {
Debug.LogError (e);
return null;
}
}
public static void onFinishSetPrefab (params object[] args)
{
CLEffect effect = (CLEffect)(args [1]);
if (effect != null) {
ArrayList list = (ArrayList)(args [2]);
string name = list [0].ToString ();
Vector3 pos = (Vector3)(list [1]);
Transform parent = (Transform)(list [2]);
float willFinishTimePercent = (float)(list [3]);
object willFinishCallback = list [4];
object willFinishCallbackPara = list [5];
object finishCallback = list [6];
object finishCallbackPara = list [7];
bool returnAuto = (bool)(list [8]);
effect.show (pos, parent, willFinishTimePercent,
willFinishCallback, willFinishCallbackPara,
finishCallback, finishCallbackPara, returnAuto);
}
}
public static void onFinishSetPrefab2 (params object[] args)
{
// string effectName = args [0].ToString ();
CLEffect effect = (CLEffect)(args [1]);
if (effect != null) {
ArrayList list = (ArrayList)(args [2]);
string name = list [0].ToString ();
Vector3 pos = (Vector3)(list [1]);
Transform parent = (Transform)(list [2]);
float willFinishTimePercent = (float)(list [3]);
object willFinishCallback = list [4];
object willFinishCallbackPara = list [5];
object finishCallback = list [6];
object finishCallbackPara = list [7];
float delaySec = (float)(list [8]);
bool returnAuto = (bool)(list [9]);
CLMainBase.self.StartCoroutine (effect.playDelay (pos, parent, willFinishTimePercent,
willFinishCallback, willFinishCallbackPara,
finishCallback, finishCallbackPara, delaySec, returnAuto));
}
}
public void show (
Vector3 pos, Transform parent, float willFinishTimePercent,
object willFinishCallback, object willFinishCallbackPara,
object finishCallback, object finishCallbackPara, bool returnAuto = true)
{
this.willFinishTimePercent = willFinishTimePercent;
transform.parent = parent;
transform.position = pos;
transform.localScale = Vector3.one;
transform.localEulerAngles = Vector3.zero;
this.willFinishCallback = willFinishCallback;
this.willFinishCallbackPara = willFinishCallbackPara;
this.finishCallback = finishCallback;
this.finishCallbackPara = finishCallbackPara;
animationProc.callbackPara = finishCallbackPara;
this.returnAuto = returnAuto;
Callback cb = onFinish;
animationProc.onFinish = cb;
NGUITools.SetActive (gameObject, true);
if (willFinishTimePercent > 0.00001f) {
Invoke ("doWillfinishCallback", willFinishTimePercent * animationProc.timeOut);
}
}
void doWillfinishCallback ()
{
Utl.doCallback (willFinishCallback, this, willFinishCallbackPara);
}
public void onFinish (params object[] obj)
{
if (returnAuto || obj == null) {
CLEffectPool.returnObj (name, this);
NGUITools.SetActive (gameObject, false);
if (returnAuto) {
transform.parent = null;
}
}
Utl.doCallback (finishCallback, this, finishCallbackPara);
}
public void Start ()
{
#if UNITY_EDITOR
//因为是通过assetebundle加载的在真机上不需要处理只有在pc上需要重设置shader
// if (Application.isPlaying) {
// Utl.setBodyMatEdit (transform);
// }
#endif
}
ParticleSystem[] _particleSys;
public ParticleSystem[] particleSys {
get {
if (_particleSys == null) {
_particleSys = gameObject.GetComponentsInChildren<ParticleSystem> ();
}
return _particleSys;
}
}
Animator[] _animators;
public Animator[] animators {
get {
if (_animators == null) {
_animators = gameObject.GetComponentsInChildren<Animator> ();
}
return _animators;
}
}
Animation[] _animations;
public Animator[] animations {
get {
if (_animations == null) {
_animations = gameObject.GetComponentsInChildren<Animation> ();
}
return _animators;
}
}
// Hashtable particlesTimes = new Hashtable();
public void pause ()
{
if (particleSys != null && particleSys.Length > 0) {
for (int i = 0; i < particleSys.Length - 1; i++) {
particleSys [i].Pause ();
// particlesTimes[particleSys[i].GetInstanceID()] = particleSys[i].time;
}
}
if (animations != null && animations.Length > 0) {
for (int i = 0; i < animations.Length - 1; i++) {
animations [i].enabled = false;
}
}
if (animators != null && animators.Length > 0) {
for (int i = 0; i < animators.Length - 1; i++) {
animators [i].enabled = false;
}
}
}
public void regain ()
{
if (particleSys != null && particleSys.Length > 0) {
for (int i = 0; i < particleSys.Length - 1; i++) {
// particleSys[i].time = (float)(particlesTimes[particleSys[i].GetInstanceID()]);
// particleSys[i].Simulate((float)(particlesTimes[particleSys[i].GetInstanceID()]));
particleSys [i].Play ();
}
}
if (animations != null && animations.Length > 0) {
for (int i = 0; i < animations.Length - 1; i++) {
animations [i].enabled = true;
}
}
if (animators != null && animators.Length > 0) {
for (int i = 0; i < animators.Length - 1; i++) {
animators [i].enabled = true;
}
}
}
public void playSC (Vector3 pos, Transform parent, float willFinishTimePercent,
object willFinishCallback, object willFinishCallbackPara,
object finishCallback, object finishCallbackPara, float delaySec, bool returnAuto)
{
StartCoroutine (playDelay (pos, parent, willFinishTimePercent, willFinishCallback, willFinishCallbackPara, finishCallback, finishCallbackPara, delaySec, returnAuto));
}
}
}