Шаблон для написания своих скриптов в модульном стиле для mcgl9
- Автодополнение для всех объектов из документации (display, key, user, sound, ...) благодаря использованию typescript
- Более удобная работа с клавишами и другими перечислимыми типами (например, вместо числовых кодов клавиш можно писать
KeyCode.F
) - Добавлена поддержка базовых отсутствующих функций (например, setTimeout, setInterval)
- Поддержка Promise и async/await (см. примеры)
- Получаемый результат практически не содержит оверхеда по размеру кода (благодаря использованию сборщика rollup и минималистичной библиотеке модулей)
- Множество модулей, упрощающих работу с mcgl9. В конечный скрипт попадут только те, что действительно используются!
Подготовка шаблона (требует предустановленных nodejs и npm):
- Склонировать себе репозиторий в любую папку
git clone https://github.com/iassasin/mcgl9-script
- Перейти в папку:
cd mcgl9-script
- Установить зависимости для сборки
npm install
- Теперь можно писать и собирать скрипты
Скрипт пишется в файле script.ts
с использованием любых нужных вам импортов. Вы вольны разбивать свой код на модули как угодно. Типичный скрипт выглядит следующим образом:
import mcgl9 from './mcgl9';
import {setInterval} from './mcgl9/timers'; // используемые модули
mcgl9.onInit(() => {
display.size(1, 1);
});
setInterval(() => display.print('hello'), 1000);
Получить готовый скрипт можно следующим образом:
- Написать скрипт в script.ts
- Выполнить
npm run build-mini
(илиnpm run build
для не-минифицированного варианта) - Забрать готовый скрипт из
dist/script.js
- Вставить содержимое файла
dist/script.js
в блокнот в игре, блокнот в mcgl9 и в проектор.
При разработке также может быть удобно, чтобы скрипт пересобирался автоматически. Для этого вместо второго шага можно выполнить:
npm run watch
Тогда при любом изменении в dist/
будет всегда актуальный скрипт.
Базовый модуль, обеспечивающий работу других модулей, а также предоставляющий стандартные для mcgl9 функции:
import mcgl9 from './mcgl9';
mcgl9.onInit(() => {
// аналог функции init() из документации MCGL
});
mcgl9.onUpdate((time) => {
// аналог функции update(time) из документации MCGL
});
Модуль, предоставляющий функции работы с таймерами, аналогичными стандартным в javascript. У них есть только одно отличие: коллбекам таймера нельзя передавать аргументы, как в стандартных для js функциях.
Пример:
import {setTimeout, setInterval, clearTimeout, clearInterval} from './mcgl9/timers';
let to = setTimeout(() => display.log('timeout'), 100);
clearTimeout(to); // отменить таймаут
let iv = setInterval(() => display.log('interval'), 1000);
clearInterval(iv); // отменить интервал
Предоставляет более привычные методы console.log
, console.warn
, console.error
, console.info
, принимающие несколько аргументов (в отличие от display.log
)
Пример:
import console from './mcgl9/console';
console.log(1, 2, 3); // => 1,2,3
console.info(1, 2, 3); // => [INFO] 1,2,3
console.warn(1, 2, 3); // => [WARN] 1,2,3
console.error(1, 2, 3); // => [ERROR] 1,2,3
Предоставляет простую реализацию промисов для mcgl9 с поддержкой методов Promise.resolve
, Promise.reject
и Promise.all
Пример:
import './mcgl9/promise';
import console from './mcgl9/console';
Promise.resolve('Hello')
.then(hello => `${hello}, world!`)
.then(console.log); // Hello, world!
Упрощение работы с клавиатурными нажатиями.
Пример:
import keyboard from './mcgl9/keyboard';
keyboard.onKeyDown(KeyCode.G, (code: KeyCode) => {
// Вызывается один раз при нажатии на клавишу G
});
keyboard.onKeyUp(KeyCode.G, (code: KeyCode) => {
// Вызывается один раз при отпускании клавиши G
});
keyboard.onKeyHold(KeyCode.G, (code: KeyCode) => {
// Вызывается каждый тик onUpdate, пока клавиша G нажата
});