public void SetParentOfObject(int parentId, FrameEntry childEntry, FrameEntry parentEntry) { //get the index and child object FrameObjectBase obj = (childEntry as FrameObjectBase); //fix any parent-children relationships. if (obj.Parent != null) { obj.Parent.Children.Remove(obj); obj.Parent = null; } if (parentEntry != null) //this is if the user wants to change parent { int index = (parentEntry is FrameHeaderScene) ? frameScenes.IndexOfValue(parentEntry.RefID) : GetIndexOfObject(parentEntry.RefID); FrameObjectBase parentObj = (parentEntry as FrameObjectBase); //fix any parent relationships only if ParentObj is not null. if (parentObj != null) { parentObj.Children.Add(obj); obj.Parent = parentObj; } //set parent indexes. if (parentId == 0) { obj.ParentIndex1.SetParent(index, parentEntry); obj.ReplaceRef(FrameEntryRefTypes.Parent1, parentEntry.RefID); } else if (parentId == 1) { obj.ParentIndex2.SetParent(index, parentEntry); obj.ReplaceRef(FrameEntryRefTypes.Parent2, parentEntry.RefID); } } else //this is if the user wants to remove the parent relationship, therefore -1 = root. { if (parentId == 0) { obj.ParentIndex1.SetParent(-1, "root", 0); obj.SubRef(FrameEntryRefTypes.Parent1); } else if (parentId == 1) { obj.ParentIndex2.SetParent(-1, "root", 0); obj.SubRef(FrameEntryRefTypes.Parent2); } } foreach (var pair in frameObjects) { (pair.Value as FrameObjectBase).SetWorldTransform(); } }
private void UpdateParentChildRelations(FrameResource FrameResource, FrameObjectBase ObjectToUpdate) { FrameObjectBase Child = ObjectToUpdate; // Parent Frames FrameObjectBase Parent1 = null; FrameObjectBase Parent2 = null; if (Child.Refs.ContainsKey(FrameEntryRefTypes.Parent1)) { if (OldRefIDLookupTable.TryGetValue(Child.Refs[FrameEntryRefTypes.Parent1], out Parent1)) { Child.SubRef(FrameEntryRefTypes.Parent1); FrameResource.SetParentOfObject(0, Child, Parent1); } else { Child.SubRef(FrameEntryRefTypes.Parent1); FrameResource.SetParentOfObject(0, Child, null); } } if (Child.Refs.ContainsKey(FrameEntryRefTypes.Parent2)) { if (OldRefIDLookupTable.TryGetValue(Child.Refs[FrameEntryRefTypes.Parent2], out Parent2)) { Child.SubRef(FrameEntryRefTypes.Parent2); FrameResource.SetParentOfObject(1, Child, Parent2); } else { Child.SubRef(FrameEntryRefTypes.Parent2); FrameResource.SetParentOfObject(1, Child, null); } } }