//--------------------------------------------------------------------------------------------------------------------------------------------------- // // Copyright (C)2007 DarkWynter Studios. All rights reserved. // //--------------------------------------------------------------------------------------------------------------------------------------------------- // {Contact : darkwynter.com for licensing information //--------------------------------------------------------------------------------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; namespace DarkWynter.App { public partial class ContentLoader : Panel { // File Location Handlers OpenFileDialog fdlg = new OpenFileDialog(); SaveFileDialog sfdl = new SaveFileDialog(); // Location Map Panel //LevelEditorPanel levelEditorPanel; // Template Object Panels List panelTemplate; int currentTemplatePanel; // ObjectLibrary Panels List panelContent; int currentContentPanel; // Object Instance Panels List panelInstance; int currentInstancePanel; // Location and size of levelEditorPanel and contentPanels public static Point location = new Point(285, 15); public static Size size = new Size(700, 700); public ContentLoader() { InitializeComponent(); this.Dock = DockStyle.Fill; //this.MinimizeBox = false; //this.MaximizeBox = false; //this.FormBorderStyle = FormBorderStyle.Fixed3D; panelTemplate = new List(); panelContent = new List(); panelInstance = new List(); LoadTemplate(""); // Init the locationMap //levelEditorPanel = new LevelEditorPanel(); //this.Controls.Add(levelEditorPanel); } private void ClearPropertiesPanel(object sender, EventArgs e) { this.Controls.Clear(); this.Controls.Add(this.panelProjectViews); this.Controls.Add(this.panelTemplates); this.Controls.Add(this.panelSceneLibrary); this.Controls.Add(this.panelInstances); } #region Views (Xml and Map) private void HeightMapButton_Click(object sender, EventArgs e) { //ClearPropertiesPanel(); if ((currentContentPanel < panelContent.Count) && (currentContentPanel != -1)) { this.Controls.Add(panelContent[currentContentPanel]); } } private void LocationMapButton_Click(object sender, EventArgs e) { //ClearPropertiesPanel(); //this.Controls.Add(levelEditorPanel.panel); } private void PropertiesButton_Click(object sender, EventArgs e) { //ClearPropertiesPanel(); if ((currentContentPanel < panelContent.Count) && (currentContentPanel != -1)) { this.Controls.Add(panelContent[currentContentPanel]); } } private void RunGameButton_Click(object sender, EventArgs e) { //ClearPropertiesPanel(); try { System.Diagnostics.Process.Start(@"DarkWynterGame.exe"); } catch { throw new Exception("File not found"); } } #endregion #region Load, Save private void LoadTemplate(string templateName) { try { // Load physics, music, and fog XmlDocument reader = new XmlDocument(); reader.Load("__Content/_xml/_xmlTemplates/template.xml"); XmlNodeList allNodes = reader.ChildNodes; foreach (XmlNode settingsNode in allNodes) { if (settingsNode.Name == "level") { XmlNodeList settingsNodes = settingsNode.ChildNodes; foreach (XmlNode node in settingsNodes) { if (node.Name != "#comment") { // Process matching node, or all nodes if "" if (templateName == node.Name || templateName == "") { this.listBoxTemplates.Items.Add(node.Name); this.panelTemplate.Add(new ContentPanel(node, location, size)); } } } } } } catch { System.Diagnostics.Debug.WriteLine("Error reading: " + templateName); //throw new Exception("Error reading XML"); } } private void SaveHeightMap_Click(object sender, EventArgs e) { //this.levelEditorPanel.SaveHeightMap(); } #endregion #region Template Objects Panel private void listBoxTemplateObjects_SelectedIndexChanged(object sender, EventArgs e) { //Load panel selected by user in ListBox currentTemplatePanel = this.listBoxTemplates.SelectedIndex; if (currentTemplatePanel != -1) { // Assumes ListBox and contentPanels use same indexing //ClearPropertiesPanel(); this.Controls.Add(this.panelTemplate[currentTemplatePanel]); } } private void buttonAddToLibrary_Click(object sender, EventArgs e) { currentTemplatePanel = this.listBoxTemplates.SelectedIndex; if (currentContentPanel != -1) { // Clone currently selected Template ContentPanel panel = panelTemplate[currentTemplatePanel].Clone(); // Add to the Content panel list this.panelContent.Add(panel); this.listBoxSceneLibrary.Items.Add(panel.panelName); // Show new panel //ClearPropertiesPanel(); this.Controls.Add(panelContent[panelContent.Count-1]); } } #endregion #region ObjectLibrary Panel private void ObjectLibraryLoad_Click(object sender, EventArgs e) { fdlg.Title = "DarkWynter - Open"; //fdlg.InitialDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory); fdlg.InitialDirectory = "$(ProjectDir)"; fdlg.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*"; fdlg.FilterIndex = 1; fdlg.RestoreDirectory = true; string fileName = ""; if (fdlg.ShowDialog() == DialogResult.OK) { fileName = fdlg.FileName; // Clear Lists panelContent = new List(); this.listBoxSceneLibrary.Items.Clear(); try { // Load physics, music, and fog XmlDocument reader = new XmlDocument(); reader.Load(fileName); //reader.Load("_xml/LevelEdit/desert.xml"); XmlNodeList allNodes = reader.ChildNodes; foreach (XmlNode settingsNode in allNodes) { if (settingsNode.Name == "level") { XmlNodeList settingsNodes = settingsNode.ChildNodes; foreach (XmlNode node in settingsNodes) { if (node.Name != "#comment") { this.listBoxSceneLibrary.Items.Add(node.Name); panelContent.Add(new ContentPanel(node, location, size)); } } } } } catch { System.Diagnostics.Debug.WriteLine("Error reading xml"); throw new Exception("Error reading XML"); } } } private void ObjectLibrarySave_Click(object sender, EventArgs e) { sfdl.Title = "DarkWynter - Save"; sfdl.InitialDirectory = "$(ProjectDir)"; sfdl.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*"; sfdl.FilterIndex = 1; sfdl.RestoreDirectory = true; string fileName = ""; if (sfdl.ShowDialog() == DialogResult.OK) { fileName = sfdl.FileName; XmlTextWriter settingsFile = new XmlTextWriter(fileName, null); settingsFile.Formatting = Formatting.Indented; settingsFile.WriteStartDocument(); settingsFile.WriteStartElement("level"); settingsFile.WriteAttributeString("name", "TestLevel"); for (int i = 0; i < panelContent.Count; i++) { panelContent[i].ToXml(settingsFile); } settingsFile.WriteEndElement(); settingsFile.WriteEndDocument(); settingsFile.Flush(); settingsFile.Close(); } } private void ObjectLibrary_SelectedIndexChanged(object sender, EventArgs e) { //Load panel selected by user in ListBox currentContentPanel = this.listBoxSceneLibrary.SelectedIndex; if (currentContentPanel != -1) { // Assumes ListBox and contentPanels use same indexing //ClearPropertiesPanel(); this.Controls.Add(panelContent[currentContentPanel]); } } private void ObjectLibraryDelete_Click(object sender, EventArgs e) { int selectedIndex = this.listBoxSceneLibrary.SelectedIndex; this.listBoxSceneLibrary.Items.RemoveAt(selectedIndex); panelContent.RemoveAt(selectedIndex); } private void ObjectLibraryClone_Click(object sender, EventArgs e) { int selectedIndex = this.listBoxSceneLibrary.SelectedIndex; if (selectedIndex != -1) { ContentPanel clonePanel = this.panelContent[selectedIndex].Clone(); panelContent.Add(clonePanel); this.listBoxSceneLibrary.Items.Add(clonePanel.panelName); } } private void buttonAddInstance_Click(object sender, EventArgs e) { // Bring up LocationMap panel. // Set color used for this object. // Add an instanceNode to the instanced list } #endregion } }