Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. | + | <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"> |
− | = | + | Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. |
− | + | <div class="mw-parser-output"><div class="mw-parser-output"> | |
− | |||
− | |||
== Импорт == | == Импорт == | ||
− | + | <div class="mw-parser-output">Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IndustrialCraft_2/blob/master/IndustrialCraft²/lib/energy-net.js energy-net.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).</div> <div class="mw-parser-output">Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку:</div> <div class="mw-parser-output"><syntaxhighlight lang="JavaScript">IMPORT("EnergyNet"); | |
− | Для добавления библиотеки в мод ее файл ''(energy-net.js)'' нужно добавить в | ||
− | <syntaxhighlight lang="JavaScript">IMPORT("EnergyNet"); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | </div> </div> </div> | ||
+ | == Модули == | ||
− | + | #''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии. | |
− | + | #''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity. | |
− | #''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии | + | #''EnergyNetBuilder'' - модуль построения энергосетей и взаимодействия с ними. |
− | #''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity | + | </div> <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"> |
− | #'' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Создание нового типа энергии == | == Создание нового типа энергии == | ||
Строка 34: | Строка 21: | ||
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' | *''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' | ||
− | Возвращает функция тип с данным именем (созданный или | + | Возвращает функция тип с данным именем (созданный или импортированый), который обладает следующими методами и значениями: |
*<''energyType''>''.name'' - имя данного типа энергии. | *<''energyType''>''.name'' - имя данного типа энергии. | ||
− | *<''energyType''>''.registerWire(id, value, | + | *<''energyType''>''.registerWire(id, value, overloadFunc)'' – регистрирует провод с данным id. Параметры: |
− | **''value'' - лимит на размер пакета энергии (напряжение), который блок может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается | + | **''value ''- лимит на размер пакета энергии (напряжение), который блок может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается overloadFunc. |
− | **'' | + | **''overloadFunc ''- функция, которая вызвывается при приёма пакета энергии с напряжением выше лимита провода. Необязательный аргумент, имеет вид: |
+ | |||
+ | | ||
+ | <syntaxhighlight lang="JavaScript">function(maxVoltage){ | ||
+ | // this в этой функции возвращает объект энергосети, частью которой является провод. | ||
+ | } | ||
+ | </syntaxhighlight> | ||
'''Пример:''' | '''Пример:''' | ||
− | <syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку ( | + | <syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*"); |
// создаем тип энергии redstone flux | // создаем тип энергии redstone flux | ||
Строка 49: | Строка 42: | ||
energyRF.registerWire(BlockID.RFconduct, 2000); | energyRF.registerWire(BlockID.RFconduct, 2000); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | </div> </div> <div class="mw-parser-output"><div class="mw-parser-output"> </div> </div> </div> | ||
+ | == Механика передачи энергии == | ||
+ | Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого подобные механизмы объдиняются в энергосети. Энергосети - это программные объекты, которые передают энергию к подключенным к ним механизмам или другим энергосетям. Энергия передаётся пакетами с определённым количеством энергии и напряжением. | ||
+ | |||
+ | Энергосети формируются следующим образом:<br/> Для каждого блока генератора создаётся своя энергосеть, соединяющая его с подключенными к нему машинами-потребителями и энергосетями проводов. Энергосети проводов объединяют блоки с одним ид и соединяются с другими сетями того же типа энергии и машинами-потребителями энергии. Такая система позволяет разбивать провода по размеру пакета энергии, который они могут передать. Напряжение пакета энергии по умолчанию равно размеру пакеты, но может быть установлено при добавлении пакета, что позволяет передавать по проводам пакеты размером больше их лимита. | ||
+ | </div> <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"> | ||
== Привязка типов энергии к TileEntity == | == Привязка типов энергии к TileEntity == | ||
− | ''EnergyTileRegistry.addEnergyTypeForId( | + | ''EnergyTileRegistry.addEnergyTypeForId(tileEntityId, energyType)'' - добавляет tile entity с данным id дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u> |
− | *'' | + | *''tileEntityId'' – id блока, на который был зарегистрирован нужный tile entity. |
*''energyType'' - тип энергии, который требуется к нему привязать. | *''energyType'' - тип энергии, который требуется к нему привязать. | ||
Новые события: | Новые события: | ||
− | *''energyTick: function(type, | + | *''energyTick: function(type, src) { /* … */ }'' - вызывается каждый тик после функции tick для каждой энергосети, привязанной к данному tile entity.<br/> Параметры: |
**''type'' - название типа энергии, для которого вызвано это событие. | **''type'' - название типа энергии, для которого вызвано это событие. | ||
− | ** | + | **src - объект типа [[InnerCore/Libs/EnergyNet#Объект_EnergySource|EnergySource]] для добавления энергии |
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: | *''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: | ||
**''type'' - название типа энергии | **''type'' - название типа энергии | ||
**''amount'' – количество энергии | **''amount'' – количество энергии | ||
**''voltage'' – напряжение энергии | **''voltage'' – напряжение энергии | ||
− | *'' | + | *''isEnergySource: function(type) {return true;}'' – определяет, может ли tile entity вырабатывать энергию данного типа. Если да, то для него строится энергосеть. |
− | *'' | + | *''canReceiveEnergy: function(side, type) {return true/false;}'' – определяет, может ли tile entity получать энергию даного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. |
− | *'' | + | *''canExtractEnergy: function(side, type) {return true/false;}'' – определяет, с каких сторон tile entity может выдавать энергию. |
+ | </div> | ||
+ | == Объект EnergySource == | ||
− | + | Данный объект является интерфейсом для добавления энергии в сеть, который передается в события для работы с энергией (src).<br/> <u>Методы:</u> | |
− | + | *''src.add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. | |
+ | *''src.addAll(amount, voltage)'' - аналогичен методу ''add'', но ничего не возвращает и работает быстрее, потому что добавляет энергию в буфер сети, позволяя объединять в один пакет множество пакетов, созданных генераторами. | ||
+ | </div> <div class="mw-parser-output"><div class="mw-parser-output"> | ||
+ | == Работа с энегергетическими сетями == | ||
− | + | Большая часть методов модуля EnergyNetBuilder технические и используются только внутри библиотеки.Однако некоторые из них могут быть полезны и в модах: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ''EnergyNetBuilder.rebuildTileNet(объект tile entity)'' – удаляет все энергосети механизма и перестраивает все его соединения с другими сетями. Необходимо вызвать при изменении сторон, через которые tile entity может получать или передавать энергию. | |
− | |||
− | '' | ||
+ | ''EnergyNetBuilder.getNetOnCoords(x, y, z)'' – возвращает сеть, если на данных координатах есть её провод. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра. | ||
+ | ''EnergyNetBuilder.getNetByBlock(x, y, z, wireId)'' – возвращает сеть, если блок на данных координатах имеет ид, указанное в параметре wireId.</div> <div class="mw-parser-output"> </div> </div> | ||
== Примеры == | == Примеры == | ||
Строка 91: | Строка 89: | ||
| | ||
− | <syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет | + | <syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет выробатывать энергию. |
TileEntity.registerPrototype(BlockID.RFgenerator, { | TileEntity.registerPrototype(BlockID.RFgenerator, { | ||
+ | isEnergySource: function() { | ||
+ | return true; // может генерировать энергию | ||
+ | }, | ||
canReceiveEnergy: function(){ | canReceiveEnergy: function(){ | ||
return false; // не может получать энергию | return false; // не может получать энергию | ||
}, | }, | ||
energyTick: function(type, src) { | energyTick: function(type, src) { | ||
− | src. | + | src.addAll(10); // генерирует 10 RF за тик. Так как сразу отдаёт всю энергию, используется более быстрый метод. |
} | } | ||
}); | }); | ||
Строка 103: | Строка 104: | ||
// привяжем к этому tile entity наш тип энергии | // привяжем к этому tile entity наш тип энергии | ||
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight> | EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight> | ||
− | + | <div class="mw-parser-output"> | |
=== Потребитель === | === Потребитель === | ||
Строка 111: | Строка 112: | ||
defaultValues: { | defaultValues: { | ||
progress: 0 // сохраняемое значение прогресса работы | progress: 0 // сохраняемое значение прогресса работы | ||
− | |||
− | |||
− | |||
}, | }, | ||
energyReceive: function(type, amount, voltage) { | energyReceive: function(type, amount, voltage) { | ||
Строка 128: | Строка 126: | ||
// привяжем к этому tile entity наш тип энергии | // привяжем к этому tile entity наш тип энергии | ||
− | EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF); | + | EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);</syntaxhighlight> |
− | </syntaxhighlight> | + | <div class="mw-parser-output"> </div> </div> <div class="mw-parser-output"> |
− | |||
=== Хранилище === | === Хранилище === | ||
− | Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе | + | Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity. |
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху. | <syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху. | ||
TileEntity.registerPrototype(BlockID.RFstorage, { | TileEntity.registerPrototype(BlockID.RFstorage, { | ||
Строка 139: | Строка 136: | ||
energy: 0 // сохраняемое значение, обозначающее запасенную энергию | energy: 0 // сохраняемое значение, обозначающее запасенную энергию | ||
}, | }, | ||
+ | isEnergySource: function() { | ||
+ | return true; // блок может отдавать энергию | ||
+ | } | ||
canReceiveEnergy: function(side, type) { | canReceiveEnergy: function(side, type) { | ||
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней. | return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней. | ||
Строка 149: | Строка 149: | ||
}, | }, | ||
energyReceive: function(type, amount, voltage) { | energyReceive: function(type, amount, voltage) { | ||
− | amount = Math.min(amount, 1000); // | + | amount = Math.min(amount, 1000); // устанавлимаем максимальное количество энергии, которое может принять механизм равным 1000. |
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось; | var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось; | ||
this.data.energy += add; // добавляем энергию в хранилище | this.data.energy += add; // добавляем энергию в хранилище | ||
Строка 162: | Строка 162: | ||
// привяжем к этому tile entity наш тип энергии | // привяжем к этому tile entity наш тип энергии | ||
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight> | EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight> | ||
+ | </div> </div> </div> </div> </div> </div> </div> </div> </div></div></div> |