예제 #1
0
    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");
    }
예제 #2
0
 public void LoadAOMeshes()
 {
     foreach (ArtObjectInstance ao in loaded.ArtObjects.Values)
     {
         ArtObject aoL = aoCache[ao.Id];
         aoMeshCache.Add(aoL, FezToUnity.ArtObjectToMesh(aoL));
     }
 }
예제 #3
0
    public static void SetMeshCollider(Trile trile)
    {
        Mesh trileMesh = FezToUnity.TrileToMesh(trile);

        importerCollider.gameObject.SetActive(true);
        importerCollider.sharedMesh = null;
        importerCollider.sharedMesh = trileMesh;
    }
예제 #4
0
 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));
     }
 }
예제 #5
0
 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));
     }
 }
예제 #6
0
    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));
        }
    }
예제 #7
0
    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");
    }
예제 #8
0
    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");
    }
예제 #9
0
 public void UpdateAO()
 {
     mf.mesh = FezToUnity.ArtObjectToMesh(ao);
     mr.material.mainTexture = ao.Cubemap;
 }
예제 #10
0
    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);
    }