Example #1
0
		public void Add(SoundBlockData soundBlockData)
		{
			soundBlocks.Add(soundBlockData);
		}
Example #2
0
		public void Load(string filename)
		{
			XmlDocument xmldoc = new XmlDocument();
			
			xmldoc.Load(filename);
			Clear();
			XmlNodeList xmlSoundBlocks = xmldoc.SelectNodes("descendant::SoundBlocks/SoundBlock");
			foreach(XmlNode xmlSB in xmlSoundBlocks) {
				SoundBlock srSoundBlock;
				string srClass = "",srName = "";
				int srX,srY;
				foreach(XmlNode xmlAttr in xmlSB.Attributes) {
					if (xmlAttr.Name.Equals("class")) {
					    srClass = xmlAttr.Value;
					}
					if (xmlAttr.Name.Equals("name")) {
					    srName = xmlAttr.Value;
					}
				}
				
				//HACK TO LOAD pre-v.0.6 files
				if ((srClass == "H3.Sound.RandomMidiRender")
				   || (srClass == "H3.Sound.MidiInRender")
				   || (srClass == "H3.Sound.MidiFilterRender")
				   || (srClass == "H3.Sound.NullMidiRender")) {
					string oldClass = srClass;
					srClass = srClass.Replace("H3.Sound.","H3.Sound.Midi.MidiRender.");
					Logger.Instance.Log("pre v0.6 class "+oldClass+" converted to "+srClass);
				} else if (srClass.StartsWith("H3.Sound.") &&
				    (!srClass.StartsWith("H3.Sound.Midi.MidiRender.")) &&
				    (!srClass.StartsWith("H3.Sound.Wave.SoundRender."))) {
				    string oldClass = srClass;
				 	srClass = srClass.Replace("H3.Sound.","H3.Sound.Wave.SoundRender.");
				 	Logger.Instance.Log("pre v0.6 class "+oldClass+" converted to "+srClass);
				}
				//HACK END
				    
				srX = int.Parse(xmlSB.SelectSingleNode("descendant::Location/@x").Value);
				srY = int.Parse(xmlSB.SelectSingleNode("descendant::Location/@y").Value);
				try {
					srSoundBlock = (SoundBlock) System.Activator.CreateInstance(null,srClass).Unwrap();
				} catch (Exception) {
					Logger.Instance.Log("ERROR: Unknown class: "+srClass);
					continue;
				}
				srSoundBlock.Name = srName;
				Type classType = srSoundBlock.GetType();
				PropertyInfo[] pInfos = classType.GetProperties( );
				XmlNode xmlSettings = xmlSB.SelectSingleNode("Settings");
				if (xmlSettings != null)
					foreach(XmlNode xmlProperty in xmlSettings.ChildNodes) {
						PropertyInfo foundPInfo = null;
						foreach(PropertyInfo pInfo in pInfos)
					    {
							if (pInfo.Name.Equals(xmlProperty.Name)) {
								foundPInfo = pInfo;
								//Logger.Instance.Log("Setting: "+pInfo);
					    		break;
							}
					    }
						if (foundPInfo == null) {
							Logger.Instance.Log("WARNING: \""+xmlProperty.Name+"\" not found!");
						} else {
							object[] param = new object[1];
					        Type propertyType = foundPInfo.GetValue(srSoundBlock,new object[0]).GetType();
					        TypeConverter tc = TypeDescriptor.GetConverter(propertyType);
					        if (tc.CanConvertFrom(typeof(string))) {
					        	param[0] = tc.ConvertFromInvariantString(xmlProperty.InnerXml);
					        }
					        else {
					        	Logger.Instance.Log("ERROR: can't deserialize \""+xmlProperty.Name+"\"");
					        }
					        MethodInfo method = foundPInfo.GetSetMethod();
					        if (method != null) method.Invoke(srSoundBlock,param);
					        else Logger.Instance.Log("loading error: can't deserialize property "+xmlProperty.Name);
						}
					}
				SoundBlockData sbData = new SoundBlockData(srSoundBlock,srX,srY);
				XmlNode xmlSoundInputs = xmlSB.SelectSingleNode("SoundInputs");
				if (xmlSoundInputs != null)
					foreach(XmlNode xmlSoundInput in xmlSoundInputs.ChildNodes) {
						int id = int.Parse(xmlSoundInput.SelectSingleNode("@id").Value);
					    string val = xmlSoundInput.SelectSingleNode("@name").Value;
					    //Console.WriteLine("SoundInput id: "+id+" name: "+val);
					    sbData.SoundInputs.Insert(id,val);
					}
				XmlNode xmlMidiInputs = xmlSB.SelectSingleNode("MidiInputs");
				if (xmlMidiInputs != null)
					foreach(XmlNode xmlMidiInput in xmlMidiInputs.ChildNodes) {
						int id = int.Parse(xmlMidiInput.SelectSingleNode("@id").Value);
					    string val = xmlMidiInput.SelectSingleNode("@name").Value;
					    //Console.WriteLine("MidiInput id: "+id+" name: "+val);
						sbData.MidiInputs.Insert(id,val);
					}
				
				Add(sbData);
			}
		}
Example #3
0
    public void SaveScenario()
    {
        ScenarioSave scenario = new ScenarioSave();

        scenario.resources = new ResourceData[AppManager.Instance.ResourcesManager.Count()];
        for (int i = 0; i < scenario.resources.Length; ++i)
        {
            ResourceData resourceData = new ResourceData();
            resourceData.id       = AppManager.Instance.ResourcesManager.Resources[i].Id;
            scenario.resources[i] = resourceData;
        }

        scenario.soundblocks = new SoundBlockData[blocks.Count];
        int linkCount = 0;

        for (int i = 0; i < blocks.Count; i++)
        {
            SoundBlockData blockData = new SoundBlockData();
            SoundBlock     block     = blocks[i];
            blockData.blockId = block.soundblockId;
            if (block.source.clip != null)
            {
                blockData.clipId = AppManager.Instance.ResourcesManager.GetResource(block.source.clip.name).Id;
            }
            else
            {
                blockData.clipId = -1;
            }

            if (firstBlock == block)
            {
                blockData.isFirstBlock = true;
            }

            blockData.isLooping = block.source.loop;
            blockData.position  = block.transform.localPosition;

            if (block.link != null)
            {
                linkCount++;
            }

            scenario.soundblocks[i] = blockData;
        }

        scenario.links = new LinkData[linkCount];
        int nextLinkIndex = 0;

        for (int i = 0; i < blocks.Count; i++)
        {
            if (blocks[i].link != null)
            {
                LinkData link = new LinkData();
                link.fromSoundblock = blocks[i].soundblockId;
                link.toSoundblock   = blocks[i].nextBlock.soundblockId;
                link.linkType       = blocks[i].link.linkType;
                link.isActive       = blocks[i].link.IsActive;

                scenario.links[nextLinkIndex] = link;
                nextLinkIndex++;
            }
        }

        scenario.soundBlockNextId = nextID;
        scenario.resourceNextId   = AppManager.Instance.ResourcesManager.nextResourceID;

        XmlSerializer writer = new XmlSerializer(scenario.GetType());

        using (FileStream stream = File.Create("structure"))
        {
            writer.Serialize(stream, scenario);
            stream.Close();
        }

        ZipFile zip = ZipFile.Read(scenarioUrl);

        zip.RemoveEntry("structure");
        zip.AddFile("structure");
        zip.Save(scenarioUrl);

        File.Delete("structure");

        Debug.Log("Saved Project " + scenarioUrl);
    }