Files
aibis-dream/Assets/Scripts/SceneManagement/EnvironmentKit/ActiveScenePart.cs
T

63 lines
2.1 KiB
C#

using System;
using System.Linq;
using UnityEngine;
namespace AibisDream
{
public class ActiveScenePart : AbsScenePart
{
[SerializeField] private ActivePartAsset[] activePartAssets;
public override void Init(TimesOfDay time, Weather weather = Weather.Sunny)
{
curWeather = weather;
OnTimeChange(time);
}
public override void OnTimeChange(TimesOfDay time)
{
curTime = time;
var timeArray = activePartAssets.Where(item => item.time == time).ToArray();
if (timeArray.Length == 0) return;
// 先尝试找到匹配当前天气的配置
var matchingWeather = timeArray.FirstOrDefault(item => item.weather == curWeather);
if (matchingWeather.time != default) // 如果找到了匹配的天气配置
{
gameObject.SetActive(matchingWeather.active);
return;
}
// 如果没有找到匹配的天气配置,使用第一个时间匹配的配置
gameObject.SetActive(timeArray[0].active);
}
public override void OnWeatherChange(Weather weather)
{
curWeather = weather;
var weatherArray = activePartAssets.Where(item => item.weather == weather).ToArray();
if (weatherArray.Length == 0) return;
// 先尝试找到匹配当前时间的配置
var matchingTime = weatherArray.FirstOrDefault(item => item.time == curTime);
if (matchingTime.time != default) // 如果找到了匹配的时间配置
{
gameObject.SetActive(matchingTime.active);
return;
}
// 如果没有找到匹配的时间配置,使用第一个天气匹配的配置
gameObject.SetActive(weatherArray[0].active);
}
}
[Serializable]
public struct ActivePartAsset
{
public TimesOfDay time;
public Weather weather;
public bool active;
}
}