// 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); }
// // 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"]; } } }