예제 #1
0
        public override void Initialize()
        {
            changelogUrl = ClientConfiguration.Instance.ChangelogURL;

            Name              = "UpdateQueryWindow";
            ClientRectangle   = new Rectangle(0, 0, 251, 140);
            BackgroundTexture = AssetLoader.LoadTexture("updatequerybg.png");

            lblDescription = new XNALabel(WindowManager);
            lblDescription.ClientRectangle = new Rectangle(12, 9, 0, 0);
            lblDescription.Text            = String.Empty;
            lblDescription.Name            = nameof(lblDescription);

            var lblChangelogLink = new XNALinkLabel(WindowManager);

            lblChangelogLink.ClientRectangle = new Rectangle(12, 50, 0, 0);
            lblChangelogLink.Text            = "View Changelog";
            lblChangelogLink.IdleColor       = Color.Goldenrod;
            lblChangelogLink.Name            = nameof(lblChangelogLink);
            lblChangelogLink.LeftClick      += LblChangelogLink_LeftClick;

            lblUpdateSize = new XNALabel(WindowManager);
            lblUpdateSize.ClientRectangle = new Rectangle(12, 80, 0, 0);
            lblUpdateSize.Text            = String.Empty;
            lblUpdateSize.Name            = nameof(lblUpdateSize);

            var btnYes = new XNAClientButton(WindowManager);

            btnYes.ClientRectangle = new Rectangle(12, 110, 75, 23);
            btnYes.Text            = "Yes";
            btnYes.LeftClick      += BtnYes_LeftClick;
            btnYes.Name            = nameof(btnYes);

            var btnNo = new XNAClientButton(WindowManager);

            btnNo.ClientRectangle = new Rectangle(164, 110, 75, 23);
            btnNo.Text            = "No";
            btnNo.LeftClick      += BtnNo_LeftClick;
            btnNo.Name            = nameof(btnNo);

            AddChild(lblDescription);
            AddChild(lblChangelogLink);
            AddChild(lblUpdateSize);
            AddChild(btnYes);
            AddChild(btnNo);

            base.Initialize();

            CenterOnParent();
        }
예제 #2
0
        /// <summary>
        /// Initializes the main menu's controls.
        /// </summary>
        public override void Initialize()
        {
            GameProcessLogic.GameProcessExited += SharedUILogic_GameProcessExited;

            Name = nameof(MainMenu);
            BackgroundTexture = AssetLoader.LoadTexture("MainMenu/mainmenubg.png");
            ClientRectangle   = new Rectangle(0, 0, BackgroundTexture.Width, BackgroundTexture.Height);

            WindowManager.CenterControlOnScreen(this);

            btnNewCampaign                  = new XNAClientButton(WindowManager);
            btnNewCampaign.Name             = nameof(btnNewCampaign);
            btnNewCampaign.IdleTexture      = AssetLoader.LoadTexture("MainMenu/campaign.png");
            btnNewCampaign.HoverTexture     = AssetLoader.LoadTexture("MainMenu/campaign_c.png");
            btnNewCampaign.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnNewCampaign.LeftClick       += BtnNewCampaign_LeftClick;

            btnLoadGame                  = new XNAClientButton(WindowManager);
            btnLoadGame.Name             = nameof(btnLoadGame);
            btnLoadGame.IdleTexture      = AssetLoader.LoadTexture("MainMenu/loadmission.png");
            btnLoadGame.HoverTexture     = AssetLoader.LoadTexture("MainMenu/loadmission_c.png");
            btnLoadGame.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnLoadGame.LeftClick       += BtnLoadGame_LeftClick;

            btnSkirmish                  = new XNAClientButton(WindowManager);
            btnSkirmish.Name             = nameof(btnSkirmish);
            btnSkirmish.IdleTexture      = AssetLoader.LoadTexture("MainMenu/skirmish.png");
            btnSkirmish.HoverTexture     = AssetLoader.LoadTexture("MainMenu/skirmish_c.png");
            btnSkirmish.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnSkirmish.LeftClick       += BtnSkirmish_LeftClick;

            btnCnCNet                  = new XNAClientButton(WindowManager);
            btnCnCNet.Name             = nameof(btnCnCNet);
            btnCnCNet.IdleTexture      = AssetLoader.LoadTexture("MainMenu/cncnet.png");
            btnCnCNet.HoverTexture     = AssetLoader.LoadTexture("MainMenu/cncnet_c.png");
            btnCnCNet.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnCnCNet.LeftClick       += BtnCnCNet_LeftClick;

            btnLan                  = new XNAClientButton(WindowManager);
            btnLan.Name             = nameof(btnLan);
            btnLan.IdleTexture      = AssetLoader.LoadTexture("MainMenu/lan.png");
            btnLan.HoverTexture     = AssetLoader.LoadTexture("MainMenu/lan_c.png");
            btnLan.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnLan.LeftClick       += BtnLan_LeftClick;

            btnOptions                  = new XNAClientButton(WindowManager);
            btnOptions.Name             = nameof(btnOptions);
            btnOptions.IdleTexture      = AssetLoader.LoadTexture("MainMenu/options.png");
            btnOptions.HoverTexture     = AssetLoader.LoadTexture("MainMenu/options_c.png");
            btnOptions.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnOptions.LeftClick       += BtnOptions_LeftClick;

            btnMapEditor                  = new XNAClientButton(WindowManager);
            btnMapEditor.Name             = nameof(btnMapEditor);
            btnMapEditor.IdleTexture      = AssetLoader.LoadTexture("MainMenu/mapeditor.png");
            btnMapEditor.HoverTexture     = AssetLoader.LoadTexture("MainMenu/mapeditor_c.png");
            btnMapEditor.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnMapEditor.LeftClick       += BtnMapEditor_LeftClick;

            btnStatistics                  = new XNAClientButton(WindowManager);
            btnStatistics.Name             = nameof(btnStatistics);
            btnStatistics.IdleTexture      = AssetLoader.LoadTexture("MainMenu/statistics.png");
            btnStatistics.HoverTexture     = AssetLoader.LoadTexture("MainMenu/statistics_c.png");
            btnStatistics.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnStatistics.LeftClick       += BtnStatistics_LeftClick;

            btnCredits                  = new XNAClientButton(WindowManager);
            btnCredits.Name             = nameof(btnCredits);
            btnCredits.IdleTexture      = AssetLoader.LoadTexture("MainMenu/credits.png");
            btnCredits.HoverTexture     = AssetLoader.LoadTexture("MainMenu/credits_c.png");
            btnCredits.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnCredits.LeftClick       += BtnCredits_LeftClick;

            btnExtras                  = new XNAClientButton(WindowManager);
            btnExtras.Name             = nameof(btnExtras);
            btnExtras.IdleTexture      = AssetLoader.LoadTexture("MainMenu/extras.png");
            btnExtras.HoverTexture     = AssetLoader.LoadTexture("MainMenu/extras_c.png");
            btnExtras.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnExtras.LeftClick       += BtnExtras_LeftClick;

            var btnExit = new XNAClientButton(WindowManager);

            btnExit.Name             = nameof(btnExit);
            btnExit.IdleTexture      = AssetLoader.LoadTexture("MainMenu/exitgame.png");
            btnExit.HoverTexture     = AssetLoader.LoadTexture("MainMenu/exitgame_c.png");
            btnExit.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
            btnExit.LeftClick       += BtnExit_LeftClick;

            XNALabel lblCnCNetStatus = new XNALabel(WindowManager);

            lblCnCNetStatus.Name            = nameof(lblCnCNetStatus);
            lblCnCNetStatus.Text            = "DTA players on CnCNet:";
            lblCnCNetStatus.ClientRectangle = new Rectangle(12, 9, 0, 0);

            lblCnCNetPlayerCount      = new XNALabel(WindowManager);
            lblCnCNetPlayerCount.Name = nameof(lblCnCNetPlayerCount);
            lblCnCNetPlayerCount.Text = "-";

            lblVersion            = new XNALinkLabel(WindowManager);
            lblVersion.Name       = nameof(lblVersion);
            lblVersion.LeftClick += LblVersion_LeftClick;

            lblUpdateStatus                 = new XNALinkLabel(WindowManager);
            lblUpdateStatus.Name            = nameof(lblUpdateStatus);
            lblUpdateStatus.LeftClick      += LblUpdateStatus_LeftClick;
            lblUpdateStatus.ClientRectangle = new Rectangle(0, 0, 160, 20);

            AddChild(btnNewCampaign);
            AddChild(btnLoadGame);
            AddChild(btnSkirmish);
            AddChild(btnCnCNet);
            AddChild(btnLan);
            AddChild(btnOptions);
            AddChild(btnMapEditor);
            AddChild(btnStatistics);
            AddChild(btnCredits);
            AddChild(btnExtras);
            AddChild(btnExit);
            AddChild(lblCnCNetStatus);
            AddChild(lblCnCNetPlayerCount);

            if (!ClientConfiguration.Instance.ModMode)
            {
                // ModMode disables version tracking and the updater if it's enabled

                AddChild(lblVersion);
                AddChild(lblUpdateStatus);

                CUpdater.FileIdentifiersUpdated     += CUpdater_FileIdentifiersUpdated;
                CUpdater.OnCustomComponentsOutdated += CUpdater_OnCustomComponentsOutdated;
            }

            base.Initialize(); // Read control attributes from INI

            innerPanel = new MainMenuDarkeningPanel(WindowManager, discordHandler);
            innerPanel.ClientRectangle = new Rectangle(0, 0,
                                                       Width,
                                                       Height);
            innerPanel.DrawOrder   = int.MaxValue;
            innerPanel.UpdateOrder = int.MaxValue;
            AddChild(innerPanel);
            innerPanel.Hide();

            lblVersion.Text = CUpdater.GameVersion;

            innerPanel.UpdateQueryWindow.UpdateDeclined += UpdateQueryWindow_UpdateDeclined;
            innerPanel.UpdateQueryWindow.UpdateAccepted += UpdateQueryWindow_UpdateAccepted;

            innerPanel.UpdateWindow.UpdateCompleted += UpdateWindow_UpdateCompleted;
            innerPanel.UpdateWindow.UpdateCancelled += UpdateWindow_UpdateCancelled;
            innerPanel.UpdateWindow.UpdateFailed    += UpdateWindow_UpdateFailed;

            this.ClientRectangle = new Rectangle((WindowManager.RenderResolutionX - Width) / 2,
                                                 (WindowManager.RenderResolutionY - Height) / 2,
                                                 Width, Height);
            innerPanel.ClientRectangle = new Rectangle(0, 0,
                                                       Math.Max(WindowManager.RenderResolutionX, Width),
                                                       Math.Max(WindowManager.RenderResolutionY, Height));

            CnCNetPlayerCountTask.CnCNetGameCountUpdated += CnCNetInfoController_CnCNetGameCountUpdated;
            cncnetPlayerCountCancellationSource           = new CancellationTokenSource();
            CnCNetPlayerCountTask.InitializeService(cncnetPlayerCountCancellationSource);

            WindowManager.GameClosing += WindowManager_GameClosing;

            skirmishLobby.Exited         += SkirmishLobby_Exited;
            lanLobby.Exited              += LanLobby_Exited;
            optionsWindow.EnabledChanged += OptionsWindow_EnabledChanged;

            optionsWindow.OnForceUpdate += (s, e) => ForceUpdate();

            GameProcessLogic.GameProcessStarted  += SharedUILogic_GameProcessStarted;
            GameProcessLogic.GameProcessStarting += SharedUILogic_GameProcessStarting;

            UserINISettings.Instance.SettingsSaved += SettingsSaved;

            CUpdater.Restart += CUpdater_Restart;

            SetButtonHotkeys(true);
        }
예제 #3
0
        public override void Initialize()
        {
            GameProcessLogic.GameProcessExited += SharedUILogic_GameProcessExited;

            Name = "MainMenu";
            BackgroundTexture = AssetLoader.LoadTexture("MainMenu\\mainmenubg.png");
            ClientRectangle   = new Rectangle(0, 0, BackgroundTexture.Width, BackgroundTexture.Height);

            WindowManager.CenterControlOnScreen(this);

            var btnNewCampaign = new XNAClientButton(WindowManager);

            btnNewCampaign.Name             = "btnNewCampaign";
            btnNewCampaign.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\campaign.png");
            btnNewCampaign.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\campaign_c.png");
            btnNewCampaign.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnNewCampaign.LeftClick       += BtnNewCampaign_LeftClick;
            btnNewCampaign.HotKey           = Keys.C;

            var btnLoadGame = new XNAClientButton(WindowManager);

            btnLoadGame.Name             = "btnLoadGame";
            btnLoadGame.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\loadmission.png");
            btnLoadGame.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\loadmission_c.png");
            btnLoadGame.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnLoadGame.LeftClick       += BtnLoadGame_LeftClick;
            btnLoadGame.HotKey           = Keys.L;

            var btnSkirmish = new XNAClientButton(WindowManager);

            btnSkirmish.Name             = "btnSkirmish";
            btnSkirmish.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\skirmish.png");
            btnSkirmish.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\skirmish_c.png");
            btnSkirmish.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnSkirmish.LeftClick       += BtnSkirmish_LeftClick;
            btnSkirmish.HotKey           = Keys.S;

            var btnCnCNet = new XNAClientButton(WindowManager);

            btnCnCNet.Name             = "btnCnCNet";
            btnCnCNet.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\cncnet.png");
            btnCnCNet.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\cncnet_c.png");
            btnCnCNet.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnCnCNet.LeftClick       += BtnCnCNet_LeftClick;
            btnCnCNet.HotKey           = Keys.M;

            var btnLan = new XNAClientButton(WindowManager);

            btnLan.Name             = "btnLan";
            btnLan.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\lan.png");
            btnLan.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\lan_c.png");
            btnLan.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnLan.LeftClick       += BtnLan_LeftClick;
            btnLan.HotKey           = Keys.N;

            var btnOptions = new XNAClientButton(WindowManager);

            btnOptions.Name             = "btnOptions";
            btnOptions.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\options.png");
            btnOptions.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\options_c.png");
            btnOptions.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnOptions.LeftClick       += BtnOptions_LeftClick;
            btnOptions.HotKey           = Keys.O;

            var btnMapEditor = new XNAClientButton(WindowManager);

            btnMapEditor.Name             = "btnMapEditor";
            btnMapEditor.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\mapeditor.png");
            btnMapEditor.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\mapeditor_c.png");
            btnMapEditor.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnMapEditor.LeftClick       += BtnMapEditor_LeftClick;
            btnMapEditor.HotKey           = Keys.E;

            var btnStatistics = new XNAClientButton(WindowManager);

            btnStatistics.Name             = "btnStatistics";
            btnStatistics.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\statistics.png");
            btnStatistics.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\statistics_c.png");
            btnStatistics.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnStatistics.LeftClick       += BtnStatistics_LeftClick;
            btnStatistics.HotKey           = Keys.T;

            var btnCredits = new XNAClientButton(WindowManager);

            btnCredits.Name             = "btnCredits";
            btnCredits.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\credits.png");
            btnCredits.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\credits_c.png");
            btnCredits.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnCredits.LeftClick       += BtnCredits_LeftClick;
            btnCredits.HotKey           = Keys.R;

            var btnExtras = new XNAClientButton(WindowManager);

            btnExtras.Name             = "btnExtras";
            btnExtras.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\extras.png");
            btnExtras.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\extras_c.png");
            btnExtras.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnExtras.LeftClick       += BtnExtras_LeftClick;
            btnExtras.HotKey           = Keys.E;

            var btnExit = new XNAClientButton(WindowManager);

            btnExit.Name             = "btnExit";
            btnExit.IdleTexture      = AssetLoader.LoadTexture("MainMenu\\exitgame.png");
            btnExit.HoverTexture     = AssetLoader.LoadTexture("MainMenu\\exitgame_c.png");
            btnExit.HoverSoundEffect = AssetLoader.LoadSound("MainMenu\\button.wav");
            btnExit.LeftClick       += BtnExit_LeftClick;

            XNALabel lblCnCNetStatus = new XNALabel(WindowManager);

            lblCnCNetStatus.Name            = "lblCnCNetStatus";
            lblCnCNetStatus.Text            = "DTA players on CnCNet:";
            lblCnCNetStatus.ClientRectangle = new Rectangle(12, 9, 0, 0);

            lblCnCNetPlayerCount      = new XNALabel(WindowManager);
            lblCnCNetPlayerCount.Name = "lblCnCNetPlayerCount";
            lblCnCNetPlayerCount.Text = "-";

            lblVersion      = new XNALabel(WindowManager);
            lblVersion.Name = "lblVersion";
            lblVersion.Text = CUpdater.GameVersion;

            lblUpdateStatus                 = new XNALinkLabel(WindowManager);
            lblUpdateStatus.Name            = "lblUpdateStatus";
            lblUpdateStatus.LeftClick      += LblUpdateStatus_LeftClick;
            lblUpdateStatus.ClientRectangle = new Rectangle(0, 0, 160, 20);

            AddChild(btnNewCampaign);
            AddChild(btnLoadGame);
            AddChild(btnSkirmish);
            AddChild(btnCnCNet);
            AddChild(btnLan);
            AddChild(btnOptions);
            AddChild(btnMapEditor);
            AddChild(btnStatistics);
            AddChild(btnCredits);
            AddChild(btnExtras);
            AddChild(btnExit);
            AddChild(lblCnCNetStatus);
            AddChild(lblCnCNetPlayerCount);

            if (!ClientConfiguration.Instance.ModMode)
            {
                AddChild(lblVersion);
                AddChild(lblUpdateStatus);

                CUpdater.FileIdentifiersUpdated += CUpdater_FileIdentifiersUpdated;
            }

            innerPanel = new MainMenuDarkeningPanel(WindowManager);
            innerPanel.ClientRectangle = new Rectangle(0, 0,
                                                       ClientRectangle.Width,
                                                       ClientRectangle.Height);
            AddChild(innerPanel);
            innerPanel.Hide();

            base.Initialize(); // Read control attributes from INI

            innerPanel.UpdateQueryWindow.UpdateDeclined += UpdateQueryWindow_UpdateDeclined;
            innerPanel.UpdateQueryWindow.UpdateAccepted += UpdateQueryWindow_UpdateAccepted;

            innerPanel.UpdateWindow.UpdateCompleted += UpdateWindow_UpdateCompleted;
            innerPanel.UpdateWindow.UpdateCancelled += UpdateWindow_UpdateCancelled;
            innerPanel.UpdateWindow.UpdateFailed    += UpdateWindow_UpdateFailed;

            this.ClientRectangle = new Rectangle((WindowManager.RenderResolutionX - ClientRectangle.Width) / 2,
                                                 (WindowManager.RenderResolutionY - ClientRectangle.Height) / 2,
                                                 ClientRectangle.Width, ClientRectangle.Height);
            innerPanel.ClientRectangle = new Rectangle(0, 0, WindowManager.RenderResolutionX, WindowManager.RenderResolutionY);

            CnCNetPlayerCountTask.CnCNetGameCountUpdated += CnCNetInfoController_CnCNetGameCountUpdated;
            cncnetPlayerCountCancellationSource           = new CancellationTokenSource();
            CnCNetPlayerCountTask.InitializeService(cncnetPlayerCountCancellationSource);

            WindowManager.GameClosing += WindowManager_GameClosing;

            skirmishLobby.Exited += SkirmishLobby_Exited;
            lanLobby.Exited      += LanLobby_Exited;

            GameProcessLogic.GameProcessStarted  += SharedUILogic_GameProcessStarted;
            GameProcessLogic.GameProcessStarting += SharedUILogic_GameProcessStarting;

            UserINISettings.Instance.SettingsSaved += SettingsSaved;

            CUpdater.Restart += CUpdater_Restart;
        }
        public override void Initialize()
        {
            Name  = nameof(PrivacyNotification);
            Width = WindowManager.RenderResolutionX;

            var lblDescription = new XNALabel(WindowManager);

            lblDescription.Name = nameof(lblDescription);
            lblDescription.X    = UIDesignConstants.EMPTY_SPACE_SIDES;
            lblDescription.Y    = UIDesignConstants.EMPTY_SPACE_TOP;
            lblDescription.Text = Renderer.FixText("By using the client you agree to the CnCNet Terms & Conditions as well as the CnCNet Privacy Policy. Privacy-related options can be configured in the client options.",
                                                   lblDescription.FontIndex, WindowManager.RenderResolutionX - (UIDesignConstants.EMPTY_SPACE_SIDES * 2)).Text;
            AddChild(lblDescription);

            var lblMoreInformation = new XNALabel(WindowManager);

            lblMoreInformation.Name = nameof(lblMoreInformation);
            lblMoreInformation.X    = lblDescription.X;
            lblMoreInformation.Y    = lblDescription.Bottom + UIDesignConstants.CONTROL_VERTICAL_MARGIN;
            lblMoreInformation.Text = "More information: ";
            AddChild(lblMoreInformation);

            var lblTermsAndConditions = new XNALinkLabel(WindowManager);

            lblTermsAndConditions.Name       = nameof(lblTermsAndConditions);
            lblTermsAndConditions.X          = lblMoreInformation.Right + UIDesignConstants.CONTROL_HORIZONTAL_MARGIN;
            lblTermsAndConditions.Y          = lblMoreInformation.Y;
            lblTermsAndConditions.Text       = "https://cncnet.org/terms-and-conditions";
            lblTermsAndConditions.LeftClick += (s, e) => Process.Start(lblTermsAndConditions.Text);
            AddChild(lblTermsAndConditions);

            var lblPrivacyPolicy = new XNALinkLabel(WindowManager);

            lblPrivacyPolicy.Name       = nameof(lblPrivacyPolicy);
            lblPrivacyPolicy.X          = lblTermsAndConditions.Right + UIDesignConstants.CONTROL_HORIZONTAL_MARGIN;
            lblPrivacyPolicy.Y          = lblMoreInformation.Y;
            lblPrivacyPolicy.Text       = "https://cncnet.org/privacy-policy";
            lblPrivacyPolicy.LeftClick += (s, e) => Process.Start(lblPrivacyPolicy.Text);
            AddChild(lblPrivacyPolicy);

            var lblExplanation = new XNALabel(WindowManager);

            lblExplanation.Name      = nameof(lblExplanation);
            lblExplanation.X         = UIDesignConstants.EMPTY_SPACE_SIDES;
            lblExplanation.Y         = lblMoreInformation.Bottom + UIDesignConstants.CONTROL_VERTICAL_MARGIN * 2;
            lblExplanation.Text      = "No worries, we're not actually using your data for anything evil, but we have to display this message due to regulations.";
            lblExplanation.TextColor = UISettings.ActiveSettings.SubtleTextColor;
            AddChild(lblExplanation);

            var btnOK = new XNAClientButton(WindowManager);

            btnOK.Name  = nameof(btnOK);
            btnOK.Width = 75;
            btnOK.Y     = lblExplanation.Y;
            btnOK.X     = WindowManager.RenderResolutionX - btnOK.Width - UIDesignConstants.CONTROL_HORIZONTAL_MARGIN;
            btnOK.Text  = "Got it";
            AddChild(btnOK);
            btnOK.LeftClick += (s, e) =>
            {
                UserINISettings.Instance.PrivacyPolicyAccepted.Value = true;
                UserINISettings.Instance.SaveSettings();
                // AlphaRate = -0.2f;
                Disable();
            };

            Height = btnOK.Bottom + UIDesignConstants.EMPTY_SPACE_BOTTOM;
            Y      = WindowManager.RenderResolutionY - Height;

            base.Initialize();
        }