/// <summary> /// Adds a new particle to the storage /// </summary> /// <param name="entryName">particle name in the game</param> /// <param name="particleFile">particle file (.Particle)</param> /// <param name="maxCount">instance count</param> /// <param name="sceneParent">parent scene node</param> /// <returns>an index of new particle</returns> public int AddParticle(string entryName, string particleFile, int maxCount, NodeBase sceneParent) { if (particleOn == false) { return(-1); } ParticleStorage storage = null; ParticleSequenceInfo particleInfo = null; // checks a registerd particle. int index = FindParticleIndexByName(entryName); if (index != -1) { storage = particleSequencesList[index]; } else { storage = new ParticleStorage(); storage.entryName = entryName; particleSequencesList.Add(storage); } // makes a resource path. string resourcePath = Path.GetDirectoryName(particleFile); particleInfo = FindParticleInfo(particleFile); if (particleInfo == null) { particleInfo = LoadParticleSequenceInfo(particleFile); } if (particleInfo == null) { throw new ArgumentException( "failed to load particle : " + particleFile); } ParticleSequence source = new ParticleSequence(ref particleInfo, resourcePath); // makes and stores a particle instance. for (int i = 0; i < maxCount; i++) { ParticleSequence instance = ParticleSequence.CreateInstance(ref source); instance.Name = entryName; storage.list.Add(instance); // adds particle to render scene. sceneParent.AddChild(instance); } return(particleSequencesList.IndexOf(storage)); }
/// <summary> /// searches the particle index with the registered particle name. /// </summary> /// <param name="entryName">particle name</param> /// <returns>an index of particle in the list</returns> public int FindParticleIndexByName(string entryName) { for (int i = 0; i < particleSequencesList.Count; i++) { ParticleStorage storage = particleSequencesList[i]; if (storage.entryName == entryName) { return(particleSequencesList.IndexOf(storage)); } } return(-1); }
/// <summary> /// searches for the particle (instance) whose activity has ended /// or is yet to start. /// </summary> /// <param name="storage">particle storage</param> /// <returns></returns> protected ParticleSequence FindFreeParticle(ParticleStorage storage) { if (particleOn == false) { return(null); } for (int i = 0; i < storage.list.Count; i++) { if (storage.list[i].IsPlaying == false) { return(storage.list[i]); } } return(null); }