Skip to content

Korišćenje komponenti

Aktiviranje sistema komponenti u vašem pluginu odvija se u 2 koraka.

  1. Aktiviranje korisničkog interfejsa komponenti
  2. Preuzimanje vrednosti boja iz prilagođenih komponenti

Prvi korak za aktiviranje korisničkog interfejsa komponenti je definisanje kanala uređaja za SignalRGB. Ovde koristimo Corsair Node Pro kao primer. Počnite kreiranjem niza koji opisuje naše kanale. Zatim ćemo ove informacije prosledititi backend-u SignalRGBa u komandi Initialize, tako da se kanali kreiraju pre nego što pokušamo da renderujemo bilo šta.

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]);
}
}

U gornjem kodu vidite da kreiramo dvodimenzionalni niz za naše kanale, gde svaki unos sadrži naziv kanala i njegovo ograničenje LED dioda. U SetupChannels() prvo postavljamo ukupno ograničenje LED dioda, a zatim iterativno pozivamo device.addChannel za svaki unos u našem nizu.

Ova petlja se može izvršiti i direktno bez niza, ako želite da je tvrdo kodirate.

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

Pozovite funkciju SetupChannels unutar Initialize da biste dovršili inicijalizaciju uređaja.

export function Initialize()
{
SetupChannels()
}

Sačuvajte izmene datoteke i vaši kanali će se pojaviti na stranici uređaja. Zatim ćemo se pozabaviti preuzimanjem vrednosti boja iz izabranih komponenti.

Nakon podešavanja kanala, moramo preuzeti boje iz njih — ovde je korisno imati nazive kanala sačuvane u nizu.

Opšta ideja je:

Za svaki kanal -> Za svaku komponentu na kanalu -> getColors()

Sve ovo je enkapsulirano za vas u funkciji device.channel().getColors(). Corsair Node Pro šalje podatke o bojama po kanalima, pa želimo da držimo podatke “odvojene” radi jednostavnijeg procesiranja.

Ovde ćete primetiti dodatni element: proveravamo LedCount() kanala, i ako vraća 0, puštamo kanale da pulsiraju za korisnika. Ovo je korisna naznaka da kanale još uvek treba podesiti.

U nastavku su primeri koda za uobičajen slučaj korišćenja, tvrdo kodiran i bez provera pulsa kanala.

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]
//...
}

Na kraju, jednostavno želimo da pozovemo ovu funkciju u petlji renderovanja. Donji deo funkcije SendChannel sadrži kod za konverziju nizova boja u pakete i njihov prenos uređaju. Ovaj deo je specifičan za uređaj i morate ga sami odrediti putem reverznog inženjeringa!

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

Neki uređaji su posebni i odstupaju od standarda, ili možda želite da uradite nešto novo u svom pluginu i morate da komunicirate sa pojedinačnim komponentama. U tim slučajevima ne možemo koristiti device.channel().getColors() i umesto toga moramo sami iterirati kroz pojedinačne komponente.

Da bismo to uradili, koristimo device.channel().getComponentNames() da bismo dobili sve ID-ove komponenti, a zatim iteriramo kroz njih sa device.channel().getComponentColors() da bismo dobili pojedinačne nizove boja.

Sledeći primer jednostavno spaja pojedinačne nizove, ali između toga možete raditi sve što vam je potrebno.

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)
}

Ako trebate zaista ulaziti u detalje u svom pluginu, možete koristiti device.channel.getComponent().