diff --git a/Assets/Resources/Sprites/Games/NightWalkGBA/Animations/Star/Small.anim b/Assets/Resources/Sprites/Games/NightWalkGBA/Animations/Star/Small.anim index 886698cdb..265e56757 100644 --- a/Assets/Resources/Sprites/Games/NightWalkGBA/Animations/Star/Small.anim +++ b/Assets/Resources/Sprites/Games/NightWalkGBA/Animations/Star/Small.anim @@ -36,7 +36,7 @@ AnimationClip: m_Level: 0 m_CycleOffset: 0 m_HasAdditiveReferencePose: 0 - m_LoopTime: 1 + m_LoopTime: 0 m_LoopBlend: 0 m_LoopBlendOrientation: 0 m_LoopBlendPositionY: 0 diff --git a/Assets/Scripts/Games/NightWalkAgb/AgbStar.cs b/Assets/Scripts/Games/NightWalkAgb/AgbStar.cs index af7a23b23..9076ac4ac 100644 --- a/Assets/Scripts/Games/NightWalkAgb/AgbStar.cs +++ b/Assets/Scripts/Games/NightWalkAgb/AgbStar.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using HeavenStudio.Util; +using System; namespace HeavenStudio.Games.Scripts_AgbNightWalk { @@ -11,7 +12,8 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk private float originY; private AgbStarHandler handler; private Animator anim; - private int evoStage = 1; + [NonSerialized] public int evoStage = 1; + private bool devolved = false; private void Awake() { @@ -33,19 +35,25 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk public void Blink() { - anim.Play("Blink" + evoStage, 0, 0); + if (devolved) return; + if (anim.IsAnimationNotPlaying()) + { + anim.Play("Blink" + evoStage, 0, 0); + } } public void Evolve() { - if (evoStage >= 5) return; + if (evoStage >= 5 || devolved) return; anim.Play("Evolve" + evoStage, 0, 0); evoStage++; } public void Devolve() { + if (devolved) return; anim.Play("Devolve" + evoStage, 0, 0); + devolved = true; } } } diff --git a/Assets/Scripts/Games/NightWalkAgb/AgbStarHandler.cs b/Assets/Scripts/Games/NightWalkAgb/AgbStarHandler.cs index 3dd20bf2c..6e45d9ff2 100644 --- a/Assets/Scripts/Games/NightWalkAgb/AgbStarHandler.cs +++ b/Assets/Scripts/Games/NightWalkAgb/AgbStarHandler.cs @@ -14,18 +14,63 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk public float boundaryY = 10; [SerializeField] private int starCount = 45; + [SerializeField] private double blinkFrequency = 0.125; + [SerializeField] private int blinkAmount = 5; [NonSerialized] public float normalizedX; [NonSerialized] public float normalizedY; + private AgbStar[] currentStars; + private int collectiveEvoStage = 1; + private GameEvent blinkEvent = new GameEvent(); + private void Awake() { + currentStars = new AgbStar[starCount]; for (int i = 0; i < starCount; i++) { AgbStar spawnedStar = Instantiate(starRef, transform); float xPos = UnityEngine.Random.Range(-boundaryX, boundaryX); float yPos = UnityEngine.Random.Range(-boundaryY, boundaryY); spawnedStar.Init(xPos, yPos, this); + currentStars[i] = spawnedStar; + } + } + + private void Update() + { + var cond = Conductor.instance; + + if (cond.isPlaying && !cond.isPaused) + { + if (ReportBlinkBeat(ref blinkEvent.lastReportedBeat)) + { + Blink(); + } + } + } + + private void Blink() + { + for (int i = 0; i < blinkAmount; i++) + { + currentStars[UnityEngine.Random.Range(0, currentStars.Length)].Blink(); + } + } + + public void Evolve(int amount) + { + for (int i = 0; i < amount; i++) + { + currentStars[UnityEngine.Random.Range(0, currentStars.Length)].Evolve(); + } + } + + public void Devolve() + { + foreach (var star in currentStars) + { + star.Devolve(); } } @@ -61,6 +106,17 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk Gizmos.color = Color.blue; Gizmos.DrawWireCube(Vector3.zero, new Vector3(boundaryX, boundaryY, 0)); } + + private bool ReportBlinkBeat(ref double lastReportedBeat) + { + var cond = Conductor.instance; + bool result = cond.songPositionInBeats >= (lastReportedBeat) + blinkFrequency; + if (result) + { + lastReportedBeat += blinkFrequency; + } + return result; + } } }