public static GameObject ReadFile(BinaryReader Reader, Level ParentLevel, SceneObject ParentScene) { string TypeString = Reader.ReadString(); GameObject g = CreatorBasic.ReturnObjectOfType(TypeString); ParentLevel.AddObject(g, ParentScene); return(ReadObject(Reader, ParentLevel, g)); }
public GameObject Clone(GameObject Parent, SceneObject Scene) { bool DictionaryCreator = CloneDictionary == null; if (DictionaryCreator) { CloneDictionary = new Dictionary <GameObject, GameObject>(); } GameObject g = CreatorBasic.ReturnObjectOfType(GetType()); if (!CloneDictionary.ContainsKey(this)) { CloneDictionary.Add(this, g); } else { CloneDictionary[this] = g; } FillBlankClones(); ReferenceGameObject = g; ParentLevel.AddObject(g, Scene); Stream s = new MemoryStream(); WriteClone(new BinaryWriter(s)); Console.Write(s.Length); s.Position = 0; g.ReadClone(new BinaryReader(s)); s.Close(); if (Scene != null) { Scene.AddSelected(g); } SceneObject SceneParent = Scene; if (!g.GetType().IsSubclassOf(typeof(SceneObject))) { if (Parent == null) { hierarchyParent.AddHierarchyObject(g); } else { Parent.AddHierarchyObject(g); } } else { SceneParent = (SceneObject)g; } foreach (GameObject child in HierarchyChildren) { if (child != this) { child.Clone(g, SceneParent); } } g.PostRead(); if (ObjectListValue.LinkedObjects.ContainsKey(this)) { foreach (ObjectListValue l in ObjectListValue.LinkedObjects[this]) { if (!CloneDictionary.ContainsValue(l.Parent) && !CloneDictionary.ContainsKey(l.Parent)) { l.add(g); } } } if (DictionaryCreator) { CloneDictionary = null; } return(g); }