Подробные изменения: - Расширен основной gameplay loop: джетпак, новые платформы, оборудование, враги, прогрессия сложности и ограничения взаимодействий игрока. - Добавлены Bootstrap-сервисы запуска приложения, защита, фокус окна, управление курсором и настройки сервисов через DI. - Добавлена COM-интеграция с технической схемой Input System, обработкой кнопок/ADC, подсветкой и консольной диагностикой. - Добавлен отдельный debug/logging модуль с каналами, обработчиками консоли и файловым выводом. - Добавлены asmdef, link.xml, EditMode/PlayMode тесты и обновлена дорожная карта проекта. Проверки: - dotnet build .\\DanroJump.Runtime.csproj --no-restore - dotnet build .\\DanroJump.Tests.EditMode.csproj --no-restore - dotnet build .\\DanroJump.Tests.PlayMode.csproj --no-restore
68 lines
1.7 KiB
C#
68 lines
1.7 KiB
C#
using UnityEngine;
|
|
|
|
namespace DanroJump.Bootstrap
|
|
{
|
|
/// <summary>
|
|
/// Прячет системный курсор, пока окно игры находится в фокусе.
|
|
/// </summary>
|
|
[DefaultExecutionOrder(-11000)]
|
|
public sealed class CursorFocusVisibilityController : MonoBehaviour
|
|
{
|
|
private static CursorFocusVisibilityController instance;
|
|
|
|
[SerializeField] private bool hideCursorWhenFocused = true;
|
|
|
|
private void Awake()
|
|
{
|
|
if (instance != null && instance != this)
|
|
{
|
|
Destroy(gameObject);
|
|
return;
|
|
}
|
|
|
|
instance = this;
|
|
MoveToPersistentScene(gameObject);
|
|
ApplyCursorFocusState(Application.isFocused);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
ApplyCursorFocusState(Application.isFocused);
|
|
}
|
|
|
|
private void OnApplicationFocus(bool hasFocus)
|
|
{
|
|
ApplyCursorFocusState(hasFocus);
|
|
}
|
|
|
|
private void OnApplicationPause(bool pauseStatus)
|
|
{
|
|
ApplyCursorFocusState(!pauseStatus && Application.isFocused);
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (instance != this)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Cursor.visible = true;
|
|
instance = null;
|
|
}
|
|
|
|
private static void MoveToPersistentScene(GameObject gameObject)
|
|
{
|
|
if (Application.isPlaying)
|
|
{
|
|
DontDestroyOnLoad(gameObject);
|
|
}
|
|
}
|
|
|
|
private void ApplyCursorFocusState(bool hasFocus)
|
|
{
|
|
Cursor.visible = !hideCursorWhenFocused || !hasFocus;
|
|
}
|
|
}
|
|
}
|