//--------------------------------------------------------------------------------------------------------------------------------------------------- // // Copyright (C)2007 DarkWynter Studios. All rights reserved. // //--------------------------------------------------------------------------------------------------------------------------------------------------- // {Contact : darkwynter.com for licensing information //--------------------------------------------------------------------------------------------------------------------------------------------------- #define DEBUG_MODE namespace DarkWynter.App { using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Xml; using System.Windows.Forms; using System.Xml.Schema; public partial class LevelEditorControl : UserControl { List levelNodes = new List(); enum NodeListType { GameObjects, Events }; NodeListType nodeListType; OpenFileDialog fileDialog; public LevelEditorControl() { InitializeComponent(); this.Dock = DockStyle.Fill; // Prep file dialog fileDialog = new OpenFileDialog(); fileDialog.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop); fileDialog.RestoreDirectory = true; // Drag Drop GameObjects to Map this.listView_LevelIndex.MouseDown += new System.Windows.Forms.MouseEventHandler(DragDrop_MouseDown); Engine.DarkWynterEngine.onLevelChange += new DarkWynter.Engine.DarkWynterEngine.OnLevelChange(this.Load_OnLevelChange); } public void Load_OnLevelChange(EventArgs e) { // Console.Write("llll"); } private void colorSettingsToolStripMenuItem_Click(object sender, EventArgs e) { PropertyViewer.SelectedObject = DarkWynter.Shell.UCAD_Control.settings; } /// /// Load Level Index from file; Contains a link to all Levels in the Game. /// /// /// private void Load_Project(object sender, EventArgs e) { string levelXmlFileName = ""; fileDialog.Title = "Select Level Xml File"; fileDialog.Filter = "Level Description File (*.xml)|*.xml|All files (*.*)|*.*"; fileDialog.FilterIndex = 1; if (fileDialog.ShowDialog() == DialogResult.OK) { levelXmlFileName = fileDialog.FileName; } else { #if DEBUG_MODE levelXmlFileName = Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory).ToString();; levelXmlFileName += "\\Darkwynter\\POCs\\G2L\\__Content\\_xml\\LevelEdit\\_Levels.xml"; #else return; #endif } // Load Level Index Data try { // Open selected Level Index xml-file XmlDocument reader = new XmlDocument(); reader.Load(levelXmlFileName); // Clear levels; then add new levels to the data-structure levelNodes.Clear(); foreach (XmlNode xmlLevelNode in reader.ChildNodes) { // Check for a Level-Set definition if (xmlLevelNode.Name == "levels") { for (int count = 0; count < xmlLevelNode.ChildNodes.Count; count++) { XmlNode node = xmlLevelNode.ChildNodes[count]; // Check for a Level-Node definition if (node.Name == "level") { // Create Level and add to list levelNodes.Add(new LevelNode(node)); } } } } // Load the ListView UI-Control Load_LevelIndex(); } catch { System.Diagnostics.Debug.WriteLine("Error Loading Level-Index Xml file: " + levelXmlFileName); // throw new Exception("Error reading XML"); } } private void Load_LevelIndex() { // Load LevelNodes into ListView_LevelIndex this.listView_LevelIndex.Items.Clear(); for (int i = 0; i < levelNodes.Count; i++) { // Create a ListViewItem containing the Level Summary Info ListViewItem listViewItem_temp = new ListViewItem(new string[] { levelNodes[i].name, levelNodes[i].xmlFile, levelNodes[i].description }); // Display Level Summary Info by adding to listView_LevelIndex this.listView_LevelIndex.Items.AddRange(new System.Windows.Forms.ListViewItem[] { listViewItem_temp }); } } private void loadObjLibToolStripMenuItem_Click(object sender, EventArgs e) { // Load the selected Level's ObjectNodes into ListView this.listView_ObjectIndex.Items.Clear(); nodeListType = NodeListType.GameObjects; List names = DarkWynter.Engine.DarkWynterEngine.objectLibrary.objectNames; for (int i = 0; i < names.Count; i++) { // Create a ListViewItem containing the Level Summary Info // Add Item to ObjectIndex ListView this.listView_ObjectIndex.Items.Add(new ListViewItem(names[i])); } } private void loadEventsToolStripMenuItem_Click(object sender, EventArgs e) { // Load the selected Level's ObjectNodes into ListView this.listView_ObjectIndex.Items.Clear(); nodeListType = NodeListType.Events; this.listView_ObjectIndex.Items.Add(new ListViewItem(new string[] { DarkWynter.Engine.EventControl.GameEventHandler.CurrentGameConditions._trigger_ID.ToString(), "CurrentGameConditions"})); for (int eventIndex = 0; eventIndex < DarkWynter.Engine.EventControl.GameEventHandler.GameEvents.Count; eventIndex++) { // Create a ListViewItem containing the Level Summary Info // Add Item to ObjectIndex ListView this.listView_ObjectIndex.Items.Add( new ListViewItem(new string[] { DarkWynter.Engine.EventControl.GameEventHandler.GameEvents[eventIndex]._trigger_ID.ToString(), DarkWynter.Engine.EventControl.GameEventHandler.GameEvents[eventIndex]._typeID.ToString() })); DarkWynter.Engine.DarkWynterEngine.objectLibrary.gameEvents.AddRange(DarkWynter.Engine.EventControl.GameEventHandler.GameEvents); } } private void LevelIndex_SelectIndexChanged(object sender, EventArgs e) { ListView LevelIndex = sender as ListView; // Get Selected Level for (int l_Index = 0; l_Index < LevelIndex.Items.Count; l_Index++) { if (LevelIndex.Items[l_Index].Selected == true) { // Load the selected Level's ObjectNodes into ListView this.listView_ObjectIndex.Items.Clear(); for (int objectIndex = 0; objectIndex < levelNodes[l_Index].objectNodes.Count; objectIndex++) { // Create a ListViewItem containing the Level Summary Info // Add Item to ObjectIndex ListView this.listView_ObjectIndex.Items.Add( new ListViewItem(new string[] { levelNodes[l_Index].objectNodes[objectIndex].propertyNode.name, levelNodes[l_Index].objectNodes[objectIndex].propertyNode.type })); } return; } } } private void ObjectIndex_SelectIndexChanged(object sender, EventArgs e) { if (nodeListType == NodeListType.GameObjects) { for (int o_Index = 0; o_Index < listView_ObjectIndex.Items.Count; o_Index++) { if (listView_ObjectIndex.Items[o_Index].Selected) { // Display the Object's Properties PropertyViewer.SelectedObject = DarkWynter.Engine.DarkWynterEngine.objectLibrary.GetGameObject( listView_ObjectIndex.Items[o_Index].Text ); return; } } } if (nodeListType == NodeListType.Events) { for (int o_Index = 0; o_Index < listView_ObjectIndex.Items.Count; o_Index++) { if (listView_ObjectIndex.Items[o_Index].Selected) { // Display the Object's Properties PropertyViewer.SelectedObject = DarkWynter.Engine.EventControl.GameEventHandler.GameEvents[o_Index]; //DarkWynter.Engine.EventControl.GameEventHandler.GetEvent(int.Parse(listView_ObjectIndex.Items[o_Index].Text)); return; } } } } private void PropertyViewer_Click(object sender, EventArgs e) { } private void DragDrop_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { //this.listView_LevelIndex.DoDragDrop(this.waypoint.Image, DragDropEffects.All); } if (e.Button == MouseButtons.Right) { // this is where we needtodothe arrow change direction thing } } void DragDrop_Receive(object sender, DragEventArgs e) { //Bitmap bmp = (Bitmap)e.Data.GetData(DataFormats.Bitmap); ////Get graphics from the Image in the PictureBox1 which is the drop destination. //Graphics g = Graphics.FromImage(this.terrain.Image); //Point location = this.terrain.PointToClient(new Point(e.X, e.Y)); ////Draw the draged image onto the destinational image //g.DrawImage(bmp, location); ////Force the PictureBox to redraw himself //this.terrain.Invalidate(); } private void buttonSaveLibrary_Click(object sender, EventArgs e) { string LevelXml = DarkWynter.Engine.DarkWynterEngine.objectLibrary.ToXml(); System.IO.Stream myStream; SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "Xml Level File (*.xml)|*.xml|All files (*.*)|*.*"; saveFileDialog1.FilterIndex = 1; saveFileDialog1.RestoreDirectory = true; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { if ((myStream = saveFileDialog1.OpenFile()) != null) { //myStream.Write(LevelXml); // Code to write the stream goes here. myStream.Close(); } } //// CHECK AGAINST SCHEMA //XmlReaderSettings booksSettings = new XmlReaderSettings(); //booksSettings.Schemas.Add(null, "ValidationSchema_Level.xsd"); //booksSettings.ValidationType = ValidationType.Schema; //booksSettings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); //XmlReader books = XmlReader.Create("Medulla.xml", booksSettings); //XmlReader books = XmlReader.Create(LevelXml, booksSettings); //while (books.Read()) { } } private static void ValidationCallBack(object sender, ValidationEventArgs e) { Console.WriteLine("Validation Error: {0}", e.Message); } } }