Exemplo n.º 1
0
 public void SetCubePosition(int x, int y, int z, int lod, PyriteQuery query, CubeLoader manager)
 {
     _x = x;
     _y = y;
     _z = z;
     _lod = lod;
     _pyriteQuery = query;
     _cubeLoader = manager;
     name = string.Format("PH_L{3}:{0}_{1}_{2}", x, y, z, lod);
 }
Exemplo n.º 2
0
    IEnumerator Load()
    {
        DebugLog("START-PyriteQuery.LoadAll()");
        tempPosition = transform.position;
        transform.position = Vector3.zero;
        pyriteQuery = new PyriteQuery(this, SetName, ModelVersion, PyriteServer);
        yield return StartCoroutine(pyriteQuery.LoadAll());
        DebugLog("END-PyriteQuery.LoadAll()");
        DebugLog("Pyrite Detail Levels Count: " + pyriteQuery.DetailLevels.Count);

        pyriteLevel = pyriteQuery.DetailLevels[DetailLevel];
        //var centerVector = pyriteLevel.ModelBoundsMax - pyriteLevel.ModelBoundsMin;
        //var region = pyriteLevel.Octree.Octants;

        var setSize = pyriteLevel.SetSize;
        Debug.Log("Set Size " + setSize);
        //var camPos = new Vector3(setSize.x/2, setSize.y/2, 1.5f);
        //var octIntCubes = pyriteLevel.Octree.AllIntersections(new BoundingBox(centerPos, centerPos));
        //var octIntCubes = pyriteLevel.Octree.AllIntersections(new BoundingSphere(centerPos, setSize.x / 6f));
        //var octIntCubes = pyriteLevel.Octree.AllIntersections(new BoundingSphere(new Vector3(4.5f, 4.5f, 0f), 1f));
        //var octIntCubes = pyriteLevel.Octree.AllIntersections(new BoundingBox(new Vector3(3, 3, 0), new Vector3(3f, 3f, 0f)));
        //var octIntCubes = pyriteLevel.Octree.AllIntersections(new Microsoft.Xna.Framework.BoundingBox(new Vector3(3, 3, 0), new Vector3(3f, 3f, 0f)));
        //var octIntCubes = pyriteLevel.Octree.AllIntersections(new Microsoft.Xna.Framework.BoundingSphere(new Vector3(3, 3, 0), 1f));
        //var octIntCubes = pyriteLevel.Octree.AllIntersections(new BoundingSphere(centerVector, 2f));

        cubeCamPos = pyriteLevel.GetCubeForWorldCoordinates(CameraRig.transform.position);
        LoadCamCubes();

        var worldObject = new GameObject("WorldParent") as GameObject;
        worldObject.transform.position = Vector3.zero;
        worldObject.transform.rotation = Quaternion.identity;
        foreach (var i in pyriteLevel.Octree.AllItems())
        {
            var pCube = CreateCubeFromCubeBounds(i);
            var cubePos = pyriteLevel.GetWorldCoordinatesForCube(pCube);
            var loc = Instantiate(WorldLocatorCube, cubePos, Quaternion.identity) as GameObject;
            loc.transform.localScale = new Vector3(
                      pyriteLevel.WorldCubeScale.x,
                      pyriteLevel.WorldCubeScale.z,
                      pyriteLevel.WorldCubeScale.y);
            loc.transform.parent = worldObject.transform;
        }

        //var octCubes2 = pyriteLevel.Octree.AllItems();
        //foreach (var octCube in octCubes2)
        //{
        //    var pCube = CreateCubeFromCubeBounds(octCube);
        //    var cubePos = pyriteLevel.GetWorldCoordinatesForCube(pCube);
        //    var loc = Instantiate(LocatorCube, cubePos, Quaternion.identity) as GameObject;
        //    loc.transform.parent = gameObject.transform;
        //}

        transform.position = tempPosition;
        DataReady = true;
    }
Exemplo n.º 3
0
        public IEnumerator AddUpgradedDetectorCubes(PyriteQuery pyriteQuery, int x, int y, int z, int lod,
            Action<IEnumerable<GameObject>> registerCreatedDetectorCubes)
        {
            var newLod = lod - 1;
            var createdDetectors = new List<GameObject>();
            var pyriteLevel = pyriteQuery.DetailLevels[newLod];

            var cubeFactor = pyriteQuery.GetNextCubeFactor(lod);
            var min = new Vector3(x*(int) cubeFactor.x + 0.5f, y*(int) cubeFactor.y + 0.5f, z*(int) cubeFactor.z + 0.5f);
            var max = new Vector3((x + 1)*(int) cubeFactor.x - 0.5f, (y + 1)*(int) cubeFactor.y - 0.5f,
                (z + 1)*(int) cubeFactor.z - 0.5f);
            var intersections =
                pyriteQuery.DetailLevels[newLod].Octree.AllIntersections(new BoundingBox {Min = min, Max = max});
            foreach (var i in intersections)
            {
                var newCube = CreateCubeFromCubeBounds(i.Object);
                var cubePos = pyriteLevel.GetWorldCoordinatesForCube(newCube);
                var g =
                    (GameObject)
                        Instantiate(PlaceHolderCube, new Vector3(-cubePos.x, cubePos.z + 600, -cubePos.y),
                            Quaternion.identity);

                g.transform.parent = gameObject.transform;
                g.GetComponent<MeshRenderer>().material.color = _colorList[_colorSelector%_colorList.Length];
                g.GetComponent<IsRendered>().SetCubePosition(newCube.X, newCube.Y, newCube.Z, newLod, pyriteQuery, this);

                g.transform.localScale = new Vector3(
                    pyriteLevel.WorldCubeScale.x,
                    pyriteLevel.WorldCubeScale.z,
                    pyriteLevel.WorldCubeScale.y);
                _colorSelector++;
                createdDetectors.Add(g);
            }
            registerCreatedDetectorCubes(createdDetectors);
            yield break;
        }
Exemplo n.º 4
0
        public IEnumerator Load()
        {
            DebugLog("+Load()");

            var pyriteQuery = new PyriteQuery(this, SetName, ModelVersion, PyriteServer);
            yield return StartCoroutine(pyriteQuery.LoadAll());
            DebugLog("CubeQuery complete.");

            var pyriteLevel =
                pyriteQuery.DetailLevels[DetailLevel];

            var allOctCubes = pyriteQuery.DetailLevels[DetailLevel].Octree.AllItems();

            foreach (var octCube in allOctCubes)
            {
                var pCube = CreateCubeFromCubeBounds(octCube);

                var x = pCube.X;
                var y = pCube.Y;
                var z = pCube.Z;
                var cubePos = pyriteLevel.GetWorldCoordinatesForCube(pCube);

                if (UseCameraDetection)
                {
                    // Move cube to the orientation we want also move it up since the model is around -600
                    var g =
                        (GameObject)
                            //Instantiate(PlaceHolderCube, new Vector3(-cubePos.x, cubePos.z + 600, -cubePos.y),
                            //Instantiate(PlaceHolderCube, new Vector3(-cubePos.x, cubePos.z, -cubePos.y),
                            Instantiate(PlaceHolderCube, new Vector3(cubePos.x, cubePos.y, cubePos.z),
                                Quaternion.identity);

                    //var loc = Instantiate(LocatorCube, new Vector3(cubePos.x, cubePos.y, cubePos.z), Quaternion.identity) as GameObject;
                    var loc = Instantiate(LocatorCube, cubePos, Quaternion.identity) as GameObject;
                    loc.transform.parent = gameObject.transform;

                    g.transform.parent = gameObject.transform;
                    //g.GetComponent<MeshRenderer>().material.color = _colorList[_colorSelector%_colorList.Length];
                    g.GetComponent<IsRendered>().SetCubePosition(x, y, z, DetailLevel, pyriteQuery, this);

                    g.transform.localScale = new Vector3(
                        pyriteLevel.WorldCubeScale.x,
                        pyriteLevel.WorldCubeScale.z,
                        pyriteLevel.WorldCubeScale.y);
                    _colorSelector++;
                }
                else
                {
                    var loadRequest = new LoadCubeRequest(x, y, z, DetailLevel, pyriteQuery, null);
                    EnqueueLoadCubeRequest(loadRequest);
                }
            }

            if (CameraRig != null)
            {
                //DebugLog("Moving camera");
                // Hardcoding some values for now

                //var min = new Vector3(pyriteLevel.ModelBoundsMin.x, pyriteLevel.ModelBoundsMin.y,
                //    pyriteLevel.ModelBoundsMin.z);
                //var max = new Vector3(pyriteLevel.ModelBoundsMax.x, pyriteLevel.ModelBoundsMax.y,
                //    pyriteLevel.ModelBoundsMax.z);

                //min += pyriteLevel.WorldCubeScale/2;
                //max -= pyriteLevel.WorldCubeScale/2;
                //var newCameraPosition = min + (max - min)/2.0f;

                //newCameraPosition += new Vector3(0, 0, (max - min).z*1.4f);
                //CameraRig.transform.position = newCameraPosition;
                //CameraRig.transform.rotation = Quaternion.Euler(0, 180, 0);
                //DebugLog("Done moving camera");

                //var delta = pyriteLevel.ModelBoundsMax - pyriteLevel.ModelBoundsMin;
                //var center = pyriteLevel.ModelBoundsMin + new Vector3(-delta.x / 2, delta.z /2 , -delta.y);
                //CameraRig.transform.position = center;

                //var allOctCubes = pyriteQuery.DetailLevels[DetailLevel].Octree.AllItems();

                // RPL CONVERSION
                List<GridPos> gList = new List<GridPos>();
                Dictionary<string, CubeBounds> gDict = new Dictionary<string, CubeBounds>();
                foreach (var octCube in allOctCubes)
                {
                    var pCube = CreateCubeFromCubeBounds(octCube);

                    var x = pCube.X;
                    var y = pCube.Y;
                    var z = pCube.Z;
                    var gPos = new GridPos(x, y, z);
                    gList.Add(gPos);
                    gDict.Add(gPos.ToKeyString(), octCube);
                }

                int midIndex = gList.Count / 2;
                var gMid = gList.OrderBy(n => n.x).ThenBy(n => n.y).ThenBy(n => n.z).ToList()[midIndex];
                var cubeBound = CreateCubeFromCubeBounds(gDict[gMid.ToKeyString()]);
                var cubeVector3 = pyriteLevel.GetWorldCoordinatesForCube(cubeBound);
                CameraRig.transform.position = cubeVector3;

                var r = Instantiate(LocatorCube, cubeVector3, Quaternion.identity) as GameObject;
                r.GetComponent<MeshRenderer>().material.color = Color.green;
                r.transform.localScale = new Vector3(12f, 12f, 12f);

                //Instantiate(RenderCubes);
                //RenderCubes.GetComponent<RenderCubes3D>().GridMinSize = (int)(pyriteQuery.DetailLevels[DetailLevel].WorldCubeScale.x);   // World Size cut to 3x3x3 Sections
                //RenderCubes.GetComponent<RenderCubes3D>().CreateCubeLayers(CameraRig.transform.position);

            }
            DebugLog("-Load()");
        }
Exemplo n.º 5
0
        public IEnumerator Load()
        {
            // load the cube meta data
            PyriteQuery = new PyriteQuery(this, SetName, ModelVersion, PyriteServer);
            yield return StartCoroutine(PyriteQuery.LoadAll());

            var pyriteLevel =
                PyriteQuery.DetailLevels[DetailLevel];

            // load the material files
            // yield return StartCoroutine(LoadMaterials());

            List<MaterialData> materialDataList = new List<MaterialData>();
            LoadDefaultMaterials(pyriteLevel, materialDataList);

            // testing preloading the textures data on a background thread - by this point, we should have the data we need to start downloading
            _textureLoader = new TextureLoader(PyriteQuery, materialDataList, UseUnlitShader);
            _textureLoader.DownloadCompleted += (s, e) =>
            {
                _readyToBuild = true;
            };

            yield return StartCoroutine(_textureLoader.DownloadTextures(pyriteLevel));

            if (Camera != null || CameraRig != null)
            {
                Transform cTransform = Camera == null ? CameraRig.transform : Camera.transform;
                DebugLog("Moving camera");
                // Hardcoding some values for now
                var newCameraPosition = pyriteLevel.WorldBoundsMin + (pyriteLevel.WorldBoundsSize)/2.0f;
                newCameraPosition += new Vector3(0, 0, pyriteLevel.WorldBoundsSize.z*1.4f);
                cTransform.position = newCameraPosition;

                cTransform.rotation = Quaternion.Euler(0, 180, 0);

                DebugLog("Done moving camera");
            }

            int colorSelector = 0;
            for (int i = 0; i < pyriteLevel.Cubes.Length; i++)
            {
                int x = pyriteLevel.Cubes[i].X;
                int y = pyriteLevel.Cubes[i].Y;
                int z = pyriteLevel.Cubes[i].Z;
                if (UseCameraDetection)
                {
                    var cubePos = pyriteLevel.GetWorldCoordinatesForCube(pyriteLevel.Cubes[i]);

                    // Move cube to the orientation we want also move it up since the model is around -600
                    GameObject g =
                        (GameObject)
                            Instantiate(PlaceHolderCube, new Vector3(-cubePos.x, cubePos.z + 600, -cubePos.y),
                                Quaternion.identity);

                    g.transform.parent = gameObject.transform;
                    g.GetComponent<MeshRenderer>().material.color = _colorList[colorSelector%3];
                    g.GetComponent<IsRendered>().SetCubePosition(x, y, z, DetailLevel, PyriteQuery, this);

                    g.transform.localScale = new Vector3(
                        pyriteLevel.WorldCubeScale.x,
                        pyriteLevel.WorldCubeScale.z,
                        pyriteLevel.WorldCubeScale.y);
                    colorSelector++;
                }
                else
                {
                    AddToQueue(new Cube()
                    {
                        MapPosition = new UnityEngine.Vector3(x, y, z),
                        Query = PyriteQuery,
                        Lod = DetailLevel
                    });
                }
            }

            yield return null;
        }
Exemplo n.º 6
0
 public TextureLoader(PyriteQuery query, List<MaterialData> materialDataList, bool useUnlitShader)
 {
     Query = query;
     MaterialDataList = materialDataList;
     UseUnlitShader = useUnlitShader;
 }