mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-27 22:22:32 +00:00
125 lines
2.8 KiB
C#
125 lines
2.8 KiB
C#
|
|
||
|
#region ================== Copyright (c) 2007 Pascal vd Heiden
|
||
|
|
||
|
/*
|
||
|
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||
|
* This program is released under GNU General Public License
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Namespaces
|
||
|
|
||
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Globalization;
|
||
|
using System.Text;
|
||
|
using System.IO;
|
||
|
using CodeImp.DoomBuilder.Map;
|
||
|
using System.Reflection;
|
||
|
using System.Diagnostics;
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
namespace CodeImp.DoomBuilder.IO
|
||
|
{
|
||
|
internal abstract class MapSetIO
|
||
|
{
|
||
|
#region ================== Constants
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Variables
|
||
|
|
||
|
// WAD File
|
||
|
protected WAD wad;
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Properties
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Constructor / Disposer
|
||
|
|
||
|
// Constructor
|
||
|
public MapSetIO(WAD wad)
|
||
|
{
|
||
|
// Initialize
|
||
|
this.wad = wad;
|
||
|
}
|
||
|
|
||
|
// Destructor
|
||
|
~MapSetIO()
|
||
|
{
|
||
|
// Clean up
|
||
|
wad = null;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Static Methods
|
||
|
|
||
|
// This returns and instance of the specified IO class
|
||
|
public static MapSetIO Create(string classname, WAD wadfile)
|
||
|
{
|
||
|
object[] args;
|
||
|
MapSetIO result;
|
||
|
string fullname;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
// Create arguments
|
||
|
args = new object[1];
|
||
|
args[0] = wadfile;
|
||
|
|
||
|
// Make the full class name
|
||
|
fullname = "CodeImp.DoomBuilder.IO." + classname;
|
||
|
|
||
|
// Create IO class
|
||
|
result = (MapSetIO)General.ThisAssembly.CreateInstance(fullname, false,
|
||
|
BindingFlags.Default, null, args, CultureInfo.CurrentCulture, new object[0]);
|
||
|
|
||
|
// Check result
|
||
|
if(result != null)
|
||
|
{
|
||
|
// Success
|
||
|
return result;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// No such class
|
||
|
throw new ArgumentException("No such map format interface found: \"" + classname + "\"");
|
||
|
}
|
||
|
}
|
||
|
// Catch errors
|
||
|
catch(TargetInvocationException e)
|
||
|
{
|
||
|
// Throw the actual exception
|
||
|
Debug.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString());
|
||
|
Debug.WriteLine(e.InnerException.Source + " throws " + e.InnerException.GetType().Name + ":");
|
||
|
Debug.WriteLine(e.InnerException.Message);
|
||
|
Debug.WriteLine(e.InnerException.StackTrace);
|
||
|
throw e.InnerException;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Methods
|
||
|
|
||
|
// Required implementations
|
||
|
public abstract MapSet Read(MapSet map, string mapname);
|
||
|
public abstract void Write(MapSet map, string mapname, int position);
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
}
|