Danil Iarosh cefb2fd345 Build initial vertical platformer foundation
Подробные изменения:
- Добавлены сцены Bootstrap, MainMenu и Game с текущей вертикальной 9:16 структурой проекта.
- Добавлены runtime-скрипты gameplay-архитектуры: DI через Extenject, спавнер платформ, прогрессия этапов, one-way платформы, игрок, камера и оборудование JumpPad.
- Добавлены ScriptableObject-этапы сложности, weighted-настройки платформ, оборудования, противников и collectibles.
- Добавлены UI Toolkit ресурсы главного меню, preview-материалы, шрифты, спрайты, анимации и игровые prefab-ассеты.
- Перенесена и оформлена новая COM-система для работы с аппаратными портами и StreamingAssets.
- Обновлены проектные гайды, AGENTS.md, правила Git/Git LFS, .gitignore, Unity Packages и ProjectSettings.
- Удалён локальный skill start-required-mcp-servers из репозитория.
2026-05-11 07:41:14 +03:00

102 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using UnityEngine.Events;
namespace DanroJump.Hardware.Com
{
public interface IComSystem :
IComCreditWallet,
IComInputSource,
IPrizeShowcaseGateway,
IComLightingController
{
bool IsRunning { get; }
string MainDeviceId { get; }
string PrizeStandDeviceId { get; }
IReadOnlyCollection<string> ConnectedDeviceIds { get; }
UnityEvent<string> DeviceAuthorized { get; }
UnityEvent<string> DeviceDisconnected { get; }
void StartSystem();
void StopSystem(bool sendShutdownCommands);
bool SendToMain(string command);
bool SendToDevice(string deviceId, string command);
void SendToAll(string command);
string GetDeviceRole(string deviceId);
string GetDeviceMac(string deviceId);
}
public interface IComCreditWallet
{
int Credits { get; }
UnityEvent<int> CreditAdded { get; }
UnityEvent<int> CreditRemoved { get; }
UnityEvent<int> CreditsChanged { get; }
void AddCredit(int amount = 1);
bool TrySpendCredits(int amount = 1);
void SetCredits(int value);
}
public interface IComInputSource
{
string LastMainInputBits { get; }
UnityEvent<string> MainInputReceived { get; }
UnityEvent HopperSensorTriggered { get; }
string GetLastInputBits(string deviceId);
}
public interface IPrizeShowcaseGateway
{
UnityEvent<int> PrizeBoxOpened { get; }
Task<IReadOnlyDictionary<int, PrizeBoxStatus>> GetPrizeBoxStatusesAsync(
CancellationToken cancellationToken = default);
Task<int[]> GetReadyPrizeBoxesAsync(CancellationToken cancellationToken = default);
Task<PrizeOpenResult> OpenPrizeBoxAsync(int boxNumber, CancellationToken cancellationToken = default);
Task<PrizeOpenResult> ForceOpenPrizeBoxAsync(int boxNumber, CancellationToken cancellationToken = default);
bool SetPrizeStandIdleLighting();
bool HighlightPrizeBox(int boxNumber);
}
public interface IComLightingController
{
void PlayBoardLight(LightMode mode, float cycles = -1f);
void PlayBoardLightSequence(IReadOnlyList<LightStep> steps, bool loop);
void PlayDefaultBoardLight();
void StopBoardLightSequence();
void StopAllBoardEffects();
void BlinkHat();
void BlinkHat(float intervalSeconds);
void StopHatBlink(bool leaveHatEnabled = true);
void PauseLighting();
void ResumeLighting();
}
public interface IComPortProvider
{
string[] GetPortNames();
}
public interface IComTransportFactory
{
IComTransport Create(SerialSettings settings);
}
public interface IComTransport : IDisposable
{
bool IsOpen { get; }
void Open();
void Close();
void DiscardInBuffer();
void DiscardOutBuffer();
string ReadLine();
void WriteLine(string value);
}
}