117 lines
3.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}