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