public bool WriteViews(IViewFolder folder, Game game, CompileMessages errors)
{
if (writer == null)
{
errors.Add(new CompileError("Could not write views: Invalid stream (NULL)"));
return false;
}
foreach (View view in views)
{
// views are not always sequential, so we may have some null entries;
// but even in that case we must write number of loops (0) to conform
// to the data format
short numLoops = (short)(view != null ? view.Loops.Count : 0);
writer.Write(numLoops);
for (int i = 0; i < numLoops; ++i)
{
short numFrames = (short)view.Loops[i].Frames.Count;
writer.Write(numFrames);
writer.Write(view.Loops[i].RunNextLoop ? NativeConstants.LOOPFLAG_RUNNEXTLOOP : 0);
for (int j = 0; j < numFrames; ++j)
{
ViewFrame frame = view.Loops[i].Frames[j];
writer.Write(frame.Image);
writer.Write((short)0); // unused x-offset
writer.Write((short)0); // unused y-offset
writer.Write((short)frame.Delay);
writer.Write((short)0); // struct alignment padding
writer.Write(frame.Flipped ? NativeConstants.VFLG_FLIPSPRITE : 0);
writer.Write(frame.Sound > 0 ? game.GetAudioArrayIndexFromAudioClipIndex(frame.Sound) : -1);
writer.Write(0); // unused reservedForFuture[0]
writer.Write(0); // unused reservedForFuture[1]
}
}
}
return true;
}