示例#1
0
    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");
    }
示例#2
0
    public sealed override ComponentData GetSerialData()
    {
        BeforeSerialization();
        ScriptTypeAndData stad = new ScriptTypeAndData {
            ScriptType = GetType().AssemblyQualifiedName, ScriptData = scriptData
        };

        return(new ComponentData(ComponentTypes.Script, MessagePackSerializer.Serialize(stad)));
    }