mirror of
https://github.com/crskycode/GARbro.git
synced 2024-11-27 07:34:00 +08:00
110 lines
3.2 KiB
C#
110 lines
3.2 KiB
C#
//! \file ScriptText.cs
|
|
//! \date Thu Jul 10 11:09:32 2014
|
|
//! \brief Script text resource interface.
|
|
//
|
|
|
|
using System.IO;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.Composition;
|
|
|
|
namespace GameRes
|
|
{
|
|
public struct ScriptLine
|
|
{
|
|
public uint Id;
|
|
public string Text;
|
|
}
|
|
|
|
public class ScriptData
|
|
{
|
|
public ICollection<ScriptLine> TextLines { get { return m_text; } }
|
|
|
|
protected List<ScriptLine> m_text = new List<ScriptLine>();
|
|
/*
|
|
public abstract void Serialize (Stream output);
|
|
public abstract void Deserialize (Stream input);
|
|
*/
|
|
}
|
|
|
|
public abstract class ScriptFormat : IResource
|
|
{
|
|
public override string Type { get { return "script"; } }
|
|
|
|
public abstract bool IsScript (IBinaryStream file);
|
|
|
|
public abstract Stream ConvertFrom (IBinaryStream file);
|
|
public abstract Stream ConvertBack (IBinaryStream file);
|
|
|
|
public abstract ScriptData Read (string name, Stream file);
|
|
public abstract void Write (Stream file, ScriptData script);
|
|
|
|
public static ScriptFormat FindFormat (IBinaryStream file)
|
|
{
|
|
foreach (var impl in FormatCatalog.Instance.FindFormats<ScriptFormat> (file.Name, file.Signature))
|
|
{
|
|
try
|
|
{
|
|
file.Position = 0;
|
|
if (impl.IsScript (file))
|
|
return impl;
|
|
}
|
|
catch (System.OperationCanceledException)
|
|
{
|
|
throw;
|
|
}
|
|
catch { }
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public abstract class GenericScriptFormat : ScriptFormat
|
|
{
|
|
public override bool IsScript (IBinaryStream file)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public override Stream ConvertFrom (IBinaryStream file)
|
|
{
|
|
return file.AsStream;
|
|
}
|
|
|
|
public override Stream ConvertBack (IBinaryStream file)
|
|
{
|
|
return file.AsStream;
|
|
}
|
|
|
|
public override ScriptData Read (string name, Stream file)
|
|
{
|
|
throw new System.NotImplementedException();
|
|
}
|
|
|
|
public override void Write (Stream file, ScriptData script)
|
|
{
|
|
throw new System.NotImplementedException();
|
|
}
|
|
}
|
|
|
|
[Export(typeof(ScriptFormat))]
|
|
public class TextScriptFormat : GenericScriptFormat
|
|
{
|
|
public override string Tag { get { return "TXT"; } }
|
|
public override string Description { get { return "Text file"; } }
|
|
public override uint Signature { get { return 0; } }
|
|
}
|
|
|
|
[Export(typeof(ScriptFormat))]
|
|
public class BinScriptFormat : GenericScriptFormat
|
|
{
|
|
public override string Tag { get { return "SCR"; } }
|
|
public override string Description { get { return "Binary script format"; } }
|
|
public override uint Signature { get { return 0; } }
|
|
|
|
public BinScriptFormat ()
|
|
{
|
|
Extensions = new[] { "scr", "bin" };
|
|
}
|
|
}
|
|
}
|