//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// 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
}
}