online multiplayer chess game (note server currently down)
algebraic promote notation
bendn 2022-05-18
parent c044447 · commit 6cd0d3e
-rw-r--r--pieces/King.gd4
-rw-r--r--pieces/Pawn.gd29
-rw-r--r--pieces/Piece.gd8
-rw-r--r--ui/MovesList.gd2
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