MUDCompiler:

- Now compiles scripts contained under a MUDCompiler/bin/debug/Scripts folder.

MudEngine:
 - ScriptEngine now wraps scripts inside a default namespace. MUDScripts MUST not be placed within a namespace inside the script. The Engine handles it automatically.
This commit is contained in:
Scionwest_cp 2010-07-23 17:22:25 -07:00
parent fe05693fee
commit 0f87ac233a
4 changed files with 73 additions and 2 deletions

View file

@ -46,6 +46,12 @@
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MudEngine\MudEngine.csproj">
<Project>{498943A8-DF5A-4DB0-B506-0BFF44788657}</Project>
<Name>MudEngine</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View file

@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using MudEngine.Scripting;
namespace MUDCompiler
{
class Program
@ -20,11 +22,44 @@ namespace MUDCompiler
string command = Console.ReadLine();
//command error checking.
if (String.IsNullOrEmpty(command))
{
Console.WriteLine("Invalid Command!");
System.Threading.Thread.Sleep(1000); //wait before shutting down so user sees invalid command
}
else if (Convert.ToInt16(command) >= 3)
{
Console.WriteLine("Invalid Command!");
System.Threading.Thread.Sleep(1000); //wait before shutting down so user sees invalid command
}
switch (Convert.ToInt16(command))
{
case 1:
CompileScripts();
break;
case 2:
return;
}
}
static void CompileScripts()
{
ScriptEngine se = new ScriptEngine(ScriptEngine.ScriptTypes.SourceFiles);
Console.WriteLine();
Console.WriteLine("Compiling...");
se.Initialize();
se.ScriptExtension = ".mud";
se.ScriptPath = "Scripts";
if (se.CompileScripts())
Console.WriteLine("Compiling completed without error.");
else
Console.WriteLine(se.ErrorMessage);
Console.WriteLine("Press any key to exit.");
Console.Read();
}
}
}

View file

@ -14,6 +14,5 @@ namespace MudEngine.GameObjects.Characters.Controlled
public PlayerBasic()
{
}
}
}

View file

@ -92,21 +92,52 @@ namespace MudEngine.Scripting
//Build an array of scripts
string[] scripts = System.IO.Directory.GetFiles(ScriptPath, "*" + ScriptExtension, System.IO.SearchOption.AllDirectories);
//Prepare the scripts. MUD Scripts are wrote without defining a namespace
if (Directory.Exists("temp"))
Directory.Delete("temp", true);
Directory.CreateDirectory("temp");
string source = "namespace MUDScripts\n{\n}";
foreach (string script in scripts)
{
string tempPath = "temp";
FileStream fr = new FileStream(script, FileMode.Open, FileAccess.Read, FileShare.None);
FileStream fw = new FileStream(Path.Combine(tempPath, Path.GetFileName(script)), FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fw, System.Text.Encoding.Default);
StreamReader sr = new StreamReader(fr, System.Text.Encoding.Default);
string content = sr.ReadToEnd();
source = source.Insert(source.Length - 1, content);
sw.Write(source);
sr.Close();
sw.Flush();
sw.Close();
}
string oldPath = ScriptPath;
ScriptPath = "temp";
//Prepare the compiler.
Dictionary<string, string> providerOptions = new Dictionary<string,string>();
providerOptions.Add("CompilerVersion", "v3.5");
CompilerParameters param = new CompilerParameters(new string[] {"mscorlib.dll", "System.dll", "BlitScript.dll"});
CompilerParameters param = new CompilerParameters(new string[] {"mscorlib.dll", "System.dll", "MudEngine.dll"});
param.GenerateExecutable = false;
param.GenerateInMemory = true;
param.OutputAssembly = "Scripts.dll";
param.IncludeDebugInformation = false;
param.TreatWarningsAsErrors = true;
//Compile the scripts with the C# CodeProvider
CSharpCodeProvider codeProvider = new CSharpCodeProvider(providerOptions);
CompilerResults results = new CompilerResults(new TempFileCollection());
scripts = Directory.GetFiles(ScriptPath, "*.Mud", SearchOption.AllDirectories);
results = codeProvider.CompileAssemblyFromFile(param, scripts);
//Delete the temp folder
Directory.Delete("temp", true);
ScriptPath = oldPath;
//if we encountered errors we need to log them to our ErrorMessages property
if (results.Errors.Count >= 1)
{