online multiplayer chess game (note server currently down)
| -rw-r--r-- | pieces/King.gd | 4 | ||||
| -rw-r--r-- | pieces/Pawn.gd | 29 | ||||
| -rw-r--r-- | pieces/Piece.gd | 8 | ||||
| -rw-r--r-- | ui/MovesList.gd | 2 |
4 files changed, 31 insertions, 12 deletions
diff --git a/pieces/King.gd b/pieces/King.gd index 68b1183..3e438c9 100644 --- a/pieces/King.gd +++ b/pieces/King.gd @@ -80,10 +80,8 @@ func castle(position) -> String: if i[0] == position: return_string = i[3] break - override_moveto = true can_castle.clear() - moveto(position) - override_moveto = false + moveto(position, true, false, true) return return_string diff --git a/pieces/Pawn.gd b/pieces/Pawn.gd index 812c862..80a180b 100644 --- a/pieces/Pawn.gd +++ b/pieces/Pawn.gd @@ -7,6 +7,10 @@ var twostepfirstmove := false var just_set := false var enpassant := [] +var promoteposition := Vector2() +var promotetake := false +var promote_prev_pos := Vector2() + onready var whiteint := 1 if white else -1 onready var sprites := [] onready var darken = get_node("../../Darken") @@ -32,7 +36,7 @@ func _exit_tree() -> void: Globals.pawns.remove(Globals.pawns.find(self)) -func moveto(position, real = true, take = false) -> void: +func moveto(position, real = true, take = false, override_moveto = false) -> void: # check if 2 step if real and !twostepfirstmove and !has_moved: if white and real_position.y - position.y == 2: @@ -41,7 +45,7 @@ func moveto(position, real = true, take = false) -> void: if !white and position.y - real_position.y == 2: twostepfirstmove = true just_set = true - .moveto(position, real, take) + .moveto(position, real, take, override_moveto) if real: Globals.reset_halfmove() @@ -115,19 +119,36 @@ func en_passant(turncheck = true) -> Array: # in passing func promote(position, type) -> void: + promote_prev_pos = real_position if type == "take": - take(at_pos(position)) + print(real_position) + take(at_pos(position), true) + promotetake = true else: - moveto(position) + moveto(position, true, false, true) # dont add the algebraic position + promoteposition = position darken.show() for i in range(len(promotables)): sprites[i].sprite.texture = load("%s%s%s" % [Globals.grid.ASSETS_PATH, team.to_lower(), promotables[i]]) sprites[i].show() +func take(piece: Piece, overridemoveto = false) -> void: + clear_clicked() + piece.took() + moveto(piece.real_position, true, true, overridemoveto) + Globals.reset_halfmove() + + func handle_sprite_input_event(node) -> void: darken.hide() var script = piece(promotables[sprites.find(node)][0]) + var first = ( + algebraic_move_notation(promoteposition) + if !promotetake + else algebraic_take_notation(promoteposition, promote_prev_pos) + ) + Utils.add_move("%s=%s" % [first, promotables[sprites.find(node)][0]]) Globals.grid.make_piece(real_position, script, white) Globals.grid.turn_over() clear_clicked() diff --git a/pieces/Piece.gd b/pieces/Piece.gd index 22e548a..38a63f7 100644 --- a/pieces/Piece.gd +++ b/pieces/Piece.gd @@ -10,7 +10,6 @@ var frameon := false var team := "w" var check_spots_check := true var no_enemys := false -var override_moveto := false onready var sprite := $Sprite onready var tween := $Tween @@ -47,8 +46,9 @@ func clear_clicked() -> void: Globals.grid.clear_fx() -func algebraic_take_notation(position) -> String: - var starter := shortname if shortname != "p" else to_algebraic(real_position)[0] +func algebraic_take_notation(position, startpos = real_position) -> String: + var starter := shortname if shortname != "p" else to_algebraic(startpos)[0] + print(starter) return starter + "x" + to_algebraic(position) @@ -75,7 +75,7 @@ func move(newpos: Vector2) -> void: # dont use directly; use moveto tween.start() -func moveto(position, real := true, take := false) -> void: +func moveto(position, real := true, take := false, override_moveto = false) -> void: Globals.grid.matrix[real_position.y][real_position.x] = null Globals.grid.matrix[position.y][position.x] = self if real: diff --git a/ui/MovesList.gd b/ui/MovesList.gd index fffbeb3..6da4285 100644 --- a/ui/MovesList.gd +++ b/ui/MovesList.gd @@ -39,7 +39,7 @@ func create_san_label(text, alignment = Label.ALIGN_RIGHT) -> void: func on_new_move(move) -> void: var alignment = Label.ALIGN_RIGHT - if Globals.turn: # white just moved + if Globals.turn: # black just moved alignment = Label.ALIGN_LEFT create_number_label(Globals.fullmove) number = 0 |