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();
            }
        }
示例#2
0
        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);
                }
            }
        }