Модуль Updatable — различия между версиями

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

Текущая версия на 11:33, 4 августа 2019

Модуль обновляемых обьектов, или 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);
});