class_name Tile extends Resource enum TileType { GENERAL, # Affects any unit SPECIFIC, # Affects specific unit type GLOBAL # Affects all units of a color while active } enum TileOwner { PLAYER, # White player ENEMY, # Black player GAME # Neutral/game-owned } var game: ChessGame var tile_name: String = "" var description: String = "" var duration: int = -1 # -1 for permanent tiles var remaining_turns: int = 0 var tile_owner: TileOwner = TileOwner.GAME var type: TileType = TileType.GENERAL var target_piece_type: String = "" # For SPECIFIC type tiles var base_button: Button # Reference to the tile button var base_is_white: bool # Original tile color signal effect_expired func _init(button: Button, is_white: bool, d: int) -> void: base_button = button base_is_white = is_white remaining_turns = d func is_effect_active() -> bool: return duration == -1 || remaining_turns > 0 func update_duration() -> void: if duration != -1: remaining_turns -= 1 if remaining_turns <= 0: effect_expired.emit() func can_affect_piece(piece: Pawn) -> bool: match type: TileType.SPECIFIC: return piece.name == target_piece_type TileType.GLOBAL, TileType.GENERAL: # Check owner alignment match tile_owner: TileOwner.PLAYER: return piece.Item_Color == 1 # White TileOwner.ENEMY: return piece.Item_Color == 0 # Black TileOwner.GAME: return true return false func apply_effect(piece: Pawn = null) -> void: # Override in child classes pass func remove_effect(piece: Pawn = null) -> void: # Override in child classes pass func update_appearance() -> void: restore_base_appearance() func restore_base_appearance() -> void: if base_button: var style = StyleBoxFlat.new() style.bg_color = Color(0.8, 0.8, 0.8, 1) if base_is_white else Color(0.2, 0.2, 0.2, 1) base_button.add_theme_stylebox_override("normal", style)