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:
parent
fe05693fee
commit
0f87ac233a
4 changed files with 73 additions and 2 deletions
|
@ -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.
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,5 @@ namespace MudEngine.GameObjects.Characters.Controlled
|
|||
public PlayerBasic()
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue