@tool class_name Tile enum TileType { GENERAL, # Effects apply to any piece SPECIFIC, # Effects apply to specific pieces GLOBAL # Effects apply globally while conditions are met } enum TileOwner { PLAYER, # White player's tiles ENEMY, # Black player's tiles GAME # Neutral game tiles } const TILE_COLORS = { TileOwner.PLAYER: Color(0.2, 0.8, 0.2, 0.5), TileOwner.ENEMY: Color(0.8, 0.2, 0.2, 0.5), TileOwner.GAME: Color(0.2, 0.2, 0.8, 0.5) } var type: TileType var tile_owner: TileOwner var duration: int = -1 # -1 for permanent effects var remaining_turns: int var occupied_by: Pawn = null var active: bool = false var tile_name: String var description: String var id: String = Utils.generate_guid() var base_button: Button # Reference to the board square button var base_is_white: bool # Original color of the square func _init(button: Button, is_white: bool) -> void: base_button = button base_is_white = is_white func initialize(tile_type: TileType, owner_type: TileOwner, turns: int = -1) -> void: print("initi Tile") type = tile_type tile_owner = owner_type duration = turns remaining_turns = duration update_appearance() func update_appearance() -> void: if is_effect_active() && base_button: var style = StyleBoxFlat.new() var tile_color = TILE_COLORS[tile_owner] # Mix the tile color with the base square color var base_color = Color(0.8, 0.8, 0.8) if base_is_white else Color(0.2, 0.2, 0.2) var mixed_color = Color( (base_color.r + tile_color.r) / 2, (base_color.g + tile_color.g) / 2, (base_color.b + tile_color.b) / 2 ) style.bg_color = mixed_color style.border_width_left = 2 style.border_width_right = 2 style.border_width_top = 2 style.border_width_bottom = 2 style.border_color = tile_color base_button.add_theme_stylebox_override("normal", style) # Add hover style var hover_style = style.duplicate() hover_style.bg_color = tile_color.lightened(0.2) base_button.add_theme_stylebox_override("hover", hover_style) else: restore_base_appearance() func restore_base_appearance() -> void: if base_button: var board = base_button.get_parent() if board && board.has_method("get_base_style"): var base_style = board.get_base_style(base_is_white) base_button.add_theme_stylebox_override("normal", base_style) base_button.add_theme_stylebox_override("hover", base_style) func is_effect_active() -> bool: return active && (duration == -1 || remaining_turns > 0) func update_duration() -> bool: if duration > 0: remaining_turns -= 1 if remaining_turns <= 0: restore_base_appearance() return true # Tile should be removed return false # Virtual methods to be overridden by specific tile effects func apply_effect(piece: Pawn, board_flow = null, game_state = null) -> void: pass func remove_effect(piece: Pawn, board_flow = null, game_state = null) -> void: pass