public VMMarshal Save()
{
var ents = new VMEntityMarshal[Entities.Count];
var threads = new VMThreadMarshal[Entities.Count];
var mult = new List<VMMultitileGroupMarshal>();
int i = 0;
foreach (var ent in Entities)
{
if (ent is VMAvatar)
{
ents[i] = ((VMAvatar)ent).Save();
}
else
{
ents[i] = ((VMGameObject)ent).Save();
}
threads[i++] = ent.Thread.Save();
if (ent.MultitileGroup.BaseObject == ent)
{
mult.Add(ent.MultitileGroup.Save());
}
}
return new VMMarshal
{
Context = Context.Save(),
Entities = ents,
Threads = threads,
MultitileGroups = mult.ToArray(),
GlobalState = GlobalState,
PlatformState = PlatformState,
ObjectId = ObjectId
};
}