monkeys appear added

This commit is contained in:
Rapandrasmus 2023-08-07 02:47:04 +02:00
parent 197e2882a5
commit 45d0af6472
2 changed files with 82 additions and 0 deletions

View file

@ -15,6 +15,11 @@ namespace HeavenStudio.Games.Loaders
{ {
new GameAction("appear", "Monkeys Appear") new GameAction("appear", "Monkeys Appear")
{ {
function = delegate
{
var e = eventCaller.currentEntity;
MonkeyWatch.instance.MonkeysAppear(e.beat, e.length, e["value"], e.beat);
},
defaultLength = 2f, defaultLength = 2f,
resizable = true, resizable = true,
parameters = new List<Param>() parameters = new List<Param>()
@ -136,6 +141,7 @@ namespace HeavenStudio.Games
private double persistBeat = 0; private double persistBeat = 0;
private double theNextGameSwitchBeat = double.MaxValue; private double theNextGameSwitchBeat = double.MaxValue;
private double clappingBeat = 0;
public override void OnGameSwitch(double beat) public override void OnGameSwitch(double beat)
{ {
@ -147,6 +153,7 @@ namespace HeavenStudio.Games
{ {
StartClapping(wantClap); StartClapping(wantClap);
} }
PersistAppear(beat);
bool IsClapBeat(double clapBeat) bool IsClapBeat(double clapBeat)
{ {
@ -160,6 +167,78 @@ namespace HeavenStudio.Games
GetCameraMovements(beat, true); GetCameraMovements(beat, true);
monkeyClockArrow.MoveToAngle(lastAngle); monkeyClockArrow.MoveToAngle(lastAngle);
monkeyHandler.Init((int)(lastAngle / degreePerMonkey)); monkeyHandler.Init((int)(lastAngle / degreePerMonkey));
PersistAppear(beat);
}
private void PersistAppear(double beat)
{
var allEvents = EventCaller.GetAllInGameManagerList("monkeyWatch", new string[] { "appear" }).FindAll(x => x.beat + x["value"] > beat && x.beat < beat);
foreach (var e in allEvents)
{
MonkeysAppear(e.beat, e.length, e["value"], beat);
}
}
public void MonkeysAppear(double beat, float length, int repeatAmount, double gameSwitchBeat)
{
List<BeatAction.Action> actions = new();
double lastBeat = clappingBeat;
int index = 0;
while (index < repeatAmount)
{
if (IsPinkMonkeyAtBeat(lastBeat, out float pinkLength))
{
for (int i = 0; i < pinkLength; i++)
{
if (index >= repeatAmount) break;
int realerIndex = index;
double realLastBeat = lastBeat;
actions.Add(new BeatAction.Action(beat + (index * length), delegate
{
monkeyHandler.SpawnMonkey(realLastBeat, true, beat + (realerIndex * length) < gameSwitchBeat);
}));
index++;
lastBeat += 1;
}
}
else if (IsCustomPinkMonkeyAtBeat(lastBeat, out float pinkCustomLength))
{
var relevantPinks = FindCustomOffbeatMonkeysBetweenBeat(lastBeat, lastBeat + pinkCustomLength);
relevantPinks.Sort((x, y) => x.beat.CompareTo(y.beat));
for (int i = 0; i < relevantPinks.Count; i++)
{
if (index >= repeatAmount) break;
int jindex = i;
int realerIndex = index;
actions.Add(new BeatAction.Action(beat + (index * length), delegate
{
monkeyHandler.SpawnMonkey(relevantPinks[jindex].beat, true, beat + (realerIndex * length) < gameSwitchBeat);
}));
index++;
}
lastBeat += pinkCustomLength;
}
else
{
int realIndex = index;
double realLastBeat = lastBeat;
actions.Add(new BeatAction.Action(beat + (index * length), delegate
{
monkeyHandler.SpawnMonkey(realLastBeat, false, beat + (realIndex * length) < gameSwitchBeat);
}));
index++;
lastBeat += 2;
}
Debug.Log(index);
}
actions.Sort((x, y) => x.beat.CompareTo(y.beat));
BeatAction.New(instance.gameObject, actions);
} }
#region clapping #region clapping
@ -354,12 +433,14 @@ namespace HeavenStudio.Games
overrideStartBeat = false; overrideStartBeat = false;
} }
lastAngle = startAngle; lastAngle = startAngle;
clappingBeat = startClappingBeat;
var pinkClappingEvents = EventCaller.GetAllInGameManagerList("monkeyWatch", new string[] { "off", "offStretch", "offInterval" }).FindAll(x => x.beat >= lastGameSwitchBeat && x.beat < nextGameSwitchBeat); var pinkClappingEvents = EventCaller.GetAllInGameManagerList("monkeyWatch", new string[] { "off", "offStretch", "offInterval" }).FindAll(x => x.beat >= lastGameSwitchBeat && x.beat < nextGameSwitchBeat);
if (pinkClappingEvents.Count > 0) if (pinkClappingEvents.Count > 0)
{ {
pinkClappingEvents.Sort((x, y) => x.beat.CompareTo(y.beat)); pinkClappingEvents.Sort((x, y) => x.beat.CompareTo(y.beat));
if (overrideStartBeat) startClappingBeat = pinkClappingEvents[0].beat; if (overrideStartBeat) startClappingBeat = pinkClappingEvents[0].beat;
clappingBeat = startClappingBeat;
var relevantPinkClappingEvents = pinkClappingEvents.FindAll(x => (x.beat - startClappingBeat) % 2 == 0); var relevantPinkClappingEvents = pinkClappingEvents.FindAll(x => (x.beat - startClappingBeat) % 2 == 0);
relevantPinkClappingEvents.Sort((x, y) => x.beat.CompareTo(y.beat)); relevantPinkClappingEvents.Sort((x, y) => x.beat.CompareTo(y.beat));

View file

@ -33,6 +33,7 @@ namespace HeavenStudio.Games.Scripts_MonkeyWatch
public void Init(int minute) public void Init(int minute)
{ {
startMinute = minute; startMinute = minute;
watchHoleIndex = startMinute;
} }
private Transform GetNextAvailableWatchHole() private Transform GetNextAvailableWatchHole()
{ {