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