extends "res://Systems/StateMachine/ChessGameState.gd" func enter(_previous: String, _data := {}) -> void: print("ENTERING STATE ", Constants.EVALUATE_POSITION) # Check if WinConditionManager exists if !game.winConditionManager: print("Warning: WinConditionManager not initialized") finished.emit(Constants.CLEANUP) return # Don't rely on the signal - directly check captured pieces here var win_condition_met = check_win_conditions() var loss_condition_met = check_loss_conditions() # Only proceed to CLEANUP if no win/loss conditions were met if !win_condition_met and !loss_condition_met: finished.emit(Constants.CLEANUP) # Check all possible win conditions func check_win_conditions() -> bool: match game.winConditionManager.win_condition: Utils.WinConditionType.CAPTURE_UNIT: # Directly check if king/target unit was captured var target_unit = game.winConditionManager.win_condition_data.get("unit", "King") for piece in game.captured_pieces_this_turn: if piece.name == target_unit and piece.Item_Color == (1 if game.Turn == 0 else 0): # Found captured target piece - win condition met! var condition_data = { "type": Utils.WinConditionType.CAPTURE_UNIT, "message": "Enemy " + target_unit + " captured!" } game.winConditionManager.emit_signal("win_condition_met", condition_data) finished.emit(Constants.CLEANUP, {"endCondition": "target_captured"}) return true game.captured_pieces_this_turn = [] Utils.WinConditionType.BOARD_CLEARED: var remaining_enemy_pieces = game.winConditionManager.count_enemy_pieces() if remaining_enemy_pieces <= 0: var condition_data = { "type": Utils.WinConditionType.BOARD_CLEARED, "message": "Board cleared of enemy pieces!" } game.winConditionManager.emit_signal("win_condition_met", condition_data) finished.emit(Constants.CLEANUP, {"endCondition": "board_cleared"}) return true Utils.WinConditionType.TURN_NUMBER: var target_turn = game.winConditionManager.win_condition_data.get("target_turn", 0) if game.winConditionManager.turn_count >= target_turn: var condition_data = { "type": Utils.WinConditionType.TURN_NUMBER, "message": "Turn limit reached!" } game.winConditionManager.emit_signal("win_condition_met", condition_data) finished.emit(Constants.CLEANUP, {"endCondition": "turn_limit_reached"}) return true Utils.WinConditionType.TILE_REACHED: var target_tiles = game.winConditionManager.target_tiles var required_unit = game.winConditionManager.win_condition_data.get("unit", "") var all_targets_reached = true for tile_loc in target_tiles: if !game.is_tile_reached(tile_loc, required_unit): all_targets_reached = false break if all_targets_reached and target_tiles.size() > 0: var condition_data = { "type": Utils.WinConditionType.TILE_REACHED, "message": "All target tiles reached!" } game.winConditionManager.emit_signal("win_condition_met", condition_data) finished.emit(Constants.CLEANUP, {"endCondition": "tile_reached"}) return true return false # Check all possible loss conditions func check_loss_conditions() -> bool: match game.winConditionManager.loss_condition: Utils.LossConditionType.UNIT_LOST: # Directly check if king/target unit was lost var target_unit = game.winConditionManager.loss_condition_data.get("unit", "King") for piece in game.player_pieces_lost_this_turn: if piece.name == target_unit and piece.Item_Color == (0 if game.Turn == 0 else 1): # Found lost target piece - loss condition met! var condition_data = { "type": Utils.LossConditionType.UNIT_LOST, "message": "Your " + target_unit + " was captured!" } game.winConditionManager.emit_signal("loss_condition_met", condition_data) finished.emit(Constants.CLEANUP, {"endCondition": "unit_lost"}) return true game.player_pieces_lost_this_turn = [] Utils.WinConditionType.TURN_NUMBER: var turn_limit = game.winConditionManager.loss_condition_data.get("turn_limit", 0) if game.winConditionManager.turn_count >= turn_limit: var condition_data = { "type": Utils.WinConditionType.TURN_NUMBER, "message": "Turn limit exceeded!" } game.winConditionManager.emit_signal("loss_condition_met", condition_data) finished.emit(Constants.CLEANUP, {"endCondition": "turn_limit_exceeded"}) return true return false