Files
h-school/docs/phases/40-clock-tempo.md
T

2.8 KiB

Фаза 40. Темп часов

Зависимости

Зачем

×1 можно смотреть. Высокие скорости — ×5 и ×10, без лишней работы ходьбы и нужд на каждом импульсе календаря.

Задачи

  • GameMinutesPerRealSecond по умолчанию 1 (опции, appsettings.json, GET /api/schools)
  • ClockSpeed.Multipliers: 0.5, 1, 2, 5, 10. Зеркало в protocol.ts. Подписи кнопок: ×½ ×1 ×2 ×5 ×10. Стартовый индекс по-прежнему 1
  • Воркер будит мир 20 раз в секунду на любой скорости. GameClock.Advance, граница лога 6:00, годовой набор, пул соискателей, погода — каждый импульс
  • На индексах ×5 и ×10 ходьба, действия, решения, нужды, тепло, обучение, износ — раз в 4 и раз в 2 импульса соответственно, с накопленными минутами (квант — 1 игровая минута). На ×½ ×1 ×2 — каждый импульс, как сейчас
  • Не прыгать календарём одним жирным Tick вместо страйда
  • Комментарий меню про «минута за 12 секунд» привести к новой базе
  • docs/protocol.md — таблица множителей. Раскладку и версию сокета не трогать

Тесты, без которых фаза не закрыта

  • 20 шагов по 1/20 с на ×1 сдвигают календарь на 1 игровую минуту, не на 5
  • Индексы 3 и 4 за одну реальную секунду дают 5 и 10 игровых минут
  • На ×10 за 20 импульсов ходьба/нужды вызваны 10 раз, календарь — 20; накопленный аргумент минут на тяжёлый вызов — 1
  • Невалидный индекс 5 по-прежнему игнорируется
  • Клиентский тест: пять кнопок ×½ ×1 ×2 ×5 ×10

Критерий готовности

  • На ×1 секунда реального времени = минута в школе; ×10 не кладёт воркер, люди не телепортируются на десять минут за кадр
  • dotnet test и npm test / build проходят

Стоп

Не менять TickRate и потолок догона воркера. Не урезать рассылку кадров часов. Не трогать сессию и хозяина.