public ComponentSaveData GetSaveData() { // Just in case the root was tagged unserializable for whatever reason. RootComponent.SetFlag(GameComponent.Flag.ShouldSerialize, true); foreach (var component in Components) { component.Value.PrepareForSerialization(); } var serializableComponents = Components.Where(c => c.Value.IsFlagSet(GameComponent.Flag.ShouldSerialize)).Select(c => c.Value).ToList(); return(new ComponentSaveData { SaveableComponents = serializableComponents, RootComponent = RootComponent.GlobalID }); }