Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
ContentReferenceDataConverter.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 SiliconStudio.Core.Serialization.Assets;
5 using SiliconStudio.Core.Serialization.Contents;
6 
7 namespace SiliconStudio.Core.Serialization.Converters
8 {
9  public class ContentReferenceDataConverter<TData, TSource> : DataConverter<ContentReference<TData>, TSource> where TData : class
10  {
11  public override bool CacheResult
12  {
13  get { return false; }
14  }
15 
16  public override void ConvertToData(ConverterContext converterContext, ref ContentReference<TData> data, TSource obj)
17  {
18  var contentSerializerContext = converterContext.Tags.Get(ContentSerializerContext.ContentSerializerContextProperty);
19 
20  // TODO: When to stop conversion and switch to Location?
21  if (contentSerializerContext != null)
22  {
23  data = new ContentReference<TData>() { Value = converterContext.ConvertToData<TData>(obj) };
24  }
25  else
26  {
27  data = new ContentReference<TData>() { Value = converterContext.ConvertToData<TData>(obj) };
28  }
29  }
30 
31  public override void ConvertFromData(ConverterContext converterContext, ContentReference<TData> data, ref TSource source)
32  {
33  var contentSerializerContext = converterContext.Tags.Get(ContentSerializerContext.ContentSerializerContextProperty);
34 
35  // TODO: Load through AssetManager if not loaded yet.
36  if (contentSerializerContext != null)
37  {
38  // Not loaded yet?
39  var parentAssetReference = contentSerializerContext.AssetReference;
40  AssetManager.AssetReference assetReference;
41  var value = contentSerializerContext.AssetManager.DeserializeObject(parentAssetReference, out assetReference, data.Location, typeof(TSource), AssetManagerLoaderSettings.IgnoreReferences, converterContext);
42 
43  source = converterContext.ConvertFromData<TSource>(value);
44  }
45  else
46  {
47  source = converterContext.ConvertFromData<TSource>(data.Value);
48  }
49  }
50  }
51 }
override void ConvertToData(ConverterContext converterContext, ref ContentReference< TData > data, TSource obj)
Base class for converters to/from a data type.
override void ConvertFromData(ConverterContext converterContext, ContentReference< TData > data, ref TSource source)