This commit is contained in:
RochesterX
2025-04-19 12:59:07 -04:00
parent a769bf506c
commit 954d37e50b
219 changed files with 23519 additions and 465 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -1,101 +1,172 @@
using System.Collections;
using NUnit.Framework.Constraints;
using UnityEngine; using Game; using Music; using Player;
using UnityEngine;
using Game;
using Music;
using Player;
namespace Game{
public class DayNightCycle : MonoBehaviour
namespace Game
{
public SpriteRenderer daySky, eveningSky, nightSky;
public SpriteRenderer dayBackClouds, eveningBackClouds, nightBackClouds;
public SpriteRenderer dayFrontClouds, eveningFrontClouds, nightFrontClouds;
public float transitionDuration = 5f; // Duration of transition
public float cycleDuration = 60f; // Time before transitioning to next phase
private void Start()
/// <summary>
/// Manages the day-night cycle by transitioning between different sky and cloud sprites.
/// </summary>
public class DayNightCycle : MonoBehaviour
{
// Set initial alpha (only day visible)
SetAlpha(daySky, 1);
SetAlpha(eveningSky, 0);
SetAlpha(nightSky, 0);
/// <summary>
/// Sprite representing the sky during the day.
/// </summary>
public SpriteRenderer daySky;
SetAlpha(dayBackClouds, 1);
SetAlpha(eveningBackClouds, 0);
SetAlpha(nightBackClouds, 0);
/// <summary>
/// Sprite representing the sky during the evening.
/// </summary>
public SpriteRenderer eveningSky;
SetAlpha(dayFrontClouds, 1);
SetAlpha(eveningFrontClouds, 0);
SetAlpha(nightFrontClouds, 0);
/// <summary>
/// Sprite representing the sky during the night.
/// </summary>
public SpriteRenderer nightSky;
// Start the cycle
StartCoroutine(DayNightCycleRoutine());
}
/// <summary>
/// Sprite representing the back clouds during the day.
/// </summary>
public SpriteRenderer dayBackClouds;
private IEnumerator DayNightCycleRoutine()
{
while (true)
/// <summary>
/// Sprite representing the back clouds during the evening.
/// </summary>
public SpriteRenderer eveningBackClouds;
/// <summary>
/// Sprite representing the back clouds during the night.
/// </summary>
public SpriteRenderer nightBackClouds;
/// <summary>
/// Sprite representing the front clouds during the day.
/// </summary>
public SpriteRenderer dayFrontClouds;
/// <summary>
/// Sprite representing the front clouds during the evening.
/// </summary>
public SpriteRenderer eveningFrontClouds;
/// <summary>
/// Sprite representing the front clouds during the night.
/// </summary>
public SpriteRenderer nightFrontClouds;
/// <summary>
/// Duration of the transition between different phases of the day-night cycle.
/// </summary>
public float transitionDuration = 5f;
/// <summary>
/// Duration of each phase (day, evening, night) before transitioning to the next phase.
/// </summary>
public float cycleDuration = 60f;
/// <summary>
/// Initializes the day-night cycle by setting the initial alpha values and starting the cycle routine.
/// </summary>
private void Start()
{
yield return new WaitForSeconds(cycleDuration);
yield return StartCoroutine(FadeTransition(
new SpriteRenderer[] { daySky, dayBackClouds, dayFrontClouds },
new SpriteRenderer[] { eveningSky, eveningBackClouds, eveningFrontClouds },
transitionDuration));
// Set initial alpha (only day visible)
SetAlpha(daySky, 1);
SetAlpha(eveningSky, 0);
SetAlpha(nightSky, 0);
yield return new WaitForSeconds(cycleDuration);
yield return StartCoroutine(FadeTransition(
new SpriteRenderer[] { eveningSky, eveningBackClouds, eveningFrontClouds },
new SpriteRenderer[] { nightSky, nightBackClouds, nightFrontClouds },
transitionDuration));
SetAlpha(dayBackClouds, 1);
SetAlpha(eveningBackClouds, 0);
SetAlpha(nightBackClouds, 0);
yield return new WaitForSeconds(cycleDuration);
yield return StartCoroutine(FadeTransition(
new SpriteRenderer[] { nightSky, nightBackClouds, nightFrontClouds },
new SpriteRenderer[] { daySky, dayBackClouds, dayFrontClouds },
transitionDuration));
SetAlpha(dayFrontClouds, 1);
SetAlpha(eveningFrontClouds, 0);
SetAlpha(nightFrontClouds, 0);
// Start the cycle
StartCoroutine(DayNightCycleRoutine());
}
}
private IEnumerator FadeTransition(SpriteRenderer[] from, SpriteRenderer[] to, float duration)
{
float elapsedTime = 0;
while (elapsedTime < duration)
/// <summary>
/// Coroutine that manages the day-night cycle by transitioning between phases in a loop.
/// </summary>
private IEnumerator DayNightCycleRoutine()
{
elapsedTime += Time.deltaTime;
float alpha = elapsedTime / duration;
// Apply fading to all elements simultaneously
for (int i = 0; i < from.Length; i++)
while (true)
{
SetAlpha(from[i], 1 - alpha);
SetAlpha(to[i], alpha);
yield return new WaitForSeconds(cycleDuration);
yield return StartCoroutine(FadeTransition(
new SpriteRenderer[] { daySky, dayBackClouds, dayFrontClouds },
new SpriteRenderer[] { eveningSky, eveningBackClouds, eveningFrontClouds },
transitionDuration));
yield return new WaitForSeconds(cycleDuration);
yield return StartCoroutine(FadeTransition(
new SpriteRenderer[] { eveningSky, eveningBackClouds, eveningFrontClouds },
new SpriteRenderer[] { nightSky, nightBackClouds, nightFrontClouds },
transitionDuration));
yield return new WaitForSeconds(cycleDuration);
yield return StartCoroutine(FadeTransition(
new SpriteRenderer[] { nightSky, nightBackClouds, nightFrontClouds },
new SpriteRenderer[] { daySky, dayBackClouds, dayFrontClouds },
transitionDuration));
}
}
/// <summary>
/// Coroutine that handles the fade transition between two sets of sprites over a specified duration.
/// </summary>
/// <param name="from">Array of sprites to fade out.</param>
/// <param name="to">Array of sprites to fade in.</param>
/// <param name="duration">Duration of the fade transition.</param>
private IEnumerator FadeTransition(SpriteRenderer[] from, SpriteRenderer[] to, float duration)
{
float elapsedTime = 0;
while (elapsedTime < duration)
{
elapsedTime += Time.deltaTime;
float alpha = elapsedTime / duration;
// Apply fading to all elements simultaneously
for (int i = 0; i < from.Length; i++)
{
SetAlpha(from[i], 1 - alpha);
SetAlpha(to[i], alpha);
}
yield return null;
}
yield return null;
}
// Ensure final alpha values are set correctly
for (int i = 0; i < from.Length; i++)
{
SetAlpha(from[i], 0);
SetAlpha(to[i], 1);
}
}
private void SetAlpha(SpriteRenderer sprite, float alpha)
{
if (sprite)
{
Color color = sprite.color;
color.a = alpha;
sprite.color = color;
foreach (Transform child in sprite.transform)
// Ensure final alpha values are set correctly
for (int i = 0; i < from.Length; i++)
{
if (child.TryGetComponent(out SpriteRenderer childSprite))
SetAlpha(from[i], 0);
SetAlpha(to[i], 1);
}
}
/// <summary>
/// Sets the alpha value of a sprite and its child sprites (if any).
/// </summary>
/// <param name="sprite">The sprite renderer to modify.</param>
/// <param name="alpha">The alpha value to set (0 to 1).</param>
private void SetAlpha(SpriteRenderer sprite, float alpha)
{
if (sprite)
{
Color color = sprite.color;
color.a = alpha;
sprite.color = color;
foreach (Transform child in sprite.transform)
{
childSprite.color = color;
if (child.TryGetComponent(out SpriteRenderer childSprite))
{
childSprite.color = color;
}
}
}
}
}
}
}