117 lines
3.5 KiB
C#
117 lines
3.5 KiB
C#
using UnityEngine;
|
||
|
||
/// <summary>
|
||
/// Панель правил — показывает набор страниц (GameObject) одну за другой.
|
||
/// Навигация: left → предыдущая, right → следующая, action → закрыть.
|
||
/// Кнопки читаются по playerId (берётся из родительского Player или GameManager).
|
||
/// Не нужно ничего делать с PlayerCursorUI — страницы не содержат Button-компонентов.
|
||
/// </summary>
|
||
public class RulesPanel : MonoBehaviour
|
||
{
|
||
[Header("Страницы (назначьте дочерние GameObject в нужном порядке)")]
|
||
[SerializeField] private GameObject[] pages;
|
||
|
||
[Header("Ссылки")]
|
||
[SerializeField] private GameManager gameManager;
|
||
|
||
// физические кнопки конкретного игрока
|
||
private ButtonPinMapping leftKey;
|
||
private ButtonPinMapping rightKey;
|
||
private ButtonPinMapping actionKey;
|
||
|
||
private int currentPage;
|
||
|
||
private void Awake()
|
||
{
|
||
// определяем playerId: сначала через GameManager, затем через Player в родителе
|
||
int pid = 1;
|
||
if (gameManager != null)
|
||
pid = gameManager.playerId;
|
||
else
|
||
{
|
||
var player = GetComponentInParent<Player>();
|
||
if (player != null) pid = player.PlayerId;
|
||
}
|
||
|
||
if (pid == 1)
|
||
{
|
||
leftKey = ButtonPinMapping.left1;
|
||
rightKey = ButtonPinMapping.right1;
|
||
actionKey = ButtonPinMapping.action1;
|
||
}
|
||
else
|
||
{
|
||
leftKey = ButtonPinMapping.left2;
|
||
rightKey = ButtonPinMapping.right2;
|
||
actionKey = ButtonPinMapping.action2;
|
||
}
|
||
}
|
||
|
||
// ─── Public API ───────────────────────────────────────────────
|
||
|
||
/// <summary>
|
||
/// Срабатывает автоматически когда UIManager делает SetActive(true).
|
||
/// Всегда начинаем с первой страницы.
|
||
/// </summary>
|
||
private void OnEnable()
|
||
{
|
||
currentPage = 0;
|
||
ShowPage(currentPage);
|
||
}
|
||
|
||
/// <summary>Закрыть панель. Вызывается по кнопке action.</summary>
|
||
public void Close()
|
||
{
|
||
gameObject.SetActive(false);
|
||
}
|
||
|
||
// ─── Navigation ───────────────────────────────────────────────
|
||
|
||
private void Update()
|
||
{
|
||
if (In.GetButtonDown(leftKey))
|
||
{
|
||
PrevPage();
|
||
return;
|
||
}
|
||
if (In.GetButtonDown(rightKey))
|
||
{
|
||
NextPage();
|
||
return;
|
||
}
|
||
if (In.GetButtonDown(actionKey))
|
||
{
|
||
Close();
|
||
}
|
||
}
|
||
|
||
private void NextPage()
|
||
{
|
||
if (pages == null || pages.Length == 0) return;
|
||
int next = (currentPage + 1) % pages.Length;
|
||
ShowPage(next);
|
||
}
|
||
|
||
private void PrevPage()
|
||
{
|
||
if (pages == null || pages.Length == 0) return;
|
||
int prev = (currentPage - 1 + pages.Length) % pages.Length;
|
||
ShowPage(prev);
|
||
}
|
||
|
||
private void ShowPage(int index)
|
||
{
|
||
if (pages == null) return;
|
||
for (int i = 0; i < pages.Length; i++)
|
||
{
|
||
if (pages[i] != null)
|
||
pages[i].SetActive(i == index);
|
||
}
|
||
currentPage = index;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|