Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
EntitySerializer.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using System.Collections.Generic;
5 using System.Linq;
6 using System.Reflection;
7 using SiliconStudio.Paradox.EntityModel.Data;
8 using SiliconStudio.Paradox.Games;
9 using SiliconStudio.Core;
10 using SiliconStudio.Core.Reflection;
11 using SiliconStudio.Core.Serialization;
12 using SiliconStudio.Core.Serialization.Contents;
13 
14 namespace SiliconStudio.Paradox.EntityModel
15 {
17  {
18  private DataSerializer<EntityData> entityDataSerializer;
19 
20  /// <inheritdoc/>
21  public void Initialize(SerializerSelector serializerSelector)
22  {
23  entityDataSerializer = MemberSerializer<EntityData>.Create(serializerSelector);
24  }
25 
26  public override void Serialize(ref Entity entity, ArchiveMode mode, SerializationStream stream)
27  {
28  if (mode == ArchiveMode.Serialize)
29  {
30  var entityData = new EntityData
31  {
32  Name = entity.Name,
33  Components = entity.Tags
34  .Where(x => x.Value is EntityComponent)
35  .ToDictionary(x => x.Key, x => (EntityComponent)x.Value),
36  };
37  entityDataSerializer.Serialize(ref entityData, mode, stream);
38  }
39  else if (mode == ArchiveMode.Deserialize)
40  {
41  if (entity == null)
42  entity = new Entity();
43 
44  EntityData entityData = null;
45  entityDataSerializer.Serialize(ref entityData, mode, stream);
46  entity.Name = entityData.Name;
47 
48  foreach (var component in entityData.Components)
49  {
50  entity.Tags.SetObject(component.Key, component.Value);
51  }
52  }
53  }
54 
55  [DataContract]
56  public class EntityData
57  {
58  public Guid Guid;
59  public string Name;
60  public Dictionary<PropertyKey, EntityComponent> Components;
61  }
62  }
63 }
Dictionary< PropertyKey, EntityComponent > Components
Game entity. It usually aggregates multiple EntityComponent
Definition: Entity.cs:28
Base class for implementation of SerializationStream.
Adds initialization feature to a DataSerializer.
Serializer context. It holds DataSerializer{T} objects and their factories.
Describes how to serialize and deserialize an object without knowing its type. Used as a common base ...
ArchiveMode
Enumerates the different mode of serialization (either serialization or deserialization).
Definition: ArchiveMode.cs:8
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
override void Serialize(ref Entity entity, ArchiveMode mode, SerializationStream stream)