Beispiel #1
0
        public override void ExposeData(ObjectSerializer serializer)
        {
            base.ExposeData(serializer);

            if (serializer.Reading)
            {
                if (serializer.TryReadDataField <Dictionary <string, ContainerPrototypeData> >("containers", out var data))
                {
                    _entitiesWaitingResolve = new Dictionary <string, List <EntityUid> >();
                    foreach (var(key, datum) in data)
                    {
                        if (datum.Type == null)
                        {
                            throw new InvalidOperationException("Container does not have type set.");
                        }

                        var type = _reflectionManager.LooseGetType(datum.Type);
                        MakeContainer(key, type);

                        if (datum.Entities.Count == 0)
                        {
                            continue;
                        }

                        var list = new List <EntityUid>(datum.Entities.Where(u => u.IsValid()));
                        _entitiesWaitingResolve.Add(key, list);
                    }
                }
            }
            else
            {
                var dict = new Dictionary <string, ContainerPrototypeData>();
                foreach (var(key, container) in EntityContainers)
                {
                    var list = new List <EntityUid>(container.ContainedEntities.Select(e => e.Uid));
                    var data = new ContainerPrototypeData(list, container.GetType().FullName !);
                    dict.Add(key, data);
                }

                // ReSharper disable once RedundantTypeArgumentsOfMethod
                serializer.DataWriteFunction <Dictionary <string, ContainerPrototypeData>?>("containers", null,
                                                                                            () => dict);
            }
        }
        public override void ExposeData(ObjectSerializer serializer)
        {
            base.ExposeData(serializer);

            if (serializer.Reading)
            {
                if (serializer.TryReadDataField <Dictionary <string, ContainerPrototypeData> >("containers", out var data))
                {
                    _entitiesWaitingResolve = new Dictionary <string, List <EntityUid> >();
                    var reflectionManager = IoCManager.Resolve <IReflectionManager>();
                    foreach (var(key, datum) in data)
                    {
                        var type = reflectionManager.LooseGetType(datum.Type);
                        MakeContainer(key, type);

                        if (datum.Entities.Count == 0)
                        {
                            continue;
                        }
                        var list = new List <EntityUid>(datum.Entities.Where(u => u.IsValid()));
                        _entitiesWaitingResolve.Add(key, list);
                    }
                }
            }
            else
            {
                var dict = new Dictionary <string, ContainerPrototypeData>();
                foreach (var(key, container) in EntityContainers)
                {
                    var list = new List <EntityUid>(container.ContainedEntities.Select(e => e.Uid));
                    var data = new ContainerPrototypeData(list, container.GetType().FullName);
                    dict.Add(key, data);
                }

                serializer.DataWriteFunction("containers", null, () => dict);
            }
        }