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); } }