using System; using System.Linq; using UnityEngine; namespace AibisDream { [RequireComponent(typeof(SpriteRenderer))] public class SpriteScenePart : AbsScenePart { [SerializeField] private SpritePartAsset[] spritePartAssets; private SpriteRenderer _spriteRenderer; public override void Init(TimesOfDay time, Weather weather = Weather.Sunny) { _spriteRenderer = GetComponent(); curWeather = weather; OnTimeChange(time); } public override void OnTimeChange(TimesOfDay time) { curTime = time; var timeArray = spritePartAssets.Where(item => item.time == time).ToArray(); if (timeArray.Length == 0) return; var res = timeArray.DefaultIfEmpty(timeArray[0]).First(item => item.weather == curWeather); _spriteRenderer.sprite = res.sprite; } public override void OnWeatherChange(Weather weather) { curWeather = weather; var weatherArray = spritePartAssets.Where(item => item.weather == weather).ToArray(); if (weatherArray.Length == 0) return; var res = weatherArray.DefaultIfEmpty(weatherArray[0]).First(item => item.time == curTime); _spriteRenderer.sprite = res.sprite; } } [Serializable] public struct SpritePartAsset { public TimesOfDay time; public Weather weather; public Sprite sprite; } }