Color Persistence for R1 games, also fixed lockstep color bug (#882)

Lockstep and Mr Upbeat now have color persistence between game switches. Also, Lockstep can now change colors on a game switch beat.
This commit is contained in:
wookywok 2024-04-19 14:16:10 -05:00 committed by GitHub
parent 6a3d8de487
commit 973f5f18ee
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 39 additions and 3 deletions

View file

@ -291,7 +291,7 @@ namespace HeavenStudio.Games
private void PersistColors(double beat) private void PersistColors(double beat)
{ {
var allEventsBeforeBeat = EventCaller.GetAllInGameManagerList("lockstep", new string[] { "" }).FindAll(x => x.beat < beat); var allEventsBeforeBeat = EventCaller.GetAllInGameManagerList("lockstep", new string[] { "set colours" }).FindAll(x => x.beat < beat);
if (allEventsBeforeBeat.Count > 0) if (allEventsBeforeBeat.Count > 0)
{ {
allEventsBeforeBeat.Sort((x, y) => x.beat.CompareTo(y.beat)); allEventsBeforeBeat.Sort((x, y) => x.beat.CompareTo(y.beat));
@ -307,14 +307,15 @@ namespace HeavenStudio.Games
public override void OnGameSwitch(double beat) public override void OnGameSwitch(double beat)
{ {
QueueSwitchBGs(beat); QueueSwitchBGs(beat);
PersistColors(beat);
} }
public override void OnPlay(double beat) public override void OnPlay(double beat)
{ {
queuedInputs.Clear(); queuedInputs.Clear();
QueueSwitchBGs(beat); QueueSwitchBGs(beat);
PersistColors(beat);
} }
private void QueueSwitchBGs(double beat) private void QueueSwitchBGs(double beat)
@ -346,6 +347,9 @@ namespace HeavenStudio.Games
stepperMaterial.SetColor("_ColorBravo", stepperDark); stepperMaterial.SetColor("_ColorBravo", stepperDark);
stepperMaterial.SetColor("_ColorDelta", stepperLight); stepperMaterial.SetColor("_ColorDelta", stepperLight);
EntityPreCheck(Conductor.instance.songPositionInBeatsAsDouble);
masterSprite = masterStepperSprite.sprite; masterSprite = masterStepperSprite.sprite;
stepswitcherLeft.gameObject.SetActive(lessSteppers); stepswitcherLeft.gameObject.SetActive(lessSteppers);
stepswitcherRight.gameObject.SetActive(lessSteppers); stepswitcherRight.gameObject.SetActive(lessSteppers);
@ -358,6 +362,11 @@ namespace HeavenStudio.Games
cameraDV.Render(); cameraDV.Render();
} }
void EntityPreCheck(double beat)
{
PersistColors(beat);
}
void UpdateAndRenderSlaves() void UpdateAndRenderSlaves()
{ {
foreach (var stepper in slaveSteppers) foreach (var stepper in slaveSteppers)

View file

@ -194,8 +194,15 @@ namespace HeavenStudio.Games
} }
} }
public override void OnPlay(double beat)
{
PersistColor(beat);
}
public override void OnGameSwitch(double beat) public override void OnGameSwitch(double beat)
{ {
PersistColor(beat);
List<RiqEntity> prevEntities = GameManager.instance.Beatmap.Entities.FindAll(c => c.beat <= beat && c.datamodel.Split(0) == "mrUpbeat"); List<RiqEntity> prevEntities = GameManager.instance.Beatmap.Entities.FindAll(c => c.beat <= beat && c.datamodel.Split(0) == "mrUpbeat");
if (beat >= startBlippingBeat) if (beat >= startBlippingBeat)
@ -410,5 +417,25 @@ namespace HeavenStudio.Games
} }
public void Nothing(PlayerActionEvent caller) { } public void Nothing(PlayerActionEvent caller) { }
private void PersistColor(double beat)
{
var allEventsBeforeBeat = EventCaller.GetAllInGameManagerList("mrUpbeat", new string[] { "changeBG" }).FindAll(x => x.beat < beat);
if (allEventsBeforeBeat.Count > 0)
{
allEventsBeforeBeat.Sort((x, y) => x.beat.CompareTo(y.beat)); //just in case
var lastEvent = allEventsBeforeBeat[^1];
BackgroundColor(lastEvent.beat, lastEvent.length, lastEvent["start"], lastEvent["end"], lastEvent["ease"]);
}
var allEventsBeforeBeatObj = EventCaller.GetAllInGameManagerList("mrUpbeat", new string[] { "upbeatColors" }).FindAll(x => x.beat < beat);
if (allEventsBeforeBeatObj.Count > 0)
{
allEventsBeforeBeatObj.Sort((x, y) => x.beat.CompareTo(y.beat)); //just in case
var lastEventObj = allEventsBeforeBeatObj[^1];
UpbeatColors(lastEventObj["blipColor"], lastEventObj["setShadow"], lastEventObj["shadowColor"]);
}
}
} }
} }