public void FadeInIfHigher(MainModel mainModel)
        {
            if (mainModel.BoostAmount <= mainModel.PreviousBoost)
                return;
            const int amountOfSteps = 6;

            var difference = mainModel.BoostAmount - mainModel.PreviousBoost;
            var differenceStep = difference / amountOfSteps;
            var differenceStepRest = difference % amountOfSteps;
            mainModel.BoostAmount = mainModel.PreviousBoost;

            for (var i = 0; i < amountOfSteps; i++)
            {
                if (differenceStepRest > 0)
                {
                    differenceStepRest -= 1;
                    mainModel.BoostAmount += 1;
                }
                mainModel.BoostAmount += differenceStep;

                var bitmap = CreateBoostBitmap(mainModel);
                LogitechGSDK.LogiLedSetLightingFromBitmap(OrionController.BitmapToByteArray(bitmap));
                Thread.Sleep(50);
            }
        }
        public MainController(MainView mainView)
        {
            // Models
            MainModel = new MainModel(mainView)
            {
                // Load color settings
                MainColor = Settings.Default.MainColor,
                SecondaryColor = Settings.Default.SecondaryColor
            };

            // Views
            MainView = mainView;

            // Controllers
            RocketLeagueController = new RocketLeagueController(this);

            // Background workers
            _processWorker = new BackgroundWorker();
            _processWorker.DoWork += processWorker_DoWork;
            _processWorker.WorkerSupportsCancellation = true;

            // Grand view access to MainController
            MainView.MainController = this;

            // Start looking for RocketLeague.exe
            _processWorker.RunWorkerAsync();
        }
        public Bitmap CreateBoostBitmap(MainModel mainModel)
        {
            // Orion bitmaps are 21 wide, 6 high.
            var flag = new Bitmap(21, 6);

            using (var g = Graphics.FromImage(flag))
            {
                g.Clear(Color.Transparent);
                var width = (int) (flag.Width/100.00*mainModel.BoostAmount);
                if (width <= 0)
                    return flag;

                var mainBrush = new LinearGradientBrush(new Rectangle(0, 0, width, flag.Height), mainModel.MainColor,
                    mainModel.SecondaryColor,
                    LinearGradientMode.Horizontal);
                g.FillRectangle(mainBrush, 0, 0, width, flag.Height);

                var endBrush = new LinearGradientBrush(new Rectangle(width - 2, 0, 4, flag.Height),
                    mainModel.SecondaryColor,
                    Color.Transparent, LinearGradientMode.Horizontal);
                g.FillRectangle(endBrush, width - 2, 0, 4, flag.Height);
            }
            return flag;
        }