public override GameObject LoadObject(string path) { GameObject rootObject = null; if (rootObject == null) { rootObject = new GameObject(path); } else { return(rootObject); } Stream fs; try { fs = GameManager.instance.fileSystem.GetStreamFromPath(path); } catch { return(null); } using (var reader = new BinaryReader(fs)) { var sceneLoader = new MafiaFormats.Scene2BINLoader(); lastLoader = sceneLoader; sceneLoader.Load(reader); var objects = new List <KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object> >(); var backdrop = new GameObject("Backdrop sector"); backdrop.transform.parent = rootObject.transform; var primary = new GameObject("Primary sector"); primary.transform.parent = rootObject.transform; foreach (var obj in sceneLoader.objects) { GameObject newObject; if (obj.Value.name == "Primary sector") { continue; } if (obj.Value.modelName == null || (obj.Value.type != MafiaFormats.Scene2BINLoader.ObjectType.Model && obj.Value.specialType == 0)) { newObject = new GameObject(); } else { newObject = GameManager.instance.modelGenerator.LoadObject(Path.Combine("models", obj.Value.modelName)); } if (newObject == null) { continue; } newObject.name = obj.Value.name; newObject.transform.localPosition = obj.Value.pos; newObject.transform.localRotation = obj.Value.rot; newObject.transform.localScale = obj.Value.scale; objects.Add(new KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object>(newObject, obj.Value)); } foreach (var obj in objects) { var newObject = obj.Key; if (obj.Value.parentName != null) { var parentObject = GameObject.Find(obj.Value.parentName); if (parentObject != null) { newObject.transform.parent = parentObject.transform; } else { newObject.transform.parent = rootObject.transform; } } else { newObject.transform.parent = rootObject.transform; } newObject.transform.localPosition = obj.Value.pos; newObject.transform.localRotation = obj.Value.rot; newObject.transform.localScale = obj.Value.scale; var specObject = newObject.AddComponent <ObjectDefinition>(); specObject.data = obj.Value; specObject.Init(); } } // NOTE(zaklaus): Hardcode 'Primary sector' scale to (1,1,1) var primarySector = GameObject.Find("Primary sector"); if (primarySector != null) { primarySector.transform.localScale = new Vector3(1, 1, 1); } //StoreChachedObject(path, rootObject); return(rootObject); }
public override GameObject LoadObject(string path, Mission mission) { GameObject rootObject = LoadCachedObject(path); if (rootObject == null) { rootObject = new GameObject(path); } else { return(rootObject); } Stream fs; try { fs = GameAPI.instance.fileSystem.GetStreamFromPath(path); } catch { return(null); } using (var reader = new BinaryReader(fs)) { var sceneLoader = new MafiaFormats.Scene2BINLoader(); lastLoader = sceneLoader; sceneLoader.Load(reader); fs.Close(); // TODO: Check if refs are null, clear then ModelGenerator.cachedTextures.Clear(); var objects = new List <KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object> >(); var backdrop = new GameObject("Backdrop sector"); backdrop.transform.parent = rootObject.transform; StoreReference(mission, backdrop.name, backdrop); foreach (var obj in sceneLoader.objects) { AddNewObject(objects, mission, obj); } // Handle special cases of objects loaded by external source foreach (var obj in sceneLoader.externalObjects) { var go = BaseGenerator.FetchCacheReference(mission, obj.Value.name)?.gameObject; if (go != null) { var specialObjDef = go.GetComponent <ObjectDefinition>(); if (specialObjDef == null) { specialObjDef = go.AddComponent <ObjectDefinition>(); } specialObjDef.data = obj.Value; specialObjDef.Init(); } // Seems like object acts on its own, add it anyway else { AddNewObject(objects, mission, obj); } } var primary = FetchReference(mission, "Primary sector"); if (primary == null) { primary = new GameObject("Primary Sector"); } var objDef = primary.AddComponent <ObjectDefinition>(); var dummySectorData = new MafiaFormats.Scene2BINLoader.Object(); dummySectorData.type = MafiaFormats.Scene2BINLoader.ObjectType.Sector; objDef.data = dummySectorData; primary.transform.parent = rootObject.transform; objects = objects.OrderByDescending(x => x.Value.isPatch).ToList(); foreach (var obj in objects) { var newObject = obj.Key; if (obj.Value.isPatch) { var searchName = obj.Value.name; var redefObject = FindParent(mission, searchName, null); if (redefObject != null) { if (obj.Value.isParentPatched && obj.Value.parentName != null) { var parent = FindParent(mission, obj.Value.parentName); if (parent != null) { redefObject.transform.parent = parent.transform; } } if (obj.Value.isPositionPatched) { redefObject.transform.localPosition = obj.Value.pos; } /* if (obj.Value.isPosition2Patched) * redefObject.transform.position = obj.Value.pos2; */ if (obj.Value.isRotationPatched) { redefObject.transform.localRotation = obj.Value.rot; } if (obj.Value.isScalePatched) { redefObject.transform.localScale = obj.Value.scale; } redefObject.SetActive(!obj.Value.isHidden); GameObject.DestroyImmediate(newObject, true); continue; } } newObject.transform.parent = FindParent(mission, obj.Value.parentName, rootObject).transform; newObject.transform.localPosition = obj.Value.pos; newObject.transform.localRotation = obj.Value.rot; newObject.transform.localScale = obj.Value.scale; newObject.SetActive(!obj.Value.isHidden); var specObject = newObject.AddComponent <ObjectDefinition>(); specObject.data = obj.Value; specObject.Init(); } } // NOTE(zaklaus): Hardcode 'Primary sector' scale to (1,1,1) var primarySector = GameObject.Find("Primary sector"); if (primarySector != null) { primarySector.transform.localScale = new Vector3(1, 1, 1); } //StoreChachedObject(path, rootObject); return(rootObject); }
public override GameObject LoadObject(string path) { GameObject rootObject = LoadCachedObject(path); if (rootObject == null) { rootObject = new GameObject(path); } else { return(rootObject); } FileStream fs; try { fs = new FileStream(GameManager.instance.fileSystem.GetPath(path), FileMode.Open); } catch { return(null); } using (var reader = new BinaryReader(fs)) { var sceneLoader = new MafiaFormats.Scene2BINLoader(); lastLoader = sceneLoader; sceneLoader.Load(reader); var objects = new List <KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object> >(); foreach (var obj in sceneLoader.objects) { if (obj.Value.type != MafiaFormats.Scene2BINLoader.ObjectType.Model) { continue; } GameObject newObject; if (obj.Value.modelName == null) { newObject = new GameObject(); } else { newObject = GameManager.instance.modelGenerator.LoadObject(Path.Combine("models", obj.Value.modelName)); } newObject.name = obj.Value.name; objects.Add(new KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object>(newObject, obj.Value)); } foreach (var obj in objects) { var newObject = obj.Key; if (obj.Value.parentName != null) { var parentObject = GameObject.Find(obj.Value.parentName); if (parentObject != null) { newObject.transform.parent = parentObject.transform; } else { newObject.transform.parent = rootObject.transform; } } else { newObject.transform.parent = rootObject.transform; } newObject.transform.localPosition = obj.Value.pos; newObject.transform.localRotation = obj.Value.rot; newObject.transform.localScale = obj.Value.scale; var specObject = newObject.AddComponent <ObjectDefinition>(); specObject.data = obj.Value; specObject.Init(); } } StoreChachedObject(path, rootObject); return(rootObject); }
public override GameObject LoadObject(string path, Mission mission) { GameObject rootObject = LoadCachedObject(path); if (rootObject == null) { rootObject = new GameObject(path); } else { return(rootObject); } Stream fs; try { fs = GameAPI.instance.fileSystem.GetStreamFromPath(path); } catch { return(null); } using (var reader = new BinaryReader(fs)) { var sceneLoader = new MafiaFormats.Scene2BINLoader(); lastLoader = sceneLoader; sceneLoader.Load(reader); fs.Close(); // TODO: Check if refs are null, clear then ModelGenerator.cachedTextures.Clear(); var objects = new List <KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object> >(); var backdrop = new GameObject("Backdrop sector"); backdrop.transform.parent = rootObject.transform; StoreReference(mission, backdrop.name, backdrop); foreach (var obj in sceneLoader.objects) { GameObject newObject; if (obj.Value.modelName == null || (obj.Value.type != MafiaFormats.Scene2BINLoader.ObjectType.Model && obj.Value.specialType == 0)) { newObject = new GameObject(); } else { newObject = GameAPI.instance.modelGenerator.LoadObject(Path.Combine("models", obj.Value.modelName), null); } if (newObject == null) { continue; } newObject.name = obj.Value.name; StoreReference(mission, newObject.name, newObject); newObject.transform.localPosition = obj.Value.pos; newObject.transform.localRotation = obj.Value.rot; newObject.transform.localScale = obj.Value.scale; objects.Add(new KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object>(newObject, obj.Value)); } var primary = FetchReference(mission, "Primary sector"); var objDef = primary.AddComponent <ObjectDefinition>(); var dummySectorData = new MafiaFormats.Scene2BINLoader.Object(); dummySectorData.type = MafiaFormats.Scene2BINLoader.ObjectType.Sector; objDef.data = dummySectorData; primary.transform.parent = rootObject.transform; foreach (var obj in objects) { var newObject = obj.Key; if (obj.Value.isPatch) { var searchName = obj.Value.name.Replace(".", "/"); var redefObject = GameObject.Find(searchName); if (redefObject != null) { if (obj.Value.isParentPatched && obj.Value.parentName != null) { var parent = FindParent(mission, obj.Value.parentName); if (parent != null) { redefObject.transform.parent = parent.transform; } } if (obj.Value.isPositionPatched) { redefObject.transform.localPosition = obj.Value.pos; } /* if (obj.Value.isPosition2Patched) * redefObject.transform.position = obj.Value.pos2; */ if (obj.Value.isRotationPatched) { redefObject.transform.localRotation = obj.Value.rot; } if (obj.Value.isScalePatched) { redefObject.transform.localScale = obj.Value.scale; } redefObject.SetActive(!obj.Value.isHidden); GameObject.DestroyImmediate(newObject, true); continue; } } newObject.transform.parent = FindParent(mission, obj.Value.parentName, rootObject).transform; newObject.transform.localPosition = obj.Value.pos; newObject.transform.localRotation = obj.Value.rot; newObject.transform.localScale = obj.Value.scale; var specObject = newObject.AddComponent <ObjectDefinition>(); specObject.data = obj.Value; specObject.Init(); } } // NOTE(zaklaus): Hardcode 'Primary sector' scale to (1,1,1) var primarySector = GameObject.Find("Primary sector"); if (primarySector != null) { primarySector.transform.localScale = new Vector3(1, 1, 1); } StoreChachedObject(path, rootObject); return(rootObject); }