Exemplo n.º 1
0
        /// <summary>
        /// Deserialize the given data into a <see cref="BehaviorStream{T}"/>.
        /// </summary>
        /// <param name="blackboard">the <see cref="IBlackboard"/> the deserialized tree will use</param>
        /// <param name="data">the data to load from</param>
        /// <returns>the deserialized tree</returns>
        /// <exception cref="SerializationException">if the data fails to deserialize</exception>
        public BehaviorStream <T> Deserialize(T blackboard, string data)
        {
            int    size;
            int    growBy;
            ushort id;
            var    deserializer = new YamlFluentDeserializer(data)
                                  .Read("Size", out size)
                                  .Read("GrowBy", out growBy)
                                  .Read("RootId", out id);

            BehaviorStream <T> result = new BehaviorStream <T>(blackboard, size, growBy)
            {
                Root = new TaskId(id)
            };

            IDictionary <int, string> typeMap = new Dictionary <int, string>();

            deserializer.BeginRead();
            for (var i = 0; i < size; i++)
            {
                string typeName;
                deserializer.Read(i, out typeName);
                typeMap.Add(i, typeName);
            }

            deserializer.EndRead();

            deserializer.BeginRead();
            for (var i = 0; i < size; i++)
            {
                if (string.IsNullOrEmpty(typeMap[i]))
                {
                    continue;
                }

                Type type = Type.GetType(typeMap[i]);
                if (type == null)
                {
                    throw new SerializationException("Could not get type information for " + typeMap[i]);
                }

                Task <T> task = (Task <T>)Activator.CreateInstance(type);
                if (task == null)
                {
                    throw new SerializationException("Could not create task from type " + type.AssemblyQualifiedName);
                }

                deserializer.Read(i, task);
                result.stream[i] = task;
            }

            deserializer.EndRead();

            return(result);
        }
Exemplo n.º 2
0
        public virtual void Deserialize(YamlFluentDeserializer deserializer)
        {
            deserializer.BeginRead();

            ushort id;

            deserializer.Read("Id", out id);
            this.Id = new TaskId(id);

            deserializer.Read("Guard", out id);
            this.Guard = new TaskId(id);

            deserializer.EndRead();
        }