public static GameObject LoadSavedObject(SavedObjectV2 save, Transform parent = null) { ComponentType componenttype = SavedObjectTypeToObjectType[save.GetType()]; GameObject LoadedObject = null; if (componenttype == ComponentType.CustomObject) { LoadedObject = GetCustomPrefab((SavedCustomObject)save); } else { LoadedObject = UnityEngine.Object.Instantiate(Prefabs.ComponentTypeToPrefab(componenttype), parent); } LoadedObject.transform.localPosition = save.LocalPosition; LoadedObject.transform.localEulerAngles = save.LocalEulerAngles; LoadedObject.AddComponent <ObjectInfo>().ComponentType = componenttype; switch (componenttype) { // there is no case for objects with no special data to load case ComponentType.CustomObject: LoadCustomObject(LoadedObject, (SavedCustomObject)save); break; case ComponentType.CircuitBoard: LoadCircuitBoard(LoadedObject, (SavedCircuitBoard)save); break; case ComponentType.Wire: LoadWire(LoadedObject, (SavedWire)save); break; case ComponentType.Delayer: LoadDelayer(LoadedObject, (SavedDelayer)save); break; case ComponentType.PanelDisplay: case ComponentType.Display: LoadDisplay(LoadedObject, (SavedDisplay)save); break; case ComponentType.Inverter: LoadInverter(LoadedObject, (SavedInverter)save); break; case ComponentType.PanelLabel: case ComponentType.Label: LoadLabel(LoadedObject, (SavedLabel)save); break; case ComponentType.PanelSwitch: case ComponentType.Switch: // SWITCH-F*****G-CEPTION LoadSwitch(LoadedObject, (SavedSwitch)save); break; case ComponentType.ThroughBlotter: case ComponentType.Blotter: LoadBlotter(LoadedObject, (SavedBlotter)save); break; case ComponentType.Noisemaker: LoadNoisemaker(LoadedObject, (SavedNoisemaker)save); break; case ComponentType.Mount: LoadMount(LoadedObject); break; } if (save.CanHaveChildren) { foreach (SavedObjectV2 child in save.Children) { LoadSavedObject(child, LoadedObject.transform); } } return(LoadedObject); }