public static Component CreateFromData(Entity entity, ComponentData componentData) { switch (componentData.typeId) { case ComponentTypes.DynamicBody: return(new DynamicBody(entity, componentData.serialData)); case ComponentTypes.StaticBody: return(new StaticBody(entity, componentData.serialData)); case ComponentTypes.LightOccluder: return(new LightOccluder(entity, componentData.serialData)); case ComponentTypes.LightProjector: return(new LightProjector(entity, componentData.serialData)); case ComponentTypes.QuadComponent: return(new QuadComponent(entity, componentData.serialData)); case ComponentTypes.EntityContainer: return(new EntityContainer(entity, componentData.serialData)); // case ComponentTypes.TileMapChunk: return new TileMapOfEntities(entity, componentData.serialData); case ComponentTypes.SoundPlayer: return(new SoundPlayer(entity, componentData.serialData)); } //scripts if (componentData.typeId == ComponentTypes.Script) { ScriptTypeAndData stad = MessagePackSerializer.Deserialize <ScriptTypeAndData>(componentData.serialData); return(Activator.CreateInstance(Type.GetType(stad.ScriptType), new ScriptSerialData(entity, stad.ScriptData)) as Component); } throw new Exception("component type couldn't be resolved; make sure to add all component types to this method"); }
public sealed override ComponentData GetSerialData() { BeforeSerialization(); ScriptTypeAndData stad = new ScriptTypeAndData { ScriptType = GetType().AssemblyQualifiedName, ScriptData = scriptData }; return(new ComponentData(ComponentTypes.Script, MessagePackSerializer.Serialize(stad))); }