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