Skip to content

Menggunakan Komponen

Mengaktifkan sistem komponen dalam plugin Anda dilakukan dalam 2 langkah.

  1. Mengaktifkan antara muka pengguna komponen
  2. Mendapatkan nilai warna dari komponen tersuai

Langkah pertama untuk mengaktifkan antara muka pengguna komponen ialah mentakrifkan saluran peranti untuk SignalRGB. Kita menggunakan Corsair Node Pro sebagai contoh di sini. Mulakan dengan mencipta array yang menerangkan saluran kita. Kemudian kita menyampaikan maklumat ini kepada bahagian belakang SignalRGB dalam arahan Initialize supaya saluran dicipta sebelum kita cuba merender apa-apa.

const DeviceMaxLedLimit = 204;
//Channel Name, Led Limit
var ChannelArray = [
["Channel 1", 204],
["Channel 2", 204],
]
function SetupChannels(){
device.SetLedLimit(DeviceMaxLedLimit);
for(let i = 0; i < ChannelArray.length; i++){
device.addChannel(ChannelArray[i][0],ChannelArray[i][1]);
}
}

Dalam kod di atas, Anda dapat melihat bahawa kita mencipta array dua dimensi untuk saluran kita, dengan setiap entri mengandungi nama saluran dan had LED-nya. Dalam SetupChannels(), kita mula-mula menetapkan had LED keseluruhan dan kemudian secara berulangan memanggil device.addChannel untuk setiap entri dalam array kita.

Gelung ini juga boleh dijalankan secara terus tanpa array jika Anda ingin mengekodnya secara keras.

function SetupChannels(){
device.SetLedLimit(204);
device.addChannel("Channel 1",204);
device.addChannel("Channel 2",204);
}

Panggil fungsi SetupChannels dalam Initialize untuk melengkapkan inisialisasi peranti.

export function Initialize()
{
SetupChannels()
}

Simpan perubahan fail dan saluran Anda akan muncul pada halaman peranti. Seterusnya, kita akan membincangkan cara mendapatkan nilai warna dari komponen yang dipilih.

Selepas menyediakan saluran, kita perlu mendapatkan warna darinya — di sinilah berguna untuk mempunyai nama saluran yang disimpan dalam array.

Idea umumnya ialah:

Untuk setiap saluran -> Untuk setiap komponen pada saluran -> getColors()

Ini semua dikapsulkan dalam fungsi device.channel().getColors() untuk Anda. Corsair Node Pro menghantar data warnanya mengikut saluran, jadi kita ingin memastikan data “terpisah” untuk memudahkan pemprosesan.

Anda akan melihat elemen tambahan di sini: kita menyemak LedCount() saluran, dan jika ia mengembalikan 0, kita membiarkan saluran berdenyut untuk pengguna. Ini merupakan petunjuk berguna bahawa saluran masih perlu disediakan.

Di bawah anda akan dapati contoh kod untuk kes penggunaan biasa, dikodkan keras dan tanpa semakan denyut saluran.

function SendChannel(Channel)
{
let ChannelLedCount = device.channel(ChannelArray[Channel][0]).LedCount();
let ColorData = []
if(device.getLedCount() == 0){
ChannelLedCount = 80;
let pulseColor = device.getChannelPulseColor(ChannelArray[Channel][0], ChannelLedCount);
ColorData = device.createColorArray(pulseColor, ChannelLedCount, "Seperate");
}else{
ColorData = device.channel(ChannelArray[Channel][0]).getColors("Seperate");
}
let RedChannelData = ColorData[0]
let GreenChannelData = ColorData[1]
let BlueChannelData = ColorData[2]
//...
}
function SendChannel1()
{
let ChannelLedCount = device.channel("Channel 1").LedCount();
let ColorData = []
if(device.getLedCount() == 0){
ChannelLedCount = 80;
let pulseColor = device.getChannelPulseColor("Channel 1", ChannelLedCount);
ColorData = device.createColorArray(pulseColor, ChannelLedCount, "Seperate");
}else{
ColorData = device.channel("Channel 1").getColors("Seperate");
}
let RedChannelData = ColorData[0]
let GreenChannelData = ColorData[1]
let BlueChannelData = ColorData[2]
//...
}
SendChannel(Channel)
{
let ColorData = []
ColorData = device.channel(ChannelArray[Channel][0]).getColors("Seperate");
let RedChannelData = ColorData[0]
let GreenChannelData = ColorData[1]
let BlueChannelData = ColorData[2]
//...
}

Akhirnya, kita hanya ingin memanggil fungsi ini dalam gelung render. Bahagian bawah fungsi SendChannel mengandungi kod untuk menukar array warna menjadi paket dan menghantarnya ke peranti. Bahagian ini khusus untuk peranti dan mesti ditentukan sendiri melalui kejuruteraan songsang!

export function Render()
{
SendChannel(0);
device.pause(1);
SendChannel(1);
device.pause(1);
SubmitLightingColors();
}

Sesetengah peranti adalah istimewa dan menyimpang dari standard, atau Anda mungkin ingin melakukan sesuatu yang baharu dalam plugin Anda dan perlu berinteraksi dengan komponen individu. Dalam kes-kes ini, kita tidak boleh menggunakan device.channel().getColors() dan sebaliknya perlu melakukan iterasi melalui komponen individu sendiri.

Untuk melakukan ini, kita menggunakan device.channel().getComponentNames() untuk mendapatkan semua ID komponen, dan kemudian melakukan iterasi melaluinya menggunakan device.channel().getComponentColors() untuk mendapatkan array warna individu.

Contoh berikut hanya menggabungkan array individu, tetapi Anda boleh melakukan apa sahaja yang diperlukan di antaranya.

let components = device.channel("Channel 1").getComponentNames();
for(let i = 0; i < components.length;i++){
let ComponentColors = device.channel("Channel 1").getComponentColors(components[i]);
RGBData = RGBData.concat(ComponentColors)
}

Jika Anda perlu masuk ke dalam butiran yang lebih mendalam dalam plugin Anda, Anda boleh menggunakan device.channel.getComponent().