(Created page with " MobSpawnRegistry.registerSpawn("bird-blue", .2); ''// относительно редкий спавн птицы''<br/> var blue_bird_texture = new Texture("bird_blue.png");...") |
Admin (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| + | <pre>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({ ''// задаем нашу модель как основную (будет установлена при старте) '' | |
| − | var entityTypeBird = MobRegistry.registerEntity("bird-blue"); ''// создаем тип моба - птицу | + | 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); | ||
| + | });</pre> | ||
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);
});