Модуль Updatable

Модуль обновляемых обьектов, или Updatable - одна из важнейших технологий в CoreEngine наряду с событиями. На них построены генерация, tile entity, мобы и все остальное.
Для того, чтобы создать обновляемый обьект, используйте метод:

  • Updatable.addUpdatable(updatable).

Обновляемый обьект должен иметь метод update и желательно условие самоуничтожения.
С помощью управляемых обьектов можно, например, создавать обработчики некоторых событий, не создавая для этого моба или блок.
Важно! Для модификации извне сохраните updatable в переменную, затем укажите ее в создании обновляемого обьекта как аргумент.

  • Updatable.removeUpdatable(updatable) - принудительно уничтожает объект.
  • Updatable.isInUpdate(updatable) - проверяет, обновляется ли 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);
});