From 6949893fea49c6333d975f7220dde3e67670a82a Mon Sep 17 00:00:00 2001 From: 2ManyProjects Date: Sat, 1 Feb 2025 11:51:01 -0600 Subject: [PATCH] debugging preselected moves --- Systems/Cards/Supernova.gd | 161 +++++++++--------- Systems/Game/ChessGame.gd | 5 + .../StateMachine/GameStates/AttachCards.gd | 12 +- Systems/StateMachine/GameStates/Movement.gd | 3 +- 4 files changed, 97 insertions(+), 84 deletions(-) diff --git a/Systems/Cards/Supernova.gd b/Systems/Cards/Supernova.gd index 0e97c4f..bdbcb42 100644 --- a/Systems/Cards/Supernova.gd +++ b/Systems/Cards/Supernova.gd @@ -1,127 +1,128 @@ class_name SupernovaCard extends Card -const CAPTURE_RADIUS = 3 -var valid = false; +const CAPTURE_RADIUS = 4 + func _init(): - duration = 5 super._init() cardName = "Supernova" rank = Rank.RANK_0 effectType = EffectType.PIECE_EFFECT - description = "All enemy units within 3 radius of the king are captured" + duration = 5 + description = "All enemy units within 4 radius are captured" unitWhitelist = ["King"] - remaining_turns = duration func apply_effect(target_piece = null, board_flow = null, game_state = null): - attached_piece = target_piece - if !target_piece or !board_flow or !game_state: - print(cardName, " missing input param ") + if !super.apply_effect(target_piece, board_flow, game_state): + return false + + if !target_piece or !board_flow or !game_state: return false - setup_persistent_effect(game_state) - # dont apply on card attachment - if !valid: - return true + # Get king's position var king_pos = target_piece.get_parent().name.split("-") var king_x = int(king_pos[0]) var king_y = int(king_pos[1]) + # Collect all tiles within radius to check var tiles_to_check = [] + + # Check in all directions (up, down, left, right and diagonals) for dx in range(-CAPTURE_RADIUS, CAPTURE_RADIUS + 1): for dy in range(-CAPTURE_RADIUS, CAPTURE_RADIUS + 1): + # Skip if outside Manhattan distance if abs(dx) + abs(dy) > CAPTURE_RADIUS: continue + # Calculate target coordinates var target_x = king_x + dx var target_y = king_y + dy + # Skip if outside board bounds if target_x < 0 or target_x >= 8 or target_y < 0 or target_y >= 8: continue + # Skip king's own position if dx == 0 and dy == 0: continue + # Add tile to check list tiles_to_check.append(str(target_x) + "-" + str(target_y)) - # Process tiles and add overlay + # Process each tile and capture pieces for tile_name in tiles_to_check: - var tile = board_flow.get_node(tile_name) - - var existing_overlay = tile.get_node_or_null("SupernovaOverlay") - if existing_overlay: - existing_overlay.queue_free() - - var overlay = ColorRect.new() - overlay.name = "SupernovaOverlay" - overlay.color = Color(1, 0, 0, 0.3) - overlay.size = tile.size - overlay.mouse_filter = Control.MOUSE_FILTER_IGNORE - tile.add_child(overlay) - overlay.show() - - if tile.get_child_count() > 1: # > 1 because we just added the overlay - var piece = tile.get_child(0) - if piece.Item_Color != target_piece.Item_Color: + var tile = board_flow.get_node("Flow/" + tile_name) + if tile.get_child_count() > 0: + var piece = tile.get_child(0) + if piece.Item_Color != target_piece.Item_Color: # Only capture enemy pieces game_state.updatePoints(piece) piece.queue_free() - # Setup timer to remove overlays - var timer = Timer.new() - board_flow.add_child(timer) - timer.wait_time = 0.5 - timer.one_shot = true - timer.timeout.connect(func(): - for tile_name in tiles_to_check: - var tile = board_flow.get_node(tile_name) - var overlay = tile.get_node_or_null("SupernovaOverlay") - if overlay: - overlay.queue_free() - timer.queue_free() - ) - timer.start() - - return true - -func reset_tile_styles(board_flow, tiles_to_check): + # Visual feedback for tile_name in tiles_to_check: - var tile = board_flow.get_node(tile_name) - if !tile: - continue - - # Reset to original chess board pattern - var coords = tile_name.split("-") - var isWhite = (int(coords[0]) + int(coords[1])) % 2 == 0 + var tile = board_flow.get_node("Flow/" + tile_name) var style = StyleBoxFlat.new() - style.bg_color = Color(0.8, 0.8, 0.8, 1) if isWhite else Color(0.2, 0.2, 0.2, 1) + style.bg_color = Color(1, 0, 0, 0.3) # Red tint tile.add_theme_stylebox_override("normal", style) - - -func setup_persistent_effect(game_state): + + # Remove highlight after delay + var timer = Timer.new() + board_flow.add_child(timer) + timer.wait_time = 0.5 + timer.one_shot = true + timer.timeout.connect(func(): + tile.remove_theme_stylebox_override("normal") + timer.queue_free() + ) + timer.start() + + # game_state.stateMachine.transitionToNextState(Constants.POST_MOVE) + return true +func setup_persistent_effect(king, game_state): # Connect to the turn change signal if not already connected - if !game_state.is_connected("turn_changed", on_turn_changed): - game_state.connect("turn_changed", on_turn_changed) + if !game_state.is_connected("turn_changed", Callable(self, "on_turn_changed")): + game_state.connect("turn_changed", Callable(self, "on_turn_changed")) func on_turn_changed(): - # print("TURN CHANGED ==================", attached_piece, " | ", remaining_turns, ) - - if attached_piece.get_parent().get_parent().owner.isPlayerTurn() and attached_piece and remaining_turns > 0: - # print(attached_piece.get_parent().get_parent(), attached_piece.get_parent().get_parent().owner) - var piece = attached_piece - var flow = attached_piece.get_parent().get_parent() - var state = attached_piece.get_parent().get_parent().owner - - # print("Debug values:") - # print("- Piece: ", piece, " is null? ", piece == null) - # print("- Board Flow: ", flow, " is null? ", flow == null) - # print("- Game State: ", state, " is null? ", state == null) - - # Now try apply_effect with these values - valid = true - apply_effect(piece, flow, state) + if attached_piece and remaining_turns > 0: + # Reapply the effect at the start of each turn + apply_effect(attached_piece, attached_piece.get_parent().get_parent(), attached_piece.get_parent().get_parent().owner) + remaining_turns -= 1 + if remaining_turns <= 0: + remove_effect() func remove_effect(): if attached_piece: var game_state = attached_piece.get_parent().get_parent().owner - if game_state.is_connected("turn_changed", on_turn_changed): - game_state.disconnect("turn_changed", on_turn_changed) - super.remove_effect() \ No newline at end of file + if game_state.is_connected("turn_changed", Callable(self, "on_turn_changed")): + game_state.disconnect("turn_changed", Callable(self, "on_turn_changed")) + super.remove_effect() + +func update_visual_effect(king, board_flow): + # Could be extended with visual feedback like particles or highlighting + var radius_tiles = [] + var king_pos = king.get_parent().name.split("-") + var king_x = int(king_pos[0]) + var king_y = int(king_pos[1]) + + for x in range(max(0, king_x - CAPTURE_RADIUS), min(8, king_x + CAPTURE_RADIUS + 1)): + for y in range(max(0, king_y - CAPTURE_RADIUS), min(8, king_y + CAPTURE_RADIUS + 1)): + if abs(x - king_x) + abs(y - king_y) <= CAPTURE_RADIUS: + var tile_name = str(x) + "-" + str(y) + radius_tiles.append(board_flow.get_node(tile_name)) + + # Highlight affected tiles briefly + for tile in radius_tiles: + var style = StyleBoxFlat.new() + style.bg_color = Color(1, 0, 0, 0.3) # Red tint + tile.add_theme_stylebox_override("normal", style) + + # Remove highlight after a short delay + var timer = Timer.new() + board_flow.add_child(timer) + timer.wait_time = 0.5 + timer.one_shot = true + timer.timeout.connect(func(): + tile.remove_theme_stylebox_override("normal") + timer.queue_free() + ) + timer.start() diff --git a/Systems/Game/ChessGame.gd b/Systems/Game/ChessGame.gd index ef55769..adfa36d 100644 --- a/Systems/Game/ChessGame.gd +++ b/Systems/Game/ChessGame.gd @@ -302,12 +302,14 @@ func resetBoard() -> void: updateTurnIndicator() func getMovableAreas() -> void: + # print("HIGHLIGHTING getMovableAreas 1") resetHighlights() areas.clear() specialArea.clear() var piece = get_node("Flow/" + selectedNode).get_child(0) var piece_id = piece.get_instance_id() + # print("HIGHLIGHTING getMovableAreas 2") if deckManager.attached_cards.has(piece_id): var card = deckManager.attached_cards[piece_id] cardPreview.show_card_preview(card) @@ -318,12 +320,15 @@ func getMovableAreas() -> void: cardPreview.update_moves_remaining(moves_left) else: cardPreview.hide_preview() + # print("HIGHLIGHTING getMovableAreas 3") var moves = piece.getValidMoves(boardContainer, selectedNode) areas = moves.regular_moves specialArea = moves.special_moves + # print("HIGHLIGHTING getMovableAreas 4") highlightValidMoves() func highlightValidMoves() -> void: + # print("HIGHLIGHTING VALID MOVES") for move in areas: var button = boardContainer.get_node(move) var isWhiteSquare = (int(move.split("-")[0]) + int(move.split("-")[1])) % 2 == 0 diff --git a/Systems/StateMachine/GameStates/AttachCards.gd b/Systems/StateMachine/GameStates/AttachCards.gd index 992acfa..be68525 100644 --- a/Systems/StateMachine/GameStates/AttachCards.gd +++ b/Systems/StateMachine/GameStates/AttachCards.gd @@ -28,9 +28,9 @@ func exit() -> void: if game.boardContainer.is_connected("tile_pressed", handleTilePressed): game.boardContainer.disconnect("tile_pressed", handleTilePressed) - game.cardDisplay.selectedCard = null - game.selectedNode = "" - game.resetHighlights() + # game.cardDisplay.selectedCard = null + # game.selectedNode = "" + # game.resetHighlights() func handleTilePressed(location: String) -> void: # print("HANDLING Tile PRESSED ", location) @@ -40,7 +40,13 @@ func handleTilePressed(location: String) -> void: return var piece = targetNode.get_child(0) + var piece_id = piece.get_instance_id() var selectedCard = game.cardDisplay.getSelectedCard() + if game.deckManager.attached_cards.has(piece_id): + var card = game.deckManager.attached_cards[piece_id] + game.cardPreview.show_card_preview(card) + else: + game.cardPreview.hide_preview() if selectedCard and piece: var isCorrectColor = (piece.Item_Color == 0 and game.currentPlayer == game.WHITE) or \ diff --git a/Systems/StateMachine/GameStates/Movement.gd b/Systems/StateMachine/GameStates/Movement.gd index 57996d0..fb6dbe8 100644 --- a/Systems/StateMachine/GameStates/Movement.gd +++ b/Systems/StateMachine/GameStates/Movement.gd @@ -11,9 +11,10 @@ func enter(_previous: String, _data := {}) -> void: if !game.boardContainer.is_connected("tile_pressed", handleMovement): print("Connecting tile_pressed signal") game.boardContainer.connect("tile_pressed", handleMovement) - game.resetHighlights() if game.selectedNode != "": game.getMovableAreas() + else: + game.resetHighlights() moves_remaining.clear() multiMoving = ""