Change Bomb Implementation
- L and T shapes are no longer considered a match - Bomb explodes WITH gems - Bomb will have a small sprite of the creating gem
This commit is contained in:
@@ -21,21 +21,6 @@ namespace Services
|
||||
return matchPositions.Distinct().ToList();
|
||||
}
|
||||
|
||||
// This is the old implementation wherein any adjacent matches will detonate the bomb
|
||||
private List<Vector2Int> DetonateThroughAdjacentMatches(IReadOnlyList<Vector2Int> matchPositions) {
|
||||
HashSet<Vector2Int> candidates = new HashSet<Vector2Int>();
|
||||
|
||||
foreach (Vector2Int p in matchPositions)
|
||||
{
|
||||
candidates.Add(p + Vector2Int.left);
|
||||
candidates.Add(p + Vector2Int.right);
|
||||
candidates.Add(p + Vector2Int.up);
|
||||
candidates.Add(p + Vector2Int.down);
|
||||
}
|
||||
|
||||
return candidates.ToList();
|
||||
}
|
||||
|
||||
public async UniTask DetonateChainAsync(
|
||||
IReadOnlyList<Vector2Int> initialBombs,
|
||||
Func<Vector2Int, bool> inBounds,
|
||||
@@ -134,31 +119,16 @@ namespace Services
|
||||
}
|
||||
}
|
||||
|
||||
private static IEnumerable<Vector2Int> DiamondRing(Vector2Int center, int distance)
|
||||
{
|
||||
for (int distanceX = -distance; distanceX <= distance; distanceX++)
|
||||
{
|
||||
int distanceY = distance - Mathf.Abs(distanceX);
|
||||
if (distanceY == 0)
|
||||
{
|
||||
yield return new Vector2Int(center.x + distanceX, center.y);
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return new Vector2Int(center.x + distanceX, center.y + distanceY);
|
||||
yield return new Vector2Int(center.x + distanceX, center.y - distanceY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static IEnumerable<Vector2Int> DiamondAreaInclusive(Vector2Int center, int radius)
|
||||
{
|
||||
yield return center;
|
||||
|
||||
for (int dist = 1; dist <= radius; dist++)
|
||||
// Manhattan-distance filled diamond:
|
||||
for (int distanceX = -radius; distanceX <= radius; distanceX++)
|
||||
{
|
||||
foreach (Vector2Int pivot in DiamondRing(center, dist))
|
||||
yield return pivot;
|
||||
int remaining = radius - Mathf.Abs(distanceX);
|
||||
for (int distanceY = -remaining; distanceY <= remaining; distanceY++)
|
||||
{
|
||||
yield return new Vector2Int(center.x + distanceX, center.y + distanceY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user