public void RegisterLevelBuilderEvent(UserEditableObject[] ueos, LevelBuilderEventType type) { if (debug) { Debug.Log("<color=fff>Register</color> " + type); } List <LevelBuilderEventObject> lbeos = new List <LevelBuilderEventObject>(); foreach (UserEditableObject ueo in ueos) { if (!TypeIsRegisterable(ueo)) { continue; } if (!ueo.isSerializeableForClass) { continue; } lbeos.Add(new LevelBuilderEventObject(ueo, ueo.GetUuid(), JsonUtil.GetUeoBaseProps(new SimpleJSON.JSONClass(), ueo, SceneSerializationType.Class))); if (debug) { Debug.Log("....<color=fff>uuid</color>:" + ueo.GetUuid()); } } if (lbeos.Count > 0) { LevelBuilderEvent ev = new LevelBuilderEvent(lbeos, type); pastEvents.Add(ev); } }
public void Undo() { if (pastEvents.Count > 0) { LevelBuilderEvent ue = pastEvents[pastEvents.Count - 1]; if (debug) { Debug.Log("<color=#9f9>Undo: " + ue.type + "</color> ueos:"); } switch (ue.type) { case LevelBuilderEventType.Create: foreach (LevelBuilderEventObject lbeo in ue.lbeos) { if (lbeo.ueo) { Destroy(lbeo.ueo.gameObject); } } break; case LevelBuilderEventType.Delete: List <LevelBuilderEventObject> replacementGroup = new List <LevelBuilderEventObject>(); foreach (LevelBuilderEventObject lbeo in ue.lbeos) { if (debug) { Debug.Log("<color=5f5>Creating (undo)</color>: " + lbeo.uuid); } UserEditableObject ueo = LevelBuilderObjectManager.inst.PlaceObject(lbeo.N, SceneSerializationType.Class, lbeo.uuid); replacementGroup.Add(new LevelBuilderEventObject(ueo, lbeo.uuid, JsonUtil.GetUeoBaseProps(new SimpleJSON.JSONClass(), ueo, SceneSerializationType.Class))); ReconnectBrokenUuidsForUndeletedObjects(ueo, lbeo.uuid); } ue.lbeos = replacementGroup; break; case LevelBuilderEventType.Modified: foreach (LevelBuilderEventObject lbeo in ue.lbeos) { // Debug.Log("undo mod;"+kvp.Key.myName); lbeo.ueo.SetProperties(lbeo.N); lbeo.ueo.SetTransformProperties(lbeo.N); // JsonUtil.SetUeoTransformProps(kvp.key, kvp.Value); } break; default: break; } futureEvents.Add(ue); pastEvents.Remove(ue); } }
public void Redo() { if (futureEvents.Count > 0) { LevelBuilderEvent ue = futureEvents[futureEvents.Count - 1]; if (debug) { Debug.Log("<color=#9f9>Redo: " + ue.type + "</color> ueos:"); } switch (ue.type) { case LevelBuilderEventType.Create: List <LevelBuilderEventObject> replacementGroup = new List <LevelBuilderEventObject>(); foreach (LevelBuilderEventObject lbeo in ue.lbeos) { if (debug) { Debug.Log("<color=5f5>Creating (</color><color=44f>do</color>): " + lbeo.uuid); } UserEditableObject ueo = LevelBuilderObjectManager.inst.PlaceObject(lbeo.N, SceneSerializationType.Class, lbeo.uuid); replacementGroup.Add(new LevelBuilderEventObject(ueo, ueo.GetUuid(), JsonUtil.GetUeoBaseProps(new SimpleJSON.JSONClass(), ueo, SceneSerializationType.Class))); ReconnectBrokenUuidsForUndeletedObjects(ueo, ueo.GetUuid()); } ue.lbeos = replacementGroup; break; case LevelBuilderEventType.Delete: foreach (LevelBuilderEventObject lbeo in ue.lbeos) { if (lbeo.ueo) { Destroy(lbeo.ueo.gameObject); } } break; case LevelBuilderEventType.Modified: foreach (LevelBuilderEventObject lbeo in ue.lbeos) { lbeo.ueo.SetProperties(lbeo.N); lbeo.ueo.SetTransformProperties(lbeo.N); } break; default: break; // Debug.Log("redoing properties of:"+ue.obj.name+", set prop to:"+ue.prop.ToString()); // ue.obj.GetComponent<UserEditableObject>().SetProperties(ue.prop); } futureEvents.Remove(ue); pastEvents.Add(ue); } }