Admin (обсуждение | вклад) м (Admin moved page CoreEngine/Обновляемые объекты to InnerCore/Модуль Updatable) |
80LK (обсуждение | вклад) м |
||
Строка 1: | Строка 1: | ||
− | + | <div class="mw-parser-output"> | |
− | Модуль обновляемых обьектов, или Updatable - одна из важнейших технологий в CoreEngine наряду с событиями. На них построены генерация, tile entity, мобы и все остальное. | + | Модуль обновляемых обьектов, или Updatable - одна из важнейших технологий в CoreEngine наряду с событиями. На них построены генерация, tile entity, мобы и все остальное.<br/> Для того, чтобы создать обновляемый обьект, используйте метод: |
− | |||
− | |||
− | |||
− | Для того, чтобы создать обновляемый обьект, используйте метод: | ||
− | |||
− | |||
*Updatable.addUpdatable(updatable). | *Updatable.addUpdatable(updatable). | ||
− | + | Обновляемый обьект должен иметь метод update и желательно условие самоуничтожения.<br/> С помощью управляемых обьектов можно, например, создавать обработчики некоторых событий, не создавая для этого моба или блок.<br/> Важно! Для модификации извне сохраните updatable в переменную, затем укажите ее в создании обновляемого обьекта как аргумент. | |
− | |||
− | Обновляемый обьект должен иметь метод update и желательно условие самоуничтожения. | ||
− | |||
− | |||
− | |||
− | С помощью управляемых обьектов можно, например, создавать обработчики некоторых событий, не создавая для этого моба или блок. | ||
− | |||
− | |||
− | |||
− | Важно! Для модификации извне сохраните updatable в переменную, затем укажите ее в создании обновляемого обьекта как аргумент. | ||
− | |||
− | |||
*Updatable.removeUpdatable(updatable) - принудительно уничтожает объект. | *Updatable.removeUpdatable(updatable) - принудительно уничтожает объект. | ||
*Updatable.isInUpdate(updatable) - проверяет, обновляется ли updatable. | *Updatable.isInUpdate(updatable) - проверяет, обновляется ли updatable. | ||
− | |||
− | |||
Пример кода на свинопад с использованием Updatable: | Пример кода на свинопад с использованием Updatable: | ||
− | < | + | <syntaxhighlight lang="JavaScript">var SubRandomHandler = { |
− | + | pigfallChance: function(){ | |
− | + | return Math.round(Math.random() * 25)) | |
− | + | }, | |
− | + | update: function(){ | |
− | + | if (this.pigfallChance() == 0){ | |
− | + | Updatable.addUpdatable(PigfallHandler); | |
− | + | this.remove = true; | |
− | + | } | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
}; | }; | ||
− | |||
var PigfallHandler = { | var PigfallHandler = { | ||
− | + | pigPower: 40, | |
− | + | pigfallTime: 6000, | |
− | + | pigDiapason: 200, | |
− | + | checkSecondPigPosition: function(){ | |
− | + | return { | |
− | + | x: Math.round(Math.random() * this.pigDiapason) + Player.getPosition().x, | |
− | + | y: 80 + Math.round(Math.random() * 46), | |
− | + | z: Math.round(Math.random() * this.pigDiapason + Player.getPosition().z | |
− | + | }; | |
− | + | }, | |
− | + | spawnPig: function(){ | |
− | + | let pos = this.checkSecondPigPosition(); | |
− | + | Entity.spawn(12, pos.x, pos.y, pos.z); | |
− | + | }, | |
− | + | pigChance: function(){ | |
− | + | if (Math.round(Math.random() * this.pigPower + 1) == 0) | |
− | + | return true; | |
− | + | }, | |
− | + | update: function(){ | |
− | + | if (this.pigChance){ | |
− | + | this.spawnPig(); | |
− | + | this.pigfallTime--; | |
− | + | this.pigDiapason = this.pigfallTime / this.pigPower; | |
− | + | if (this.pigfallTime % 120) | |
− | + | this.pigPower--; | |
− | + | } | |
− | + | ||
− | + | if (this.pigfallTime <= 0){ | |
− | + | Updatable.addUpdatable(SubRandomHandler); | |
− | + | this.remove = true; | |
− | + | } | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
}; | }; | ||
− | |||
Callback.addCallback("LevelLoaded",function(){ | Callback.addCallback("LevelLoaded",function(){ | ||
− | + | Updatable.addUpdatable(SubRandomHandler); | |
− | + | }); | |
− | + | </syntaxhighlight> | |
− | });</ | + | </div> |
Модуль обновляемых обьектов, или Updatable - одна из важнейших технологий в CoreEngine наряду с событиями. На них построены генерация, tile entity, мобы и все остальное.
Для того, чтобы создать обновляемый обьект, используйте метод:
Обновляемый обьект должен иметь метод update и желательно условие самоуничтожения.
С помощью управляемых обьектов можно, например, создавать обработчики некоторых событий, не создавая для этого моба или блок.
Важно! Для модификации извне сохраните updatable в переменную, затем укажите ее в создании обновляемого обьекта как аргумент.
Пример кода на свинопад с использованием Updatable:
var SubRandomHandler = {
pigfallChance: function(){
return Math.round(Math.random() * 25))
},
update: function(){
if (this.pigfallChance() == 0){
Updatable.addUpdatable(PigfallHandler);
this.remove = true;
}
}
};
var PigfallHandler = {
pigPower: 40,
pigfallTime: 6000,
pigDiapason: 200,
checkSecondPigPosition: function(){
return {
x: Math.round(Math.random() * this.pigDiapason) + Player.getPosition().x,
y: 80 + Math.round(Math.random() * 46),
z: Math.round(Math.random() * this.pigDiapason + Player.getPosition().z
};
},
spawnPig: function(){
let pos = this.checkSecondPigPosition();
Entity.spawn(12, pos.x, pos.y, pos.z);
},
pigChance: function(){
if (Math.round(Math.random() * this.pigPower + 1) == 0)
return true;
},
update: function(){
if (this.pigChance){
this.spawnPig();
this.pigfallTime--;
this.pigDiapason = this.pigfallTime / this.pigPower;
if (this.pigfallTime % 120)
this.pigPower--;
}
if (this.pigfallTime <= 0){
Updatable.addUpdatable(SubRandomHandler);
this.remove = true;
}
}
};
Callback.addCallback("LevelLoaded",function(){
Updatable.addUpdatable(SubRandomHandler);
});