Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }