Инкапсулированы методы появления и ухода персонажа Инкапсулирована работа с аниматором Работа с репликами вынесена в ScriptableObject Логика MessageBox вынесена в отдельный класс Переработан event bus персонажей Сложность и призовой модуль вынесены в отдельные классы Character.cs приведён к Single Responsibility Principle.
158 lines
4.0 KiB
C#
158 lines
4.0 KiB
C#
using CharacterSystem;
|
||
using UnityEngine;
|
||
|
||
//Зависит от ComWrapper
|
||
public static class LightUtility
|
||
{
|
||
private const string LIGHT_COMMAND_PREFIX = "80";
|
||
public static void Idle()
|
||
{
|
||
if (Random.Range(0, 2) == 0)
|
||
SendLightCommandToCom(LightMode.Idle1);
|
||
else
|
||
SendLightCommandToCom(LightMode.Idle2);
|
||
}
|
||
|
||
public static void Win()
|
||
{
|
||
SendLightCommandToCom(LightMode.Win);
|
||
}
|
||
|
||
public static void Lose()
|
||
{
|
||
SendLightCommandToCom(LightMode.Lose);
|
||
}
|
||
|
||
public static void Player(Team currentPlayer)
|
||
{
|
||
if (currentPlayer == Team.Player1)
|
||
SendLightCommandToCom(LightMode.Orange);
|
||
else
|
||
SendLightCommandToCom(LightMode.Blue);
|
||
}
|
||
public static void Prize()
|
||
{
|
||
SendLightCommandToCom(LightMode.Prize);
|
||
}
|
||
|
||
public static void Character(Character currentCharacter)
|
||
{
|
||
LightMode lightMode;
|
||
|
||
lightMode = currentCharacter.CharacterIndex switch
|
||
{
|
||
0 => LightMode.Toaster,
|
||
1 => LightMode.Tama,
|
||
2 => LightMode.Dog,
|
||
3 => LightMode.Sam,
|
||
4 => LightMode.Mistress,
|
||
_ => LightMode.Idle2
|
||
};
|
||
|
||
SendLightCommandToCom(lightMode);
|
||
}
|
||
|
||
public static void Promo()
|
||
{
|
||
string[] signals = { "521", "523", "524" };
|
||
|
||
string signal = signals[Random.Range(0, signals.Length)];
|
||
SendLightCommandToCom(signal);
|
||
}
|
||
|
||
public static void SendLightCommandToCom(LightMode lightMode)
|
||
{
|
||
try
|
||
{
|
||
string signal = GetLightString(lightMode);
|
||
ComWrapper.Send(signal);
|
||
}
|
||
catch { Debug.LogError("Ошибка отправки светового сигнала."); }
|
||
}
|
||
|
||
/// <summary>
|
||
/// Принимает сингнал без префикса. В процессе сам его добавляет.
|
||
/// </summary>
|
||
public static void SendLightCommandToCom(string signal)
|
||
{
|
||
try
|
||
{
|
||
ComWrapper.Send(LIGHT_COMMAND_PREFIX + signal);
|
||
}
|
||
catch { Debug.LogError("Ошибка отправки светового сигнала."); }
|
||
}
|
||
|
||
|
||
public static string GetLightString(LightMode lightMode)
|
||
{
|
||
string lightsingal;
|
||
|
||
//определить версию
|
||
int version = ConfigManager.Config.LightVersion;
|
||
if (version == 1)
|
||
{
|
||
//Debug.Log("1 версия подсветки");
|
||
//1 версия
|
||
lightsingal = lightMode switch
|
||
{
|
||
LightMode.Idle1 => "500",
|
||
LightMode.Idle2 => "507",
|
||
LightMode.Orange => "501",
|
||
LightMode.Blue => "502",
|
||
LightMode.Win => "503",
|
||
LightMode.Lose => "504",
|
||
LightMode.Prize => "509",
|
||
|
||
LightMode.Toaster => "500",
|
||
LightMode.Tama => "513",
|
||
LightMode.Dog => "514",
|
||
LightMode.Sam => "515",
|
||
LightMode.Mistress => "516",
|
||
|
||
_ => "500"
|
||
};
|
||
}
|
||
else
|
||
{
|
||
//2 версия (пока дефолт)
|
||
//Debug.Log("2 версия подсветки");
|
||
lightsingal = lightMode switch
|
||
{
|
||
LightMode.Idle1 => "500",
|
||
LightMode.Idle2 => "507",
|
||
LightMode.Orange => "501",
|
||
LightMode.Blue => "502",
|
||
LightMode.Win => "503",
|
||
LightMode.Lose => "504",
|
||
LightMode.Prize => "509",
|
||
|
||
LightMode.Toaster => "513",
|
||
LightMode.Tama => "514",
|
||
LightMode.Dog => "515",
|
||
LightMode.Sam => "516",
|
||
LightMode.Mistress => "517",
|
||
|
||
_ => "500"
|
||
};
|
||
}
|
||
|
||
|
||
return LIGHT_COMMAND_PREFIX + lightsingal;
|
||
|
||
}
|
||
}
|
||
public enum LightMode
|
||
{
|
||
Idle1,
|
||
Idle2,
|
||
Orange,
|
||
Blue,
|
||
Win,
|
||
Lose,
|
||
Prize,
|
||
Toaster,
|
||
Tama,
|
||
Dog,
|
||
Sam,
|
||
Mistress
|
||
} |