using UnityEngine; using System.Collections; using System.Collections.Generic; public class ParticleEffectsLibrary : MonoBehaviour { public static ParticleEffectsLibrary GlobalAccess; void Awake () { GlobalAccess = this; currentActivePEList = new List (); TotalEffects = ParticleEffectPrefabs.Length; CurrentParticleEffectNum = 1; // Warn About Lengths of Arrays not matching if (ParticleEffectSpawnOffsets.Length != TotalEffects) { Debug.LogError ("ParticleEffectsLibrary-ParticleEffectSpawnOffset: Not all arrays match length, double check counts."); } if (ParticleEffectPrefabs.Length != TotalEffects) { Debug.LogError ("ParticleEffectsLibrary-ParticleEffectPrefabs: Not all arrays match length, double check counts."); } // Setup Starting PE Name String effectNameString = ParticleEffectPrefabs [CurrentParticleEffectIndex].name + " (" + CurrentParticleEffectNum.ToString() + " of " + TotalEffects.ToString() + ")"; } // Stores total number of effects in arrays - NOTE: All Arrays must match length. public int TotalEffects = 0; public int CurrentParticleEffectIndex = 0; public int CurrentParticleEffectNum = 0; // public string[] ParticleEffectDisplayNames; public Vector3[] ParticleEffectSpawnOffsets; // How long until Particle Effect is Destroyed - 0 = never public float[] ParticleEffectLifetimes; public GameObject[] ParticleEffectPrefabs; // Storing for deleting if looping particle effect #pragma warning disable 414 private string effectNameString = ""; #pragma warning disable 414 private List currentActivePEList; void Start () { } public string GetCurrentPENameString() { return ParticleEffectPrefabs [CurrentParticleEffectIndex].name + " (" + CurrentParticleEffectNum.ToString() + " of " + TotalEffects.ToString() + ")"; } public void PreviousParticleEffect() { // Destroy Looping Particle Effects if (ParticleEffectLifetimes [CurrentParticleEffectIndex] == 0) { if (currentActivePEList.Count > 0) { for (int i = 0; i < currentActivePEList.Count; i++) { if (currentActivePEList [i] != null) { Destroy (currentActivePEList [i].gameObject); } } currentActivePEList.Clear (); } } // Select Previous Particle Effect if (CurrentParticleEffectIndex > 0) { CurrentParticleEffectIndex -= 1; } else { CurrentParticleEffectIndex = TotalEffects - 1; } CurrentParticleEffectNum = CurrentParticleEffectIndex + 1; // Update PE Name String effectNameString = ParticleEffectPrefabs [CurrentParticleEffectIndex].name + " (" + CurrentParticleEffectNum.ToString() + " of " + TotalEffects.ToString() + ")"; } public void NextParticleEffect() { // Destroy Looping Particle Effects if (ParticleEffectLifetimes [CurrentParticleEffectIndex] == 0) { if (currentActivePEList.Count > 0) { for (int i = 0; i < currentActivePEList.Count; i++) { if (currentActivePEList [i] != null) { Destroy (currentActivePEList [i].gameObject); } } currentActivePEList.Clear (); } } // Select Next Particle Effect if (CurrentParticleEffectIndex < TotalEffects - 1) { CurrentParticleEffectIndex += 1; } else { CurrentParticleEffectIndex = 0; } CurrentParticleEffectNum = CurrentParticleEffectIndex + 1; // Update PE Name String effectNameString = ParticleEffectPrefabs [CurrentParticleEffectIndex].name + " (" + CurrentParticleEffectNum.ToString() + " of " + TotalEffects.ToString() + ")"; } private Vector3 spawnPosition = Vector3.zero; public void SpawnParticleEffect(Vector3 positionInWorldToSpawn) { // Spawn Currently Selected Particle Effect spawnPosition = positionInWorldToSpawn + ParticleEffectSpawnOffsets[CurrentParticleEffectIndex]; GameObject newParticleEffect = GameObject.Instantiate(ParticleEffectPrefabs[CurrentParticleEffectIndex], spawnPosition, ParticleEffectPrefabs[CurrentParticleEffectIndex].transform.rotation) as GameObject; newParticleEffect.name = "PE_" + ParticleEffectPrefabs[CurrentParticleEffectIndex]; // Store Looping Particle Effects Systems if (ParticleEffectLifetimes [CurrentParticleEffectIndex] == 0) { currentActivePEList.Add (newParticleEffect.transform); } currentActivePEList.Add(newParticleEffect.transform); // Destroy Particle Effect After Lifetime expired if (ParticleEffectLifetimes [CurrentParticleEffectIndex] != 0) { Destroy(newParticleEffect, ParticleEffectLifetimes[CurrentParticleEffectIndex]); } } }