Stat()

***Stat(id)***

*id* - Адрес для возвращаймой  информации.

Функция `stat()` возвращает информацию о своей среде. Каждый пункт информации имеет свой ID (адрес), какой ID отвечает за какую информацию описано ниже.

Вы можете отобразить этот показатель на экране игры с помощью print(), вывести  на консоль с помощью printh() или, возможно, использовать его другим способом для настройки поведения вашей программы.

## Адреса

### Использование памяти и процессора

*stat(0)* - возвращает объем памяти, который в настоящее время используется программой Lua. Значение - это количество мегабайты, от 0 до 2048.

*stat(1)* - возвращает использование ЦП с момента создания последнего кадра. Значение 1.0 указывает, что программа выполняла код 100% времени между кадрами со скоростью 30 кадров в секунду. Значение выше 1.0 указывает на то, что программа занимает слишком много времени между кадрами, из-за этого падает FPS.

### Содержимое буфера обмена

Pico-8 может получить доступ к содержимому системного буфера обмена. Он может делать это тогда и только тогда, когда пользователь нажимает клавишу «вставить», либо Control-v (Windows, Linux), либо Command-v (Mac OS X). Это делается для того, чтобы программа не могла получить доступ к буферу без разрешения пользователя.

*stat(4) -* возвращает содержимое буфера обмена в виде строки. Например:

```
local string = stat(4)
printh string -- Выведет содержимое буфера обмена

```

### Строка параметров из стороннего груза

Когда кардтридж вызывает load(), чтобы загрузить другой кардтридж, он может предоставить произвольную строку в качестве третьего аргумента. Эта строка доступна загруженному кардтриджу, с помощью *stat(6)*.

```
--Исходный кардтридж
Load(cart2, back, "hello world")

```

```
--Cart2
Printh stat(6)
--выведет hello world

```

Если вызов load() также включал строку breadcrumb, загруженный кардтридж может получить к ней доступ с помощью *stat(100)*.

### Частота кадров

*stat(7)* возвращает текущую частоту кадров, как количество кадров, отображаемых в секунду. Например:

```
Function _update()
-- какой-либо код
End

Function _init()
 printh stat(7) ... "frames per second"
end -- выведет 30 frames per second

```

В частности, частота кадров - это количество раз в секунду. Pico-8 может вызывать функцию \_draw() игры в игровом цикле (если она предусмотрена) или количество раз, когда игра вызывает flip(). При использовании игрового цикла ожидаемая частота кадров составляет 30 кадров в секунду (fps) с функцией \_update() или 60 кадров в секунду с функцией \_update60(), но может быть меньше, если функции рисования или обновления занимают слишком много времени, а Pico- 8 пропускает вызовы \_draw(), чтобы догнать. Это делает частоту кадров интересной мерой производительности игры для игр, которые делают много расчетов между кадрами.

### Размещение паузы в меню

*stat(12)* и *stat(15)* представляет координатную позицию меню паузы, если игрок должен был приостановить игру в этот момент, в качестве координат x и y верхнего левого угла и нижнего правого угла соответственно.

Различные вещи определяют содержимое меню паузы динамически, включая вызовы menuitem(), параметры load(), загружается ли игра SPLORE и возможные будущие расширения. Pico-8 вычисляет размер и положение меню на основе его содержимого.

### Звук и музыка

*stat(16) и* *stat(19)* возвращает индекс звукового эффекта, который в настоящее время воспроизводится на четырех каналах, соответственно. Если на канале не воспроизводится звук, stat() возвращает -1.

*stat(20)* и *stat(23)* возвращает номер ноты (от 0 до 31) , который в настоящее время воспроизводится на четырех каналах соответственно. Если на канале не воспроизводится звук, stat () возвращает -1.

От Zep: «Обратите внимание, что номер строки может быть не очень точным в зависимости от того, что происходит с аудиомикшером операционной системы хоста. Также в случае веб-проигрывателя, который должен иметь большой буфер микширования, результат часто немного раньше, что слышно ».

*stat(24)* - текущий индекс музыкального шаблона или -1, если музыка не воспроизводится. Музыка инициируется вызовом музыки ().

*stat(25)* - количество музыкальных паттернов, воспроизводимых с момента последнего вызова music(). *stat(26)* - количество тиков (заметок или остатков), воспроизводимых по текущему рисунку.

### Время суток

Pico-8 может получить доступ к текущему времени суток от хост-системы. *stat(80)* и *stat(85)* - это год, месяц, день, час, минута и секунда, в скоординированном универсальном времени (UTC). *stat(90)* и *stat(95)* - это те же значения, но в локальном часовом поясе системы.

### Режим мыши и клавиатуры

Вы можете включить режим мыши и клавиатуры (для платформ с мышью и клавиатурой) внутри кардтриджа:

```
poke(0x5F2D, 1)

```

После включения вы можете использовать stat(...) для чтения значений мыши и клавиатуры:

* *stat(30)* -> true, если нажата клавиша, false, иначе
* *stat(31)* -> нажатие клавиши, как строка
* *stat(32)* -> X координировать
* *stat(33)* -> Y координировать
* *stat(34)* -> битовая маска кнопки (1 = первичная, 2 = вторичная, 4 = средняя)
* *stat(36)* -> колесо мыши.

Если этот режим включен, курсор мыши отображается на экране Pico-8, если системный указатель мыши находится в окне программы. Когда пользователь удерживает клавиши, Pico-8 пытается сообщить все нажатые клавиши, изменив значение *stat(31)* один раз на кадр на каждый из последовательно расположенных клавиш, за которым следует один кадр без нажатия клавиши (stat (30) false), а затем самую последнюю клавишу, нажатую для последующих кадров, до тех пор, пока клавиши не будут отпущены. Это дает немного эффекта «отскока» для всех удерживаемых ключей, которые, возможно, вам придется учитывать в зависимости от вашего приложения.

Помните, что Pico-8 может работать на машине без клавиатуры или мыши. При активации этого режима отображается сообщение, чтобы избежать путаницы в экспортируемых кардтриджах, например, при запуске на форуме.

## Советы

* stat(7) можно использовать для оптимизации вашей программы, например:

```
-- ваш код
If stat(7)>=29 then
-- код исполняемый при полном FPS.
Else
-- код исполняемый при меньшей детализации.
End
-- ваш код

```

* stat(6) отлично подходит для взаимодействия кардтриджей во время команды load().
* С помощью stat() можно сделать максимально оптимизированный секундомер без циклов.

```
-- секундомер со stat()
-- начало секундомера
time1 = stat(85)
-- конец отчёта (после n-ого количества секунд)
Seconds = time1 - stat(85)
-- seconds и будет высчитаным временем

```

```
-- секундомер с циклом
-- начало секундомера
Time1 = 0
Function _update()
 time1 = time1 + 1
 Fps = stat(7)
end
-- конец отчёта (после n-ого количества секунд)
Seconds = time1 / fps
-- seconds и будет высчитаным временем
-- Как мы видим, в способе со stat() потребовалось 2 строчки, а для цикла - 6

```

* С помощью режима мыши и клавиатуры, вы хоть и жертвуйте множеством платформ, но зато получаете как минимум 35 дополнительных кнопок.

1. ↑ Zep это создатель PICO-8.

Его профиль.