3D движок для mcgl9
Видео с моделькой
Видео с ковром, подсвечивающим позицию игрока
Как это работает?
В движке модели создаются очень просто - достаточно лишь представить шаблон в виде текста. Например:
.......oo.......
.....oooooo.....
....ooo..ooo....
....oo....oo....
....oo....oo....
....ooo..ooo....
....oooooooo....
....oooooooo....
....oooooooo....
..oooooooooooo..
.oooooop.oooooo.
oooooooooooooooo
ooo.oooooooo.ooo
oo..oooooooo..oo
oo..oooooooo..oo
o..............o
Затем совсем немного вспомогательного кода и модель выводится в проекторе!
let scene = new Scene();
// создаем экземпляр ракеты по шаблону
let rocket = createMeshFromTemplate(rocketModel);
rocket.position = vec3(0, 8, 0);
// добавляем ракету на сцену
scene.addElement(rocket);
mcgl9.onUpdate(time =› {
scene.update();
});
Это стало возможно благодаря моему набору разработчика для mcgl9: https://github.com/iassasin/mcgl9-script. Но чтобы пользоваться всеми этими удобствами, нужно установить себе nodejs, научиться немного работать с консолью и т.п.
Ну вот, опять все для профи-кодеров-математиков. Что делать простым энтузиастам?
Я подготовил специальную минифицированную сборку движка, вставив которую в начало своего скрипта, можно пользоваться им полноценно!
Например:
// тут код движка
...
n.addElement(u)),"p"===p&&(n.pivot=c(s,a,u&&u.position&&u.position.z||0))}return n},degToRad=s,vec3=c,vecAddVec=function(t,o){
return{x:t.x+o.x,y:t.y+o.y,z:t.z+o.z}},vecInvert=n,vecMultVal=o,vecNormalize=r}();
...
// тут ваш код!
function init() {}
var rocketModel = [
'.......oo.......',
'.....oooooo.....',
'....ooo..ooo....',
'....oo....oo....',
'....oo....oo....',
'....ooo..ooo....',
'....oooooooo....',
'....oooooooo....',
'....oooooooo....',
'..oooooooooooo..',
'.oooooop.oooooo.',
'oooooooooooooooo',
'ooo.oooooooo.ooo',
'oo..oooooooo..oo',
'oo..oooooooo..oo',
'o..............o',
].join('\n');
var scene = new Scene();
scene.position = vec3(8, 0, 8);
var rocket = createMeshFromTemplate(rocketModel);
rocket.position = vec3(0, 8, 0);
scene.addElement(rocket);
function update(time) {
var rot = (time % 3600 / 3600) * 6.28;
rocket.rotation.z = Math.sin(rot) * 30;
scene.update();
}
Документация по функционалу движка
Конечно, движок способен на большее, чем просто выводить ракету, хоть и является простым. В репозитории я подробно описал основные функции. Если вы чувствуете себе силы и решимость, вы можете прочитать документацию по ссылке и заставить ракету летать! (А еще там есть пример из видео с летучей мышью).
Полезные ниндзя-техники
Быстрая проверка скрипта
Хотите, чтобы изменения скрипта мгновенно применялись в проекторе в игре? С последним обновлением это стало возможно! Если вы смотрели видео из начала поста, то могли заметить, что у меня именно так все и происходит: меняется скрипт - изменения уже отображаются в игре. Этого можно достичь следующим образом:
1. Перейти в папку клиента: %Путь_к_клиенту%\plugins\.
2. Поместить туда скачанный выше шаблон скрипта.
3. Вписать в блокнот в игре следующий код:
sys.use('@rocket'); // то же самое имя, что у файла, например, plugins/rocket.js -› @rocket. @ в начале важна, не удалять ее.
Теперь клиент будет следить за изменениями этого файла. Подробнее можно прочитать в вики об этом феномене: MCGL 9.
НО ПОМНИТЕ! Это будет работать только для вас, т.к. у других игроков в папке с клиентом не будет лежать вашего файла со скриптом. Поэтому эта ниндзя-техника полезна для быстроты отладки вашего скрипта. А для использования в повседневной жизни и демонстрации всем гостям стоит скопировать код из файла и вставить напрямую в блокнот. Прямо так - Ctrl+C и Ctrl+V.
А еще иногда при частых изменениях скрипта проектор может залагать, тогда стоит попробовать перевоткнуть mcgl9 в проектор или перезапустить игру.
Не влезает... Слишком большой код...
Ваши модели получились слишком большими и не влезают в блокнот? Еще есть надежда! Можно воспользоваться онлайн-сервисами для минификации кода, и тогда он может влезть в проектор! Например, этот: https://javascript-minifier.com/ (окей, гугл "minify js online").
Последняя ниндзя техника
А нет, я вас обманул. Это не техника. Здесь я просто говорю спасибо всем, кто прочитал этот пост до конца. Надеюсь, он оказался для вас полезным!
P.S.: извините, если кого зацепил пафосом, я не специально :-)
Спасибо! Приятного всем моделирования!