private void DeserializeComponents(Stream stream, GameObject gameObject) { LoopHeader components = serializer.Deserialize <LoopHeader>(stream); for (int componentCounter = 0; componentCounter < components.Count; componentCounter++) { ComponentHeader componentHeader = serializer.Deserialize <ComponentHeader>(stream); Type type = null; if (!surrogateTypes.TryGetValue(componentHeader.TypeName, out type)) { type = AppDomain.CurrentDomain.GetAssemblies() .Select(a => a.GetType(componentHeader.TypeName)) .FirstOrDefault(t => t != null); } Validate.NotNull(type, $"No type or surrogate found for {componentHeader.TypeName}!"); object component = FormatterServices.GetUninitializedObject(type); serializer.Deserialize(stream, component, type); gameObject.AddComponent(component, type); } }
private void ParseGameObjectsFromStream(Stream stream, NitroxInt3 batchId, NitroxInt3 cellId, int level, List <EntitySpawnPoint> spawnPoints) { LoopHeader gameObjectCount = serializer.Deserialize <LoopHeader>(stream); for (int goCounter = 0; goCounter < gameObjectCount.Count; goCounter++) { GameObject gameObject = DeserializeGameObject(stream); if (gameObject.TotalComponents > 0) { AbsoluteEntityCell absoluteEntityCell = new AbsoluteEntityCell(batchId, cellId, level); NitroxTransform transform = gameObject.GetComponent <NitroxTransform>(); spawnPoints.AddRange(entitySpawnPointFactory.From(absoluteEntityCell, transform, gameObject)); } } }