Модуль 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>

Текущая версия на 14: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);
});