Esempio n. 1
0
    // load level piece models from json file
    public void LoadLevelJSON()
    {
        levelPieceModels = new List <LevelPieceModel>();
        string     jsonString = Resources.Load <TextAsset>("level").text;
        JSONObject levelJson  = new JSONObject(jsonString);

        int levelPieceIndex = 0;

        foreach (JSONObject _levelPiece in levelJson["LevelPieces"].list)
        {
            LevelPieceModel levelPieceModel = new LevelPieceModel();
            levelPieceModels.Add(levelPieceModel);

            levelPieceModel.levelPieceIndex = levelPieceIndex++;

            levelPieceModel.topBorderY    = _levelPiece["TopBorder"].n;
            levelPieceModel.bottomBorderY = _levelPiece["BottomBorder"].n;

            List <CircleModel> cirlceModels = levelPieceModel.circles;
            List <SpikeModel>  spikeModels  = levelPieceModel.spikes;

            foreach (JSONObject circle in _levelPiece["Circles"].list)
            {
                float posX = circle["Position"]["x"].n;
                float posY = circle["Position"]["y"].n;

                cirlceModels.Add(new CircleModel(new Vector2(posX, posY), circle["Type"].str));
            }

            foreach (JSONObject spike in _levelPiece["Spikes"].list)
            {
                float posX = spike["Position"]["x"].n;
                float posY = spike["Position"]["y"].n;

                float scale = spike["Scale"].n;

                spikeModels.Add(new SpikeModel(new Vector2(posX, posY), scale));
            }
        }
    }
Esempio n. 2
0
    public void LoadLevelPieces(List <int> levelPieceIndices, bool loadRecycledPieces)
    {
        for (int i = 0; i < levelPieceIndices.Count; i++)
        {
            int pieceIndex = levelPieceIndices[i];

            LevelPieceModel levelPieceModel = levelPieceModels[pieceIndex];
            levelPieceModel.isEnabled = true;

            LevelPieceController levelPiece = levelPiecePrefab.Spawn(transform, Vector3.zero, Quaternion.identity);
            levelPiece.Reset();
            levelPiece.levelPieceModel = levelPieceModel;

            levelPiece.topBorder.transform.localPosition    = new Vector3(0, levelPieceModel.topBorderY, 0);
            levelPiece.bottomBorder.transform.localPosition = new Vector3(0, levelPieceModel.bottomBorderY, 0);

            Transform levelPieceTransform = levelPiece.gameObject.transform;

            if ((loadRecycledPieces || !isInitialized) && i == 0)
            {
                bottomPieceTop.transform.position = levelPiece.topBorder.transform.position;
            }

            if (loadRecycledPieces)
            {
                float piecePos = recycledLevelPieces[recycledLevelPieces.Count - 1].Value;
                recycledLevelPieces.RemoveAt(recycledLevelPieces.Count - 1);

                levelPieceTransform.Translate(new Vector3(0, piecePos, 0));
                loadedLevelPieces.Insert(0, levelPiece);

                bottomPieceTop.transform.position = levelPiece.topBorder.transform.position;
            }
            else
            {
                if (loadedLevelPieces.Count != 0)
                {
                    LevelPieceController topPiece = loadedLevelPieces[loadedLevelPieces.Count - 1];
                    levelPieceTransform.Translate(new Vector3(0, topPiece.topBorder.transform.position.y + 2, 0));
                }
                else
                {
                    levelPieceTransform.Translate(new Vector3(0, 0, 0));
                }

                if (i == levelPieceIndices.Count - 1)
                {
                    topPieceBottom.transform.position = levelPiece.bottomBorder.transform.position;
                }

                loadedLevelPieces.Add(levelPiece);
            }

            // create cicles
            foreach (CircleModel circle in levelPieceModel.circles)
            {
                CircleController circleInstance = null;
                switch (circle.circleType)
                {
                case CircleModel.CircleType.CIRCLE_1:
                {
                    circleInstance = circle1Prefab.Spawn(levelPieceTransform, circle.position, Quaternion.identity);
                    break;
                }

                case CircleModel.CircleType.CIRCLE_2:
                {
                    circleInstance = circle2Prefab.Spawn(levelPieceTransform, circle.position, Quaternion.identity);
                    break;
                }

                case CircleModel.CircleType.CIRCLE_3:
                {
                    circleInstance = circle3Prefab.Spawn(levelPieceTransform, circle.position, Quaternion.identity);
                    break;
                }

                case CircleModel.CircleType.CIRCLE_4:
                {
                    circleInstance = circle4Prefab.Spawn(levelPieceTransform, circle.position, Quaternion.identity);
                    break;
                }
                }
                circleInstance.Reset();

                levelPiece.circles.Add(circleInstance);
            }

            // create spikes
            foreach (SpikeModel spike in levelPieceModel.spikes)
            {
                SpikeController spikeInstance = spikePrefab.Spawn(levelPieceTransform, spike.position, Quaternion.identity);
                spikeInstance.transform.localScale = new Vector3(spike.scale, spike.scale, 1);
                spikeInstance.FixShadowPosition();

                levelPiece.spikes.Add(spikeInstance);
            }
        }
    }