online multiplayer chess game (note server currently down)
Diffstat (limited to 'SanParse/Move.gd')
| -rw-r--r-- | SanParse/Move.gd | 124 |
1 files changed, 0 insertions, 124 deletions
diff --git a/SanParse/Move.gd b/SanParse/Move.gd deleted file mode 100644 index 66fbbd7..0000000 --- a/SanParse/Move.gd +++ /dev/null @@ -1,124 +0,0 @@ -class_name Move -extends Resource - -enum CHECKTYPES { NONE, CHECK, CHECKMATE } -var generated_from := "" -var piece := -1 -var move_kind: MoveKind -var promotion := -1 -# var annotation := "" # later -var check_type := 0 -var is_capture := false - - -func _init(newpiece: int, newmove, capture := false) -> void: - piece = newpiece - is_capture = capture - move_kind = MoveKind.new(newmove) - - -static func castle_type(type: String) -> int: - return MoveKind.CASTLETYPES.QUEEN_SIDE if type == "O-O-O" else MoveKind.CASTLETYPES.KING_SIDE - - -func set_check_type(type: String) -> Move: - match type: - "+": - check_type = CHECKTYPES.CHECK - "#": - check_type = CHECKTYPES.CHECKMATE - _: - check_type = CHECKTYPES.NONE - return self - - -func compile() -> String: # compiles the structure to a san - var res := "" - match move_kind.type: - MoveKind.CASTLE: - res += move_kind.to_str() - MoveKind.NORMAL: - res += to_str(piece) - res += Utils.to_algebraic(move_kind.data[0]) - res += "x" if is_capture else "" - res += Utils.to_algebraic(move_kind.data[1]) - res += "=" + to_str(promotion) if promotion != -1 else "" - match check_type: - CHECKTYPES.CHECK: - res += "+" - CHECKTYPES.CHECKMATE: - res += "#" - return res.strip_edges() - - -static func to_str(type: int) -> String: - return " NBRQK"[type].strip_edges() # if its a pawn, return nothing - - -### fix short san -func make_long() -> Move: - if move_kind.type == MoveKind.CASTLE: - return self - var newvecs: PoolVector2Array = [] - - var vectors = move_kind.data - - if Piece.is_on_board(vectors[0]): # [0] is the only one with -1(s) possible - return self - - if is_capture: - newvecs.append(long_helper(vectors[0], true, false, vectors[1])) - else: - newvecs.append(long_helper(vectors[0], false, true, vectors[1])) - - if newvecs.empty(): - Log.error("cruddlesticks") - return self - newvecs.append(vectors[1]) - - move_kind.data = newvecs - return self - - -func long_helper(vec: Vector2, attack: bool, move: bool, touch: Vector2): - if vec.y == -1 and vec.x != -1: - for y in range(8): - var spot = Piece.at_pos(Vector2(vec.x, y)) - if long_helper_helper(spot, touch, attack, move): - return Vector2(vec.x, y) - elif vec.x == -1 and vec.y != -1: - for x in range(8): - var spot = Piece.at_pos(Vector2(x, vec.y)) - if long_helper_helper(spot, touch, attack, move): - return Vector2(x, vec.y) - elif vec == Vector2(-1, -1): - for x in range(8): - for y in range(8): - var spot = Piece.at_pos(Vector2(x, y)) - if long_helper_helper(spot, touch, attack, move): - return Vector2(x, y) - - -func long_helper_helper(spot, touch, attack, move): - return Utils.spotispiece(piece, spot) and spot.white == Globals.turn and spot.can_touch(touch, attack, move) - - -class MoveKind: - extends Resource - enum CASTLETYPES { NONE, QUEEN_SIDE, KING_SIDE } - enum { NONE, NORMAL, CASTLE } - var type := 0 - var data # string OR array - - func _init(something): - if typeof(something) == TYPE_ARRAY and len(something) == 2: - type = NORMAL - data = PoolVector2Array(something) - elif typeof(something) == TYPE_INT: - type = CASTLE - data = something - else: - assert(false) - - func to_str() -> String: - return "O-O-O" if data == CASTLETYPES.QUEEN_SIDE else "O-O" |