private void UpdatePieceStateAndEffectState(ref PieceState pieceState, int col, int index, int combo) { if (pieceState.isBanish) { return; } pieceState.isBanish = true; pieceState.color = col; pieceState.combo = combo; pieceStates[index] = pieceState; UpdateEffectState(piecePositions[index].gridPosition); }
private void UpdatePieceState() { for (int i = 0; i < gridStates.Length; i++) { GridState gridState = gridStates[i]; PieceState pieceState = pieceStates[gridState.pieceId]; if (pieceState.isBanish) { int x = i % GridRowLength; var piecePosition = piecePositions[gridState.pieceId]; piecePosition.fallLength = fallCount[x] * GridSize; piecePosition.fallCount = 0; piecePositions[gridState.pieceId] = piecePosition; } pieceState.isBanish = false; pieceStates[gridState.pieceId] = pieceState; } }
private void UpdateReplacePosition() { for (int i = 0; i < gridStates.Length; i++) { GridState gridState = gridStates[i]; PieceState pieceState = pieceStates[gridState.pieceId]; PiecePosition piecePosition = piecePositions[gridState.pieceId]; int x = i % GridRowLength; if (pieceState.isBanish) { int posY = FieldHeight + (fallCount[x] * GridSize); piecePosition.position = new Vector2Int(piecePosition.position.x, posY); fallCount[x] += 1; } else { piecePosition.fallLength = fallCount[x] * GridSize; piecePosition.fallCount = 0; } piecePositions[gridState.pieceId] = piecePosition; } }
Mesh GetMeshe(PieceState state) { return(Shared.puzzleMeshMat.meshes[$"piece_0{state.color}"]); }
private void CheckLine(ref FieldBanish fieldBanish) { var fieldInput = fieldInputs[0]; if (!fieldInput.isOnGrid) { return; } int nextCombo = fieldBanish.combo + 1; for (int x = 0; x < GridRowLength; x++) { for (int y = 0; y < GridColumnLength; y++) { checkStates[y] = pieceStates[gridStates[x + GridRowLength * y].pieceId]; } bool isSameColor = CheckLine(checkStates, GridColumnLength, nextCombo); if (isSameColor) { UpdateFieldBanish(ref fieldBanish, x, 0, nextCombo); int col = 0; for (int y = 0; y < GridColumnLength; y++) { int index = gridStates[x + GridRowLength * y].pieceId; PieceState pieceState = pieceStates[index]; UpdatePieceStateAndEffectState(ref pieceState, col, index, nextCombo); col++; } } } for (int y = 0; y < GridColumnLength; y++) { for (int x = 0; x < GridRowLength; x++) { checkStates[x] = pieceStates[gridStates[x + GridRowLength * y].pieceId]; } bool isSameColor = CheckLine(checkStates, GridRowLength, nextCombo); if (isSameColor) { int col = 0; UpdateFieldBanish(ref fieldBanish, 0, y, nextCombo); for (int x = 0; x < GridRowLength; x++) { int index = gridStates[x + GridRowLength * y].pieceId; PieceState pieceState = pieceStates[index]; UpdatePieceStateAndEffectState(ref pieceState, col, index, nextCombo); col++; } } } if (fieldBanish.phase == EnumBanishPhase.BanishEnd) { fieldBanish.phase = EnumBanishPhase.FallStart; fieldBanish.combo = 0; fieldBanishs[0] = fieldBanish; } }