"""Visibility calculations based on time and weather.""" from mudlib.weather import WeatherCondition, WeatherState def get_visibility( hour: int, weather: WeatherState, base_width: int = 21, base_height: int = 11, ) -> tuple[int, int]: """Calculate effective viewport dimensions. Night, fog, and storms reduce visibility. Multiple effects stack but never reduce below minimum (7x5). Returns: Tuple of (effective_width, effective_height) """ width = base_width height = base_height # Time-based reductions if hour >= 20 or hour <= 4: # Night (hours 20-4) width -= 6 height -= 2 elif 5 <= hour <= 6: # Dawn (hours 5-6) width -= 2 elif 18 <= hour <= 19: # Dusk (hours 18-19) width -= 2 # Weather-based reductions if weather.condition == WeatherCondition.fog: if weather.intensity >= 0.7: # Thick fog width -= 8 height -= 4 elif weather.intensity >= 0.4: # Moderate fog width -= 4 height -= 2 elif weather.condition == WeatherCondition.storm: # Storm width -= 4 height -= 2 # Clamp to minimum width = max(7, width) height = max(5, height) return width, height