Używanie komponentów
Włączanie systemu komponentów w wtyczce składa się z 2 etapów.
- Włączenie interfejsu komponentów
- Pobieranie wartości kolorów z komponentów wybranych przez użytkownika
Konfiguracja wtyczki
Dział zatytułowany „Konfiguracja wtyczki”Pierwszym krokiem do włączenia interfejsu komponentów jest zdefiniowanie kanałów urządzenia dla SignalRGB. Jako przykładu użyjemy Corsair Node Pro. Zacznij od stworzenia tablicy opisującej wygląd naszych kanałów, a następnie wyślij ją do backendu SignalRGB w funkcji initialize, aby zostały utworzone przed próbą renderowania czegokolwiek.
const DeviceMaxLedLimit = 204;//Channel Name, Led Limitvar 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]); }}W powyższym kodzie widać dwuwymiarową tablicę dla naszych kanałów, gdzie każdy element składa się z nazwy kanału, a następnie limitu LED. W SetupChannels() ustawiamy całkowity limit LED, a następnie iteracyjnie wywołujemy device.addChannel dla każdego elementu w naszej tablicy.
Tę pętlę można również wykonać bezpośrednio bez tablicy, jeśli chcesz zakodować ją na stałe.
function SetupChannels(){ device.SetLedLimit(204); device.addChannel("Channel 1",204); device.addChannel("Channel 2",204);}Wywołaj funkcję SetupChannels w ramach Initialize, aby zakończyć inicjalizację urządzenia.
export function Initialize(){ SetupChannels()}Zapisz zmiany w pliku, a twoje kanały pojawią się na stronie urządzenia. Następnie zajmiemy się pobieraniem wartości kolorów z wybranych komponentów.

Pobieranie pełnych danych kolorów kanału
Dział zatytułowany „Pobieranie pełnych danych kolorów kanału”Po skonfigurowaniu kanałów musimy pobierać z nich kolory — tutaj przydaje się przechowywanie nazw kanałów w tablicy.
Ogólna idea jest następująca:
Dla każdego kanału → Dla każdego komponentu na kanale → getColors()
Wszystko to jest zawarte w funkcji device.channel().getColors(). Corsair Node Pro wysyła dane kolorów po jednym kanale na raz, więc chcemy zachować dane “oddzielnie”, aby to ułatwić.
Zobaczysz tu jeszcze jeden dodatkowy element: sprawdzamy LedCount() kanału i jeśli zwraca 0, pulsujemy kanały dla użytkownika. To przydatna wskazówka, że musi jeszcze skonfigurować kanały.
Poniżej znajdziesz przykłady kodu dla normalnego scenariusza użycia, zakodowanego na stałe i bez sprawdzania pulsu kanału.
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 koniec po prostu wywołujemy tę funkcję w pętli renderowania. Dolna część funkcji SendChannel zawiera kod do konwersji tablic kolorów na pakiety i wysyłania ich do urządzenia. To jest specyficzne dla urządzenia i coś, co musisz sam odtworzyć metodą inżynierii wstecznej!
export function Render(){ SendChannel(0); device.pause(1);
SendChannel(1); device.pause(1);
SubmitLightingColors();}Interakcja z poszczególnymi komponentami
Dział zatytułowany „Interakcja z poszczególnymi komponentami”Niektóre urządzenia odbiegają od standardowego wzorca, lub może próbujesz czegoś nowego w swojej wtyczce i musisz pracować z poszczególnymi komponentami. W takich przypadkach nie możemy używać device.channel().getColors() i musimy zamiast tego sami iterować przez poszczególne komponenty.
W tym celu używamy device.channel().getComponentNames() do uzyskania wszystkich ID komponentów, a następnie iterujemy przez nie z device.channel().getComponentColors(), aby uzyskać indywidualne tablice kolorów.
Poniższy przykład po prostu łączy poszczególne tablice, ale możesz robić cokolwiek potrzebujesz pomiędzy nimi.
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) }Jeśli chcesz naprawdę zagłębić się w swoją wtyczkę, możesz używać device.channel.getComponent().