public MissionHacks(string missionName, MafiaFormats.Scene2BINLoader data) { try { // Fix backdrop sector var backdrop = GameObject.Find("Backdrop sector"); { if (backdrop != null) { backdrop.AddComponent <BackdropManipulator>(); } foreach (Transform child in backdrop.transform) { SetUpSkybox(child); } } // Change view distance { var mainCamera = GameObject.Find("Main Camera").GetComponent <Camera>(); var viewDistance = data.viewDistance; mainCamera.farClipPlane = viewDistance; } switch (missionName.ToLower()) { case "00menu": { var projectorRay = GameObject.Find("9promitac/Cylinder18"); var projectorIDontCarePart = GameObject.Find("9promitac/Cylinder05"); if (projectorRay != null && projectorIDontCarePart != null) { var meshRenderer = projectorRay.GetComponent <MeshRenderer>(); var mat = meshRenderer.sharedMaterial; mat.shader = Shader.Find("Unlit/Transparent"); var oldTex = mat.GetTexture("_MainTex"); var tex = ModelGenerator.LoadTexture(oldTex.name, false, true, true); mat.SetTexture("_MainTex", tex); projectorIDontCarePart.SetActive(false); } var lampRay = GameObject.Find("svetlo"); if (lampRay != null) { var meshRenderer = lampRay.GetComponent <MeshRenderer>(); var mat = meshRenderer.sharedMaterial; mat.shader = Shader.Find("Unlit/Transparent"); var oldTex = mat.GetTexture("_MainTex"); var tex = ModelGenerator.LoadTexture(oldTex.name, false, true, true); mat.SetTexture("_MainTex", tex); //mat.SetColor("_Color", new Color(1f, 244/255f, 112/255f, 62/255f)); } var photoFrame = GameObject.Find("foto"); if (photoFrame != null) { var s = photoFrame.transform.localScale; photoFrame.transform.localScale = new Vector3(2.304092f, s.y, s.z); } var light9 = GameObject.Find("light9"); if (light9 != null) { light9.GetComponent <Light>().shadowNearPlane = 0.015f; } } break; case "mise20-galery": { var obloha = GameObject.Find("obloha"); var obloha01 = GameObject.Find("obloha01"); if (obloha != null) { SetUpSkybox(obloha.transform); obloha.transform.parent = backdrop.transform; obloha.transform.localScale = new Vector3(2, 2, 2); } if (obloha01 != null) { obloha01.SetActive(false); } } break; case "mise16-letiste": { var slunko = GameObject.Find("denjasno/slunko"); slunko.gameObject.SetActive(false); } break; } // NOTE: Create a spawn point for player // TODO: Improve it /* var player = GameObject.Find("Main Player"); * * if (player != null) * { * Debug.Log("Player was found! Locating spawn point."); * * var objects = Resources.FindObjectsOfTypeAll(typeof(ObjectDefinition)); * * foreach (ObjectDefinition obj in objects) * { * if (obj.data.specialType == MafiaFormats.Scene2BINLoader.SpecialObjectType.Player) * { * var tr = obj.transform; * * player.transform.position = tr.position; * player.transform.rotation = tr.rotation; * tr.gameObject.SetActive(false); * * var rg = player.GetComponent<Rigidbody>(); * rg.velocity = new Vector3(0f, 0f, 0f); * rg.angularVelocity = new Vector3(0f, 0f, 0f); * break; * } * } * } */ } catch (System.Exception ex) { Debug.LogErrorFormat("There was an issue applying patches to the mission. Make sure the loaded mission wasn't edited!\n{0}", ex.ToString()); } }
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); }