public void RecycleBottomLevelPiece(LevelPieceController levelPiece) { foreach (LevelPieceModel levelPieceModel in levelPieceModels) { if (levelPieceModel.levelPieceIndex == levelPiece.levelPieceIndex) { levelPieceModel.isEnabled = false; break; } } // save level piece position to load it again in the same position when arrow is going down recycledLevelPieces.Add(new KeyValuePair <int, float>(levelPiece.levelPieceIndex, levelPiece.gameObject.transform.position.y)); // remove level piece from the list of currently loaded pieces loadedLevelPieces.RemoveAt(0); // recycle leve piece prefab levelPiece.RecyclePiece(); // since bottom piece is changed update bottomPieceTop position bottomPieceTop.transform.position = loadedLevelPieces[0].topBorder.transform.position; }
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); } } }