CasinoGames/Baccarat/Views/Chips/ChipEdgePattern.swift

63 lines
1.8 KiB
Swift

//
// ChipEdgePattern.swift
// Baccarat
//
// The edge stripe pattern for casino chips.
//
import SwiftUI
/// The edge stripe pattern for chips.
struct ChipEdgePattern: View {
let stripeColor: Color
// MARK: - Layout Constants
private let stripeCount = 16
private let stripeWidth: CGFloat = 6
private let innerRadiusRatio: CGFloat = 0.75
private let outerRadiusRatio: CGFloat = 0.98
var body: some View {
Canvas { context, size in
let center = CGPoint(x: size.width / 2, y: size.height / 2)
let radius = min(size.width, size.height) / 2
for i in 0..<stripeCount {
let angle = Double(i) * (360.0 / Double(stripeCount)) * .pi / 180
let innerRadius = radius * innerRadiusRatio
let outerRadius = radius * outerRadiusRatio
let startX = center.x + cos(angle) * innerRadius
let startY = center.y + sin(angle) * innerRadius
let endX = center.x + cos(angle) * outerRadius
let endY = center.y + sin(angle) * outerRadius
var path = Path()
path.move(to: CGPoint(x: startX, y: startY))
path.addLine(to: CGPoint(x: endX, y: endY))
context.stroke(
path,
with: .color(stripeColor),
lineWidth: stripeWidth
)
}
}
}
}
#Preview {
ZStack {
Color.Table.preview
.ignoresSafeArea()
ChipEdgePattern(stripeColor: .white)
.frame(width: 100, height: 100)
.clipShape(.circle)
.background(Circle().fill(.red))
}
}