/// <summary> /// Tell the save provider to save the object /// </summary> /// <param name="targetObject"></param> public virtual void Start(SaveObjectInfo targetObject) { CreateSaveSlot(false); // make sure we have a save slot we can write to BeginObjectSave(targetObject.GameObject, targetObject.GuidComponent); SaveObject_internal(targetObject); FinishObjectSave(); }
public void Start(SaveObjectInfo objectInfo) { if (!DoesSaveExist(objectInfo.GuidComponent)) { Debug.LogWarning($"Failed to find save for object with id {objectInfo.GetGuid}"); } BeginObjectLoad(objectInfo.GetGuid); var componentName = ""; while (LoadNextComponent(ref componentName)) { var component = objectInfo.GetComponentFromName(componentName); if (!component) { continue; } var componentType = component.GetType(); while (GetNextMember(out var memberName)) { var field = componentType.GetField(memberName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); if (field != null) { var currentValue = field.GetValue(component); UpdateMemberValue(ref currentValue); field.SetValue(component, currentValue); } else { var property = componentType.GetProperty(memberName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); if (property == null) { continue; } var currentValue = property.GetValue(component); UpdateMemberValue(ref currentValue); property.SetValue(component, currentValue); } } FinishComponentLoad(); } FinishObjectLoad(); }
private void SaveObject_internal(SaveObjectInfo targetObjectInfo) { /* * BeginComponentSave(nameof(GameObject)); // not realy a component but "its works" * { * var obj = targetObjectInfo.GameObject; * * GetNextMember("activeInHierarchy", obj.activeInHierarchy); * GetNextMember("Tag",obj.tag); * } * FinishComponentSave(); */ foreach (var saveComponent in targetObjectInfo.GetComponents()) { BeginComponentSave(saveComponent.GetType().Name); if (saveComponent.GetType() == typeof(Transform)) { var transform = saveComponent.transform; AddMember("position", transform.localPosition); AddMember("localScale", transform.localScale); AddMember("eulerAngles", transform.localEulerAngles); } else { foreach (var property in saveComponent.GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)) { if (property.IsDefined(typeof(SaveAttribute)) && property.CanRead && property.CanWrite) { AddMember(property.Name, property.GetValue(saveComponent)); //Debug.Log($"property: {} value = {property.GetValue(saveComponent)}"); } } foreach (var field in saveComponent.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)) { if (field.IsDefined(typeof(SaveAttribute)) && !field.IsLiteral) { AddMember(field.Name, field.GetValue(saveComponent)); //Debug.Log($"field: {field.Name} value = {field.GetValue(saveComponent)}"); } } } FinishComponentSave(); } }