internal virtual void UpdateWrapperLights(EffectFrame frame) { Queue <EffectLayer> layers = new Queue <EffectLayer>(); EffectLayer colorfill_layer = new EffectLayer("Aurora Wrapper - Color Fill", GetBoostedColor(last_fill_color)); layers.Enqueue(colorfill_layer); EffectLayer bitmap_layer = new EffectLayer("Aurora Wrapper - Bitmap"); Devices.DeviceKeys[] allkeys = Enum.GetValues(typeof(Devices.DeviceKeys)).Cast <Devices.DeviceKeys>().ToArray(); foreach (var key in allkeys) { if (extra_keys.ContainsKey(key)) { bitmap_layer.Set(key, GetBoostedColor(extra_keys[key])); } else { DeviceKeysUtils.Logitech.keyboardBitmapKeys logi_key = DeviceKeysUtils.Logitech.ToLogitechBitmap(key); if (logi_key != DeviceKeysUtils.Logitech.keyboardBitmapKeys.UNKNOWN && bitmap.Length > 0) { bitmap_layer.Set(key, GetBoostedColor(Utils.ColorUtils.GetColorFromInt(bitmap[(int)logi_key / 4]))); } } } layers.Enqueue(bitmap_layer); EffectLayer effects_layer = new EffectLayer("Aurora Wrapper - Effects"); Devices.DeviceKeys[] effect_keys = key_effects.Keys.ToArray(); long currentTime = Utils.Time.GetMillisecondsSinceEpoch(); foreach (var key in effect_keys) { if (key_effects[key].duration != 0 && key_effects[key].timeStarted + key_effects[key].duration <= currentTime) { key_effects.Remove(key); } else { if (key_effects[key] is LogiFlashSingleKey) { effects_layer.Set((key_effects[key] as LogiFlashSingleKey).key, GetBoostedColor((key_effects[key] as LogiFlashSingleKey).GetColor(currentTime - (key_effects[key] as LogiFlashSingleKey).timeStarted))); } else if (key_effects[key] is LogiPulseSingleKey) { effects_layer.Set((key_effects[key] as LogiPulseSingleKey).key, GetBoostedColor((key_effects[key] as LogiPulseSingleKey).GetColor(currentTime - (key_effects[key] as LogiPulseSingleKey).timeStarted))); } else { effects_layer.Set((key_effects[key] as KeyEffect).key, GetBoostedColor((key_effects[key] as KeyEffect).GetColor(currentTime - (key_effects[key] as KeyEffect).timeStarted))); } } } layers.Enqueue(effects_layer); EffectLayer entire_effect_layer = new EffectLayer("Aurora Wrapper - EntireKB effect"); if (current_effect != null) { if (current_effect is LogiFlashLighting) { (current_effect as LogiFlashLighting).SetEffect(entire_effect_layer, currentTime - (current_effect as LogiFlashLighting).timeStarted); } else if (current_effect is LogiPulseLighting) { (current_effect as LogiPulseLighting).SetEffect(entire_effect_layer, currentTime - (current_effect as LogiPulseLighting).timeStarted); } else { current_effect.SetEffect(entire_effect_layer, currentTime - current_effect.timeStarted); } } layers.Enqueue(entire_effect_layer); frame.AddLayers(layers.ToArray()); }
public override EffectLayer Render(IGameState gamestate) { if (!(gamestate is GameState_Wrapper)) { return(new EffectLayer()); } Queue <EffectLayer> layers = new Queue <EffectLayer>(); EffectLayer colorfill_layer = new EffectLayer("Aurora Wrapper - Color Fill", GetBoostedColor(last_fill_color)); layers.Enqueue(colorfill_layer); EffectLayer bitmap_layer = new EffectLayer("Aurora Wrapper - Bitmap"); Devices.DeviceKeys[] allkeys = Enum.GetValues(typeof(Devices.DeviceKeys)).Cast <Devices.DeviceKeys>().ToArray(); foreach (var key in allkeys) { // This checks if a key is already being cloned over and thus should be prevented from being re-set by the // normal wrapper. Fixes issues with some clones not working. Thanks to @Gurjot95 for finding it :) if (Properties.CloningMap.Values.Any(sequence => sequence.keys.Contains(key))) { continue; } if (extra_keys.ContainsKey(key)) { bitmap_layer.Set(key, GetBoostedColor(extra_keys[key])); // Do the key cloning if (Properties.CloningMap.ContainsKey(key)) { bitmap_layer.Set(Properties.CloningMap[key], GetBoostedColor(extra_keys[key])); } } else { DeviceKeysUtils.Logitech.keyboardBitmapKeys logi_key = DeviceKeysUtils.Logitech.ToLogitechBitmap(key); if (logi_key != DeviceKeysUtils.Logitech.keyboardBitmapKeys.UNKNOWN && bitmap.Length > 0) { var color = GetBoostedColor(Utils.ColorUtils.GetColorFromInt(bitmap[(int)logi_key / 4])); bitmap_layer.Set(key, color); // Key cloning if (Properties.CloningMap.ContainsKey(key)) { bitmap_layer.Set(Properties.CloningMap[key], color); } } } } layers.Enqueue(bitmap_layer); EffectLayer effects_layer = new EffectLayer("Aurora Wrapper - Effects"); Devices.DeviceKeys[] effect_keys = key_effects.Keys.ToArray(); long currentTime = Utils.Time.GetMillisecondsSinceEpoch(); foreach (var key in effect_keys) { if (key_effects[key].duration != 0 && key_effects[key].timeStarted + key_effects[key].duration <= currentTime) { key_effects.Remove(key); } else { if (key_effects[key] is LogiFlashSingleKey) { effects_layer.Set((key_effects[key] as LogiFlashSingleKey).key, GetBoostedColor((key_effects[key] as LogiFlashSingleKey).GetColor(currentTime - (key_effects[key] as LogiFlashSingleKey).timeStarted))); } else if (key_effects[key] is LogiPulseSingleKey) { effects_layer.Set((key_effects[key] as LogiPulseSingleKey).key, GetBoostedColor((key_effects[key] as LogiPulseSingleKey).GetColor(currentTime - (key_effects[key] as LogiPulseSingleKey).timeStarted))); } else { effects_layer.Set((key_effects[key] as KeyEffect).key, GetBoostedColor((key_effects[key] as KeyEffect).GetColor(currentTime - (key_effects[key] as KeyEffect).timeStarted))); } } } layers.Enqueue(effects_layer); EffectLayer entire_effect_layer = new EffectLayer("Aurora Wrapper - EntireKB effect"); if (current_effect != null) { if (current_effect is LogiFlashLighting) { (current_effect as LogiFlashLighting).SetEffect(entire_effect_layer, currentTime - (current_effect as LogiFlashLighting).timeStarted); } else if (current_effect is LogiPulseLighting) { (current_effect as LogiPulseLighting).SetEffect(entire_effect_layer, currentTime - (current_effect as LogiPulseLighting).timeStarted); } else { current_effect.SetEffect(entire_effect_layer, currentTime - current_effect.timeStarted); } } layers.Enqueue(entire_effect_layer); EffectLayer[] layersArray = layers.ToArray(); EffectLayer finalLayer = layersArray[0]; for (int i = 1; i < layersArray.Length; i++) { finalLayer += layersArray[i]; } return(finalLayer); }