Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) м (Admin moved page CoreEngine/Пример создания моба to InnerCore/Пример создания моба) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | < | + | <syntaxhighlight lang="Javascript">MobSpawnRegistry.registerSpawn("bird-blue", .2); // относительно редкий спавн птицы |
− | var blue_bird_texture = new Texture("bird_blue.png"); | + | var blue_bird_texture = new Texture("bird_blue.png"); // создадим объект текстуры |
− | blue_bird_texture.setResolution(128, 64); | + | blue_bird_texture.setResolution(128, 64); // зададим разрешение |
− | blue_bird_texture.setPixelScale(2); | + | blue_bird_texture.setPixelScale(2); // установим масштабирование |
− | + | /* Так же этот код можно записать короче, в таком формате: var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2);*/ | |
− | var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2); | + | var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2);// загружаем текстуру и задаем ей разрешение и масштабирование. |
− | var blue_bird_model = new EntityModel(); | + | var blue_bird_model = new EntityModel(); // создаем модель нашей птицы |
− | blue_bird_model.setTexture(blue_bird_texture); | + | blue_bird_model.setTexture(blue_bird_texture);// устанавливаем ей текстуру // создаем анимацию модели: она будет содержать 16 кадров, каждый из которых будет занимать 0.5 тика (1 цикл = 1 взмах крыльев = 8 тиков) |
− | blue_bird_model.createAnimation(16, function(frame) { | + | blue_bird_model.createAnimation(16, function(frame) { // создание кадра |
− | var render = new Render(); | + | var render = new Render(); // создаем рендер |
− | var partObj = [ | + | var partObj = [ // создаем объект, описывающий часть body, в нашем случае это вся модель |
{ | { | ||
type: "box", | type: "box", | ||
Строка 26: | Строка 26: | ||
y: 0 | y: 0 | ||
} | } | ||
− | }, | + | },// тело |
{ | { | ||
type: "box", | type: "box", | ||
Строка 43: | Строка 43: | ||
y: 0 | y: 0 | ||
} | } | ||
− | }, | + | }, // голова |
{ | { | ||
type: "box", | type: "box", | ||
Строка 60: | Строка 60: | ||
y: 16 | y: 16 | ||
} | } | ||
− | }, | + | }, // клюв |
{ | { | ||
type: "box", | type: "box", | ||
Строка 77: | Строка 77: | ||
y: 0 | y: 0 | ||
} | } | ||
− | }, | + | }, // хвост |
{ | { | ||
type: "box", | type: "box", | ||
Строка 94: | Строка 94: | ||
y: 11 | y: 11 | ||
} | } | ||
− | }, | + | }, // ноги |
− | ]; | + | ]; // крылья - более сложная структура и она генерируется в цикле, при том именно крылья меняют свое положение каждый кадр. |
− | var position = Math.sin(frame / 16 * Math.PI * 2); | + | var position = Math.sin(frame / 16 * Math.PI * 2); // рассчитываем позицию крыльев - синус здесь принимает значения от 0 до 2 * pi и поэтому проходит 1 период, принимая значения от -1 до 1, что нам и нужно (взмахи) |
− | for (var i = 0; i < 5; i++) { | + | for (var i = 0; i < 5; i++) { // каждое крыло состоит из 5 частей, чем дальше от тела часть, тем сильнее изменение позиции и тем меньше эта часть по длине |
partObj.push({ | partObj.push({ | ||
type: "box", | type: "box", | ||
Строка 114: | Строка 114: | ||
z: 0 | z: 0 | ||
} | } | ||
− | }); | + | }); // правое крыло |
partObj.push({ | partObj.push({ | ||
type: "box", | type: "box", | ||
Строка 131: | Строка 131: | ||
z: 0 | z: 0 | ||
} | } | ||
− | }); | + | }); // левое крыло |
} | } | ||
− | render.setPart("head", partObj, {}); | + | render.setPart("head", partObj, {});// устанавливаем наше описание части в рендер |
− | return render; | + | return render;// возвращаем рендер для данного кадра |
}, 0.5); | }, 0.5); | ||
− | var entityTypeBird = MobRegistry.registerEntity("bird-blue"); | + | var entityTypeBird = MobRegistry.registerEntity("bird-blue"); // создаем тип моба - птицу |
− | entityTypeBird.customizeVisual({ | + | entityTypeBird.customizeVisual({ // задаем нашу модель как основную (будет установлена при старте) |
getModels: function() { | getModels: function() { | ||
return { | return { | ||
Строка 145: | Строка 145: | ||
} | } | ||
}); | }); | ||
− | entityTypeBird.customizeDescription({ | + | entityTypeBird.customizeDescription({// кроме этого задаем размер хитбокса птице, чтобы он был поменьше |
getHitbox: function() { | getHitbox: function() { | ||
return { | return { | ||
Строка 156: | Строка 156: | ||
coords = coords.relative; | coords = coords.relative; | ||
Entity.spawnCustom("bird-blue", coords.x + .5, coords.y + .5, coords.z + .5); | Entity.spawnCustom("bird-blue", coords.x + .5, coords.y + .5, coords.z + .5); | ||
− | });</ | + | });</syntaxhighlight> |
MobSpawnRegistry.registerSpawn("bird-blue", .2); // относительно редкий спавн птицы
var blue_bird_texture = new Texture("bird_blue.png"); // создадим объект текстуры
blue_bird_texture.setResolution(128, 64); // зададим разрешение
blue_bird_texture.setPixelScale(2); // установим масштабирование
/* Так же этот код можно записать короче, в таком формате: var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2);*/
var blue_bird_texture = new Texture("bird_blue.png").setResolution(128, 64).setPixelScale(2);// загружаем текстуру и задаем ей разрешение и масштабирование.
var blue_bird_model = new EntityModel(); // создаем модель нашей птицы
blue_bird_model.setTexture(blue_bird_texture);// устанавливаем ей текстуру // создаем анимацию модели: она будет содержать 16 кадров, каждый из которых будет занимать 0.5 тика (1 цикл = 1 взмах крыльев = 8 тиков)
blue_bird_model.createAnimation(16, function(frame) { // создание кадра
var render = new Render(); // создаем рендер
var partObj = [ // создаем объект, описывающий часть body, в нашем случае это вся модель
{
type: "box",
coords: {
x: 0,
y: 16,
z: 0
},
size: {
x: 5,
y: 4,
z: 9
},
uv: {
x: 20,
y: 0
}
},// тело
{
type: "box",
coords: {
x: 0,
y: 14,
z: -4
},
size: {
x: 4,
y: 4,
z: 6
},
uv: {
x: 0,
y: 0
}
}, // голова
{
type: "box",
coords: {
x: 0,
y: 14,
z: -6.5
},
size: {
x: 1,
y: 1,
z: 3
},
uv: {
x: 0,
y: 16
}
}, // клюв
{
type: "box",
coords: {
x: 0,
y: 14,
z: 6
},
size: {
x: 3,
y: 1,
z: 8
},
uv: {
x: 20,
y: 0
}
}, // хвост
{
type: "box",
coords: {
x: 0,
y: 20,
z: 0
},
size: {
x: 3,
y: 4,
z: 1
},
uv: {
x: 0,
y: 11
}
}, // ноги
]; // крылья - более сложная структура и она генерируется в цикле, при том именно крылья меняют свое положение каждый кадр.
var position = Math.sin(frame / 16 * Math.PI * 2); // рассчитываем позицию крыльев - синус здесь принимает значения от 0 до 2 * pi и поэтому проходит 1 период, принимая значения от -1 до 1, что нам и нужно (взмахи)
for (var i = 0; i < 5; i++) { // каждое крыло состоит из 5 частей, чем дальше от тела часть, тем сильнее изменение позиции и тем меньше эта часть по длине
partObj.push({
type: "box",
size: {
x: 1,
y: 1,
z: 8 - i
},
uv: {
x: 20,
y: 0
},
coords: {
x: 2.5 + i,
y: position * i + 15,
z: 0
}
}); // правое крыло
partObj.push({
type: "box",
size: {
x: 1,
y: 1,
z: 8 - i
},
uv: {
x: 20,
y: 0
},
coords: {
x: -2.5 - i,
y: position * i + 15,
z: 0
}
}); // левое крыло
}
render.setPart("head", partObj, {});// устанавливаем наше описание части в рендер
return render;// возвращаем рендер для данного кадра
}, 0.5);
var entityTypeBird = MobRegistry.registerEntity("bird-blue"); // создаем тип моба - птицу
entityTypeBird.customizeVisual({ // задаем нашу модель как основную (будет установлена при старте)
getModels: function() {
return {
"main": blue_bird_model
};
}
});
entityTypeBird.customizeDescription({// кроме этого задаем размер хитбокса птице, чтобы он был поменьше
getHitbox: function() {
return {
w: 0.3,
h: 0.3
};
}
});
Item.registerUseFunctionForID(280, function(coords, item, block) {
coords = coords.relative;
Entity.spawnCustom("bird-blue", coords.x + .5, coords.y + .5, coords.z + .5);
});