304 lines
8.7 KiB
C#
304 lines
8.7 KiB
C#
namespace Marro.PacManUdon
|
|
{
|
|
using UnityEngine;
|
|
|
|
public enum PacManFruitType
|
|
{
|
|
None = -1,
|
|
Cherries = 0,
|
|
Strawberry = 1,
|
|
Peach = 2,
|
|
Apple = 3,
|
|
Grapes = 4,
|
|
Galaxian = 5,
|
|
Bell = 6,
|
|
Key = 7
|
|
}
|
|
|
|
public enum PacManGameState
|
|
{
|
|
AttractMode,
|
|
AttractModeDemo,
|
|
WaitForStart,
|
|
InGame,
|
|
}
|
|
|
|
public enum PacManGhostFrozenState
|
|
{
|
|
Frozen,
|
|
FrozenIfNotCaught,
|
|
NotFrozen
|
|
}
|
|
|
|
public enum PacManTimeSequence
|
|
{
|
|
AttractScreenIntroduction,
|
|
AttractScreenDemo,
|
|
WaitForStart,
|
|
WaitForStartTimeout,
|
|
StartNewGame,
|
|
BoardClear,
|
|
StartNewLevel,
|
|
GhostCaught,
|
|
PacManCaught,
|
|
RestartLevel,
|
|
GameOver,
|
|
Intermission1,
|
|
Intermission2,
|
|
Intermission3
|
|
}
|
|
|
|
public static class PacManConstants
|
|
{
|
|
public static GameObject[] ComponentsToGameObjects(Component[] components, bool skipFirstComponent = false)
|
|
{
|
|
if (skipFirstComponent)
|
|
{
|
|
GameObject[] gameObjects = new GameObject[components.Length-1];
|
|
for (int i = 0; i < components.Length-1; i++)
|
|
{
|
|
gameObjects[i] = components[i+1].gameObject;
|
|
}
|
|
return gameObjects;
|
|
}
|
|
else
|
|
{
|
|
GameObject[] gameObjects = new GameObject[components.Length];
|
|
for (int i = 0; i < components.Length; i++)
|
|
{
|
|
gameObjects[i] = components[i].gameObject;
|
|
}
|
|
return gameObjects;
|
|
}
|
|
|
|
}
|
|
|
|
public static float GetPowerPelletBlinkToggleInterval()
|
|
{
|
|
return 0.1666666666f;
|
|
}
|
|
|
|
public static PacManFruitType GetFruitTypeForLevel(int level)
|
|
{
|
|
PacManFruitType[] FruitTypePerLevel = new PacManFruitType[]
|
|
{
|
|
PacManFruitType.Cherries,
|
|
PacManFruitType.Strawberry,
|
|
PacManFruitType.Peach,
|
|
PacManFruitType.Peach,
|
|
PacManFruitType.Apple,
|
|
PacManFruitType.Apple,
|
|
PacManFruitType.Grapes,
|
|
PacManFruitType.Grapes,
|
|
PacManFruitType.Galaxian,
|
|
PacManFruitType.Galaxian,
|
|
PacManFruitType.Bell,
|
|
PacManFruitType.Bell,
|
|
PacManFruitType.Key
|
|
};
|
|
if (level-1 < 0)
|
|
{
|
|
return PacManFruitType.None;
|
|
}
|
|
if (level-1 >= FruitTypePerLevel.Length)
|
|
{
|
|
return FruitTypePerLevel[FruitTypePerLevel.Length-1];
|
|
}
|
|
return FruitTypePerLevel[level-1];
|
|
}
|
|
|
|
public static float GetGhostHomeSpeed()
|
|
{
|
|
return 3.5f;
|
|
}
|
|
|
|
public static float GetPacManDefaultSpeedForLevel(int level)
|
|
{
|
|
if(level <= 1) return 7.576f;
|
|
if(level <= 4) return 8.523f;
|
|
if(level <= 20) return 9.470f;
|
|
return 8.523f;
|
|
}
|
|
|
|
public static float GetPacManPowerPelletSpeedForLevel(int level)
|
|
{
|
|
if(level <= 1) return 8.523f;
|
|
if(level <= 4) return 8.996f;
|
|
return 9.470f;
|
|
}
|
|
|
|
public static float GetGhostDefaultSpeedForLevel(int level)
|
|
{
|
|
if(level <= 1) return 7.102f;
|
|
if(level <= 4) return 8.049f;
|
|
return 8.996f;
|
|
}
|
|
|
|
public static float GetGhostTunnelSpeedForLevel(int level)
|
|
{
|
|
if(level <= 1) return 3.788f;
|
|
if(level <= 4) return 4.261f;
|
|
return 4.735f;
|
|
}
|
|
|
|
public static float GetBlinkyElroy1SpeedForLevel(int level)
|
|
{
|
|
if(level <= 1) return 7.576f;
|
|
if(level <= 4) return 8.523f;
|
|
return 9.470f;
|
|
}
|
|
|
|
public static float GetBlinkyElroy2SpeedForLevel(int level)
|
|
{
|
|
if(level <= 1) return 8.049f;
|
|
if(level <= 4) return 8.996f;
|
|
return 9.943f;
|
|
}
|
|
|
|
public static float GetGhostScaredSpeedForLevel(int level)
|
|
{
|
|
if(level <= 1) return 4.735f;
|
|
if(level <= 4) return 5.208f;
|
|
return 5.682f;
|
|
}
|
|
|
|
public static int GetElroy1PelletsRemainingForLevel(int level)
|
|
{
|
|
if(level <= 1) return 20;
|
|
if(level <= 2) return 30;
|
|
if(level <= 5) return 40;
|
|
if(level <= 8) return 50;
|
|
if(level <= 11) return 60;
|
|
if(level <= 14) return 80;
|
|
if(level <= 18) return 100;
|
|
return 120;
|
|
}
|
|
|
|
public static int GetElroy2PelletsRemainingForLevel(int level)
|
|
{
|
|
if(level <= 1) return 10;
|
|
if(level <= 2) return 15;
|
|
if(level <= 5) return 20;
|
|
if(level <= 8) return 25;
|
|
if(level <= 11) return 30;
|
|
if(level <= 14) return 40;
|
|
if(level <= 18) return 50;
|
|
return 60;
|
|
}
|
|
|
|
public static float GetGhostHousePelletTimeoutLimitForLevel(int level)
|
|
{
|
|
if(level <= 4) return 4;
|
|
return 3;
|
|
}
|
|
|
|
public static int[] GetGhostHousePrivatePelletCounterLimitForLevel(int level)
|
|
{
|
|
if(level <= 1) return new int[] { 0, 0, 30, 60};
|
|
if(level <= 2) return new int[] { 0, 0, 0, 50};
|
|
return new int[] { 0, 0, 0, 0};
|
|
}
|
|
|
|
public static float[] GetScatterPatternForLevel(int level)
|
|
{
|
|
if(level <= 1) return new float[] { 7, 27, 34, 54, 59, 79, 84 };
|
|
if(level <= 4) return new float[] { 7, 27, 34, 54, 59, 1092, 1092.0166667f};
|
|
return new float[] { 5, 25, 30, 50, 55, 1092, 1092.0166667f};
|
|
}
|
|
|
|
public static float GetScaredDurationForLevel(int level)
|
|
{
|
|
float[] scaredDurationPerLevel =
|
|
{
|
|
6,
|
|
5,
|
|
4,
|
|
3,
|
|
2,
|
|
5,
|
|
2,
|
|
2,
|
|
1,
|
|
5,
|
|
2,
|
|
1,
|
|
1,
|
|
3,
|
|
1,
|
|
1,
|
|
0,
|
|
1,
|
|
0
|
|
};
|
|
if (level-1 < 0)
|
|
{
|
|
return scaredDurationPerLevel[0];
|
|
}
|
|
if (level-1 >= scaredDurationPerLevel.Length)
|
|
{
|
|
return scaredDurationPerLevel[scaredDurationPerLevel.Length-1];
|
|
}
|
|
return scaredDurationPerLevel[level-1];
|
|
}
|
|
|
|
public static float GetScaredNumberOfFlashesForLevel(int level)
|
|
{
|
|
int[] scaredNumberOfFlashesPerLevel = new int[]
|
|
{
|
|
5,
|
|
5,
|
|
5,
|
|
5,
|
|
5,
|
|
5,
|
|
5,
|
|
5,
|
|
3,
|
|
5,
|
|
5,
|
|
3,
|
|
3,
|
|
5,
|
|
3,
|
|
3,
|
|
0,
|
|
3,
|
|
0
|
|
};
|
|
if (level-1 < 0)
|
|
{
|
|
return scaredNumberOfFlashesPerLevel[0];
|
|
}
|
|
if (level-1 >= scaredNumberOfFlashesPerLevel.Length)
|
|
{
|
|
return scaredNumberOfFlashesPerLevel[scaredNumberOfFlashesPerLevel.Length-1];
|
|
}
|
|
return scaredNumberOfFlashesPerLevel[level-1];
|
|
}
|
|
|
|
public static int FruitTypeToValue(PacManFruitType fruitType) { // I can't get casting from enum to int to work so this is a workaround
|
|
switch (fruitType)
|
|
{
|
|
default:
|
|
case PacManFruitType.None:
|
|
return -1;
|
|
case PacManFruitType.Cherries:
|
|
return 0;
|
|
case PacManFruitType.Strawberry:
|
|
return 1;
|
|
case PacManFruitType.Peach:
|
|
return 2;
|
|
case PacManFruitType.Apple:
|
|
return 3;
|
|
case PacManFruitType.Grapes:
|
|
return 4;
|
|
case PacManFruitType.Galaxian:
|
|
return 5;
|
|
case PacManFruitType.Bell:
|
|
return 6;
|
|
case PacManFruitType.Key:
|
|
return 7;
|
|
}
|
|
}
|
|
}
|
|
} |