static void Prefix(GameObject LoadedObject, SavedCustomObject save) { var handler = LoadedObject.GetComponent <UpdateHandler>(); var handlerType = handler.GetType(); Action <object> setValue = null; foreach (var item in save.CustomData.Skip(2)) { if (item is string str && str.StartsWith("::")) { string name = str.Substring(2); var field = handlerType.GetField(name); if (field == null) { var prop = handlerType.GetProperty(name); if (prop == null) { MDebug.WriteLine("ERROR: INVALID DATA FIELD!"); } else { setValue = o => prop.SetValue(handler, Convert.ChangeType(o, prop.PropertyType), null); } } else { setValue = o => field.SetValue(handler, o); } }
public static void Prefix(SavedCustomObject save, ObjectInfo CreateFromThis) { /* * CustomData structure: * - CustomComponent.UniqueName * - Outputs.On[] * - Fields[] */ List <object> saveData = new List <object>(); var customComponent = CreateFromThis.GetComponent <UpdateHandler>(); CircuitOutput[] outputs = CreateFromThis.GetComponentsInChildren <CircuitOutput>(); if (customComponent.Component == null) { MDebug.WriteLine("!!customComponent.Component IS NULL!! NAME: " + customComponent.ComponentName); if (customComponent.ComponentName != null) { if (ComponentRegistry.Registry.TryGetValue(customComponent.ComponentName, out var comp)) { customComponent.Component = comp; } else { MDebug.WriteLine("!!MISING COMPONENT: " + customComponent.ComponentName); } } else { MDebug.WriteLine("!!customComponent.ComponentName IS ALSO NULL!! ALLOW ME TO JUMP OFF A CLIFF"); return; } } saveData.Add(customComponent.ComponentName); saveData.Add(outputs.Select(o => o.On).ToArray()); saveData.AddRange(GetSaveThisFields(customComponent)); save.CustomData = saveData.ToArray(); }
static bool Prefix(ref SavedObjectV2 __result, ObjectInfo worldsave) { SavedObjectV2 savedObjectV = null; if (worldsave.ComponentType == ComponentType.CustomObject) { savedObjectV = new SavedCustomObject(); CreateCustomSavedObjectPatch.Prefix((SavedCustomObject)savedObjectV, worldsave); savedObjectV.LocalPosition = worldsave.transform.localPosition; savedObjectV.LocalEulerAngles = worldsave.transform.localEulerAngles; savedObjectV.Children = new SavedObjectV2[0]; __result = savedObjectV; return(false); } return(true); }
static void Postfix(ref GameObject __result, SavedCustomObject save) { if (save.CustomData.Length == 0) { MDebug.WriteLine("ERROR: INVALID CUSTOM COMPONENT LOADED!"); __result = GetDefaultObject(""); return; } string name = save.CustomData[0] as string; if (ComponentRegistry.Registry.TryGetValue(name, out var item)) { __result = item.Instantiate(); __result.transform.parent = NextParent; } else { MDebug.WriteLine("ERROR: CUSTOM COMPONENT NOT FOUND!"); __result = GetDefaultObject(name); } }
private static void LoadCustomObject(GameObject LoadedObject, SavedCustomObject save) { }
private static GameObject GetCustomPrefab(SavedCustomObject save) { return(Prefabs.WhiteCube); }
public static SavedObjectV2 CreateSavedObjectFrom(ObjectInfo worldsave) { //SavedObjectV2 newsavedobject = SaveManager.ObjectTypeToSavedObjectType(save.ObjectType); SavedObjectV2 newsavedobject = null; switch (worldsave.ComponentType) { case ComponentType.CustomObject: newsavedobject = new SavedCustomObject(); CreateCustomSavedObject((SavedCustomObject)newsavedobject, worldsave); break; case ComponentType.CircuitBoard: CircuitBoard board = worldsave.GetComponent <CircuitBoard>(); newsavedobject = new SavedCircuitBoard { x = board.x, z = board.z, color = board.GetBoardColor }; break; case ComponentType.Wire: InputInputConnection IIConnection = worldsave.GetComponent <InputInputConnection>(); newsavedobject = new SavedWire { InputInput = IIConnection, length = worldsave.transform.localScale.z }; break; case ComponentType.Button: newsavedobject = new SavedButton(); break; case ComponentType.PanelButton: newsavedobject = new SavedPanelButton(); break; case ComponentType.Delayer: Delayer delayer = worldsave.GetComponent <Delayer>(); newsavedobject = new SavedDelayer { OutputOn = delayer.Output.On, DelayCount = delayer.DelayCount }; break; case ComponentType.Display: Display display = worldsave.GetComponentInChildren <Display>(); newsavedobject = new SavedDisplay { Color = display.DisplayColor }; break; case ComponentType.PanelDisplay: Display paneldisplay = worldsave.GetComponentInChildren <Display>(); newsavedobject = new SavedPanelDisplay { Color = paneldisplay.DisplayColor }; break; case ComponentType.Inverter: Inverter notgate = worldsave.GetComponent <Inverter>(); newsavedobject = new SavedInverter { OutputOn = notgate.Output.On }; break; case ComponentType.Label: Label label = worldsave.GetComponent <Label>(); newsavedobject = new SavedLabel { text = label.text.text, FontSize = label.text.fontSize }; break; case ComponentType.PanelLabel: Label panellabel = worldsave.GetComponent <Label>(); newsavedobject = new SavedPanelLabel { text = panellabel.text.text, FontSize = panellabel.text.fontSize }; break; case ComponentType.Switch: // SWITCH-F*****G-CEPTION Switch circuitswitch = worldsave.GetComponentInChildren <Switch>(); newsavedobject = new SavedSwitch { on = circuitswitch.On }; break; case ComponentType.PanelSwitch: Switch panelswitch = worldsave.GetComponentInChildren <Switch>(); newsavedobject = new SavedPanelSwitch { on = panelswitch.On }; break; case ComponentType.Peg: newsavedobject = new SavedPeg(); break; case ComponentType.ThroughPeg: newsavedobject = new SavedThroughPeg(); break; case ComponentType.Blotter: Blotter blotter = worldsave.GetComponent <Blotter>(); newsavedobject = new SavedBlotter { OutputOn = blotter.Output.On }; break; case ComponentType.ThroughBlotter: Blotter throughblotter = worldsave.GetComponent <Blotter>(); newsavedobject = new SavedThroughBlotter { OutputOn = throughblotter.Output.On }; break; case ComponentType.ColorDisplay: newsavedobject = new SavedColorDisplay(); break; case ComponentType.PanelColorDisplay: newsavedobject = new SavedPanelColorDisplay(); break; case ComponentType.Noisemaker: Noisemaker noisemaker = worldsave.GetComponentInChildren <Noisemaker>(); newsavedobject = new SavedNoisemaker { ToneFrequency = noisemaker.ToneFrequency }; break; case ComponentType.SnappingPeg: newsavedobject = new SavedSnappingPeg(); break; case ComponentType.Mount: newsavedobject = new SavedMount(); break; case ComponentType.VerticalSnappingPeg: newsavedobject = new SavedVerticalSnappingPeg(); break; case ComponentType.none: Debug.LogError("BIG ERROR tried to save a component with no type!"); break; } newsavedobject.LocalPosition = worldsave.transform.localPosition; newsavedobject.LocalEulerAngles = worldsave.transform.localEulerAngles; if (newsavedobject.CanHaveChildren) { newsavedobject.Children = FindChildSaves(worldsave); } return(newsavedobject); }
private static void CreateCustomSavedObject(SavedCustomObject save, ObjectInfo CreateFromThis) { }