public bool Load(String filename)
{
if (!File.Exists(filename)) return false;
using (BinaryReader stream = new BinaryReader(File.OpenRead(filename)))
{
// purge anything already inside this object:
Purge();
// start reading the header //
string sig = new string(stream.ReadChars(4));
if (sig != ".rss") return false;
_version = stream.ReadInt16();
short numImages = stream.ReadInt16();
_frameWidth = stream.ReadInt16();
_frameHeight = stream.ReadInt16();
short numDirs = stream.ReadInt16();
// read sprite base //
_spriteBase.X1 = stream.ReadInt16();
_spriteBase.Y1 = stream.ReadInt16();
_spriteBase.X2 = stream.ReadInt16();
_spriteBase.Y2 = stream.ReadInt16();
// reserved //
stream.ReadBytes(106);
switch (_version)
{
case 3:
BitmapLoader loader = new BitmapLoader(_frameWidth, _frameHeight);
int amt = _frameWidth * _frameHeight * 4;
while (numImages-- > 0) _images.Add(loader.LoadFromStream(stream, amt));
loader.Close();
while (numDirs-- > 0)
{
short numFrames = stream.ReadInt16();
stream.ReadBytes(6);
short length = stream.ReadInt16();
string name = new String(stream.ReadChars(length)).Substring(0, length - 1);
Direction dir = new Direction(name);
while (numFrames-- > 0)
{
Frame f = new Frame {Index = stream.ReadInt16(), Delay = stream.ReadInt16()};
dir.Frames.Add(f);
stream.ReadBytes(4);
}
_directions.Add(dir);
}
break;
}
}
return true;
}