Files
swift-chess/Sources/Engine/Pieces/Piece.swift
2024-06-28 18:30:28 +02:00

81 lines
1.7 KiB
Swift

public enum Kind: String, CaseIterable {
case Pawn, Knight, Bishop, Rook, Queen, King
var value: Int8 {
switch self {
case .Pawn: 1
case .Bishop: 3
case .Knight: 3
case .Rook: 5
case .Queen: 9
case .King: -1
}
}
func fenRepresentation(with color: Color) -> String {
let str =
switch self {
case .Pawn: "P"
case .Bishop: "B"
case .Knight: "N"
case .Rook: "R"
case .Queen: "Q"
case .King: "K"
}
return color == .White ? str : str.lowercased()
}
static subscript(_ c: Character) -> (Self, Color)? {
let v = c.uppercased()
guard
v == "N"
|| (Self.allCases.contains { String($0.rawValue.first!) == v })
else {
return nil
}
let kind: Self =
switch v {
case "P": .Pawn
case "N": .Knight
case "B": .Bishop
case "R": .Rook
case "Q": .Queen
case "K": .King
default: .Pawn
}
let color: Color = c.isUppercase ? .White : .Black
return (kind, color)
}
}
public class Piece {
#warning("TODO: TO be removed, handle everything through the delegate")
internal weak var board: Board?
public internal(set) var color: Color
public var unicodeRepresentation: String {
return ""
}
public internal(set) var kind: Kind
public internal(set) var position: Square.Position
internal var pseudoLegalPositions: [Square.Position] {
return []
}
internal var legalPositions: [Square.Position] {
return []
}
internal var delegate: EventDelegate?
internal func move(to dst: Square.Position) {}
internal func isLegal(on pos: Square.Position) -> Bool { false }
internal init(kind: Kind, on pos: Square.Position, with col: Color) {
self.kind = kind
self.position = pos
self.color = col
}
}