using System.Collections; using UnityEngine; public class ColorAndLightManager : MonoBehaviour, DayNightCycle.IDaytimeSensitive { [SerializeField] private Light sunlight; [SerializeField] private Colorscheme colorscheme; [SerializeField] private float transitionDuration = 3f; [SerializeField] private Transform playerTransform; [SerializeField] private Material enemyMaterial; [SerializeField] private Material allyMaterial; [SerializeField] private Material playerMaterial; [SerializeField] private Material playerCapeMaterial; [SerializeField] private Material playerCrownMaterial; [SerializeField] private Material horseMaterial; [SerializeField] private Material buildingMaterial; [SerializeField] private Material buildingPreviewMaterial; [SerializeField] private Material coinMaterial; [SerializeField] private Material groundMaterial; [SerializeField] private Material groundHigh; [SerializeField] private Material groundLow; [SerializeField] private Material groundPatches; [SerializeField] private Material treeMaterial; [SerializeField] private Material rockMaterial; [SerializeField] private Material waterMaterial; [SerializeField] private Material oceanMaterial; [SerializeField] private Material roadMaterial; [SerializeField] private Material shadowShapeMaterial; [SerializeField] private Material customPostProcessingMaterial; public static Colorscheme currentColorscheme; public void OnDawn_AfterSunrise() { } public void OnDusk() { StopAllCoroutines(); StartCoroutine(ToNight()); } public void OnDawn_BeforeSunrise() { StopAllCoroutines(); StartCoroutine(ToDay()); } public void Daylight() { sunlight.color = colorscheme.dayLightColor; AdjustAllOutlineColorsBasedOnLight(colorscheme.globalShadowColor, colorscheme.dayLightColor); } public void SunsetLight() { sunlight.color = colorscheme.sunsetLightColor; AdjustAllOutlineColorsBasedOnLight(colorscheme.globalShadowColor, colorscheme.sunsetLightColor); } public void NightLight() { sunlight.color = colorscheme.nightLightColor; AdjustAllOutlineColorsBasedOnLight(colorscheme.globalShadowColor, colorscheme.nightLightColor); } private IEnumerator ToDay() { float timer2 = 0f; sunlight.color = colorscheme.nightLightColor; while (timer2 <= transitionDuration) { timer2 += Time.deltaTime; sunlight.color = Color.Lerp(colorscheme.nightLightColor, colorscheme.sunsetLightColor, timer2 / transitionDuration); AdjustAllOutlineColorsBasedOnLight(colorscheme.globalShadowColor, sunlight.color); yield return null; } timer2 = 0f; while (timer2 <= transitionDuration) { timer2 += Time.deltaTime; sunlight.color = Color.Lerp(colorscheme.sunsetLightColor, colorscheme.dayLightColor, timer2 / transitionDuration); AdjustAllOutlineColorsBasedOnLight(colorscheme.globalShadowColor, sunlight.color); yield return null; } sunlight.color = colorscheme.dayLightColor; AdjustAllOutlineColorsBasedOnLight(colorscheme.globalShadowColor, sunlight.color); } private IEnumerator ToNight() { float timer = 0f; sunlight.color = colorscheme.dayLightColor; while (timer <= transitionDuration) { timer += Time.deltaTime; sunlight.color = Color.Lerp(colorscheme.dayLightColor, colorscheme.nightLightColor, timer / transitionDuration); AdjustAllOutlineColorsBasedOnLight(colorscheme.globalShadowColor, sunlight.color); yield return null; } sunlight.color = colorscheme.nightLightColor; AdjustAllOutlineColorsBasedOnLight(colorscheme.globalShadowColor, sunlight.color); } private void Start() { sunlight.color = colorscheme.dayLightColor; DayNightCycle.Instance.RegisterDaytimeSensitiveObject(this); ApplayColorScheme(); if ((bool)playerTransform && (bool)colorscheme.particlesToAttachToPlayer) { Object.Instantiate(colorscheme.particlesToAttachToPlayer, playerTransform).transform.localPosition = Vector3.zero; } } public void ApplayColorScheme() { ApplyColorScheme(colorscheme); } public void ApplyColorScheme(Colorscheme _colorScheme) { SetMaterialColors(enemyMaterial, _colorScheme.enemyLightColor, _colorScheme.enemyMidColor, _colorScheme.globalShadowColor); SetMaterialColors(allyMaterial, _colorScheme.allyLightColor, _colorScheme.allyMidColor, _colorScheme.globalShadowColor); SetMaterialColors(playerMaterial, _colorScheme.playerLightColor, _colorScheme.playerMidColor, _colorScheme.globalShadowColor); SetMaterialColors(playerCapeMaterial, _colorScheme.playerCapeLightColor, _colorScheme.playerCapeMidColor, _colorScheme.globalShadowColor); SetMaterialColors(playerCrownMaterial, _colorScheme.playerCrownLightColor, _colorScheme.playerCrownMidColor, _colorScheme.globalShadowColor); SetMaterialColors(horseMaterial, _colorScheme.horseLightColor, _colorScheme.horseMidColor, _colorScheme.globalShadowColor); SetMaterialColors(buildingMaterial, _colorScheme.buildingLightColor, _colorScheme.buildingMidColor, _colorScheme.globalShadowColor); SetMaterialColors(_lightCol: new Color(_colorScheme.buildingLightColor.r, _colorScheme.buildingLightColor.g, _colorScheme.buildingLightColor.b, 0.15f), _midCol: new Color(_colorScheme.buildingMidColor.r, _colorScheme.buildingMidColor.g, _colorScheme.buildingMidColor.b, 0.15f), _shadowCol: new Color(_colorScheme.globalShadowColor.r, _colorScheme.globalShadowColor.g, _colorScheme.globalShadowColor.b, 0.15f), _mat: buildingPreviewMaterial); SetMaterialColors(coinMaterial, _colorScheme.coinLightColor, _colorScheme.coinMidColor, _colorScheme.globalShadowColor); SetMaterialColors(groundMaterial, _colorScheme.groundColor, _colorScheme.globalShadowColor, _colorScheme.globalShadowColor); SetMaterialColors(groundPatches, _colorScheme.groundColor, _colorScheme.globalShadowColor, _colorScheme.globalShadowColor); SetMaterialColors(groundHigh, _colorScheme.groundColorHigh, _colorScheme.globalShadowColor, _colorScheme.globalShadowColor); SetMaterialColors(groundLow, _colorScheme.groundColorLow, _colorScheme.globalShadowColor, _colorScheme.globalShadowColor); SetMaterialColors(treeMaterial, _colorScheme.treeLightColor, _colorScheme.treeMidColor, _colorScheme.globalShadowColor); SetMaterialColors(rockMaterial, _colorScheme.rockLightColor, _colorScheme.rockMidColor, _colorScheme.globalShadowColor); SetMaterialColors(waterMaterial, _colorScheme.waterLightColor, _colorScheme.waterSecondaryColor, _colorScheme.globalShadowColor); SetMaterialColors(oceanMaterial, _colorScheme.waterLightColor, _colorScheme.waterSecondaryColor, _colorScheme.globalShadowColor); SetMaterialColors(roadMaterial, _colorScheme.roadColor, _colorScheme.globalShadowColor, _colorScheme.globalShadowColor); SetMaterialColors(shadowShapeMaterial, _colorScheme.globalShadowColor, _colorScheme.globalShadowColor, _colorScheme.globalShadowColor); SetMaterialColorsPostProcessing(customPostProcessingMaterial, _colorScheme.brightness, _colorScheme.topColorAdd, _colorScheme.botColorAdd, _colorScheme.contrast, _colorScheme.saturation, _colorScheme.mix); currentColorscheme = _colorScheme; } private void SetMaterialColors(Material _mat, Color _lightCol, Color _midCol, Color _shadowCol) { _mat.SetColor("_BaseColor", _lightCol); _mat.SetColor("_ColorDim", _midCol); _mat.SetColor("_ColorDimExtra", _shadowCol); _mat.SetColor("_UnityShadowColor", _shadowCol); _mat.SetColor("_OutlineColor", _shadowCol); } public void AdjustAllOutlineColorsBasedOnLight(Color outlineColor, Color lightColor) { SetOutlineColorBasedOnLight(enemyMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(allyMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(playerMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(playerCapeMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(playerCrownMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(horseMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(buildingMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(coinMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(groundMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(groundPatches, outlineColor, lightColor); SetOutlineColorBasedOnLight(treeMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(rockMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(waterMaterial, outlineColor, lightColor); SetOutlineColorBasedOnLight(oceanMaterial, outlineColor, lightColor); } private void SetOutlineColorBasedOnLight(Material _mat, Color _outlineCol, Color lightCol) { Color value = Color.Lerp(_outlineCol, _outlineCol * lightCol, _mat.GetFloat("_LightContribution")); _mat.SetColor("_OutlineColor", value); } private void SetMaterialColorsPostProcessing(Material _mat, float _brightness, Color _top, Color _bot, float _contrast, float _saturation, float _mix) { _mat.SetFloat("_Brightness", _brightness); _mat.SetColor("_TopColorAdd", _top); _mat.SetColor("_BotColorAdd", _bot); _mat.SetFloat("_Contrast", _contrast); _mat.SetFloat("_Saturation", _saturation); _mat.SetFloat("_Mix", _mix); } }