Added time sequence buttons
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -43,7 +43,7 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 36
|
||||
Data: 37
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
@@ -1789,25 +1789,19 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: currentTimeSequence
|
||||
Data: waitingForTimeSequenceFinish
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 110|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: currentTimeSequence
|
||||
Data: waitingForTimeSequenceFinish
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 111|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: Marro.PacManUdon.PacManTimeSequence, Assembly-CSharp
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
Entry: 9
|
||||
Data: 108
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 55
|
||||
Data: 108
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
@@ -1822,7 +1816,7 @@ MonoBehaviour:
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 112|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
Data: 111|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
@@ -1844,19 +1838,25 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: hasTimeSequenceQueued
|
||||
Data: currentTimeSequence
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 113|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
Data: 112|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: hasTimeSequenceQueued
|
||||
Data: currentTimeSequence
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 108
|
||||
Entry: 7
|
||||
Data: 113|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: Marro.PacManUdon.PacManTimeSequence, Assembly-CSharp
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 108
|
||||
Data: 55
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
@@ -1893,25 +1893,19 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: timeSequenceQueue
|
||||
Data: hasTimeSequenceQueued
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 115|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: timeSequenceQueue
|
||||
Data: hasTimeSequenceQueued
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 116|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: VRC.SDK3.Data.DataList, VRCSDK3
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
Entry: 9
|
||||
Data: 108
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 116
|
||||
Data: 108
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
@@ -1926,7 +1920,62 @@ MonoBehaviour:
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 117|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
Data: 116|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 0
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: timeSequenceQueue
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 117|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: timeSequenceQueue
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 118|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: VRC.SDK3.Data.DataList, VRCSDK3
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 118
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 6
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 119|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
@@ -1951,13 +2000,13 @@ MonoBehaviour:
|
||||
Data: timeSequenceSecondsPassed
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 118|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
Data: 120|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: timeSequenceSecondsPassed
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 119|System.RuntimeType, mscorlib
|
||||
Data: 121|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: System.Single, mscorlib
|
||||
@@ -1966,7 +2015,7 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 119
|
||||
Data: 121
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
@@ -1981,14 +2030,14 @@ MonoBehaviour:
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 120|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
Data: 122|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 1
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data: 121|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
|
||||
Data: 123|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
@@ -2012,7 +2061,7 @@ MonoBehaviour:
|
||||
Data: timeSequenceProgress
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 122|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
Data: 124|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: timeSequenceProgress
|
||||
@@ -2036,7 +2085,7 @@ MonoBehaviour:
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 123|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
Data: 125|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
@@ -2061,13 +2110,13 @@ MonoBehaviour:
|
||||
Data: timeSequenceKeyframeTimes
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 124|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
Data: 126|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: timeSequenceKeyframeTimes
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 125|System.RuntimeType, mscorlib
|
||||
Data: 127|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: System.Single[], mscorlib
|
||||
@@ -2076,7 +2125,7 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 125
|
||||
Data: 127
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
@@ -2091,7 +2140,7 @@ MonoBehaviour:
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 126|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
Data: 128|System.Collections.Generic.List`1[[System.Attribute, mscorlib]],
|
||||
mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
|
||||
@@ -106,6 +106,12 @@ namespace Marro.PacManUdon
|
||||
StartTimeSequence(PacManTimeSequence.WaitForStartTimeout);
|
||||
}
|
||||
|
||||
public void ResetButtonPressed()
|
||||
{
|
||||
Debug.Log($"{gameObject} Reset button was pressed!");
|
||||
Start();
|
||||
}
|
||||
|
||||
public void StartGameButtonPressed()
|
||||
{
|
||||
Debug.Log($"{gameObject} Start Game Button was pressed!");
|
||||
@@ -491,338 +497,5 @@ namespace Marro.PacManUdon
|
||||
}
|
||||
get => level;
|
||||
}
|
||||
|
||||
#region TIME SEQUENCE BEHAVIOUR
|
||||
// A note about the quality of the code here:
|
||||
// I intended to write this using proper classes, right until I realized Udon does not support instantiating classes.
|
||||
// While I'm not a big fan of the partial class solution that I ended up doing (static classes would still be neater, or perhaps separate UdonSharpBehaviour instances),
|
||||
// I'm not redoing this unless I get instantiatable classes before I wrap up this project.
|
||||
|
||||
bool currentlyInTimeSequence;
|
||||
bool waitingForTimeSequenceFinish;
|
||||
PacManTimeSequence currentTimeSequence;
|
||||
bool hasTimeSequenceQueued;
|
||||
private DataList timeSequenceQueue;
|
||||
[UdonSynced] float timeSequenceSecondsPassed;
|
||||
int timeSequenceProgress;
|
||||
float[] timeSequenceKeyframeTimes;
|
||||
|
||||
private void StartTimeSequence(PacManTimeSequence timeSequence)
|
||||
{
|
||||
if (timeSequenceQueue == null)
|
||||
{
|
||||
timeSequenceQueue = new DataList();
|
||||
}
|
||||
|
||||
if (currentlyInTimeSequence == true)
|
||||
{
|
||||
int timeSequenceInt = (int)timeSequence; // Doing the conversion in the line below crashes the script. I love working in Udon
|
||||
timeSequenceQueue.Add(timeSequenceInt);
|
||||
hasTimeSequenceQueued = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Log($"StartTimeSequence: {timeSequence}");
|
||||
|
||||
currentlyInTimeSequence = true;
|
||||
currentTimeSequence = timeSequence;
|
||||
timeSequenceProgress = 0;
|
||||
timeSequenceSecondsPassed = 0;
|
||||
timeSequenceKeyframeTimes = GetTimeSequenceKeyframeTimes(timeSequence);
|
||||
TimeSequenceProgressToTime(timeSequenceSecondsPassed);
|
||||
}
|
||||
|
||||
private void InsertTimeSequence(PacManTimeSequence timeSequence)
|
||||
{
|
||||
StartTimeSequence(timeSequence);
|
||||
}
|
||||
|
||||
private void TimeSequenceUpdate(float deltaSeconds)
|
||||
{
|
||||
if (!currentlyInTimeSequence && hasTimeSequenceQueued)
|
||||
{
|
||||
timeSequenceQueue.TryGetValue(0, out DataToken nextTimeSequence);
|
||||
StartTimeSequence((PacManTimeSequence)nextTimeSequence.Int);
|
||||
timeSequenceQueue.RemoveAt(0);
|
||||
hasTimeSequenceQueued = timeSequenceQueue.Count > 0 ? true : false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentlyInTimeSequence)
|
||||
{
|
||||
if (hasTimeSequenceQueued)
|
||||
{
|
||||
while (currentlyInTimeSequence)
|
||||
{
|
||||
TimeSequenceSkipToNextStep();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TimeSequenceProgressToTime(timeSequenceSecondsPassed + deltaSeconds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequenceSkipToNextStep()
|
||||
{
|
||||
// Debug.Log($"{gameObject} TimeSequenceSkipToNextStep");
|
||||
if (timeSequenceProgress < timeSequenceKeyframeTimes.Length)
|
||||
{
|
||||
TimeSequenceProgressToTime(timeSequenceKeyframeTimes[timeSequenceProgress]);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"{gameObject} Tried skipping to next time sequence step when already on last step!");
|
||||
currentlyInTimeSequence = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequenceProgressToTime(float seconds)
|
||||
{
|
||||
timeSequenceSecondsPassed = seconds;
|
||||
while (timeSequenceSecondsPassed >= timeSequenceKeyframeTimes[timeSequenceProgress])
|
||||
{
|
||||
TimeSequenceExecuteStep(timeSequenceProgress);
|
||||
|
||||
timeSequenceProgress += 1;
|
||||
if (timeSequenceProgress >= timeSequenceKeyframeTimes.Length)
|
||||
{
|
||||
currentlyInTimeSequence = false;
|
||||
TimeSequencePrepareForFinish();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequencePrepareForFinish()
|
||||
{
|
||||
if (Networking.IsOwner(gameObject))
|
||||
{
|
||||
TimeSequenceExecuteFinalize();
|
||||
if (!hasTimeSequenceQueued)
|
||||
{
|
||||
TimeSequenceExecuteFinished();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
waitingForTimeSequenceFinish = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequenceExecuteStep(int sequenceProgress)
|
||||
{
|
||||
// Debug.Log($"{gameObject} Triggered time sequence step for sequence {currentTimeSequence} with progress {sequenceProgress}");
|
||||
switch (currentTimeSequence)
|
||||
{
|
||||
default:
|
||||
Debug.LogError($"{gameObject} No time sequence keyframes known for sequence {currentTimeSequence}");
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenIntroduction:
|
||||
TimeSequenceStepAttractScreenIntroduction(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenDemo:
|
||||
TimeSequenceStepAttractScreenDemo(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.WaitForStart:
|
||||
TimeSequenceStepWaitForStart(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.StartNewGame:
|
||||
TimeSequenceStepStartNewGame(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.BoardClear:
|
||||
TimeSequenceStepBoardClear(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.StartNewLevel:
|
||||
TimeSequenceStepStartNewLevel(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.GhostCaught:
|
||||
TimeSequenceStepGhostCaught(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.PacManCaught:
|
||||
TimeSequenceStepPacManCaught(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.RestartLevel:
|
||||
TimeSequenceStepRestartLevel(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.GameOver:
|
||||
TimeSequenceStepGameOver(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.Intermission1:
|
||||
TimeSequenceStepIntermission1(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.Intermission2:
|
||||
TimeSequenceStepIntermission2(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.Intermission3:
|
||||
TimeSequenceStepIntermission3(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenWaitToRestart:
|
||||
case PacManTimeSequence.WaitForStartTimeout:
|
||||
// These don't have steps
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequenceExecuteFinalize()
|
||||
{
|
||||
// Debug.Log($"{gameObject} Triggered time sequence step for sequence {currentTimeSequence} with progress {sequenceProgress}");
|
||||
switch (currentTimeSequence)
|
||||
{
|
||||
default:
|
||||
Debug.LogError($"{gameObject} No time sequence finalize known for sequence {currentTimeSequence}");
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenIntroduction:
|
||||
TimeSequenceFinalizeAttractScreenIntroduction();
|
||||
break;
|
||||
case PacManTimeSequence.WaitForStart:
|
||||
TimeSequenceFinalizeWaitForStart();
|
||||
break;
|
||||
case PacManTimeSequence.WaitForStartTimeout:
|
||||
TimeSequenceFinalizeWaitForStart();
|
||||
break;
|
||||
case PacManTimeSequence.StartNewGame:
|
||||
TimeSequenceFinalizeStartNewGame();
|
||||
break;
|
||||
case PacManTimeSequence.StartNewLevel:
|
||||
TimeSequenceFinalizeStartNewLevel();
|
||||
break;
|
||||
case PacManTimeSequence.GhostCaught:
|
||||
TimeSequenceFinalizeGhostCaught();
|
||||
break;
|
||||
case PacManTimeSequence.RestartLevel:
|
||||
TimeSequenceFinalizeRestartLevel();
|
||||
break;
|
||||
case PacManTimeSequence.Intermission2:
|
||||
TimeSequenceFinalizeIntermission2();
|
||||
break;
|
||||
case PacManTimeSequence.Intermission3:
|
||||
TimeSequenceFinalizeIntermission3();
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenDemo:
|
||||
case PacManTimeSequence.AttractScreenWaitToRestart:
|
||||
case PacManTimeSequence.GameOver:
|
||||
case PacManTimeSequence.Intermission1:
|
||||
case PacManTimeSequence.PacManCaught:
|
||||
case PacManTimeSequence.BoardClear:
|
||||
// These don't have a finalize
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequenceExecuteFinished()
|
||||
{
|
||||
// Debug.Log($"{gameObject} Triggered time sequence step for sequence {currentTimeSequence} with progress {sequenceProgress}");
|
||||
switch (currentTimeSequence)
|
||||
{
|
||||
default:
|
||||
Debug.LogError($"{gameObject} No time sequence finish known for sequence {currentTimeSequence}");
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenIntroduction:
|
||||
TimeSequenceFinishedAttractScreenIntroduction();
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenDemo:
|
||||
TimeSequenceFinishedAttractScreenDemo();
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenWaitToRestart:
|
||||
TimeSequenceFinishedAttractScreenWaitToRestart();
|
||||
break;
|
||||
case PacManTimeSequence.BoardClear:
|
||||
TimeSequenceFinishedBoardClear();
|
||||
break;
|
||||
case PacManTimeSequence.PacManCaught:
|
||||
TimeSequenceFinishedPacManCaught();
|
||||
break;
|
||||
case PacManTimeSequence.GameOver:
|
||||
TimeSequenceFinishedGameOver();
|
||||
break;
|
||||
case PacManTimeSequence.Intermission1:
|
||||
TimeSequenceFinishedIntermission1();
|
||||
break;
|
||||
case PacManTimeSequence.Intermission2:
|
||||
TimeSequenceFinishedIntermission2();
|
||||
break;
|
||||
case PacManTimeSequence.Intermission3:
|
||||
TimeSequenceFinishedIntermission3();
|
||||
break;
|
||||
case PacManTimeSequence.RestartLevel:
|
||||
case PacManTimeSequence.StartNewLevel:
|
||||
case PacManTimeSequence.GhostCaught:
|
||||
case PacManTimeSequence.WaitForStart:
|
||||
case PacManTimeSequence.WaitForStartTimeout:
|
||||
case PacManTimeSequence.StartNewGame:
|
||||
// These don't have a finished
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private float[] GetTimeSequenceKeyframeTimes(PacManTimeSequence timeSequence)
|
||||
{
|
||||
switch (timeSequence)
|
||||
{
|
||||
default:
|
||||
Debug.LogError($"{gameObject} No time sequence keyframe times known for sequence {timeSequence}");
|
||||
return new float[0];
|
||||
case PacManTimeSequence.AttractScreenIntroduction:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.032f, 1f, 1f, .5f, .5f, 1f, .5f, .5f, 1f, .5f, .5f, 1f, .5f, 1f, 1f, 1f,
|
||||
5f, 0.2f, 2f, 0.91667f, 2f, 0.91667f, 2f, 0.91667f, 2f, 0.91667f });
|
||||
case PacManTimeSequence.AttractScreenDemo:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.016f, 0.05f, 0.16f, 0.33f, 1.85f, 54f });
|
||||
case PacManTimeSequence.AttractScreenWaitToRestart:
|
||||
return DeltaToAbsolute(new float[] { 0, 2f });
|
||||
case PacManTimeSequence.WaitForStart:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.016f });
|
||||
case PacManTimeSequence.StartNewGame:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.016f, 2.2f, 0.032f, 0.032f, 1.92f, 0.032f });
|
||||
case PacManTimeSequence.BoardClear:
|
||||
return DeltaToAbsolute(new float[] { 0, 2f, 0.016f, 1.6f - 0.016f, 0.016f, 0.032f, 0.3f });
|
||||
case PacManTimeSequence.StartNewLevel:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.064f, 0.032f, 1.85f, 0.016f });
|
||||
case PacManTimeSequence.GhostCaught:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.91667f });
|
||||
case PacManTimeSequence.PacManCaught:
|
||||
return DeltaToAbsolute(new float[] { 0, 1, 0.35f, 2.40f });
|
||||
case PacManTimeSequence.RestartLevel:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.016f, 0.064f, 0.032f, 1.85f, 0.016f });
|
||||
case PacManTimeSequence.GameOver:
|
||||
return DeltaToAbsolute(new float[] { 0, 1.95f });
|
||||
case PacManTimeSequence.Intermission1:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.316f, 0.3f, 3.96f, 2.25f, 3.93f });
|
||||
case PacManTimeSequence.Intermission2:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.25f, 0.083f, 0.3f, 1.43f, 2.5f, 1.816f, 1.25f, 0.017f, 1f, 1.966f, 0.033f });
|
||||
case PacManTimeSequence.Intermission3:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.316f, 0.7f, 3.35f, 0.83f, 3.67f });
|
||||
}
|
||||
}
|
||||
|
||||
private static float[] DeltaToAbsolute(float[] delta)
|
||||
{
|
||||
if (delta.Length < 1)
|
||||
{
|
||||
return new float[0];
|
||||
}
|
||||
|
||||
float[] absolute = new float[delta.Length];
|
||||
absolute[0] = delta[0];
|
||||
for (int i = 1; i < delta.Length; i++)
|
||||
{
|
||||
absolute[i] = delta[i] + absolute[i - 1];
|
||||
}
|
||||
return absolute;
|
||||
}
|
||||
|
||||
public int TimeSequenceProgress
|
||||
{
|
||||
get => timeSequenceProgress;
|
||||
}
|
||||
|
||||
public float TimeSequenceSecondsPassed
|
||||
{
|
||||
get => timeSequenceSecondsPassed;
|
||||
set => TimeSequenceProgressToTime(value);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,7 @@ namespace Marro.PacManUdon
|
||||
break;
|
||||
}
|
||||
|
||||
InsertTimeSequence(nextSequence);
|
||||
StartTimeSequence(nextSequence);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,12 +64,10 @@ namespace Marro.PacManUdon
|
||||
private void TimeSequenceFinalizeIntermission3()
|
||||
{
|
||||
soundManager.StopAllSound();
|
||||
StartTimeSequence(PacManTimeSequence.StartNewLevel);
|
||||
}
|
||||
|
||||
private void TimeSequenceFinishedIntermission3()
|
||||
{
|
||||
soundManager.StopAllSound();
|
||||
StartTimeSequence(PacManTimeSequence.StartNewLevel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace Marro.PacManUdon
|
||||
nextSequence = PacManTimeSequence.GameOver;
|
||||
}
|
||||
|
||||
InsertTimeSequence(nextSequence);
|
||||
StartTimeSequence(nextSequence);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
420
Assets/Scripts/Sequences/Shared.cs
Normal file
420
Assets/Scripts/Sequences/Shared.cs
Normal file
@@ -0,0 +1,420 @@
|
||||
using UdonSharp;
|
||||
using UnityEngine;
|
||||
using VRC.SDKBase;
|
||||
using VRC.SDK3.Data;
|
||||
|
||||
namespace Marro.PacManUdon
|
||||
{
|
||||
public partial class GameManager
|
||||
{
|
||||
// A note about the quality of the code here:
|
||||
// I intended to write this using proper classes, right until I realized Udon does not support instantiating classes.
|
||||
// While I'm not a big fan of the partial class solution that I ended up doing (static classes would still be neater, or perhaps separate UdonSharpBehaviour instances),
|
||||
// I'm not redoing this unless I get instantiatable classes before I wrap up this project.
|
||||
bool currentlyInTimeSequence;
|
||||
bool waitingForTimeSequenceFinish;
|
||||
PacManTimeSequence currentTimeSequence;
|
||||
bool hasTimeSequenceQueued;
|
||||
private DataList timeSequenceQueue;
|
||||
[UdonSynced] float timeSequenceSecondsPassed;
|
||||
int timeSequenceProgress;
|
||||
float[] timeSequenceKeyframeTimes;
|
||||
|
||||
private void StartTimeSequence(PacManTimeSequence timeSequence)
|
||||
{
|
||||
if (timeSequenceQueue == null)
|
||||
{
|
||||
timeSequenceQueue = new DataList();
|
||||
}
|
||||
|
||||
if (currentlyInTimeSequence == true)
|
||||
{
|
||||
int timeSequenceInt = (int)timeSequence; // Doing the conversion in the line below crashes the script. I love working in Udon
|
||||
timeSequenceQueue.Add(timeSequenceInt);
|
||||
hasTimeSequenceQueued = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Log($"StartTimeSequence: {timeSequence}");
|
||||
|
||||
currentlyInTimeSequence = true;
|
||||
currentTimeSequence = timeSequence;
|
||||
timeSequenceProgress = 0;
|
||||
timeSequenceSecondsPassed = 0;
|
||||
timeSequenceKeyframeTimes = GetTimeSequenceKeyframeTimes(timeSequence);
|
||||
TimeSequenceProgressToTime(timeSequenceSecondsPassed);
|
||||
}
|
||||
|
||||
private void TimeSequenceUpdate(float deltaSeconds)
|
||||
{
|
||||
if (!currentlyInTimeSequence && hasTimeSequenceQueued)
|
||||
{
|
||||
timeSequenceQueue.TryGetValue(0, out DataToken nextTimeSequence);
|
||||
StartTimeSequence((PacManTimeSequence)nextTimeSequence.Int);
|
||||
timeSequenceQueue.RemoveAt(0);
|
||||
hasTimeSequenceQueued = timeSequenceQueue.Count > 0 ? true : false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentlyInTimeSequence)
|
||||
{
|
||||
if (hasTimeSequenceQueued)
|
||||
{
|
||||
while (currentlyInTimeSequence)
|
||||
{
|
||||
TimeSequenceSkipToNextStep();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TimeSequenceProgressToTime(timeSequenceSecondsPassed + deltaSeconds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequenceSkipToNextStep()
|
||||
{
|
||||
// Debug.Log($"{gameObject} TimeSequenceSkipToNextStep");
|
||||
if (timeSequenceProgress < timeSequenceKeyframeTimes.Length)
|
||||
{
|
||||
TimeSequenceProgressToTime(timeSequenceKeyframeTimes[timeSequenceProgress]);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"{gameObject} Tried skipping to next time sequence step when already on last step!");
|
||||
currentlyInTimeSequence = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequenceProgressToTime(float seconds)
|
||||
{
|
||||
timeSequenceSecondsPassed = seconds;
|
||||
while (timeSequenceSecondsPassed >= timeSequenceKeyframeTimes[timeSequenceProgress])
|
||||
{
|
||||
TimeSequenceExecuteStep(timeSequenceProgress);
|
||||
|
||||
timeSequenceProgress += 1;
|
||||
if (timeSequenceProgress >= timeSequenceKeyframeTimes.Length)
|
||||
{
|
||||
currentlyInTimeSequence = false;
|
||||
TimeSequencePrepareForFinish();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequencePrepareForFinish()
|
||||
{
|
||||
if (Networking.IsOwner(gameObject))
|
||||
{
|
||||
TimeSequenceExecuteFinalize();
|
||||
if (!hasTimeSequenceQueued)
|
||||
{
|
||||
TimeSequenceExecuteFinished();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
waitingForTimeSequenceFinish = true;
|
||||
}
|
||||
}
|
||||
|
||||
#region Events
|
||||
|
||||
public void JumpToTimeSequenceAttractScreenIntroduction()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.AttractScreenIntroduction);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceAttractScreenDemo()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.AttractScreenDemo);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceAttractScreenWaitToRestart()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.AttractScreenWaitToRestart);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceBoardClear()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.BoardClear);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceGameOver()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.GameOver);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceGhostCaught()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.GhostCaught);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceIntermission1()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.Intermission1);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceIntermission2()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.Intermission2);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceIntermission3()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.Intermission3);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequencePacManCaught()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.PacManCaught);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceRestartLevel()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.RestartLevel);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceStartNewGame()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.StartNewGame);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceStartNewLevel()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.StartNewLevel);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceWaitForStart()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.WaitForStart);
|
||||
}
|
||||
|
||||
public void JumpToTimeSequenceWaitForStartTimeout()
|
||||
{
|
||||
StartTimeSequence(PacManTimeSequence.WaitForStartTimeout);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Jump tables
|
||||
|
||||
private void TimeSequenceExecuteStep(int sequenceProgress)
|
||||
{
|
||||
// Debug.Log($"{gameObject} Triggered time sequence step for sequence {currentTimeSequence} with progress {sequenceProgress}");
|
||||
switch (currentTimeSequence)
|
||||
{
|
||||
default:
|
||||
Debug.LogError($"{gameObject} No time sequence keyframes known for sequence {currentTimeSequence}");
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenIntroduction:
|
||||
TimeSequenceStepAttractScreenIntroduction(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenDemo:
|
||||
TimeSequenceStepAttractScreenDemo(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.WaitForStart:
|
||||
TimeSequenceStepWaitForStart(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.StartNewGame:
|
||||
TimeSequenceStepStartNewGame(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.BoardClear:
|
||||
TimeSequenceStepBoardClear(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.StartNewLevel:
|
||||
TimeSequenceStepStartNewLevel(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.GhostCaught:
|
||||
TimeSequenceStepGhostCaught(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.PacManCaught:
|
||||
TimeSequenceStepPacManCaught(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.RestartLevel:
|
||||
TimeSequenceStepRestartLevel(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.GameOver:
|
||||
TimeSequenceStepGameOver(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.Intermission1:
|
||||
TimeSequenceStepIntermission1(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.Intermission2:
|
||||
TimeSequenceStepIntermission2(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.Intermission3:
|
||||
TimeSequenceStepIntermission3(sequenceProgress);
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenWaitToRestart:
|
||||
case PacManTimeSequence.WaitForStartTimeout:
|
||||
// These don't have steps
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequenceExecuteFinalize()
|
||||
{
|
||||
// Debug.Log($"{gameObject} Triggered time sequence step for sequence {currentTimeSequence} with progress {sequenceProgress}");
|
||||
switch (currentTimeSequence)
|
||||
{
|
||||
default:
|
||||
Debug.LogError($"{gameObject} No time sequence finalize known for sequence {currentTimeSequence}");
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenIntroduction:
|
||||
TimeSequenceFinalizeAttractScreenIntroduction();
|
||||
break;
|
||||
case PacManTimeSequence.WaitForStart:
|
||||
TimeSequenceFinalizeWaitForStart();
|
||||
break;
|
||||
case PacManTimeSequence.StartNewGame:
|
||||
TimeSequenceFinalizeStartNewGame();
|
||||
break;
|
||||
case PacManTimeSequence.StartNewLevel:
|
||||
TimeSequenceFinalizeStartNewLevel();
|
||||
break;
|
||||
case PacManTimeSequence.GhostCaught:
|
||||
TimeSequenceFinalizeGhostCaught();
|
||||
break;
|
||||
case PacManTimeSequence.RestartLevel:
|
||||
TimeSequenceFinalizeRestartLevel();
|
||||
break;
|
||||
case PacManTimeSequence.Intermission2:
|
||||
TimeSequenceFinalizeIntermission2();
|
||||
break;
|
||||
case PacManTimeSequence.Intermission3:
|
||||
TimeSequenceFinalizeIntermission3();
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenDemo:
|
||||
case PacManTimeSequence.WaitForStartTimeout:
|
||||
case PacManTimeSequence.AttractScreenWaitToRestart:
|
||||
case PacManTimeSequence.GameOver:
|
||||
case PacManTimeSequence.Intermission1:
|
||||
case PacManTimeSequence.PacManCaught:
|
||||
case PacManTimeSequence.BoardClear:
|
||||
// These don't have a finalize
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void TimeSequenceExecuteFinished()
|
||||
{
|
||||
// Debug.Log($"{gameObject} Triggered time sequence step for sequence {currentTimeSequence} with progress {sequenceProgress}");
|
||||
switch (currentTimeSequence)
|
||||
{
|
||||
default:
|
||||
Debug.LogError($"{gameObject} No time sequence finish known for sequence {currentTimeSequence}");
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenIntroduction:
|
||||
TimeSequenceFinishedAttractScreenIntroduction();
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenDemo:
|
||||
TimeSequenceFinishedAttractScreenDemo();
|
||||
break;
|
||||
case PacManTimeSequence.AttractScreenWaitToRestart:
|
||||
TimeSequenceFinishedAttractScreenWaitToRestart();
|
||||
break;
|
||||
case PacManTimeSequence.WaitForStartTimeout:
|
||||
TimeSequenceFinishedWaitForStartTimeout();
|
||||
break;
|
||||
case PacManTimeSequence.BoardClear:
|
||||
TimeSequenceFinishedBoardClear();
|
||||
break;
|
||||
case PacManTimeSequence.PacManCaught:
|
||||
TimeSequenceFinishedPacManCaught();
|
||||
break;
|
||||
case PacManTimeSequence.GameOver:
|
||||
TimeSequenceFinishedGameOver();
|
||||
break;
|
||||
case PacManTimeSequence.Intermission1:
|
||||
TimeSequenceFinishedIntermission1();
|
||||
break;
|
||||
case PacManTimeSequence.Intermission2:
|
||||
TimeSequenceFinishedIntermission2();
|
||||
break;
|
||||
case PacManTimeSequence.Intermission3:
|
||||
TimeSequenceFinishedIntermission3();
|
||||
break;
|
||||
case PacManTimeSequence.RestartLevel:
|
||||
case PacManTimeSequence.StartNewLevel:
|
||||
case PacManTimeSequence.GhostCaught:
|
||||
case PacManTimeSequence.WaitForStart:
|
||||
case PacManTimeSequence.StartNewGame:
|
||||
// These don't have a finished
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private float[] GetTimeSequenceKeyframeTimes(PacManTimeSequence timeSequence)
|
||||
{
|
||||
switch (timeSequence)
|
||||
{
|
||||
default:
|
||||
Debug.LogError($"{gameObject} No time sequence keyframe times known for sequence {timeSequence}");
|
||||
return new float[0];
|
||||
case PacManTimeSequence.AttractScreenIntroduction:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.032f, 1f, 1f, .5f, .5f, 1f, .5f, .5f, 1f, .5f, .5f, 1f, .5f, 1f, 1f, 1f,
|
||||
5f, 0.2f, 2f, 0.91667f, 2f, 0.91667f, 2f, 0.91667f, 2f, 0.91667f });
|
||||
case PacManTimeSequence.AttractScreenDemo:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.016f, 0.05f, 0.16f, 0.33f, 1.85f, 54f });
|
||||
case PacManTimeSequence.AttractScreenWaitToRestart:
|
||||
return DeltaToAbsolute(new float[] { 0, 2f });
|
||||
case PacManTimeSequence.WaitForStart:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.016f });
|
||||
case PacManTimeSequence.WaitForStartTimeout:
|
||||
return DeltaToAbsolute(new float[] { 0, 5f });
|
||||
case PacManTimeSequence.StartNewGame:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.016f, 2.2f, 0.032f, 0.032f, 1.92f, 0.032f });
|
||||
case PacManTimeSequence.BoardClear:
|
||||
return DeltaToAbsolute(new float[] { 0, 2f, 0.016f, 1.6f - 0.016f, 0.016f, 0.032f, 0.3f });
|
||||
case PacManTimeSequence.StartNewLevel:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.064f, 0.032f, 1.85f, 0.016f });
|
||||
case PacManTimeSequence.GhostCaught:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.91667f });
|
||||
case PacManTimeSequence.PacManCaught:
|
||||
return DeltaToAbsolute(new float[] { 0, 1, 0.35f, 2.40f });
|
||||
case PacManTimeSequence.RestartLevel:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.016f, 0.064f, 0.032f, 1.85f, 0.016f });
|
||||
case PacManTimeSequence.GameOver:
|
||||
return DeltaToAbsolute(new float[] { 0, 1.95f });
|
||||
case PacManTimeSequence.Intermission1:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.316f, 0.3f, 3.96f, 2.25f, 3.93f });
|
||||
case PacManTimeSequence.Intermission2:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.25f, 0.083f, 0.3f, 1.43f, 2.5f, 1.816f, 1.25f, 0.017f, 1f, 1.966f, 0.033f });
|
||||
case PacManTimeSequence.Intermission3:
|
||||
return DeltaToAbsolute(new float[] { 0, 0.316f, 0.7f, 3.35f, 0.83f, 3.67f });
|
||||
}
|
||||
}
|
||||
|
||||
private static float[] DeltaToAbsolute(float[] delta)
|
||||
{
|
||||
if (delta.Length < 1)
|
||||
{
|
||||
return new float[0];
|
||||
}
|
||||
|
||||
float[] absolute = new float[delta.Length];
|
||||
absolute[0] = delta[0];
|
||||
for (int i = 1; i < delta.Length; i++)
|
||||
{
|
||||
absolute[i] = delta[i] + absolute[i - 1];
|
||||
}
|
||||
return absolute;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public int TimeSequenceProgress
|
||||
{
|
||||
get => timeSequenceProgress;
|
||||
}
|
||||
|
||||
public float TimeSequenceSecondsPassed
|
||||
{
|
||||
get => timeSequenceSecondsPassed;
|
||||
set => TimeSequenceProgressToTime(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ac77c2211d465d445934f6bf7398f743
|
||||
guid: a11df70b39ac2924c825f9951b58dafd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
11
Assets/Scripts/Sequences/WaitForStartTimeout.cs.meta
Normal file
11
Assets/Scripts/Sequences/WaitForStartTimeout.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 445b4cd5c436f3645824ef18948c8593
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user