public void LoadArtObject(string name) { Debug.Log("Load"); string path = OutputPath.OutputPathDir + "art objects/" + name.ToLower() + ".xnb"; ArtObject aoL = FmbUtil.ReadObject <ArtObject>(path); if (aoCache.ContainsKey(aoL.Name)) { return; } else { aoCache.Add(aoL.Name, aoL); } Debug.Log("Cached"); if (!aoMeshCache.ContainsKey(aoL)) { aoMeshCache.Add(aoL, FezToUnity.ArtObjectToMesh(aoL)); } ListAOUnderUI(); Debug.Log("Displayed"); }
public void LoadAOMeshes() { foreach (ArtObjectInstance ao in loaded.ArtObjects.Values) { ArtObject aoL = aoCache[ao.Id]; aoMeshCache.Add(aoL, FezToUnity.ArtObjectToMesh(aoL)); } }
public static void SetMeshCollider(Trile trile) { Mesh trileMesh = FezToUnity.TrileToMesh(trile); importerCollider.gameObject.SetActive(true); importerCollider.sharedMesh = null; importerCollider.sharedMesh = trileMesh; }
public void LoadSetMeshes() { setMat = new Material(Shader.Find("Standard")); s.TextureAtlas.filterMode = FilterMode.Point; setMat.mainTexture = s.TextureAtlas; foreach (Trile t in s.Triles.Values) { trilesetCache.Add(t, FezToUnity.TrileToMesh(t)); } }
public void LoadAOMeshes() { foreach (ArtObjectInstance ao in loaded.ArtObjects.Values) { ArtObject aoL = aoCache[ao.ArtObjectName]; if (aoMeshCache.ContainsKey(aoL)) { continue; } aoMeshCache.Add(aoL, FezToUnity.ArtObjectToMesh(aoL)); } }
public void LoadSetMeshes() { setMat = new Material(Shader.Find("Diffuse")); s.TextureAtlas.filterMode = FilterMode.Point; setMat.mainTexture = s.TextureAtlas; RotatingTrile.Instance.mr.material = setMat; PlacmentPreview.Instance.mr.material.mainTexture = setMat.mainTexture; foreach (Trile t in s.Triles.Values) { trilesetCache.Add(t, FezToUnity.TrileToMesh(t)); } }
public void GenerateAO(Vector3 pos, string name) { if (!aoCache.ContainsKey(name)) { return; } ArtObject ao = aoCache[name]; ArtObjectInstance newImport = new ArtObjectInstance(); newImport.ArtObjectName = name; newImport.Position = pos; newImport.Scale = Vector3.one; GameObject newTrile; if (aoObjectCache.Count > 0) { newTrile = aoObjectCache[0]; aoObjectCache.RemoveAt(0); newTrile.SetActive(true); } else { newTrile = Instantiate(aoPrefab); } MeshFilter mf = newTrile.GetComponent <MeshFilter>(); MeshRenderer mr = newTrile.GetComponent <MeshRenderer>(); MeshCollider mc = newTrile.GetComponent <MeshCollider>(); ArtObjectImported aoI = newTrile.GetComponent <ArtObjectImported>(); aoI.myInstance = newImport; mr.material = FezToUnity.GeometryToMaterial(aoCache[name].Cubemap); mf.mesh = aoMeshCache[aoCache[name]]; mc.sharedMesh = aoMeshCache[aoCache[name]]; newTrile.transform.position = pos; newTrile.transform.rotation = newImport.Rotation; newTrile.name = name; newTrile.transform.parent = transform.FindChild("ArtObjects"); }
IEnumerator LoadLevelCoroutine() { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); yield return(new WaitForEndOfFrame()); //Calculate level visibility foreach (KeyValuePair <TrileEmplacement, TrileInstance> kvp in loaded.Triles) { TrileEmplacement currP = kvp.Key; if (kvp.Value.TrileId < 0) { visibility.Add(currP, false); continue; } if (kvp.Value.ForceSeeThrough || s.Triles[kvp.Value.TrileId].SeeThrough) { visibility.Add(currP, true); continue; } TrileEmplacement[] checkPos = new TrileEmplacement[6]; checkPos[0] = new TrileEmplacement(currP.X, currP.Y, currP.Z + 1); checkPos[1] = new TrileEmplacement(currP.X, currP.Y, currP.Z - 1); checkPos[2] = new TrileEmplacement(currP.X, currP.Y + 1, currP.Z); checkPos[3] = new TrileEmplacement(currP.X, currP.Y - 1, currP.Z); checkPos[4] = new TrileEmplacement(currP.X + 1, currP.Y, currP.Z); checkPos[5] = new TrileEmplacement(currP.X - 1, currP.Y, currP.Z); bool isVisible = false; foreach (TrileEmplacement pos in checkPos) { if (!loaded.Triles.ContainsKey(pos)) { visibility.Add(currP, true); isVisible = true; break; } else if (loaded.Triles[pos].TrileId < 0) { visibility.Add(currP, true); isVisible = true; break; } else if (loaded.Triles[pos].ForceSeeThrough || s.Triles[loaded.Triles[pos].TrileId].SeeThrough) { visibility.Add(currP, true); isVisible = true; break; } } if (!isVisible) { visibility.Add(currP, false); } } int index = 0; //Generate triles { foreach (KeyValuePair <TrileEmplacement, TrileInstance> kvp in loaded.Triles) { if (!visibility[kvp.Key]) { continue; } GameObject g = NewTrileObject(kvp.Key); index++; if (index > 50) { index = 0; if (loadOverFrames) { yield return(new WaitForEndOfFrame()); } } } //Generate Planes { foreach (KeyValuePair <int, BackgroundPlane> kvp in loaded.BackgroundPlanes) { BackgroundPlane b = kvp.Value; if (b.Hidden || b.Animated || !b.Visible) { continue; } GameObject newPlane; if (planeObjectCache.Count > 0) { newPlane = planeObjectCache[0]; planeObjectCache.RemoveAt(0); newPlane.gameObject.SetActive(true); } else { newPlane = Instantiate(planePrefab); } newPlane.transform.rotation = b.Rotation; newPlane.transform.position = b.Position - (Vector3.one / 2); newPlane.transform.localScale = new Vector3(-b.Size.x, -b.Size.y, b.Size.z); MeshRenderer mr = newPlane.GetComponent <MeshRenderer>(); try { Texture2D tex = FmbUtil.ReadObject <Texture2D>(OutputPath.OutputPathDir + "background planes/" + b.TextureName.ToLower() + ".xnb"); if (tex != null) { //tex.alphaIsTransparency=true; mr.material.mainTexture = tex; mr.material.mainTexture.filterMode = FilterMode.Point; } else { Debug.Log("Tex Null!"); } } catch (System.Exception e) { Debug.Log(e); Debug.Log(OutputPath.OutputPathDir + "background planes/" + b.TextureName.ToLower() + ".xnb"); Destroy(newPlane); continue; } newPlane.name = b.TextureName; index++; if (index > 5) { index = 0; if (loadOverFrames) { yield return(new WaitForEndOfFrame()); } } newPlane.transform.rotation = Quaternion.Euler(newPlane.transform.eulerAngles.x, newPlane.transform.eulerAngles.y - 180, newPlane.transform.eulerAngles.z); newPlane.transform.parent = transform.FindChild("Planes"); } } //Generate Art Objects { foreach (KeyValuePair <int, ArtObjectInstance> kvp in loaded.ArtObjects) { GameObject newTrile; if (aoObjectCache.Count > 0) { newTrile = aoObjectCache[0]; aoObjectCache.RemoveAt(0); newTrile.SetActive(true); } else { newTrile = Instantiate(aoPrefab); } MeshFilter mf = newTrile.GetComponent <MeshFilter>(); MeshRenderer mr = newTrile.GetComponent <MeshRenderer>(); MeshCollider mc = newTrile.GetComponent <MeshCollider>(); ArtObjectImported aoI = newTrile.GetComponent <ArtObjectImported>(); aoI.myInstance = kvp.Value; mr.material = FezToUnity.GeometryToMaterial(aoCache[kvp.Value.ArtObjectName].Cubemap); mf.mesh = aoMeshCache[aoCache[kvp.Value.ArtObjectName]]; mc.sharedMesh = aoMeshCache[aoCache[kvp.Value.ArtObjectName]]; newTrile.transform.position = kvp.Value.Position - (Vector3.one / 2); newTrile.transform.rotation = kvp.Value.Rotation; index++; if (index > 5) { index = 0; if (loadOverFrames) { yield return(new WaitForEndOfFrame()); } } newTrile.name = kvp.Value.ArtObjectName; newTrile.transform.parent = transform.FindChild("ArtObjects"); } } } sw.Stop(); Debug.Log("Objects created in " + sw.ElapsedMilliseconds + " ms"); }
public void UpdateAO() { mf.mesh = FezToUnity.ArtObjectToMesh(ao); mr.material.mainTexture = ao.Cubemap; }
IEnumerator LoadLevelCoroutine() { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); yield return(new WaitForEndOfFrame()); //Calculate level visibility foreach (KeyValuePair <TrileEmplacement, TrileInstance> kvp in loaded.Triles) { TrileEmplacement currP = kvp.Key; if (kvp.Value.TrileId < 0) { visibility.Add(currP, false); continue; } if (kvp.Value.ForceSeeThrough || s.Triles[kvp.Value.TrileId].SeeThrough) { visibility.Add(currP, true); continue; } List <TrileEmplacement> checkPos = new List <TrileEmplacement>(); checkPos.Add(new TrileEmplacement(currP.X, currP.Y, currP.Z + 1)); checkPos.Add(new TrileEmplacement(currP.X, currP.Y, currP.Z - 1)); checkPos.Add(new TrileEmplacement(currP.X, currP.Y + 1, currP.Z)); checkPos.Add(new TrileEmplacement(currP.X, currP.Y - 1, currP.Z)); checkPos.Add(new TrileEmplacement(currP.X + 1, currP.Y, currP.Z)); checkPos.Add(new TrileEmplacement(currP.X - 1, currP.Y, currP.Z)); bool isVisible = false; foreach (TrileEmplacement pos in checkPos) { if (!loaded.Triles.ContainsKey(pos)) { visibility.Add(currP, true); isVisible = true; break; } else if (loaded.Triles[pos].TrileId < 0) { break; } else if (loaded.Triles[pos].ForceSeeThrough || s.Triles[loaded.Triles[pos].TrileId].SeeThrough) { visibility.Add(currP, true); isVisible = true; break; } } if (!isVisible) { visibility.Add(currP, false); } } int index = 0; //Generate triles { foreach (KeyValuePair <TrileEmplacement, TrileInstance> kvp in loaded.Triles) { if (!visibility[kvp.Key]) { continue; } GameObject newTrile = Instantiate(trilePrefab); MeshFilter mf = newTrile.GetComponent <MeshFilter>(); MeshRenderer mr = newTrile.GetComponent <MeshRenderer>(); BoxCollider bc = newTrile.GetComponent <BoxCollider>(); mr.material = setMat; mf.mesh = trilesetCache[s.Triles[kvp.Value.TrileId]]; bc.size = mf.mesh.bounds.size; bc.center = mf.mesh.bounds.center; newTrile.transform.position = new Vector3(kvp.Key.X, kvp.Key.Y, kvp.Key.Z); newTrile.transform.rotation = Quaternion.Euler(0, Mathf.Rad2Deg * kvp.Value.Data.PositionPhi.w, 0); index++; if (index > 50) { index = 0; //yield return new WaitForEndOfFrame(); } newTrile.name = s.Triles[kvp.Value.TrileId].Name; newTrile.transform.parent = transform.FindChild("Triles"); trileObjects.Add(kvp.Key, newTrile); } //Generate Planes { foreach (KeyValuePair <int, BackgroundPlane> kvp in loaded.BackgroundPlanes) { BackgroundPlane b = kvp.Value; if (b.Hidden) { continue; } GameObject newPlane = Instantiate(planePrefab); newPlane.transform.rotation = b.Rotation; newPlane.transform.position = b.Position - (Vector3.one / 2); newPlane.transform.localScale = new Vector3(-b.Size.x, -b.Size.y, b.Size.z); MeshRenderer mr = newPlane.GetComponent <MeshRenderer>(); try { Texture2D tex = FmbUtil.ReadObject <Texture2D>(OutputPath.OutputPathDir + "background planes/" + b.TextureName.ToLower() + ".xnb"); if (tex != null) { tex.alphaIsTransparency = true; mr.material.mainTexture = tex; mr.material.mainTexture.filterMode = FilterMode.Point; } else { Debug.Log("Tex Null!"); } } catch (System.Exception e) { Debug.Log(e); Debug.Log(b.TextureName.ToLower()); Destroy(newPlane); continue; } newPlane.name = b.TextureName; index++; if (index > 5) { index = 0; //yield return new WaitForEndOfFrame(); } newPlane.transform.rotation = Quaternion.Euler(newPlane.transform.eulerAngles.x, newPlane.transform.eulerAngles.y - 180, newPlane.transform.eulerAngles.z); newPlane.transform.parent = transform.FindChild("ArtObjects"); } } //Generate Art Objects { foreach (KeyValuePair <int, ArtObjectInstance> kvp in loaded.ArtObjects) { GameObject newTrile = Instantiate(aoPrefab); MeshFilter mf = newTrile.GetComponent <MeshFilter>(); MeshRenderer mr = newTrile.GetComponent <MeshRenderer>(); mr.material = FezToUnity.GeometryToMaterial(aoCache[kvp.Key].Cubemap); mf.mesh = aoMeshCache[aoCache[kvp.Key]]; newTrile.transform.position = kvp.Value.Position - (Vector3.one / 2); newTrile.transform.rotation = kvp.Value.Rotation; index++; if (index > 5) { index = 0; //yield return new WaitForEndOfFrame(); } newTrile.name = kvp.Value.ArtObjectName; newTrile.transform.parent = transform.FindChild("ArtObjects"); } } } sw.Stop(); Debug.Log(sw.ElapsedMilliseconds); }