Вверх ↑
Разработчик
Ответов: 3015
NeverClan
[W] Inactive
#1: 2020-11-06 00:23:42 ЛС | профиль | цитата
Привет, жители галактики. Многие знают MCGL 9 - предмет, позволяющий с помощью скриптов выводить в проекторе всякие кубики. Некоторые даже делали в нем новогодние ёлки, но в целом эта тема далеко не заходила и оставалась уделом профи-кодеров-математиков. Сегодня я пошатну это утверждение. Представляю вам...

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.: извините, если кого зацепил пафосом, я не специально :-)

Спасибо! Приятного всем моделирования!
карма: 125
20
Голосовали:Sucashi, Danya_14, 1352478, Trader, Miracle-, kriponeko, -ChappiE-, social, OTBETCTBEHHblN, Zarok, apl, DJ-MATAIL, ninzelovo, Android995, DeMoNo5060, Ghost, Moonlight_420, MpSeVEN, Embr0n, Mor9Ik