Скрипт смены для и ночи
extends Node
# Текущее время суток в часах и минутах
var current_hour : int = 6
var current_minute : int = 0
var hour_str : String
var minute_str : String
# Скорость прохождения времени (минуты в секунду)
var time_speed : float = 1.0
# Счётчик для отслеживания времени, когда произошло последнее обновление
var last_update_time : float = 0.0
func _ready():
# Запускаем таймер
$Timer.start()
func _process(delta):
# Проверяем, находится ли текущее состояние в состоянии PLAY
if StateMachine.current_state != StateMachine.States.PLAY:
return
# Обновляем текущее время суток в зависимости от прошедшего времени с учетом скорости
last_update_time += delta * time_speed
# Пока прошло достаточно времени для обновления (1 минута)
while last_update_time >= 1.0:
last_update_time -= 1.0
current_minute += 1
# Если минуты перевалили за 60, сбрасываем и увеличиваем часы
if current_minute >= 60:
current_minute = 0
current_hour += 1
# Если часы перевалили за 24, сбрасываем
if current_hour >= 24:
current_hour = 0
# Обновляем текстовое представление времени
update_time_text()
func update_time_text():
# Форматируем текущее время в строку "часы:минуты" с ведущими нулями
hour_str = str(current_hour).pad_zeros(2)
minute_str = str(current_minute).pad_zeros(2)
# Сигнал таймера для обновления времени
func _on_Timer_timeout():
# Вызываем _process с учетом дельты времени
_process(get_process_delta_time())
extends Node
# Ссылки на Environment и DirectionalLight3D
@export var world_environment : Environment
@export var DirectionalLight : DirectionalLight3D
# Цвета для разных времён суток
var color_day : Color = Color(1, 1, 1) # Белый
var color_night : Color = Color(0, 0, 0) # Черный
var color_dawn_dusk : Color = Color(1, 0.5, 0) # Оранжевый
# Переменные для плавного перехода цвета
var target_color : Color = color_day
var transition_duration : float = 5.0 # Время в секундах для плавного перехода
var transition_timer : float = 0.0
var start_color : Color = color_day
# Переменные для плавного изменения интенсивности света
var target_light_energy : float = 1.0
var start_light_energy : float = 1.0
func _ready():
# Создаем и запускаем таймер
var timer = Timer.new()
timer.set_wait_time(1.0)
timer.set_one_shot(false)
add_child(timer)
# Соединяем сигнал таймера с функцией _on_timer_timeout
timer.timeout.connect(_on_timer_timeout)
timer.start()
func _process(delta):
# Определяем целевой цвет и интенсивность света в зависимости от текущего времени
var current_hour = DayTime.current_hour
if current_hour >= 6 and current_hour < 18:
# Дневное время
target_color = color_day
target_light_energy = 0.5
elif (current_hour >= 0 and current_hour < 6) or (current_hour >= 18 and current_hour < 21):
# Рассвет или закат
target_color = color_dawn_dusk
target_light_energy = 0.2 # Половина интенсивности
else:
# Ночное время
target_color = color_night
target_light_energy = 0.005 # Низкая интенсивность
# Плавно меняем цвет фона и интенсивность света
if transition_timer < transition_duration:
transition_timer += delta
var lerp_value = transition_timer / transition_duration
# Линейная интерполяция между начальным и целевым цветом
$WorldEnvironment.environment.background_color = start_color.lerp(target_color, lerp_value)
# Линейная интерполяция между начальной и целевой интенсивностью света
$DirectionalLight3D.light_energy = lerp(start_light_energy, target_light_energy, lerp_value)
else:
# Устанавливаем целевой цвет и интенсивность света, когда переход завершен
$WorldEnvironment.environment.background_color = target_color
$DirectionalLight3D.light_energy = target_light_energy
# Обновляем начальные значения для следующего перехода
start_color = target_color
start_light_energy = target_light_energy
transition_timer = 0.0
func _on_timer_timeout():
# Вызываем _process с учетом дельты времени
_process(get_process_delta_time())
Оба скрипта глобальные
Оба скрипта глобальные
Error_505
Воу, слишком много, мне нравится
Jun 27 2024 00:31 (changed)

1
VORONGO
Error_505, я уверен это можно сократить до 2 строк
Jun 27 2024 00:42