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());
        }
Beispiel #2
0
        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);
        }