Пример #1
0
    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();
    }