//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// Copyright (C)2007 DarkWynter Studios. All rights reserved.
//
//---------------------------------------------------------------------------------------------------------------------------------------------------
// {Contact : darkwynter.com for licensing information
//---------------------------------------------------------------------------------------------------------------------------------------------------
namespace DarkWynter.Engine.Init
{
#region Using Statements
using System;
using System.Xml;
using System.Diagnostics;
using System.Threading;
using System.Collections.Generic;
using System.IO;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Storage;
#endregion
using Audio;
using Globals;
using ObjectLib;
using Init;
using GameObjects;
using DarkWynter.Engine.EventControl.EventTypes;
using System.Reflection;
///
/// The base class used in the XML layer of the architecture.
/// XML loads several configuration files, parses their main structure, and stores the nodes in public variables that are accessed by the rest of the program.
///
public static class XML
{
///
/// Content check boolean. If content is loaded, set to true.
///
public static bool contentInstalled = true;
#region G2L Challenges
public static List ChallengeNodes;
public static void LoadQuestInfo(string questSettingsFilePath)
{
// Read the Quest File
try
{
ChallengeNodes = new List();
XmlDocument reader = new XmlDocument();
reader.Load(questSettingsFilePath);
// Get all outer nodes (incl xml version info and level)
XmlNodeList allNodes = reader.ChildNodes;
foreach (XmlNode questNode in allNodes)
{
// If level definition
if (questNode.Name == "QuestSet")
{
foreach (XmlNode problemSetNode in questNode)
{
// Post problems for GameForm to access
if (problemSetNode.Name == "ProblemSet")
{
ChallengeNodes.Add(problemSetNode);
}
}
}
}
}
catch
{
XML.contentInstalled = false;
System.Diagnostics.Debug.WriteLine("Error reading xml");
throw new Exception("Error reading XML");
}
}
#endregion
#region User Preferences
///
/// Loads xml System settings from SystemSettings.xml.
///
public static void LoadUserPreferences(string userSettingsFilePath)
{
try
{
// Load physics, music, and fog
XmlDocument reader = new XmlDocument();
reader.Load(userSettingsFilePath);
XmlNodeList allNodes = reader.ChildNodes;
foreach (XmlNode settingsNode in allNodes)
{
if (settingsNode.Name == "SystemSettings")
{
XmlNodeList settingsNodes = settingsNode.ChildNodes;
foreach (XmlNode node in settingsNodes)
{
if (node.Name == "EnableShadowMap1")
{
string value = node.Attributes["value"].Value;
if (value == "Yes")
{
Statics_Engine.SystemSettings.enableShadowMap1 = true;
}
else
{
Statics_Engine.SystemSettings.enableShadowMap1 = false;
}
}
else if (node.Name == "EnableShadowMap2")
{
string value = node.Attributes["value"].Value;
if (value == "Yes")
{
Statics_Engine.SystemSettings.enableShadowMap2 = true;
}
else
{
Statics_Engine.SystemSettings.enableShadowMap2 = false;
}
}
else if (node.Name == "EnableTerrainBumpMapping")
{
string value = node.Attributes["value"].Value;
if (value == "Yes")
{
Statics_Engine.SystemSettings.enableTerrainBumpMapping = true;
}
else
{
Statics_Engine.SystemSettings.enableTerrainBumpMapping = false;
}
}
else if (node.Name == "EnableTerrainMultiTexturing")
{
string value = node.Attributes["value"].Value;
if (value == "Yes")
{
Statics_Engine.SystemSettings.enableTerrainMultiTexturing = true;
}
else
{
Statics_Engine.SystemSettings.enableTerrainMultiTexturing = false;
}
}
else if (node.Name == "NumberOfTerrainTextures")
{
int value = int.Parse(node.Attributes["value"].Value);
if (value == 4)
{
Statics_Engine.SystemSettings.numberOfTerrainTextures = 4;
}
else if (value == 3)
{
Statics_Engine.SystemSettings.numberOfTerrainTextures = 3;
}
else
{
Statics_Engine.SystemSettings.numberOfTerrainTextures = 2;
}
}
else if (node.Name == "SingleLightSource")
{
string value = node.Attributes["value"].Value;
if (value == "Yes")
{
Statics_Engine.SystemSettings.singleLightSource = true;
}
else
{
Statics_Engine.SystemSettings.singleLightSource = false;
}
}
else if (node.Name == "MusicEnabled")
{
string value = node.Attributes["value"].Value;
if (value == "Yes")
{
Statics_Engine.SystemSettings.music = true;
}
else
{
Statics_Engine.SystemSettings.music = false;
}
}
else if (node.Name == "SoundEffects")
{
string value = node.Attributes["value"].Value;
if (value == "Yes")
{
Statics_Engine.SystemSettings.soundFX = true;
}
else
{
Statics_Engine.SystemSettings.soundFX = false;
}
}
}
}
}
}
catch
{
XML.contentInstalled = false;
System.Diagnostics.Debug.WriteLine("Error reading xml");
//throw new Exception("Error reading XML");
}
}
///
/// Saves xml System settings in SystemSettings.xml.
///
public static void SaveUserPreferences()
{
XmlTextWriter settingsFile = new XmlTextWriter(
"_xml/UserSettings/UserSettings.xml", null);
settingsFile.Formatting = Formatting.Indented;
settingsFile.WriteStartDocument();
settingsFile.WriteStartElement("SystemSettings");
settingsFile.WriteStartElement("EnableShadowMap1");
if (Statics_Engine.SystemSettings.enableShadowMap1)
{
settingsFile.WriteAttributeString("value", "Yes");
}
else
{
settingsFile.WriteAttributeString("value", "No");
}
settingsFile.WriteEndElement();
settingsFile.WriteStartElement("EnableShadowMap2");
if (Statics_Engine.SystemSettings.enableShadowMap2)
{
settingsFile.WriteAttributeString("value", "Yes");
}
else
{
settingsFile.WriteAttributeString("value", "No");
}
settingsFile.WriteEndElement();
settingsFile.WriteStartElement("EnableTerrainBumpMapping");
if (Statics_Engine.SystemSettings.enableTerrainBumpMapping)
{
settingsFile.WriteAttributeString("value", "Yes");
}
else
{
settingsFile.WriteAttributeString("value", "No");
}
settingsFile.WriteEndElement();
settingsFile.WriteStartElement("EnableTerrainMultiTexturing");
if (Statics_Engine.SystemSettings.enableTerrainMultiTexturing)
{
settingsFile.WriteAttributeString("value", "Yes");
}
else
{
settingsFile.WriteAttributeString("value", "No");
}
settingsFile.WriteEndElement();
settingsFile.WriteStartElement("NumberOfTerrainTextures");
if (Statics_Engine.SystemSettings.numberOfTerrainTextures == 4)
{
settingsFile.WriteAttributeString("value", "4");
}
else if (Statics_Engine.SystemSettings.numberOfTerrainTextures == 3)
{
settingsFile.WriteAttributeString("value", "3");
}
else
{
settingsFile.WriteAttributeString("value", "2");
}
settingsFile.WriteEndElement();
settingsFile.WriteStartElement("SingleLightSource");
if (Statics_Engine.SystemSettings.singleLightSource)
{
settingsFile.WriteAttributeString("value", "Yes");
}
else
{
settingsFile.WriteAttributeString("value", "No");
}
settingsFile.WriteEndElement();
settingsFile.WriteStartElement("MusicEnabled");
if (Statics_Engine.SystemSettings.music)
{
settingsFile.WriteAttributeString("value", "Yes");
}
else
{
settingsFile.WriteAttributeString("value", "No");
}
settingsFile.WriteEndElement();
settingsFile.WriteStartElement("SoundEffects");
if (Statics_Engine.SystemSettings.soundFX)
{
settingsFile.WriteAttributeString("value", "Yes");
}
else
{
settingsFile.WriteAttributeString("value", "No");
}
settingsFile.WriteEndElement();
settingsFile.WriteEndElement();
settingsFile.WriteEndDocument();
settingsFile.Flush();
settingsFile.Close();
}
#endregion
#region Player Data
///
/// Contains the name, modelPath, texturePath, bumpTexturePath,
/// and scale information for a character.
///
public struct ModelInfo
{
///
/// User friendly name of character.
///
public string name;
///
/// Path to model file.
///
public string modelPath;
///
/// Path to texture file.
///
public string texPath;
///
/// Path to bump texture file.
///
public string bumpPath;
///
/// Model scale.
///
public Vector3 scale;
///
/// Model animated or not
///
public bool animated;
}
///
/// List of instantiations of the PlayerInfo struct, contained in PlayerModels.xml.
///
public static List playerInfo;
///
/// Loads availible Players from PlayerInfo.xml and stores them in the PlayerInfo list.
///
public static void LoadPlayerIndex()
{
return;
/// This is wrong and hardcoded - need to go back and make it so that it uses the level that it is on version of the
/// characters on the board - bad commentary I know
/// JASON!!!! HELP PLEASE ;-)
// UPDATE: PlayerInfo files are no longer being used.
// Evaluate new potentials for pulling wardrobe in...
string playerXMLFile = "_xml/LevelSettings/" + Statics_Engine.levelInfo[Statics_Engine.levelIndex].name + ".xml";
List modelNames = new List();
playerInfo = new List();
int index = 0;
//setup the player scrolling
//GameMenuImageScroller scroller = (GameMenuImageScroller) menuSystem.playerSetup.GetMenu().GetMenuElement(0);
//scroller.Clear();
try
{
// Load physics, music, and fog
XmlDocument reader = new XmlDocument();
reader.Load(playerXMLFile);
XmlNodeList allNodes = reader.ChildNodes;
foreach (XmlNode playerNode in allNodes)
{
if (playerNode.Name == "CharacterModels")
{
XmlNodeList playerNodes = playerNode.ChildNodes;
foreach (XmlNode node in playerNodes)
{
if (node.Name == "Model")
{
ModelInfo player = new ModelInfo();
player.name = node.Attributes["name"].Value;
modelNames.Add(player.name);
player.modelPath = node.Attributes["model"].Value;
player.texPath = node.Attributes["texture"].Value;
player.bumpPath = node.Attributes["bumpTexture"].Value;
player.scale = new Vector3(float.Parse(node.Attributes["maxScale"].Value));
string value = node.Attributes["animated"].Value;
if (value == "Yes")
{
player.animated = true;
}
else
{
player.animated = false;
}
playerInfo.Add(player);
index++;
//scroller.AddNew(player.name,
// Statics.SystemSettings.content.Load("Content/_textures/patient" + index),
// Statics.SystemSettings.content.Load("Content/_textures/patient" + index));
}
}
}
}
}
catch
{
System.Diagnostics.Debug.WriteLine("Error reading xml");
throw new Exception("Error reading XML");
}
}
#endregion
}
}