online multiplayer chess game (note server currently down)
Diffstat (limited to 'Square.gd')
| -rw-r--r-- | Square.gd | 40 |
1 files changed, 35 insertions, 5 deletions
@@ -1,22 +1,25 @@ -extends MarginContainer +extends ColorRect class_name BackgroundSquare +# warning-ignore-all:unused_signal signal clicked signal right_clicked -var color: Color +var move_indicators := [] +var square: String +var piece_above := false onready var circle: TextureRect = $CircleHolder/Circle onready var move_indicator: ColorRect = $MoveIndicator -onready var b_square: ColorRect = $BackgroundSquare func _ready() -> void: + Events.connect("turn_over", self, "check_piece_above") + connect("clicked", self, "clicked") + check_piece_above() move_indicator.color = Globals.grid.last_move_indicator_color - b_square.color = color circle.rect_min_size = Globals.grid.piece_size / 4 circle.material.set_shader_param("color", Globals.grid.overlay_color) - circle.visible = false rect_min_size = Globals.grid.piece_size if Globals.spectating: mouse_default_cursor_shape = CURSOR_FORBIDDEN @@ -24,7 +27,34 @@ func _ready() -> void: mouse_default_cursor_shape = CURSOR_POINTING_HAND +func check_piece_above(): + piece_above = is_instance_valid(Globals.grid.get_piece(square)) + + func _gui_input(event: InputEvent): if !Globals.spectating and event is InputEventMouseButton and event.pressed: emit_signal("clicked" if event.button_index == BUTTON_LEFT else "right_clicked") get_tree().set_input_as_handled() + + +func _focus_exited(): + if piece_above: + Globals.grid.get_piece(square).background.hide() + for m in move_indicators: + if is_instance_valid(m): + m.hide() + move_indicators.clear() + + +func clicked(): + var b = Globals.grid + var p = b.get_piece(square) + if piece_above and b.chess.turn == Globals.team and not Globals.spectating and p.color == Globals.team: + p.background.show() + var movs = b.chess.__generate_moves({"square": square, "verbose": true}) + for m in movs: + if m.flags & Chess.BITS.CAPTURE: + move_indicators.append(b.board[m.to].frame) + else: + move_indicators.append(b.background_array[m.to].circle) + move_indicators[-1].show() |