MudCompiler: No longer works. Needs to be re-wrote to support the new Alpha 2.0 engine MudDesigenr: Removed most of the forms since we are not working on it. Only form left is Project Manager, which will be removed shortly as well. MudGame: No longer runs. All of the source code was removed due to MudEngine Alpha 2.0 source changing drastically. MudEngine: Alpha 2.0 source code finally checked-in. It contains the full re-build of the engine. A lot of new abstract classes have been added.
123 lines
3.9 KiB
C#
123 lines
3.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
|
|
namespace MudEngine.Runtime
|
|
{
|
|
public class ScriptFactory
|
|
{
|
|
//The assembly loaded that will be used.
|
|
private List<Assembly> _AssemblyCollection;
|
|
|
|
/// <summary>
|
|
/// Constructor for a Windows PC Script Factory
|
|
/// </summary>
|
|
/// <param name="assembly"></param>
|
|
public ScriptFactory(String assembly)
|
|
{
|
|
Assembly a;
|
|
_AssemblyCollection = new List<Assembly>();
|
|
|
|
//See if a file exists first with this assembly name.
|
|
if (File.Exists(assembly))
|
|
{
|
|
a = Assembly.Load(new AssemblyName(assembly));
|
|
}
|
|
//If not, then try and load it differently
|
|
else
|
|
{
|
|
a = Assembly.Load(assembly);
|
|
}
|
|
|
|
if (a == null)
|
|
return;
|
|
|
|
//Add the assembly to our assembly collection.
|
|
_AssemblyCollection.Add(a);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Alternate Constructor for a Windows PC ScriptFactory
|
|
/// </summary>
|
|
/// <param name="assembly"></param>
|
|
public ScriptFactory(Assembly assembly)
|
|
{
|
|
_AssemblyCollection = new List<Assembly>();
|
|
//Add the supplied assembly to our AssemblyCollection
|
|
_AssemblyCollection.Add(assembly);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Adds another assembly to the factories assembly collection.
|
|
/// </summary>
|
|
/// <param name="assembly">provides the name of the assembly, or file name that needs to be loaded.</param>
|
|
public void AddAssembly(String assembly)
|
|
{
|
|
Assembly a;
|
|
|
|
//See if a file exists first with this assembly name.
|
|
if (File.Exists(assembly))
|
|
{
|
|
a = Assembly.Load(new AssemblyName(assembly));
|
|
}
|
|
//If not, then try and load it differently
|
|
else
|
|
{
|
|
a = Assembly.Load(assembly);
|
|
}
|
|
|
|
//Add the assembly to our assembly collection.
|
|
_AssemblyCollection.Add(a);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Adds another assembly to the factories assembly collection.
|
|
/// </summary>
|
|
/// <param name="assembly">Provides a reference to the assembly that will be added to the collection.</param>
|
|
public void AddAssembly (Assembly assembly)
|
|
{
|
|
//Add the supplied assembly to our AssemblyCollection
|
|
_AssemblyCollection.Add(assembly);
|
|
}
|
|
|
|
public ScriptObject GetScript(String scriptName)
|
|
{
|
|
Type script = typeof(Object);
|
|
Boolean foundScript = false;
|
|
|
|
if (_AssemblyCollection.Count == 0)
|
|
return new ScriptObject(null);
|
|
|
|
try
|
|
{
|
|
foreach (Assembly a in _AssemblyCollection)
|
|
{
|
|
//The assembly can be null if accessing after a failed compilation.
|
|
if (a == null)
|
|
continue;
|
|
|
|
foreach (Type t in a.GetTypes())
|
|
{
|
|
if (t.Name == scriptName)
|
|
{
|
|
script = t;
|
|
foundScript = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (foundScript)
|
|
break;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw new Exception("Error encounted during factory instancing of script " + scriptName + ".");
|
|
}
|
|
|
|
ScriptObject obj = new ScriptObject(Activator.CreateInstance(script));
|
|
return obj;
|
|
}
|
|
}
|
|
}
|