online multiplayer chess game (note server currently down)
Diffstat (limited to 'piece/Piece.gd')
| -rw-r--r-- | piece/Piece.gd | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/piece/Piece.gd b/piece/Piece.gd deleted file mode 100644 index 92fee38..0000000 --- a/piece/Piece.gd +++ /dev/null @@ -1,119 +0,0 @@ -extends Control -class_name Piece - -var position: String -var color: String -var type: String - -onready var sprite = $Sprite -onready var frame = $"%Frame" -onready var background = $"%Background" -onready var check = $"%Check" -onready var anim = $AnimationPlayer -onready var rotate = $RotatePlayer - -# for pawn promotion -signal promotion_decided(promote_to) - -var b - - -func size() -> void: # size the control - rect_size = b.piece_size - rect_pivot_offset = rect_size / 2 - rect_position = Chess.algebraic2vec(position) * b.piece_size - sprite.flip_v = b.flipped - sprite.flip_h = b.flipped - - -func _ready(): - load_texture() - background.color = b.overlay_color - - if type == Chess.KING: - Events.connect("turn_over", self, "check_in_check") - - size() - Events.connect("turn_over", self, "turn_over") - - -func turn_over(): - if b.is_my_turn(): - background.color = b.overlay_color - else: - background.color = b.premove_color - - -func check_in_check(): - check.visible = b.chess.__king_attacked(color) - - -func _pressed(p: String) -> void: - emit_signal("promotion_decided", p.to_lower()) - - -func open_promotion_previews(darken: ColorRect): - darken.show() - var popup = get_node_or_null("previews") - if not popup: - popup = PopupPanel.new() - popup.name = "previews" - popup.popup_exclusive = true - popup.add_stylebox_override("panel", StyleBoxEmpty.new()) - var previews := VBoxContainer.new() - previews.name = "previews" - previews.add_constant_override("separation", 0) - popup.add_child(previews) - add_child(popup) - for p in "QNRB": - var newsprite := PromotionPreview.new() - newsprite.hint_tooltip = p - var img_path = "res://assets/pieces/%s/%s%s.png" % [Globals.piece_set, color, p] - newsprite.texture_normal = load(img_path) - newsprite.name = p - newsprite.connect("pressed", self, "_pressed", [p]) - previews.add_child(newsprite) - - var rect = Rect2(rect_global_position, Vector2(b.piece_size.x, b.piece_size.y * 4)) - popup.popup(rect) - yield(self, "promotion_decided") - darken.hide() - popup.hide() - - -func load_texture(path := "res://assets/pieces/%s/%s%s.png" % [Globals.piece_set, color, type.to_upper()]) -> void: - sprite.texture = load(path) - - -func set_zindex(zindex: int, obj: CanvasItem = self) -> void: # used by the animation player - VisualServer.canvas_item_set_z_index(obj.get_canvas_item(), zindex) - - -# returns self for function chaining -func move(to: String, synchronized := false) -> Piece: - if synchronized: - yield(get_tree(), "idle_frame") - - name = "%s-%s" % [type, to] - b.set_piece(position, null) - b.set_piece(to, self) - var go_to = Chess.algebraic2vec(to) - var signresult := int(sign(Chess.algebraic2vec(position).x - go_to.x)) - - if signresult == 1: - rotate.play("Right") - elif signresult == -1: - rotate.play("Left") - anim.play("Move") - position = to - var tween = create_tween().set_trans(Tween.TRANS_BACK) - tween.tween_property(self, @"rect_position", go_to * b.piece_size, 0.3) - if synchronized: - yield(tween, "finished") - return self - - -func took() -> void: - b.set_piece(position, null) - frame.hide() - anim.play("Took") |