From 11b2e73f353fa217ca72b566a91bcb68790b7fed Mon Sep 17 00:00:00 2001 From: Scionwest_cp Date: Sat, 10 Mar 2012 19:15:43 -0800 Subject: [PATCH] Provided support for changing the location of the projects save data root. --- .../WinPC_Engine/Core/ObjectCollection.cs | 2 +- MudEngine/WinPC_Engine/DAL/DataPaths.cs | 57 ++++++++++++++++--- MudEngine/WinPC_Engine/DAL/XMLData.cs | 6 ++ MudEngine/WinPC_Engine/Game/StandardGame.cs | 3 +- MudEngine/WinPC_Engine/Scripting/CSharp.cs | 5 ++ 5 files changed, 62 insertions(+), 11 deletions(-) diff --git a/MudEngine/WinPC_Engine/Core/ObjectCollection.cs b/MudEngine/WinPC_Engine/Core/ObjectCollection.cs index 003be17..ff1cffe 100644 --- a/MudEngine/WinPC_Engine/Core/ObjectCollection.cs +++ b/MudEngine/WinPC_Engine/Core/ObjectCollection.cs @@ -15,7 +15,7 @@ namespace MudEngine.Core #region Public Properties public Boolean IsReadOnly { - get { return this.isReadOnly; } + get { return this.isReadOnly; } //TODO: Rename to ReadOnly and _ReadOnly } #endregion diff --git a/MudEngine/WinPC_Engine/DAL/DataPaths.cs b/MudEngine/WinPC_Engine/DAL/DataPaths.cs index 545957f..6145087 100644 --- a/MudEngine/WinPC_Engine/DAL/DataPaths.cs +++ b/MudEngine/WinPC_Engine/DAL/DataPaths.cs @@ -24,15 +24,9 @@ namespace MudEngine.DAL { public DataPaths() { - String path = Assembly.GetExecutingAssembly().Location; - String assemblyFile = Path.GetFileName(path); - this._InstallRoot = path.Substring(0, path.Length - assemblyFile.Length); + this._InstallRoot = this.GetInstallPath(); - this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Characters"), DataTypes.Characters); - this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Environments"), DataTypes.Environments); - this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Equipment"), DataTypes.Equipment); - this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Players"), DataTypes.Players); - this.SetAbsolutePath(Path.Combine(this._InstallRoot, "GameScripts"), DataTypes.Scripts); + this.SetupPaths(); this.SetExtension(DataTypes.Characters, ".character"); this.SetExtension(DataTypes.Environments, ".environment"); @@ -41,6 +35,22 @@ namespace MudEngine.DAL this.SetExtension(DataTypes.Scripts, ".cs"); } + public String GetInstallPath() + { + String path = Assembly.GetExecutingAssembly().Location; + String assemblyFile = Path.GetFileName(path); + return path.Substring(0, path.Length - assemblyFile.Length); + } + + private void SetupPaths() + { + this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Characters"), DataTypes.Characters); + this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Environments"), DataTypes.Environments); + this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Equipment"), DataTypes.Equipment); + this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Players"), DataTypes.Players); + this.SetAbsolutePath(Path.Combine(this._InstallRoot, "GameScripts"), DataTypes.Scripts); + } + public void SetAbsolutePath(String path, DataTypes objectType) { if (!path.EndsWith(@"\")) @@ -63,11 +73,42 @@ namespace MudEngine.DAL case DataTypes.Scripts: this._Scripts = path; break; + case DataTypes.Root: + this._InstallRoot = path; + this.SetupPaths(); //Re-Setup all the paths since the root has changed. + break; } } public void SetRelativePath(String path, DataTypes objectType) { + if (!path.EndsWith(@"\")) + path = path.Insert(path.Length, @"\"); + + String correctedPath = Path.Combine(this._InstallRoot, path); + + switch (objectType) + { + case DataTypes.Characters: + this._Characters = correctedPath; + break; + case DataTypes.Environments: + this._Environments = correctedPath; + break; + case DataTypes.Equipment: + this._Equipment = correctedPath; + break; + case DataTypes.Players: + this._Players = correctedPath; + break; + case DataTypes.Scripts: + this._Scripts = correctedPath; + break; + case DataTypes.Root: + this._InstallRoot = Path.Combine(this.GetInstallPath(), path); + this.SetupPaths(); //Re-setup all the paths since the root has changed. + break; + } } public String GetPath(DataTypes objectType) diff --git a/MudEngine/WinPC_Engine/DAL/XMLData.cs b/MudEngine/WinPC_Engine/DAL/XMLData.cs index d054e96..5738608 100644 --- a/MudEngine/WinPC_Engine/DAL/XMLData.cs +++ b/MudEngine/WinPC_Engine/DAL/XMLData.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Xml.Linq; using System.Reflection; +using System.IO; using MudEngine.GameScripts; using MudEngine.Core; @@ -41,6 +42,11 @@ namespace MudEngine.DAL public Boolean Save(String filename) { + if (!Directory.Exists(Path.GetDirectoryName(filename))) + { + Directory.CreateDirectory(Path.GetDirectoryName(filename)); + } + try { this.SaveData.Save(filename); diff --git a/MudEngine/WinPC_Engine/Game/StandardGame.cs b/MudEngine/WinPC_Engine/Game/StandardGame.cs index 0a2f72f..d84806f 100644 --- a/MudEngine/WinPC_Engine/Game/StandardGame.cs +++ b/MudEngine/WinPC_Engine/Game/StandardGame.cs @@ -119,8 +119,7 @@ namespace MudEngine.Game //Setup default save paths. this.SavePaths = new DataPaths(); - - SetupPaths(); + this.SavePaths.SetRelativePath("Data", DataTypes.Root); this.World = new World(this); } diff --git a/MudEngine/WinPC_Engine/Scripting/CSharp.cs b/MudEngine/WinPC_Engine/Scripting/CSharp.cs index 328d60d..aff7920 100644 --- a/MudEngine/WinPC_Engine/Scripting/CSharp.cs +++ b/MudEngine/WinPC_Engine/Scripting/CSharp.cs @@ -51,6 +51,8 @@ namespace MudEngine.Scripting //Instance a reference to the C# code provider, this is what will perform the compiling. CSharpCodeProvider provider = new CSharpCodeProvider(CompilerOptions); //Create an array of script files found within the ScriptRepository matching the ScriptExtension properties. + if (!Directory.Exists(scriptRepository)) + Directory.CreateDirectory(scriptRepository); String[] scripts = Directory.GetFiles(scriptRepository, "*" + this.ScriptExtension, SearchOption.AllDirectories); if (scripts.Length > 0) @@ -64,7 +66,10 @@ namespace MudEngine.Scripting return true; } else + { + Results = new CompilerResults(new TempFileCollection()); return false; + } } ///