public void LoadTower(string filename) { towerFileName = filename; //Debug.Log(towerFileName); FileLoader fl = new FileLoader(Application.persistentDataPath, "Towers", filename); //FileLoader fl = new FileLoader ("JSONData" + Path.DirectorySeparatorChar + "Towers",filename); string json = fl.Read(); Dictionary <string, System.Object> data = (Dictionary <string, System.Object>)Json.Deserialize(json); towerName = (string)data["towerName"]; decalFilename = (string)data["decalFilename"]; towerType = (string)data["towerType"]; List <System.Object> pieces = data["pieces"] as List <System.Object>; foreach (System.Object pObj in pieces) { Dictionary <string, System.Object> pdata = pObj as Dictionary <string, System.Object>; int x = (int)(long)pdata["anchorX"]; int y = (int)(long)pdata["anchorY"]; int rot = (int)(long)pdata["rotation"]; bool flipped = false; int fliprot = 0; if (pdata.ContainsKey("flipped")) { flipped = (bool)pdata["flipped"]; fliprot = (int)(long)pdata["flipRotation"]; } string piecefile = (string)pdata["pieceFilename"]; GameObject go = Instantiate(Resources.Load("Prefabs/ExistingPiece")) as GameObject; go.transform.SetParent(EditorController.piecesLayer, false); PieceController p = go.GetComponent <PieceController>(); p.SetGridLock(true); p.ConfigureFromJSON(piecefile); p.SetRotation(rot); p.SetFlippedLoadOnly(flipped); p.SetFlipRotationLoadOnly(fliprot); if (flipped) { p.CalibrateFlip(); } allPieces.Add(new PieceRecord(p, x, y)); //SpriteRenderer sr = go.GetComponent<SpriteRenderer>(); //PutThatThingBackWhereItCameFromOrSoHelpMe(go.GetComponent<PieceController>()); RectTransform prt = (RectTransform)go.transform; RectTransform rt = (RectTransform)transform; UIRectTranslator translate = transform.gameObject.GetComponent <UIRectTranslator>(); Vector3[] corners = new Vector3[4]; rt.GetWorldCorners(corners); Vector3 gridTopCorner = corners[1]; //new Vector3(gridCorner.x,gridCorner.y+gridLength,gridCorner.z); Vector3 extents = translate.WorldSize(prt) / 2; go.transform.position = gridTopCorner + new Vector3(squareWidth * x + extents.x, -squareWidth * (y) - extents.y, go.transform.position.z); int[,] values = p.GetArray(); //we assume all pieces fit- no error checking for (int i = 0; i < values.GetLength(0); i++) { for (int j = 0; j < values.GetLength(1); j++) { int value = values[i, j]; Occupancy o = grid[y + i, x + j]; if (value == 1) { o.north = p; o.east = p; o.south = p; o.west = p; } else if (value == PieceController.NORTHWEST_CODE) { o.north = p; o.west = p; } else if (value == PieceController.NORTHEAST_CODE) { o.north = p; o.east = p; } else if (value == PieceController.SOUTHEAST_CODE) { o.east = p; o.south = p; } else if (value == PieceController.SOUTHWEST_CODE) { o.south = p; o.west = p; } } } } UpdateReadout(); }