private void SetupPowerups(PowerupInfo[] powerupInfo) { foreach (PowerupInfo info in powerupInfo) { if (info.bornWith) { List<Player> playerList = players.list; foreach (Player player in playerList) { player.TryAddPowerup(info.powerupIndex); } } } BrickCell[] brickCells = new BrickCell[GetWidth() * GetHeight()]; int count = GetBrickCells(brickCells); if (count == 0) { return; } ShuffleCells(brickCells, count); CVar[] POWERUPS_COUNT = CVars.powerupsCount; int brickIndex = 0; foreach (PowerupInfo info in powerupInfo) { if (info.forbidden || info.bornWith) { continue; } int powerupIndex = info.powerupIndex; int powerupCount = POWERUPS_COUNT[powerupIndex].intValue; if (powerupCount < 0) { if (MathHelp.NextInt(10) < -powerupCount) { continue; } powerupCount = 1; } for (int i = 0; i < powerupCount; ++i) { BrickCell cell = brickCells[brickIndex++]; int cx = cell.GetCx(); int cy = cell.GetCy(); cell.powerup = powerupIndex; if (brickIndex == count) { break; } } if (brickIndex == count) { break; } } }
public void DestroyBrick(BrickCell brick) { brick.RemoveFromField(); int powerup = brick.powerup; if (powerup != Powerups.None) { int cx = brick.GetCx(); int cy = brick.GetCy(); AddCell(new PowerupCell(powerup, cx, cy)); } }
private int GetBrickCells(BrickCell[] array) { int count = 0; FieldCellSlot[] slots = cells.slots; foreach (FieldCellSlot slot in slots) { BrickCell brickCell = slot.GetBrick(); if (brickCell != null) { if (brickCell.powerup == Powerups.None) { array[count++] = brickCell; } } } return count; }
private void DrawBrick(Context context, BrickCell cell) { DrawCellImage(context, cell, breakableImage); if (CVars.g_drawHiddenPowerups.boolValue) { int powerup = cell.powerup; if (powerup != Powerups.None) { TextureImage powerupImage = powerupImages[powerup]; float drawX = cell.GetPx() - 0.5f * powerupImage.GetWidth(); float drawY = cell.GetPy() - 0.5f * powerupImage.GetHeight(); context.DrawImage(powerupImage, drawX, drawY, 0.25f); } } }