81 lines
2 KiB
GDScript
81 lines
2 KiB
GDScript
class_name WeatherIcon
|
|
extends Control
|
|
|
|
const CLEAR_DAY_TEXTURE: Texture2D = preload(
|
|
"res://ui/icons/weather/weather_clear_day.png"
|
|
)
|
|
const CLEAR_NIGHT_TEXTURE: Texture2D = preload(
|
|
"res://ui/icons/weather/weather_clear_night_full.png"
|
|
)
|
|
const CLOUDY_TEXTURE: Texture2D = preload(
|
|
"res://ui/icons/weather/weather_cloudy.png"
|
|
)
|
|
const FOG_TEXTURE: Texture2D = preload(
|
|
"res://ui/icons/weather/weather_fog.png"
|
|
)
|
|
const RAIN_TEXTURE: Texture2D = preload(
|
|
"res://ui/icons/weather/weather_rain.png"
|
|
)
|
|
|
|
var _weather: WorldWeatherService.Weather = WorldWeatherService.Weather.SUNNY
|
|
var _is_nighttime: bool = false
|
|
|
|
|
|
func _ready() -> void:
|
|
mouse_filter = Control.MOUSE_FILTER_PASS
|
|
focus_mode = Control.FOCUS_NONE
|
|
texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
|
|
custom_minimum_size = Vector2(34.0, 34.0)
|
|
_update_tooltip()
|
|
queue_redraw()
|
|
|
|
|
|
func set_weather(weather: WorldWeatherService.Weather) -> void:
|
|
if _weather == weather:
|
|
_update_tooltip()
|
|
return
|
|
_weather = weather
|
|
_update_tooltip()
|
|
queue_redraw()
|
|
|
|
|
|
func set_nighttime(nighttime: bool) -> void:
|
|
if _is_nighttime == nighttime:
|
|
return
|
|
_is_nighttime = nighttime
|
|
queue_redraw()
|
|
|
|
|
|
func is_nighttime() -> bool:
|
|
return _is_nighttime
|
|
|
|
|
|
func get_weather() -> WorldWeatherService.Weather:
|
|
return _weather
|
|
|
|
|
|
func _draw() -> void:
|
|
var icon_size := Vector2.ONE * minf(size.x, size.y)
|
|
var icon_rect := Rect2((size - icon_size) * 0.5, icon_size)
|
|
draw_texture_rect(_get_weather_texture(), icon_rect, false)
|
|
|
|
|
|
func _get_weather_texture() -> Texture2D:
|
|
match _weather:
|
|
WorldWeatherService.Weather.SUNNY:
|
|
return CLEAR_NIGHT_TEXTURE if _is_nighttime else CLEAR_DAY_TEXTURE
|
|
WorldWeatherService.Weather.CLOUDY:
|
|
return CLOUDY_TEXTURE
|
|
WorldWeatherService.Weather.RAINY:
|
|
return RAIN_TEXTURE
|
|
WorldWeatherService.Weather.FOGGY:
|
|
return FOG_TEXTURE
|
|
return CLEAR_DAY_TEXTURE
|
|
|
|
|
|
func _update_tooltip() -> void:
|
|
tooltip_text = (
|
|
"clear"
|
|
if _weather == WorldWeatherService.Weather.SUNNY
|
|
else WorldWeatherService.weather_name(_weather)
|
|
)
|