/// <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> /// reads information from a particle file and registers to the list. /// </summary> /// <param name="fileName">particle file (.Particle)</param> /// <returns>particle information</returns> public ParticleSequenceInfo LoadParticleSequenceInfo(string fileName) { ParticleSequenceInfo newData = (ParticleSequenceInfo) FrameworkCore.ContentManager.Load <ParticleSequenceInfo>( fileName); particleInfoList.Add(newData); return(newData); }
/// <summary> /// Creates using particle information. /// </summary> /// <param name="info">the particle information</param> /// <param name="resourcePath">the particle file</param> public void Create(ref ParticleSequenceInfo info, string resourcePath) { this.sequenceInfo = info; this.resourcePath = resourcePath; // Add TimeSequence to child timeSequence = new TimeSequence(); AddChild(timeSequence); for (int i = 0; i < info.TimeSequencesInfo.Count; i++) { TimeSequenceInfo timeSequenceInfo = info.TimeSequencesInfo[i]; // Create a TimeSequenceData using TimeSequenceInfo TimeSequenceData timeSequenceData = new TimeSequenceData(timeSequenceInfo); // Create a particle using ParticleInfo and TextureSequence // in the TimeSequenceInfo Particle particle = new Particle(resourcePath, timeSequenceInfo.ParticleInfo, timeSequenceInfo.TextureSequence); // Set owner particle to the TimeSequenceData timeSequenceData.Owner = particle; // Add the particle to the TimeSequence's child timeSequence.AddChild(particle); // Add TimeSequenceData to the TimeSequence timeSequence.AddSequence(timeSequenceData); } Name = info.Name; // Particle off Stop(); }
/// <summary> /// creates instance particle by using the source particle. /// </summary> /// <param name="source">source particle</param> /// <returns>new instance particle</returns> public static ParticleSequence CreateInstance(ref ParticleSequence source) { ParticleSequenceInfo info = source.SequenceInfo; return(new ParticleSequence(ref info, source.ResourcePath)); }
/// <summary> /// Constructor. /// </summary> /// <param name="info">particle sequence information structure</param> /// <param name="resourceFolder">resource path</param> public ParticleSequence(ref ParticleSequenceInfo info, string resourceFolder) : base() { Create(ref info, resourceFolder); }