80LK (обсуждение | вклад) м |
|||
Строка 16: | Строка 16: | ||
#''EnergyTileRegistry - ''модуль для привязки типов энергии к Tile Entity. | #''EnergyTileRegistry - ''модуль для привязки типов энергии к Tile Entity. | ||
− | = Создание новых типов энергии = | + | <div class="mw-parser-output"><h1> Создание новых типов энергии </h1><p><i>EnergyTypeRegistry.assureEnergyType("name", value)</i> - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий. |
+ | </p><p><span style="line-height:107%"><u style="text-underline:black">Параметры:</u></span> | ||
+ | </p> | ||
+ | <ul><li>name - уникальное название энергии, обычно используется сокращение ("Eu" - energy units, "RF" - redstone flux и т.п.) </li></ul> | ||
+ | <p><span style="line-height:108%"><span style="font-family:">•</span></span>value - сколько Eu (единиц энергии industrial craft) содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. Энергия Eu принята за эталон. | ||
+ | </p><p>Возвращает функция тип с данным именем (созданный или импортированый), который обладает следующими методами и значениями: | ||
+ | </p> | ||
+ | <ul><li><energyType>.name - имя данного типа энергии. </li> | ||
+ | <li><span style="line-height:109%"><energyType>.<span style="font-size:11.0pt"><span style="line-height:109%">getWireSpecialType() - возвращает специальный тип блока, который будет являться проводником данного типа энергии.</span></span></span> </li></ul> | ||
+ | <p><span style="line-height:107%"><b><span style="font-size:11.0pt"><span style="line-height:107%">Пример:</span></span></b></span> | ||
+ | <pre class="fck_mw_syntaxhighlight"><syntaxhighlight lang="Javascript">// в начале мода импортируем библиотеку (она должна находиться в lib/) | ||
+ | importLib("energylib.js", "*"); | ||
− | + | // создаем тип энергии redstone flux var energyRedstoneFlux = EnergyTypeRegistry.assureEnergyType("RF", 0.25); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | // создаем тип энергии redstone flux var energyRedstoneFlux = EnergyTypeRegistry.assureEnergyType( | ||
// создаем блок-проводник для данного типа энергии | // создаем блок-проводник для данного типа энергии | ||
− | IDRegistry.genBlockID( | + | IDRegistry.genBlockID("RFconduct"); |
− | Block.createBlock( | + | Block.createBlock("RFconduct", [ |
− | {name: | + | {name: "RF Conduct", texture: [["rf_conduct", 0]], inCreative: true} // текстура images/terrain-atlas/rf_conduct_0.png должна находиться в ресурсах мода ], energyRestroneFlux.getWireSpecialType()); </syntaxhighlight></pre> |
− | + | </p><p>  | |
− | & | + | </p></div> |
= Привязка типов энергии к TileEntity = | = Привязка типов энергии к TileEntity = |
!Поддержка библиотеки прекращена, используйте EnergyNet!
Данная библиотека для Core Engine представляет собой инструмент для быстрого создания новых типов энергии и работы с ними.
Для добавления библиотеки в мод ее файл (energylib.js) нужно добавить в директорию lib/ в директории мода (если таковой нету, то ее нужно создать).
Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку importLib("energylib.js", "*") .
EnergyTypeRegistry.assureEnergyType("name", value) - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.
Параметры:
•value - сколько Eu (единиц энергии industrial craft) содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. Энергия Eu принята за эталон.
Возвращает функция тип с данным именем (созданный или импортированый), который обладает следующими методами и значениями:
Пример:
<syntaxhighlight lang="Javascript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*"); // создаем тип энергии redstone flux var energyRedstoneFlux = EnergyTypeRegistry.assureEnergyType("RF", 0.25); // создаем блок-проводник для данного типа энергии IDRegistry.genBlockID("RFconduct"); Block.createBlock("RFconduct", [ {name: "RF Conduct", texture: [["rf_conduct", 0]], inCreative: true} // текстура images/terrain-atlas/rf_conduct_0.png должна находиться в ресурсах мода ], energyRestroneFlux.getWireSpecialType()); </syntaxhighlight>
Для того, чтобы привязать тип энергии к tile entity используется метод
EnergyTileRegistry.addEnergyTypeForId(tileEntityId, energyType) - добавляет tile entity с данным id дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.
Параметры:
Новыесобытия:
energyTick: function(type, src) { /* … */ } - вызывается каждый тик для каждого типа энергии, привязанного к данному tile entity. Параметры:
energyReceive: function(type, src) { /* … */ } - аналогична energyTick, но вызывается только если в сети есть энергия.
isGenerator: function() {return true;} - данный метод нужно только если tile entity в основном генерирует энергию, а не забирает ее (является генератором), нужна для более точного расчёта.
Несколько tile entity поддерживающих одинаковый тип энергии и соединенные нужным проводником объединяются в энергетическую сеть. Tile entity имеют возможность забирать энергию из сети и передавать ее туда, при этом вся переданная энергия распределяется равномерно по потребителям.
Данный объект является интерфейсом для работы с энергией в сети, который передается в события для работы с энергией (src).
Методы:
•src.storage(receive, retreive) - данный метод является функцией хранилищ энергии. Как параметры принимает то, сколько энергии он максимально может принять (reveive) и сколько максимально может отдать (retreive) за данный тик. Возвращает изменение энергии (отрицательное, если энергия была отдана, положительное, если принята).
Пример 1 - генератор:
// требуется создать блок с id "RFgenerator"
TileEntity.registerPrototype(BlockID.RFgenerator, {
isGenerator: function() {
return true;
},
energyTick: function(type, src) {
src.add(10); // генерирует 10 RF за тик
}
});
// привяжем к этому tile entity наш тип энергии
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRedstoneFlux);
Пример 2 - потребитель:
// требуется создать блок с id "RFconsumer"
TileEntity.registerPrototype(BlockID.RFconsumer, {
energyTick: function(type, src) {
var energy = Math.floor(src.get(10)); // получить от 0 до 10 энергии, Math.floor используется в данном случае для устранения ошибки вычислений, в большинстве случаев это не нужно
for (var i = 0; i < energy; i++) { // чем больше энергии, тем больше частиц
Particles.addParticle(this.x + Math.random(), this.y + 1, this.z +
Math.random(), 6, 0, .07, 0); // создать частицу над блоком
}
}
});
// привяжем к этому tile entity наш тип энергии
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRedstoneFlux);
При соединении 2х этих блоков проводом, созданным ранее один из них будет испускать частицы, если потребителей будет несколько, а генератор один, то частиц на каждом по отдельности будет меньше, а суммарно столько же.
Пример 3 - хранилище:
// требуется создать блок с id "RFstorage"
TileEntity.registerPrototype(BlockID.RFstorage, {
defaultValues: {
energy: 0 // сохраняемое значение, обозначающее запасенную энергию
},
energyTick: function(type, src) {
this.data.energy += src.storage(Math.min(20, 1000 - this.data.energy), Math.min(20, this.data.energy)); // вызовем функцию хранилища: передаем не более 20 энергии в тик, при этом отдаем так, чтобы энергии не стало меньше 0, а принимаем так, чтобы не было больше 1000
}
});
// привяжем к этому tile entity наш тип энергии
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRedstoneFlux);
Для проверки хранилища, можно сначала подзаряжать его от генератора, а потом отключать генератор и подключать потребитель, который будет работать от него ограниченное время.