Ejemplo n.º 1
0
        //
        private LevelFile createLevelData(string levelName)
        {
            Transform parent = LevelEditor.Instance.curLevelChunk.trfmCubes;

            if (parent == null)
            {
                return(null);
            }

            LevelFile levelFile = new LevelFile();

            levelFile.fileFormatVersion = Globals.levelSaveFormatVersion;

            levelFile.levelId   = -1;
            levelFile.levelName = levelName;

            levelFile.levelPos   = new DataTypeVector3();
            levelFile.levelPos.x = 0;
            levelFile.levelPos.y = 0;
            levelFile.levelPos.z = 0;

            levelFile.playerPosition   = new DataTypeVector3();
            levelFile.playerPosition.x = FlyCam.Instance.player.position.x;
            levelFile.playerPosition.y = FlyCam.Instance.player.position.y;
            levelFile.playerPosition.z = FlyCam.Instance.player.position.z;

            levelFile.playerEuler   = new DataTypeVector3();
            levelFile.playerEuler.x = FlyCam.Instance.player.eulerAngles.x;
            levelFile.playerEuler.y = FlyCam.Instance.player.eulerAngles.y;
            levelFile.playerEuler.z = FlyCam.Instance.player.eulerAngles.z;

            levelFile.levelQuadrants = new List <LevelQuadrant> ();

            foreach (Transform child in parent)
            {
                if (!child.gameObject.activeSelf)
                {
                    continue;
                }

                LevelQuadrant quadrant = new LevelQuadrant();

                quadrant.position   = new DataTypeVector3();
                quadrant.position.x = child.localPosition.x;
                quadrant.position.y = child.localPosition.y;
                quadrant.position.z = child.localPosition.z;

                int qX = (int)quadrant.position.x;
                int qY = (int)quadrant.position.y;
                int qZ = (int)quadrant.position.z;

                // sanity check!
                bool isEdgeQuadrant = ((qX <= -1 || qY <= -1 || qZ <= -1) || (qX >= Globals.LEVEL_WIDTH || qY >= Globals.LEVEL_HEIGHT || qZ >= Globals.LEVEL_DEPTH));
                if (isEdgeQuadrant)
                {
                    continue;
                }

                //quadrant.isEdge = (isEdgeQuadrant ? 1 : 0);

                quadrant.levelObjects = new List <LevelObject> ();

                Transform container = child.Find("container");
                if (container != null)
                {
                    string materialName;

                    foreach (Transform cube in container)
                    {
                        //if (!cube.gameObject.activeSelf) {
                        //	continue;
                        //}

                        LevelObject cubeObject = new LevelObject();

                        cubeObject.isActive   = (cube.gameObject.activeSelf ? 1 : 0);
                        cubeObject.materialId = 0;

                        //cubeObject.name = cube.name;
                        //Debug.Log ("    ->cube "+cubeObject.name);

                        /*cubeObject.position   = new DataTypeVector3 ();
                         * cubeObject.position.x = cube.localPosition.x;
                         * cubeObject.position.y = cube.localPosition.y;
                         * cubeObject.position.z = cube.localPosition.z;*/

                        if (cubeObject.isActive == 1)
                        {
                            if (isEdgeQuadrant)
                            {
                                cubeObject.materialId = -1;
                            }
                            else
                            {
                                MeshRenderer renderer = cube.GetComponent <MeshRenderer> ();
                                if (renderer != null)
                                {
                                    materialName          = renderer.material.name.Replace(" (Instance)", "");
                                    cubeObject.materialId = Array.IndexOf(Globals.materials, materialName);
                                }
                            }
                        }

                        quadrant.levelObjects.Add(cubeObject);
                    }
                }

                levelFile.levelQuadrants.Add(quadrant);
            }

            // PROPS

            List <LevelProp> levelProps = new List <LevelProp> ();

            Dictionary <GameObject, worldProp> worldProps = LevelEditor.Instance.curLevelChunk.worldProps;

            foreach (KeyValuePair <GameObject, worldProp> p in worldProps)
            {
                worldProp prop = p.Value;

                if (!prop.go.activeSelf)
                {
                    continue;
                }

                int propId = prop.id;
                if (propId <= 0)
                {
                    continue;
                }

                LevelProp levelProp = new LevelProp();
                levelProp.id = propId;
                //levelProp.name = prop.name;

                levelProp.position   = new DataTypeVector3();
                levelProp.position.x = prop.go.transform.position.x;
                levelProp.position.y = prop.go.transform.position.y;
                levelProp.position.z = prop.go.transform.position.z;

                levelProp.rotation   = new DataTypeQuaternion();
                levelProp.rotation.w = prop.go.transform.rotation.w;
                levelProp.rotation.x = prop.go.transform.rotation.x;
                levelProp.rotation.y = prop.go.transform.rotation.y;
                levelProp.rotation.z = prop.go.transform.rotation.z;

                levelProps.Add(levelProp);
            }

            levelFile.levelProps = levelProps;

            /*parent = LevelEditor.Instance.goProps;
             * if (parent != null) {
             *
             *      List<LevelProp> levelProps = new List<LevelProp> ();
             *
             *      foreach (Transform prop in parent.transform) {
             *
             *              if (!prop.gameObject.activeSelf) {
             *                      continue;
             *              }
             *
             *              int propId = -1;//Globals.getItemIndexFromName (item.name);
             *              if (propId == -1) {
             *                      continue;
             *              }
             *
             *              LevelProp levelProp = new LevelProp ();
             *              levelProp.id   = propId;
             *              levelProp.name = prop.name;
             *
             *              levelProp.position   = new DataTypeVector3 ();
             *              levelProp.position.x = prop.position.x;
             *              levelProp.position.y = prop.position.y;
             *              levelProp.position.z = prop.position.z;
             *
             *              levelProp.rotation = new DataTypeQuaternion ();
             *              levelProp.rotation.w = prop.rotation.w;
             *              levelProp.rotation.x = prop.rotation.x;
             *              levelProp.rotation.y = prop.rotation.y;
             *              levelProp.rotation.z = prop.rotation.z;
             *
             *              levelProps.Add (levelProp);
             *      }
             *
             *      levelFile.levelProps = levelProps;
             * }*/

            return(levelFile);
        }
Ejemplo n.º 2
0
        //
        // Parse JSON data
        //
        public void parseJson(string json)
        {
            int           i, len;
            LevelQuadrant levelQuadrant;
            LevelProp     levelProp;

            //Debug.Log (json);
            JSONNode data = JSON.Parse(json);

            fileFormatVersion = -1;
            if (data ["v"] != null)
            {
                fileFormatVersion = Int32.Parse(data ["v"]);
            }

            levelId = -1;
            if (data ["id"] != null)
            {
                levelId = Int32.Parse(data ["id"]);
            }

            levelPos = new DataTypeVector3();
            if (data ["pos"] != null)
            {
                if (data ["pos"] ["x"] != null)
                {
                    levelPos.x = (float)data ["pos"] ["x"];
                }
                if (data ["pos"] ["y"] != null)
                {
                    levelPos.y = (float)data ["pos"] ["y"];
                }
                if (data ["pos"] ["z"] != null)
                {
                    levelPos.z = (float)data ["pos"] ["z"];
                }
            }

            levelName = "";
            if (data ["n"] != null)
            {
                levelName = data ["n"];
            }

            levelQuadrants = new List <LevelQuadrant> ();
            if (data ["quads"] != null)
            {
                JSONArray quads = (JSONArray)data ["quads"];
                if (quads != null)
                {
                    len = quads.Count;
                    for (i = 0; i < len; ++i)
                    {
                        levelQuadrant = new LevelQuadrant();
                        levelQuadrant.parseJson(quads [i]);
                        levelQuadrants.Add(levelQuadrant);
                    }
                }
            }

            levelProps = new List <LevelProp> ();
            if (data ["props"] != null)
            {
                JSONArray props = (JSONArray)data ["props"];
                if (props != null)
                {
                    len = props.Count;
                    for (i = 0; i < len; ++i)
                    {
                        levelProp = new LevelProp();
                        levelProp.parseJson(props [i]);
                        levelProps.Add(levelProp);
                    }
                }
            }

            playerPosition   = new DataTypeVector3();
            playerPosition.x = 0;
            playerPosition.y = 0;
            playerPosition.z = 0;
            if (data ["p"] != null)
            {
                if (data ["p"] ["x"] != null)
                {
                    playerPosition.x = (float)data ["p"] ["x"];
                }
                if (data ["p"] ["y"] != null)
                {
                    playerPosition.y = (float)data ["p"] ["y"];
                }
                if (data ["p"] ["z"] != null)
                {
                    playerPosition.z = (float)data ["p"] ["z"];
                }
            }

            playerEuler   = new DataTypeVector3();
            playerEuler.x = 0;
            playerEuler.y = 0;
            playerEuler.z = 0;
            if (data ["r"] != null)
            {
                if (data ["r"] ["x"] != null)
                {
                    playerEuler.x = (float)data ["r"] ["x"];
                }
                if (data ["r"] ["y"] != null)
                {
                    playerEuler.y = (float)data ["r"] ["y"];
                }
                if (data ["r"] ["z"] != null)
                {
                    playerEuler.z = (float)data ["r"] ["z"];
                }
            }
        }