130 lines
3.8 KiB
GDScript
130 lines
3.8 KiB
GDScript
extends TileMap
|
|
|
|
@export var board_state: Dictionary = Dictionary()
|
|
|
|
@onready var king = preload("res://King.tscn")
|
|
@onready var knight = preload("res://Knight.tscn")
|
|
@onready var rook = preload("res://Rook.tscn")
|
|
@onready var queen = preload("res://Queen.tscn")
|
|
@onready var bishop = preload("res://Bishop.tscn")
|
|
@onready var pawn = preload("res://Pawn.tscn")
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
setup_board()
|
|
|
|
var children = get_children()
|
|
for child in children:
|
|
if child.has_signal("moved"):
|
|
child.moved.connect(_on_piece_moved)
|
|
board_state[child.grid_pos] = child
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta):
|
|
pass
|
|
|
|
func _on_piece_moved(piece, old_pos, new_pos):
|
|
if board_state.has(new_pos):
|
|
var destroyed = board_state[new_pos]
|
|
if destroyed.is_king():
|
|
get_tree().paused = true
|
|
board_state.erase(new_pos)
|
|
destroyed.queue_free()
|
|
board_state.erase(old_pos)
|
|
|
|
var new_piece = piece
|
|
if piece.is_pawn():
|
|
if piece.is_white() and new_pos.y == 0:
|
|
new_piece = queen.instantiate()
|
|
new_piece.grid_size = tile_set.tile_size
|
|
new_piece.make_white()
|
|
new_piece.grid_pos = new_pos
|
|
add_child(new_piece)
|
|
piece.queue_free()
|
|
elif piece.is_black() and new_pos.y == 7:
|
|
new_piece = queen.instantiate()
|
|
new_piece.grid_size = tile_set.tile_size
|
|
new_piece.make_black()
|
|
new_piece.grid_pos = new_pos
|
|
add_child(new_piece)
|
|
piece.queue_free()
|
|
board_state[new_pos] = new_piece
|
|
|
|
func setup_board():
|
|
var king_instance = king.instantiate()
|
|
king_instance.grid_size = tile_set.tile_size
|
|
king_instance.make_white()
|
|
king_instance.grid_pos = Vector2i(4,7)
|
|
add_child(king_instance)
|
|
|
|
var bking_instance = king.instantiate()
|
|
bking_instance.grid_size = tile_set.tile_size
|
|
bking_instance.make_black()
|
|
bking_instance.grid_pos = Vector2i(4,0)
|
|
add_child(bking_instance)
|
|
|
|
var queen_instance = queen.instantiate()
|
|
queen_instance.grid_size = tile_set.tile_size
|
|
queen_instance.make_white()
|
|
queen_instance.grid_pos = Vector2i(3,7)
|
|
add_child(queen_instance)
|
|
|
|
var bqueen_instance = queen.instantiate()
|
|
bqueen_instance.grid_size = tile_set.tile_size
|
|
bqueen_instance.make_black()
|
|
bqueen_instance.grid_pos = Vector2i(3,0)
|
|
add_child(bqueen_instance)
|
|
|
|
for x in [1, 6]:
|
|
var knight_instance = knight.instantiate()
|
|
knight_instance.grid_size = tile_set.tile_size
|
|
knight_instance.make_white()
|
|
knight_instance.grid_pos = Vector2i(x,7)
|
|
add_child(knight_instance)
|
|
|
|
var bknight_instance = knight.instantiate()
|
|
bknight_instance.grid_size = tile_set.tile_size
|
|
bknight_instance.make_black()
|
|
bknight_instance.grid_pos = Vector2i(x,0)
|
|
add_child(bknight_instance)
|
|
|
|
for x in [0, 7]:
|
|
var rook_instance = rook.instantiate()
|
|
rook_instance.grid_size = tile_set.tile_size
|
|
rook_instance.make_white()
|
|
rook_instance.grid_pos = Vector2i(x,7)
|
|
add_child(rook_instance)
|
|
|
|
var brook_instance = rook.instantiate()
|
|
brook_instance.grid_size = tile_set.tile_size
|
|
brook_instance.make_black()
|
|
brook_instance.grid_pos = Vector2i(x,0)
|
|
add_child(brook_instance)
|
|
|
|
for x in [2, 5]:
|
|
var bishop_instance = bishop.instantiate()
|
|
bishop_instance.grid_size = tile_set.tile_size
|
|
bishop_instance.make_white()
|
|
bishop_instance.grid_pos = Vector2i(x,7)
|
|
add_child(bishop_instance)
|
|
|
|
var bbishop_instance = bishop.instantiate()
|
|
bbishop_instance.grid_size = tile_set.tile_size
|
|
bbishop_instance.make_black()
|
|
bbishop_instance.grid_pos = Vector2i(x,0)
|
|
add_child(bbishop_instance)
|
|
|
|
for x in range(0, 8):
|
|
var pawn_instance = pawn.instantiate()
|
|
pawn_instance.grid_size = tile_set.tile_size
|
|
pawn_instance.make_white()
|
|
pawn_instance.grid_pos = Vector2i(x,6)
|
|
add_child(pawn_instance)
|
|
|
|
var bpawn_instance = pawn.instantiate()
|
|
bpawn_instance.grid_size = tile_set.tile_size
|
|
bpawn_instance.make_black()
|
|
bpawn_instance.grid_pos = Vector2i(x,1)
|
|
add_child(bpawn_instance)
|
|
|