public override void Initialize() { sm = StatisticsManager.Instance; string strLblEconomy = "ECONOMY"; string strLblAvgEconomy = "Average economy:"; if (ClientConfiguration.Instance.UseBuiltStatistic) { strLblEconomy = "BUILT"; strLblAvgEconomy = "Avg. number of objects built:"; } Name = "StatisticsWindow"; BackgroundTexture = AssetLoader.LoadTexture("scoreviewerbg.png"); ClientRectangle = new Rectangle(0, 0, 700, 521); tabControl = new XNAClientTabControl(WindowManager); tabControl.Name = "tabControl"; tabControl.ClientRectangle = new Rectangle(12, 10, 0, 0); tabControl.ClickSound = new EnhancedSoundEffect("button.wav"); tabControl.FontIndex = 1; tabControl.AddTab("Game Statistics", UIDesignConstants.BUTTON_WIDTH_133); tabControl.AddTab("Total Statistics", UIDesignConstants.BUTTON_WIDTH_133); tabControl.SelectedIndexChanged += TabControl_SelectedIndexChanged; XNALabel lblFilter = new XNALabel(WindowManager); lblFilter.Name = "lblFilter"; lblFilter.FontIndex = 1; lblFilter.Text = "FILTER:"; lblFilter.ClientRectangle = new Rectangle(527, 12, 0, 0); cmbGameClassFilter = new XNAClientDropDown(WindowManager); cmbGameClassFilter.ClientRectangle = new Rectangle(585, 11, 105, 21); cmbGameClassFilter.Name = "cmbGameClassFilter"; cmbGameClassFilter.AddItem("All games"); cmbGameClassFilter.AddItem("Online games"); cmbGameClassFilter.AddItem("Online PvP"); cmbGameClassFilter.AddItem("Online Co-Op"); cmbGameClassFilter.AddItem("Skirmish"); cmbGameClassFilter.SelectedIndex = 0; cmbGameClassFilter.SelectedIndexChanged += CmbGameClassFilter_SelectedIndexChanged; XNALabel lblGameMode = new XNALabel(WindowManager); lblGameMode.Name = nameof(lblGameMode); lblGameMode.FontIndex = 1; lblGameMode.Text = "GAME MODE:"; lblGameMode.ClientRectangle = new Rectangle(294, 12, 0, 0); cmbGameModeFilter = new XNAClientDropDown(WindowManager); cmbGameModeFilter.Name = nameof(cmbGameModeFilter); cmbGameModeFilter.ClientRectangle = new Rectangle(381, 11, 114, 21); cmbGameModeFilter.SelectedIndexChanged += CmbGameModeFilter_SelectedIndexChanged; var btnReturnToMenu = new XNAClientButton(WindowManager); btnReturnToMenu.Name = nameof(btnReturnToMenu); btnReturnToMenu.ClientRectangle = new Rectangle(270, 486, UIDesignConstants.BUTTON_WIDTH_160, UIDesignConstants.BUTTON_HEIGHT); btnReturnToMenu.Text = "Return to Main Menu"; btnReturnToMenu.LeftClick += BtnReturnToMenu_LeftClick; var btnClearStatistics = new XNAClientButton(WindowManager); btnClearStatistics.Name = nameof(btnClearStatistics); btnClearStatistics.ClientRectangle = new Rectangle(12, 486, UIDesignConstants.BUTTON_WIDTH_160, UIDesignConstants.BUTTON_HEIGHT); btnClearStatistics.Text = "Clear Statistics"; btnClearStatistics.LeftClick += BtnClearStatistics_LeftClick; btnClearStatistics.Visible = false; chkIncludeSpectatedGames = new XNAClientCheckBox(WindowManager); AddChild(chkIncludeSpectatedGames); chkIncludeSpectatedGames.Name = nameof(chkIncludeSpectatedGames); chkIncludeSpectatedGames.Text = "Include spectated games"; chkIncludeSpectatedGames.Checked = true; chkIncludeSpectatedGames.ClientRectangle = new Rectangle( Width - chkIncludeSpectatedGames.Width - 12, cmbGameModeFilter.Bottom + 3, chkIncludeSpectatedGames.Width, chkIncludeSpectatedGames.Height); chkIncludeSpectatedGames.CheckedChanged += ChkIncludeSpectatedGames_CheckedChanged; #region Match statistics panelGameStatistics = new XNAPanel(WindowManager); panelGameStatistics.Name = "panelGameStatistics"; panelGameStatistics.BackgroundTexture = AssetLoader.LoadTexture("scoreviewerpanelbg.png"); panelGameStatistics.ClientRectangle = new Rectangle(10, 55, 680, 425); AddChild(panelGameStatistics); XNALabel lblGames = new XNALabel(WindowManager); lblGames.Name = nameof(lblGames); lblGames.Text = "GAMES:"; lblGames.FontIndex = 1; lblGames.ClientRectangle = new Rectangle(4, 2, 0, 0); lbGameList = new XNAMultiColumnListBox(WindowManager); lbGameList.Name = nameof(lbGameList); lbGameList.ClientRectangle = new Rectangle(2, 25, 676, 250); lbGameList.BackgroundTexture = AssetLoader.CreateTexture(new Color(0, 0, 0, 128), 1, 1); lbGameList.PanelBackgroundDrawMode = PanelBackgroundImageDrawMode.STRETCHED; lbGameList.AddColumn("DATE / TIME", 130); lbGameList.AddColumn("MAP", 200); lbGameList.AddColumn("GAME MODE", 130); lbGameList.AddColumn("FPS", 50); lbGameList.AddColumn("DURATION", 76); lbGameList.AddColumn("COMPLETED", 90); lbGameList.SelectedIndexChanged += LbGameList_SelectedIndexChanged; lbGameList.AllowKeyboardInput = true; lbGameStatistics = new XNAMultiColumnListBox(WindowManager); lbGameStatistics.Name = nameof(lbGameStatistics); lbGameStatistics.ClientRectangle = new Rectangle(2, 280, 676, 143); lbGameStatistics.BackgroundTexture = AssetLoader.CreateTexture(new Color(0, 0, 0, 128), 1, 1); lbGameStatistics.PanelBackgroundDrawMode = PanelBackgroundImageDrawMode.STRETCHED; lbGameStatistics.AddColumn("NAME", 130); lbGameStatistics.AddColumn("KILLS", 78); lbGameStatistics.AddColumn("LOSSES", 78); lbGameStatistics.AddColumn(strLblEconomy, 80); lbGameStatistics.AddColumn("SCORE", 100); lbGameStatistics.AddColumn("WON", 50); lbGameStatistics.AddColumn("SIDE", 100); lbGameStatistics.AddColumn("TEAM", 60); panelGameStatistics.AddChild(lblGames); panelGameStatistics.AddChild(lbGameList); panelGameStatistics.AddChild(lbGameStatistics); #endregion #region Total statistics panelTotalStatistics = new XNAPanel(WindowManager); panelTotalStatistics.Name = "panelTotalStatistics"; panelTotalStatistics.BackgroundTexture = AssetLoader.LoadTexture("scoreviewerpanelbg.png"); panelTotalStatistics.ClientRectangle = new Rectangle(10, 55, 680, 425); AddChild(panelTotalStatistics); panelTotalStatistics.Visible = false; panelTotalStatistics.Enabled = false; int locationY = TOTAL_STATS_FIRST_ITEM_Y; AddTotalStatisticsLabel("lblGamesStarted", "Games started:", new Point(TOTAL_STATS_LOCATION_X1, locationY)); lblGamesStartedValue = new XNALabel(WindowManager); lblGamesStartedValue.Name = "lblGamesStartedValue"; lblGamesStartedValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X1, locationY, 0, 0); lblGamesStartedValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblGamesFinished", "Games finished:", new Point(TOTAL_STATS_LOCATION_X1, locationY)); lblGamesFinishedValue = new XNALabel(WindowManager); lblGamesFinishedValue.Name = "lblGamesFinishedValue"; lblGamesFinishedValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X1, locationY, 0, 0); lblGamesFinishedValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblWins", "Wins:", new Point(TOTAL_STATS_LOCATION_X1, locationY)); lblWinsValue = new XNALabel(WindowManager); lblWinsValue.Name = "lblWinsValue"; lblWinsValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X1, locationY, 0, 0); lblWinsValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblLosses", "Losses:", new Point(TOTAL_STATS_LOCATION_X1, locationY)); lblLossesValue = new XNALabel(WindowManager); lblLossesValue.Name = "lblLossesValue"; lblLossesValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X1, locationY, 0, 0); lblLossesValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblWinLossRatio", "Win / Loss ratio:", new Point(TOTAL_STATS_LOCATION_X1, locationY)); lblWinLossRatioValue = new XNALabel(WindowManager); lblWinLossRatioValue.Name = "lblWinLossRatioValue"; lblWinLossRatioValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X1, locationY, 0, 0); lblWinLossRatioValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblAverageGameLength", "Average game length:", new Point(TOTAL_STATS_LOCATION_X1, locationY)); lblAverageGameLengthValue = new XNALabel(WindowManager); lblAverageGameLengthValue.Name = "lblAverageGameLengthValue"; lblAverageGameLengthValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X1, locationY, 0, 0); lblAverageGameLengthValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblTotalTimePlayed", "Total time played:", new Point(TOTAL_STATS_LOCATION_X1, locationY)); lblTotalTimePlayedValue = new XNALabel(WindowManager); lblTotalTimePlayedValue.Name = "lblTotalTimePlayedValue"; lblTotalTimePlayedValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X1, locationY, 0, 0); lblTotalTimePlayedValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblAverageEnemyCount", "Average number of enemies:", new Point(TOTAL_STATS_LOCATION_X1, locationY)); lblAverageEnemyCountValue = new XNALabel(WindowManager); lblAverageEnemyCountValue.Name = "lblAverageEnemyCountValue"; lblAverageEnemyCountValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X1, locationY, 0, 0); lblAverageEnemyCountValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblAverageAllyCount", "Average number of allies:", new Point(TOTAL_STATS_LOCATION_X1, locationY)); lblAverageAllyCountValue = new XNALabel(WindowManager); lblAverageAllyCountValue.Name = "lblAverageAllyCountValue"; lblAverageAllyCountValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X1, locationY, 0, 0); lblAverageAllyCountValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; // SECOND COLUMN locationY = TOTAL_STATS_FIRST_ITEM_Y; AddTotalStatisticsLabel("lblTotalKills", "Total kills:", new Point(TOTAL_STATS_LOCATION_X2, locationY)); lblTotalKillsValue = new XNALabel(WindowManager); lblTotalKillsValue.Name = "lblTotalKillsValue"; lblTotalKillsValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X2, locationY, 0, 0); lblTotalKillsValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblKillsPerGame", "Kills / game:", new Point(TOTAL_STATS_LOCATION_X2, locationY)); lblKillsPerGameValue = new XNALabel(WindowManager); lblKillsPerGameValue.Name = "lblKillsPerGameValue"; lblKillsPerGameValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X2, locationY, 0, 0); lblKillsPerGameValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblTotalLosses", "Total losses:", new Point(TOTAL_STATS_LOCATION_X2, locationY)); lblTotalLossesValue = new XNALabel(WindowManager); lblTotalLossesValue.Name = "lblTotalLossesValue"; lblTotalLossesValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X2, locationY, 0, 0); lblTotalLossesValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblLossesPerGame", "Losses / game:", new Point(TOTAL_STATS_LOCATION_X2, locationY)); lblLossesPerGameValue = new XNALabel(WindowManager); lblLossesPerGameValue.Name = "lblLossesPerGameValue"; lblLossesPerGameValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X2, locationY, 0, 0); lblLossesPerGameValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblKillLossRatio", "Kill / loss ratio:", new Point(TOTAL_STATS_LOCATION_X2, locationY)); lblKillLossRatioValue = new XNALabel(WindowManager); lblKillLossRatioValue.Name = "lblKillLossRatioValue"; lblKillLossRatioValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X2, locationY, 0, 0); lblKillLossRatioValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblTotalScore", "Total score:", new Point(TOTAL_STATS_LOCATION_X2, locationY)); lblTotalScoreValue = new XNALabel(WindowManager); lblTotalScoreValue.Name = "lblTotalScoreValue"; lblTotalScoreValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X2, locationY, 0, 0); lblTotalScoreValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblAverageEconomy", strLblAvgEconomy, new Point(TOTAL_STATS_LOCATION_X2, locationY)); lblAverageEconomyValue = new XNALabel(WindowManager); lblAverageEconomyValue.Name = "lblAverageEconomyValue"; lblAverageEconomyValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X2, locationY, 0, 0); lblAverageEconomyValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblFavouriteSide", "Favourite side:", new Point(TOTAL_STATS_LOCATION_X2, locationY)); lblFavouriteSideValue = new XNALabel(WindowManager); lblFavouriteSideValue.Name = "lblFavouriteSideValue"; lblFavouriteSideValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X2, locationY, 0, 0); lblFavouriteSideValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; AddTotalStatisticsLabel("lblAverageAILevel", "Average AI level:", new Point(TOTAL_STATS_LOCATION_X2, locationY)); lblAverageAILevelValue = new XNALabel(WindowManager); lblAverageAILevelValue.Name = "lblAverageAILevelValue"; lblAverageAILevelValue.ClientRectangle = new Rectangle(TOTAL_STATS_VALUE_LOCATION_X2, locationY, 0, 0); lblAverageAILevelValue.RemapColor = UISettings.ActiveSettings.AltColor; locationY += TOTAL_STATS_Y_INCREASE; panelTotalStatistics.AddChild(lblGamesStartedValue); panelTotalStatistics.AddChild(lblGamesFinishedValue); panelTotalStatistics.AddChild(lblWinsValue); panelTotalStatistics.AddChild(lblLossesValue); panelTotalStatistics.AddChild(lblWinLossRatioValue); panelTotalStatistics.AddChild(lblAverageGameLengthValue); panelTotalStatistics.AddChild(lblTotalTimePlayedValue); panelTotalStatistics.AddChild(lblAverageEnemyCountValue); panelTotalStatistics.AddChild(lblAverageAllyCountValue); panelTotalStatistics.AddChild(lblTotalKillsValue); panelTotalStatistics.AddChild(lblKillsPerGameValue); panelTotalStatistics.AddChild(lblTotalLossesValue); panelTotalStatistics.AddChild(lblLossesPerGameValue); panelTotalStatistics.AddChild(lblKillLossRatioValue); panelTotalStatistics.AddChild(lblTotalScoreValue); panelTotalStatistics.AddChild(lblAverageEconomyValue); panelTotalStatistics.AddChild(lblFavouriteSideValue); panelTotalStatistics.AddChild(lblAverageAILevelValue); #endregion AddChild(tabControl); AddChild(lblFilter); AddChild(cmbGameClassFilter); AddChild(lblGameMode); AddChild(cmbGameModeFilter); AddChild(btnReturnToMenu); AddChild(btnClearStatistics); base.Initialize(); CenterOnParent(); sides = ClientConfiguration.Instance.Sides.Split(','); sideTextures = new Texture2D[sides.Length + 1]; for (int i = 0; i < sides.Length; i++) { sideTextures[i] = AssetLoader.LoadTexture(sides[i] + "icon.png"); } sideTextures[sides.Length] = AssetLoader.LoadTexture("spectatoricon.png"); mpColors = MultiplayerColor.LoadColors(); ReadStatistics(); ListGameModes(); ListGames(); StatisticsManager.Instance.GameAdded += Instance_GameAdded; }
//private bool FinalSunCompatFixDeclined = false; #endif public override void Initialize() { base.Initialize(); Name = "DisplayOptionsPanel"; var lblIngameResolution = new XNALabel(WindowManager); lblIngameResolution.Name = "lblIngameResolution"; lblIngameResolution.ClientRectangle = new Rectangle(12, 14, 0, 0); lblIngameResolution.Text = "游戏内分辨率:"; ddIngameResolution = new XNAClientDropDown(WindowManager); ddIngameResolution.Name = "ddIngameResolution"; ddIngameResolution.ClientRectangle = new Rectangle( lblIngameResolution.Right + 12, lblIngameResolution.Y - 2, 120, 19); var clientConfig = ClientConfiguration.Instance; var resolutions = GetResolutions(clientConfig.MinimumIngameWidth, clientConfig.MinimumIngameHeight, clientConfig.MaximumIngameWidth, clientConfig.MaximumIngameHeight); resolutions.Sort(); foreach (var res in resolutions) { ddIngameResolution.AddItem(res.ToString()); } var lblDetailLevel = new XNALabel(WindowManager); lblDetailLevel.Name = "lblDetailLevel"; lblDetailLevel.ClientRectangle = new Rectangle(lblIngameResolution.X, ddIngameResolution.Bottom + 16, 0, 0); lblDetailLevel.Text = "画面精细度:"; ddDetailLevel = new XNAClientDropDown(WindowManager); ddDetailLevel.Name = "ddDetailLevel"; ddDetailLevel.ClientRectangle = new Rectangle( ddIngameResolution.X, lblDetailLevel.Y - 2, ddIngameResolution.Width, ddIngameResolution.Height); ddDetailLevel.AddItem("低"); ddDetailLevel.AddItem("中"); ddDetailLevel.AddItem("高"); var lblRenderer = new XNALabel(WindowManager); lblRenderer.Name = "lblRenderer"; lblRenderer.ClientRectangle = new Rectangle(lblDetailLevel.X, ddDetailLevel.Bottom + 16, 0, 0); lblRenderer.Text = "渲染补丁:"; ddRenderer = new XNAClientDropDown(WindowManager); ddRenderer.Name = "ddRenderer"; ddRenderer.ClientRectangle = new Rectangle( ddDetailLevel.X, lblRenderer.Y - 2, ddDetailLevel.Width, ddDetailLevel.Height); GetRenderers(); var localOS = ClientConfiguration.Instance.GetOperatingSystemVersion(); foreach (var renderer in renderers) { if (renderer.IsCompatibleWithOS(localOS) && !renderer.Hidden) { ddRenderer.AddItem(new XNADropDownItem() { Text = renderer.UIName, Tag = renderer }); } } //ddRenderer.AddItem("Default"); //ddRenderer.AddItem("IE-DDRAW"); //ddRenderer.AddItem("TS-DDRAW"); //ddRenderer.AddItem("DDWrapper"); //ddRenderer.AddItem("DxWnd"); //if (ClientConfiguration.Instance.GetOperatingSystemVersion() == OSVersion.WINXP) // ddRenderer.AddItem("Software"); chkWindowedMode = new XNAClientCheckBox(WindowManager); chkWindowedMode.Name = "chkWindowedMode"; chkWindowedMode.ClientRectangle = new Rectangle(lblDetailLevel.X, ddRenderer.Bottom + 16, 0, 0); chkWindowedMode.Text = "窗口化运行"; chkWindowedMode.CheckedChanged += ChkWindowedMode_CheckedChanged; chkBorderlessWindowedMode = new XNAClientCheckBox(WindowManager); chkBorderlessWindowedMode.Name = "chkBorderlessWindowedMode"; chkBorderlessWindowedMode.ClientRectangle = new Rectangle( chkWindowedMode.X + 50, chkWindowedMode.Bottom + 24, 0, 0); chkBorderlessWindowedMode.Text = "无边框窗口化运行"; chkBorderlessWindowedMode.AllowChecking = false; chkBackBufferInVRAM = new XNAClientCheckBox(WindowManager); chkBackBufferInVRAM.Name = "chkBackBufferInVRAM"; chkBackBufferInVRAM.ClientRectangle = new Rectangle( lblDetailLevel.X, chkBorderlessWindowedMode.Bottom + 28, 0, 0); chkBackBufferInVRAM.Text = "开启显存优化 (慎用)"; var lblClientResolution = new XNALabel(WindowManager); lblClientResolution.Name = "lblClientResolution"; lblClientResolution.ClientRectangle = new Rectangle( 285, 14, 0, 0); lblClientResolution.Text = "客户端分辨率:"; ddClientResolution = new XNAClientPreferredItemDropDown(WindowManager); ddClientResolution.Name = "ddClientResolution"; ddClientResolution.ClientRectangle = new Rectangle( lblClientResolution.Right + 12, lblClientResolution.Y - 2, Width - (lblClientResolution.Right + 24), ddIngameResolution.Height); ddClientResolution.AllowDropDown = false; ddClientResolution.PreferredItemLabel = "(推荐)"; var screenBounds = Screen.PrimaryScreen.Bounds; resolutions = GetResolutions(800, 600, screenBounds.Width, screenBounds.Height); // Add "optimal" client resolutions for windowed mode // if they're not supported in fullscreen mode AddResolutionIfFitting(1024, 600, resolutions); AddResolutionIfFitting(1024, 720, resolutions); AddResolutionIfFitting(1280, 600, resolutions); AddResolutionIfFitting(1280, 720, resolutions); AddResolutionIfFitting(1280, 768, resolutions); AddResolutionIfFitting(1280, 800, resolutions); resolutions.Sort(); foreach (var res in resolutions) { var item = new XNADropDownItem(); item.Text = res.ToString(); item.Tag = res.ToString(); ddClientResolution.AddItem(item); } // So we add the optimal resolutions to the list, sort it and then find // out the optimal resolution index - it's inefficient, but works int optimalWindowedResIndex = resolutions.FindIndex(res => res.ToString() == "1280x800"); if (optimalWindowedResIndex == -1) { optimalWindowedResIndex = resolutions.FindIndex(res => res.ToString() == "1280x768"); } if (optimalWindowedResIndex > -1) { ddClientResolution.PreferredItemIndex = optimalWindowedResIndex; } chkBorderlessClient = new XNAClientCheckBox(WindowManager); chkBorderlessClient.Name = "chkBorderlessClient"; chkBorderlessClient.ClientRectangle = new Rectangle( lblClientResolution.X, lblDetailLevel.Y, 0, 0); chkBorderlessClient.Text = "全屏运行客户端"; chkBorderlessClient.CheckedChanged += ChkBorderlessMenu_CheckedChanged; chkBorderlessClient.Checked = true; var lblClientTheme = new XNALabel(WindowManager); lblClientTheme.Name = "lblClientTheme"; lblClientTheme.ClientRectangle = new Rectangle( lblClientResolution.X, lblRenderer.Y, 0, 0); lblClientTheme.Text = "客户端主题:"; ddClientTheme = new XNAClientDropDown(WindowManager); ddClientTheme.Name = "ddClientTheme"; ddClientTheme.ClientRectangle = new Rectangle( ddClientResolution.X, ddRenderer.Y, ddClientResolution.Width, ddRenderer.Height); int themeCount = ClientConfiguration.Instance.ThemeCount; for (int i = 0; i < themeCount; i++) { ddClientTheme.AddItem(ClientConfiguration.Instance.GetThemeInfoFromIndex(i)[0]); } #if !YR lblCompatibilityFixes = new XNALabel(WindowManager); lblCompatibilityFixes.Name = "lblCompatibilityFixes"; lblCompatibilityFixes.FontIndex = 1; lblCompatibilityFixes.Text = "兼容性修复 (高级):"; AddChild(lblCompatibilityFixes); lblCompatibilityFixes.CenterOnParent(); lblCompatibilityFixes.Y = Height - 103; lblGameCompatibilityFix = new XNALabel(WindowManager); lblGameCompatibilityFix.Name = "lblGameCompatibilityFix"; lblGameCompatibilityFix.ClientRectangle = new Rectangle(132, lblCompatibilityFixes.Bottom + 20, 0, 0); lblGameCompatibilityFix.Text = "DTA/TI/TS 兼容性修复:"; btnGameCompatibilityFix = new XNAClientButton(WindowManager); btnGameCompatibilityFix.Name = "btnGameCompatibilityFix"; btnGameCompatibilityFix.ClientRectangle = new Rectangle( lblGameCompatibilityFix.Right + 20, lblGameCompatibilityFix.Y - 4, 133, 23); btnGameCompatibilityFix.FontIndex = 1; btnGameCompatibilityFix.Text = "启用"; btnGameCompatibilityFix.LeftClick += BtnGameCompatibilityFix_LeftClick; lblMapEditorCompatibilityFix = new XNALabel(WindowManager); lblMapEditorCompatibilityFix.Name = "lblMapEditorCompatibilityFix"; lblMapEditorCompatibilityFix.ClientRectangle = new Rectangle( lblGameCompatibilityFix.X, lblGameCompatibilityFix.Bottom + 20, 0, 0); lblMapEditorCompatibilityFix.Text = "地图编辑器兼容性修复:"; btnMapEditorCompatibilityFix = new XNAClientButton(WindowManager); btnMapEditorCompatibilityFix.Name = "btnMapEditorCompatibilityFix"; btnMapEditorCompatibilityFix.ClientRectangle = new Rectangle( btnGameCompatibilityFix.X, lblMapEditorCompatibilityFix.Y - 4, btnGameCompatibilityFix.Width, btnGameCompatibilityFix.Height); btnMapEditorCompatibilityFix.FontIndex = 1; btnMapEditorCompatibilityFix.Text = "启用"; btnMapEditorCompatibilityFix.LeftClick += BtnMapEditorCompatibilityFix_LeftClick; AddChild(lblGameCompatibilityFix); AddChild(btnGameCompatibilityFix); AddChild(lblMapEditorCompatibilityFix); AddChild(btnMapEditorCompatibilityFix); #endif AddChild(chkWindowedMode); AddChild(chkBorderlessWindowedMode); AddChild(chkBackBufferInVRAM); AddChild(chkBorderlessClient); AddChild(lblClientTheme); AddChild(ddClientTheme); AddChild(lblClientResolution); AddChild(ddClientResolution); AddChild(lblRenderer); AddChild(ddRenderer); AddChild(lblDetailLevel); AddChild(ddDetailLevel); AddChild(lblIngameResolution); AddChild(ddIngameResolution); }
public override void Initialize() { base.Initialize(); Name = "DisplayOptionsPanel"; var lblIngameResolution = new XNALabel(WindowManager); lblIngameResolution.Name = "lblIngameResolution"; lblIngameResolution.ClientRectangle = new Rectangle(12, 14, 0, 0); lblIngameResolution.Text = "In-game Resolution:"; ddIngameResolution = new XNAClientDropDown(WindowManager); ddIngameResolution.Name = "ddIngameResolution"; ddIngameResolution.ClientRectangle = new Rectangle( lblIngameResolution.ClientRectangle.Right + 12, lblIngameResolution.ClientRectangle.Y - 2, 120, 19); #if TI var resolutions = GetResolutions(800, 600, 4096, 4096); #else var resolutions = GetResolutions(640, 480, 4096, 4096); #endif resolutions.Sort(); foreach (var res in resolutions) { ddIngameResolution.AddItem(res.ToString()); } var lblDetailLevel = new XNALabel(WindowManager); lblDetailLevel.Name = "lblDetailLevel"; lblDetailLevel.ClientRectangle = new Rectangle(lblIngameResolution.ClientRectangle.X, ddIngameResolution.ClientRectangle.Bottom + 16, 0, 0); lblDetailLevel.Text = "Detail Level:"; ddDetailLevel = new XNAClientDropDown(WindowManager); ddDetailLevel.Name = "ddDetailLevel"; ddDetailLevel.ClientRectangle = new Rectangle( ddIngameResolution.ClientRectangle.X, lblDetailLevel.ClientRectangle.Y - 2, ddIngameResolution.ClientRectangle.Width, ddIngameResolution.ClientRectangle.Height); ddDetailLevel.AddItem("Low"); ddDetailLevel.AddItem("Medium"); ddDetailLevel.AddItem("High"); var lblRenderer = new XNALabel(WindowManager); lblRenderer.Name = "lblRenderer"; lblRenderer.ClientRectangle = new Rectangle(lblDetailLevel.ClientRectangle.X, ddDetailLevel.ClientRectangle.Bottom + 16, 0, 0); lblRenderer.Text = "Renderer:"; ddRenderer = new XNAClientDropDown(WindowManager); ddRenderer.Name = "ddRenderer"; ddRenderer.ClientRectangle = new Rectangle( ddDetailLevel.ClientRectangle.X, lblRenderer.ClientRectangle.Y - 2, ddDetailLevel.ClientRectangle.Width, ddDetailLevel.ClientRectangle.Height); ddRenderer.AddItem("Default"); ddRenderer.AddItem("IE-DDRAW"); ddRenderer.AddItem("TS-DDRAW"); ddRenderer.AddItem("DDWrapper"); ddRenderer.AddItem("DxWnd"); if (ClientConfiguration.Instance.GetOperatingSystemVersion() == OSVersion.WINXP) { ddRenderer.AddItem("Software"); } chkWindowedMode = new XNAClientCheckBox(WindowManager); chkWindowedMode.Name = "chkWindowedMode"; chkWindowedMode.ClientRectangle = new Rectangle(lblDetailLevel.ClientRectangle.X, ddRenderer.ClientRectangle.Bottom + 16, 0, 0); chkWindowedMode.Text = "Windowed Mode"; chkWindowedMode.CheckedChanged += ChkWindowedMode_CheckedChanged; chkBorderlessWindowedMode = new XNAClientCheckBox(WindowManager); chkBorderlessWindowedMode.Name = "chkBorderlessWindowedMode"; chkBorderlessWindowedMode.ClientRectangle = new Rectangle( chkWindowedMode.ClientRectangle.X + 50, chkWindowedMode.ClientRectangle.Bottom + 24, 0, 0); chkBorderlessWindowedMode.Text = "Borderless Windowed Mode"; chkBorderlessWindowedMode.AllowChecking = false; chkBackBufferInVRAM = new XNAClientCheckBox(WindowManager); chkBackBufferInVRAM.Name = "chkBackBufferInVRAM"; chkBackBufferInVRAM.ClientRectangle = new Rectangle( lblDetailLevel.ClientRectangle.X, chkBorderlessWindowedMode.ClientRectangle.Bottom + 28, 0, 0); chkBackBufferInVRAM.Text = "Back Buffer in Video Memory" + Environment.NewLine + "(lower performance, but is" + Environment.NewLine + "necessary on some systems)"; var lblClientResolution = new XNALabel(WindowManager); lblClientResolution.Name = "lblClientResolution"; lblClientResolution.ClientRectangle = new Rectangle( 285, 14, 0, 0); lblClientResolution.Text = "Client Resolution:"; ddClientResolution = new XNAClientDropDown(WindowManager); ddClientResolution.Name = "ddClientResolution"; ddClientResolution.ClientRectangle = new Rectangle( lblClientResolution.ClientRectangle.Right + 12, lblClientResolution.ClientRectangle.Y - 2, ClientRectangle.Width - (lblClientResolution.ClientRectangle.Right + 24), ddIngameResolution.ClientRectangle.Height); ddClientResolution.AllowDropDown = false; var screenBounds = Screen.PrimaryScreen.Bounds; resolutions = GetResolutions(800, 600, screenBounds.Width, screenBounds.Height); // Add "optimal" client resolutions for windowed mode // if they're not supported in fullscreen mode AddResolutionIfFitting(1024, 600, resolutions); AddResolutionIfFitting(1024, 720, resolutions); AddResolutionIfFitting(1280, 600, resolutions); AddResolutionIfFitting(1280, 720, resolutions); AddResolutionIfFitting(1280, 768, resolutions); AddResolutionIfFitting(1280, 800, resolutions); resolutions.Sort(); foreach (var res in resolutions) { var item = new XNADropDownItem(); item.Text = res.ToString(); item.Tag = res.ToString(); item.TextColor = UISettings.AltColor; ddClientResolution.AddItem(item); } // So we add the optimal resolutions to the list, sort it and then find // out the optimal resolution index - it's inefficient, but works int optimalWindowedResIndex = resolutions.FindIndex(res => res.ToString() == "1280x800"); if (optimalWindowedResIndex == -1) { optimalWindowedResIndex = resolutions.FindIndex(res => res.ToString() == "1280x768"); } if (optimalWindowedResIndex > -1) { var item = ddClientResolution.Items[optimalWindowedResIndex]; item.Text = item.Text + " (recommended)"; } chkBorderlessClient = new XNAClientCheckBox(WindowManager); chkBorderlessClient.Name = "chkBorderlessClient"; chkBorderlessClient.ClientRectangle = new Rectangle( lblClientResolution.ClientRectangle.X, lblDetailLevel.ClientRectangle.Y, 0, 0); chkBorderlessClient.Text = "Fullscreen Client"; chkBorderlessClient.CheckedChanged += ChkBorderlessMenu_CheckedChanged; chkBorderlessClient.Checked = true; var lblClientTheme = new XNALabel(WindowManager); lblClientTheme.Name = "lblClientTheme"; lblClientTheme.ClientRectangle = new Rectangle( lblClientResolution.ClientRectangle.X, lblRenderer.ClientRectangle.Y, 0, 0); lblClientTheme.Text = "Client Theme:"; ddClientTheme = new XNAClientDropDown(WindowManager); ddClientTheme.Name = "ddClientTheme"; ddClientTheme.ClientRectangle = new Rectangle( ddClientResolution.ClientRectangle.X, ddRenderer.ClientRectangle.Y, ddClientResolution.ClientRectangle.Width, ddRenderer.ClientRectangle.Height); int themeCount = ClientConfiguration.Instance.ThemeCount; for (int i = 0; i < themeCount; i++) { ddClientTheme.AddItem(ClientConfiguration.Instance.GetThemeInfoFromIndex(i)[0]); } #if DTA chkEnableCannonTracers = new FileSettingCheckBox(WindowManager, "Resources\\ECache91.mix", "MIX\\ECache91.mix", true); chkEnableCannonTracers.Name = "chkEnableCannonTracers"; chkEnableCannonTracers.ClientRectangle = new Rectangle( chkBorderlessClient.ClientRectangle.X, chkWindowedMode.ClientRectangle.Y, 0, 0); chkEnableCannonTracers.Text = "Use Cannon Tracers"; AddChild(chkEnableCannonTracers); fileSettingCheckBoxes.Add(chkEnableCannonTracers); #elif TI chkSmallerVehicleGraphics = new FileSettingCheckBox(WindowManager, "Resources\\ecache02.mix", "MIX\\ecache02.mix", false); chkSmallerVehicleGraphics.AddFile("Resources\\expand02.mix", "MIX\\expand02.mix"); chkSmallerVehicleGraphics.Name = "chkSmallerVehicleGraphics"; chkSmallerVehicleGraphics.ClientRectangle = new Rectangle( chkBorderlessClient.ClientRectangle.X, chkWindowedMode.ClientRectangle.Y, 0, 0); chkSmallerVehicleGraphics.Text = "Smaller Vehicle Graphics"; AddChild(chkSmallerVehicleGraphics); fileSettingCheckBoxes.Add(chkSmallerVehicleGraphics); chkLargerInfantryGraphics = new FileSettingCheckBox(WindowManager, "Resources\\ecache01.mix", "MIX\\ecache01.mix", false); chkLargerInfantryGraphics.Name = "chkLargerInfantryGraphics"; chkLargerInfantryGraphics.ClientRectangle = new Rectangle( chkSmallerVehicleGraphics.ClientRectangle.X, chkBorderlessWindowedMode.ClientRectangle.Y, 0, 0); chkLargerInfantryGraphics.Text = "Larger Infantry Graphics"; AddChild(chkLargerInfantryGraphics); fileSettingCheckBoxes.Add(chkLargerInfantryGraphics); #endif #if !YR lblCompatibilityFixes = new XNALabel(WindowManager); lblCompatibilityFixes.Name = "lblCompatibilityFixes"; lblCompatibilityFixes.FontIndex = 1; lblCompatibilityFixes.Text = "Compatibility Fixes (advanced):"; AddChild(lblCompatibilityFixes); lblCompatibilityFixes.CenterOnParent(); lblCompatibilityFixes.ClientRectangle = new Rectangle( lblCompatibilityFixes.ClientRectangle.X, ClientRectangle.Height - 103, lblCompatibilityFixes.ClientRectangle.Width, lblCompatibilityFixes.ClientRectangle.Height); lblGameCompatibilityFix = new XNALabel(WindowManager); lblGameCompatibilityFix.Name = "lblGameCompatibilityFix"; lblGameCompatibilityFix.ClientRectangle = new Rectangle(132, lblCompatibilityFixes.ClientRectangle.Bottom + 20, 0, 0); lblGameCompatibilityFix.Text = "DTA/TI/TS Compatibility Fix:"; btnGameCompatibilityFix = new XNAClientButton(WindowManager); btnGameCompatibilityFix.Name = "btnGameCompatibilityFix"; btnGameCompatibilityFix.ClientRectangle = new Rectangle( lblGameCompatibilityFix.ClientRectangle.Right + 20, lblGameCompatibilityFix.ClientRectangle.Y - 4, 133, 23); btnGameCompatibilityFix.FontIndex = 1; btnGameCompatibilityFix.Text = "Enable"; btnGameCompatibilityFix.LeftClick += BtnGameCompatibilityFix_LeftClick; lblMapEditorCompatibilityFix = new XNALabel(WindowManager); lblMapEditorCompatibilityFix.Name = "lblMapEditorCompatibilityFix"; lblMapEditorCompatibilityFix.ClientRectangle = new Rectangle( lblGameCompatibilityFix.ClientRectangle.X, lblGameCompatibilityFix.ClientRectangle.Bottom + 20, 0, 0); lblMapEditorCompatibilityFix.Text = "FinalSun Compatibility Fix:"; btnMapEditorCompatibilityFix = new XNAClientButton(WindowManager); btnMapEditorCompatibilityFix.Name = "btnMapEditorCompatibilityFix"; btnMapEditorCompatibilityFix.ClientRectangle = new Rectangle( btnGameCompatibilityFix.ClientRectangle.X, lblMapEditorCompatibilityFix.ClientRectangle.Y - 4, btnGameCompatibilityFix.ClientRectangle.Width, btnGameCompatibilityFix.ClientRectangle.Height); btnMapEditorCompatibilityFix.FontIndex = 1; btnMapEditorCompatibilityFix.Text = "Enable"; btnMapEditorCompatibilityFix.LeftClick += BtnMapEditorCompatibilityFix_LeftClick; AddChild(lblGameCompatibilityFix); AddChild(btnGameCompatibilityFix); AddChild(lblMapEditorCompatibilityFix); AddChild(btnMapEditorCompatibilityFix); #endif AddChild(chkWindowedMode); AddChild(chkBorderlessWindowedMode); AddChild(chkBackBufferInVRAM); AddChild(chkBorderlessClient); AddChild(lblClientTheme); AddChild(ddClientTheme); AddChild(lblClientResolution); AddChild(ddClientResolution); AddChild(lblRenderer); AddChild(ddRenderer); AddChild(lblDetailLevel); AddChild(ddDetailLevel); AddChild(lblIngameResolution); AddChild(ddIngameResolution); }
public override void Initialize() { Name = "GameLoadingLobby"; ClientRectangle = new Rectangle(0, 0, 590, 510); BackgroundTexture = AssetLoader.LoadTexture("loadmpsavebg.png"); lblDescription = new XNALabel(WindowManager); lblDescription.Name = nameof(lblDescription); lblDescription.ClientRectangle = new Rectangle(12, 12, 0, 0); lblDescription.Text = "Wait for all players to join and get ready, then click Load Game to load the saved multiplayer game."; panelPlayers = new XNAPanel(WindowManager); panelPlayers.ClientRectangle = new Rectangle(12, 32, 373, 125); panelPlayers.BackgroundTexture = AssetLoader.CreateTexture(new Color(0, 0, 0, 128), 1, 1); panelPlayers.PanelBackgroundDrawMode = PanelBackgroundImageDrawMode.STRETCHED; AddChild(lblDescription); AddChild(panelPlayers); lblPlayerNames = new XNALabel[8]; for (int i = 0; i < 8; i++) { XNALabel lblPlayerName = new XNALabel(WindowManager); lblPlayerName.Name = nameof(lblPlayerName) + i; if (i < 4) { lblPlayerName.ClientRectangle = new Rectangle(9, 9 + 30 * i, 0, 0); } else { lblPlayerName.ClientRectangle = new Rectangle(190, 9 + 30 * (i - 4), 0, 0); } lblPlayerName.Text = "Player " + i; panelPlayers.AddChild(lblPlayerName); lblPlayerNames[i] = lblPlayerName; } lblMapName = new XNALabel(WindowManager); lblMapName.Name = nameof(lblMapName); lblMapName.FontIndex = 1; lblMapName.ClientRectangle = new Rectangle(panelPlayers.Right + 12, panelPlayers.Y, 0, 0); lblMapName.Text = "MAP:"; lblMapNameValue = new XNALabel(WindowManager); lblMapNameValue.Name = nameof(lblMapNameValue); lblMapNameValue.ClientRectangle = new Rectangle(lblMapName.X, lblMapName.Y + 18, 0, 0); lblMapNameValue.Text = "Map name"; lblGameMode = new XNALabel(WindowManager); lblGameMode.Name = nameof(lblGameMode); lblGameMode.ClientRectangle = new Rectangle(lblMapName.X, panelPlayers.Y + 40, 0, 0); lblGameMode.FontIndex = 1; lblGameMode.Text = "GAME MODE:"; lblGameModeValue = new XNALabel(WindowManager); lblGameModeValue.Name = nameof(lblGameModeValue); lblGameModeValue.ClientRectangle = new Rectangle(lblGameMode.X, lblGameMode.Y + 18, 0, 0); lblGameModeValue.Text = "Game mode"; lblSavedGameTime = new XNALabel(WindowManager); lblSavedGameTime.Name = nameof(lblSavedGameTime); lblSavedGameTime.ClientRectangle = new Rectangle(lblMapName.X, panelPlayers.Bottom - 40, 0, 0); lblSavedGameTime.FontIndex = 1; lblSavedGameTime.Text = "SAVED GAME:"; ddSavedGame = new XNAClientDropDown(WindowManager); ddSavedGame.Name = nameof(ddSavedGame); ddSavedGame.ClientRectangle = new Rectangle(lblSavedGameTime.X, panelPlayers.Bottom - 21, Width - lblSavedGameTime.X - 12, 21); ddSavedGame.SelectedIndexChanged += DdSavedGame_SelectedIndexChanged; lbChatMessages = new ChatListBox(WindowManager); lbChatMessages.Name = nameof(lbChatMessages); lbChatMessages.BackgroundTexture = AssetLoader.CreateTexture(new Color(0, 0, 0, 128), 1, 1); lbChatMessages.PanelBackgroundDrawMode = PanelBackgroundImageDrawMode.STRETCHED; lbChatMessages.ClientRectangle = new Rectangle(12, panelPlayers.Bottom + 12, Width - 24, Height - panelPlayers.Bottom - 12 - 29 - 34); tbChatInput = new XNATextBox(WindowManager); tbChatInput.Name = nameof(tbChatInput); tbChatInput.ClientRectangle = new Rectangle(lbChatMessages.X, lbChatMessages.Bottom + 3, lbChatMessages.Width, 19); tbChatInput.MaximumTextLength = 200; tbChatInput.EnterPressed += TbChatInput_EnterPressed; btnLoadGame = new XNAClientButton(WindowManager); btnLoadGame.Name = nameof(btnLoadGame); btnLoadGame.ClientRectangle = new Rectangle(lbChatMessages.X, tbChatInput.Bottom + 6, 133, 23); btnLoadGame.Text = "Load Game"; btnLoadGame.LeftClick += BtnLoadGame_LeftClick; btnLeaveGame = new XNAClientButton(WindowManager); btnLeaveGame.Name = nameof(btnLeaveGame); btnLeaveGame.ClientRectangle = new Rectangle(Width - 145, btnLoadGame.Y, 133, 23); btnLeaveGame.Text = "Leave Game"; btnLeaveGame.LeftClick += BtnLeaveGame_LeftClick; AddChild(lblMapName); AddChild(lblMapNameValue); AddChild(lblGameMode); AddChild(lblGameModeValue); AddChild(lblSavedGameTime); AddChild(lbChatMessages); AddChild(tbChatInput); AddChild(btnLoadGame); AddChild(btnLeaveGame); AddChild(ddSavedGame); base.Initialize(); sndJoinSound = new EnhancedSoundEffect("joingame.wav", 0.0, 0.0, ClientConfiguration.Instance.SoundGameLobbyJoinCooldown); sndLeaveSound = new EnhancedSoundEffect("leavegame.wav", 0.0, 0.0, ClientConfiguration.Instance.SoundGameLobbyLeaveCooldown); sndMessageSound = new EnhancedSoundEffect("message.wav", 0.0, 0.0, ClientConfiguration.Instance.SoundMessageCooldown); sndGetReadySound = new EnhancedSoundEffect("getready.wav", 0.0, 0.0, ClientConfiguration.Instance.SoundGameLobbyGetReadyCooldown); MPColors = MultiplayerColor.LoadColors(); WindowManager.CenterControlOnScreen(this); }
public override void Initialize() { lbTunnelList = new TunnelListBox(WindowManager, tunnelHandler); lbTunnelList.Name = nameof(lbTunnelList); Name = "GameCreationWindow"; Width = lbTunnelList.Width + UIDesignConstants.EMPTY_SPACE_SIDES * 2 + UIDesignConstants.CONTROL_HORIZONTAL_MARGIN * 2; BackgroundTexture = AssetLoader.LoadTexture("gamecreationoptionsbg.png"); tbGameName = new XNATextBox(WindowManager); tbGameName.Name = nameof(tbGameName); tbGameName.MaximumTextLength = 23; tbGameName.ClientRectangle = new Rectangle(Width - 150 - UIDesignConstants.EMPTY_SPACE_SIDES - UIDesignConstants.CONTROL_HORIZONTAL_MARGIN, UIDesignConstants.EMPTY_SPACE_TOP + UIDesignConstants.CONTROL_VERTICAL_MARGIN, 150, 21); tbGameName.Text = ProgramConstants.PLAYERNAME + "'s Game"; lblRoomName = new XNALabel(WindowManager); lblRoomName.Name = nameof(lblRoomName); lblRoomName.ClientRectangle = new Rectangle(UIDesignConstants.EMPTY_SPACE_SIDES + UIDesignConstants.CONTROL_HORIZONTAL_MARGIN, tbGameName.Y + 1, 0, 0); lblRoomName.Text = "Game room name:"; ddMaxPlayers = new XNAClientDropDown(WindowManager); ddMaxPlayers.Name = nameof(ddMaxPlayers); ddMaxPlayers.ClientRectangle = new Rectangle(tbGameName.X, tbGameName.Bottom + 20, tbGameName.Width, 21); for (int i = 8; i > 1; i--) { ddMaxPlayers.AddItem(i.ToString()); } ddMaxPlayers.SelectedIndex = 0; lblMaxPlayers = new XNALabel(WindowManager); lblMaxPlayers.Name = nameof(lblMaxPlayers); lblMaxPlayers.ClientRectangle = new Rectangle(UIDesignConstants.EMPTY_SPACE_SIDES + UIDesignConstants.CONTROL_HORIZONTAL_MARGIN, ddMaxPlayers.Y + 1, 0, 0); lblMaxPlayers.Text = "Maximum number of players:"; tbPassword = new XNATextBox(WindowManager); tbPassword.Name = nameof(tbPassword); tbPassword.MaximumTextLength = 20; tbPassword.ClientRectangle = new Rectangle(tbGameName.X, ddMaxPlayers.Bottom + 20, tbGameName.Width, 21); lblPassword = new XNALabel(WindowManager); lblPassword.Name = nameof(lblPassword); lblPassword.ClientRectangle = new Rectangle(UIDesignConstants.EMPTY_SPACE_SIDES + UIDesignConstants.CONTROL_HORIZONTAL_MARGIN, tbPassword.Y + 1, 0, 0); lblPassword.Text = "Password (leave blank for none):"; btnDisplayAdvancedOptions = new XNAClientButton(WindowManager); btnDisplayAdvancedOptions.Name = nameof(btnDisplayAdvancedOptions); btnDisplayAdvancedOptions.ClientRectangle = new Rectangle(UIDesignConstants.EMPTY_SPACE_SIDES + UIDesignConstants.CONTROL_HORIZONTAL_MARGIN, lblPassword.Bottom + UIDesignConstants.CONTROL_VERTICAL_MARGIN * 3, UIDesignConstants.BUTTON_WIDTH_160, UIDesignConstants.BUTTON_HEIGHT); btnDisplayAdvancedOptions.Text = "Advanced Options"; btnDisplayAdvancedOptions.LeftClick += BtnDisplayAdvancedOptions_LeftClick; lblTunnelServer = new XNALabel(WindowManager); lblTunnelServer.Name = nameof(lblTunnelServer); lblTunnelServer.ClientRectangle = new Rectangle(UIDesignConstants.EMPTY_SPACE_SIDES + UIDesignConstants.CONTROL_HORIZONTAL_MARGIN, lblPassword.Bottom + UIDesignConstants.CONTROL_VERTICAL_MARGIN * 4, 0, 0); lblTunnelServer.Text = "Tunnel server:"; lblTunnelServer.Enabled = false; lblTunnelServer.Visible = false; lbTunnelList.X = UIDesignConstants.EMPTY_SPACE_SIDES + UIDesignConstants.CONTROL_HORIZONTAL_MARGIN; lbTunnelList.Y = lblTunnelServer.Bottom + UIDesignConstants.CONTROL_VERTICAL_MARGIN; lbTunnelList.Disable(); lbTunnelList.ListRefreshed += LbTunnelList_ListRefreshed; btnCreateGame = new XNAClientButton(WindowManager); btnCreateGame.Name = nameof(btnCreateGame); btnCreateGame.ClientRectangle = new Rectangle(UIDesignConstants.EMPTY_SPACE_SIDES + UIDesignConstants.CONTROL_HORIZONTAL_MARGIN, btnDisplayAdvancedOptions.Bottom + UIDesignConstants.CONTROL_VERTICAL_MARGIN * 3, UIDesignConstants.BUTTON_WIDTH_133, UIDesignConstants.BUTTON_HEIGHT); btnCreateGame.Text = "Create Game"; btnCreateGame.LeftClick += BtnCreateGame_LeftClick; btnCancel = new XNAClientButton(WindowManager); btnCancel.Name = nameof(btnCancel); btnCancel.ClientRectangle = new Rectangle(Width - UIDesignConstants.BUTTON_WIDTH_133 - UIDesignConstants.EMPTY_SPACE_SIDES - UIDesignConstants.CONTROL_HORIZONTAL_MARGIN, btnCreateGame.Y, UIDesignConstants.BUTTON_WIDTH_133, UIDesignConstants.BUTTON_HEIGHT); btnCancel.Text = "Cancel"; btnCancel.LeftClick += BtnCancel_LeftClick; int btnLoadMPGameX = btnCreateGame.Right + (btnCancel.X - btnCreateGame.Right) / 2 - UIDesignConstants.BUTTON_WIDTH_133 / 2; btnLoadMPGame = new XNAClientButton(WindowManager); btnLoadMPGame.Name = nameof(btnLoadMPGame); btnLoadMPGame.ClientRectangle = new Rectangle(btnLoadMPGameX, btnCreateGame.Y, UIDesignConstants.BUTTON_WIDTH_133, UIDesignConstants.BUTTON_HEIGHT); btnLoadMPGame.Text = "Load Game"; btnLoadMPGame.LeftClick += BtnLoadMPGame_LeftClick; AddChild(tbGameName); AddChild(lblRoomName); AddChild(ddMaxPlayers); AddChild(lblMaxPlayers); AddChild(tbPassword); AddChild(lblPassword); AddChild(btnDisplayAdvancedOptions); AddChild(lblTunnelServer); AddChild(lbTunnelList); AddChild(btnCreateGame); if (!ClientConfiguration.Instance.DisableMultiplayerGameLoading) { AddChild(btnLoadMPGame); } AddChild(btnCancel); base.Initialize(); Height = btnCreateGame.Bottom + UIDesignConstants.CONTROL_VERTICAL_MARGIN + UIDesignConstants.EMPTY_SPACE_BOTTOM; CenterOnParent(); UserINISettings.Instance.SettingsSaved += Instance_SettingsSaved; if (UserINISettings.Instance.AlwaysDisplayTunnelList) { BtnDisplayAdvancedOptions_LeftClick(this, EventArgs.Empty); } }
public override void Initialize() { base.Initialize(); Name = "DisplayOptionsPanel"; var lblIngameResolution = new XNALabel(WindowManager); lblIngameResolution.Name = "lblIngameResolution"; lblIngameResolution.ClientRectangle = new Rectangle(12, 14, 0, 0); lblIngameResolution.Text = "In-game Resolution:"; ddIngameResolution = new XNAClientDropDown(WindowManager); ddIngameResolution.Name = "ddIngameResolution"; ddIngameResolution.ClientRectangle = new Rectangle( lblIngameResolution.Right + 12, lblIngameResolution.Y - 2, 120, 19); var clientConfig = ClientConfiguration.Instance; var resolutions = GetResolutions(clientConfig.MinimumIngameWidth, clientConfig.MinimumIngameHeight, clientConfig.MaximumIngameWidth, clientConfig.MaximumIngameHeight); resolutions.Sort(); foreach (var res in resolutions) { ddIngameResolution.AddItem(res.ToString()); } var lblDetailLevel = new XNALabel(WindowManager); lblDetailLevel.Name = "lblDetailLevel"; lblDetailLevel.ClientRectangle = new Rectangle(lblIngameResolution.X, ddIngameResolution.Bottom + 16, 0, 0); lblDetailLevel.Text = "Detail Level:"; ddDetailLevel = new XNAClientDropDown(WindowManager); ddDetailLevel.Name = "ddDetailLevel"; ddDetailLevel.ClientRectangle = new Rectangle( ddIngameResolution.X, lblDetailLevel.Y - 2, ddIngameResolution.Width, ddIngameResolution.Height); ddDetailLevel.AddItem("Low"); ddDetailLevel.AddItem("Medium"); ddDetailLevel.AddItem("High"); var lblRenderer = new XNALabel(WindowManager); lblRenderer.Name = "lblRenderer"; lblRenderer.ClientRectangle = new Rectangle(lblDetailLevel.X, ddDetailLevel.Bottom + 16, 0, 0); lblRenderer.Text = "Renderer:"; ddRenderer = new XNAClientDropDown(WindowManager); ddRenderer.Name = "ddRenderer"; ddRenderer.ClientRectangle = new Rectangle( ddDetailLevel.X, lblRenderer.Y - 2, ddDetailLevel.Width, ddDetailLevel.Height); GetRenderers(); var localOS = ClientConfiguration.Instance.GetOperatingSystemVersion(); foreach (var renderer in renderers) { if (renderer.IsCompatibleWithOS(localOS) && !renderer.Hidden) { ddRenderer.AddItem(new XNADropDownItem() { Text = renderer.UIName, Tag = renderer }); } } //ddRenderer.AddItem("Default"); //ddRenderer.AddItem("IE-DDRAW"); //ddRenderer.AddItem("TS-DDRAW"); //ddRenderer.AddItem("DDWrapper"); //ddRenderer.AddItem("DxWnd"); //if (ClientConfiguration.Instance.GetOperatingSystemVersion() == OSVersion.WINXP) // ddRenderer.AddItem("Software"); chkWindowedMode = new XNAClientCheckBox(WindowManager); chkWindowedMode.Name = "chkWindowedMode"; chkWindowedMode.ClientRectangle = new Rectangle(lblDetailLevel.X, ddRenderer.Bottom + 16, 0, 0); chkWindowedMode.Text = "Windowed Mode"; chkWindowedMode.CheckedChanged += ChkWindowedMode_CheckedChanged; chkBorderlessWindowedMode = new XNAClientCheckBox(WindowManager); chkBorderlessWindowedMode.Name = "chkBorderlessWindowedMode"; chkBorderlessWindowedMode.ClientRectangle = new Rectangle( chkWindowedMode.X + 50, chkWindowedMode.Bottom + 24, 0, 0); chkBorderlessWindowedMode.Text = "Borderless Windowed Mode"; chkBorderlessWindowedMode.AllowChecking = false; chkBackBufferInVRAM = new XNAClientCheckBox(WindowManager); chkBackBufferInVRAM.Name = "chkBackBufferInVRAM"; chkBackBufferInVRAM.ClientRectangle = new Rectangle( lblDetailLevel.X, chkBorderlessWindowedMode.Bottom + 28, 0, 0); chkBackBufferInVRAM.Text = "Back Buffer in Video Memory" + Environment.NewLine + "(lower performance, but is" + Environment.NewLine + "necessary on some systems)"; var lblClientResolution = new XNALabel(WindowManager); lblClientResolution.Name = "lblClientResolution"; lblClientResolution.ClientRectangle = new Rectangle( 285, 14, 0, 0); lblClientResolution.Text = "Client Resolution:"; ddClientResolution = new XNAClientPreferredItemDropDown(WindowManager); ddClientResolution.Name = "ddClientResolution"; ddClientResolution.ClientRectangle = new Rectangle( lblClientResolution.Right + 12, lblClientResolution.Y - 2, Width - (lblClientResolution.Right + 24), ddIngameResolution.Height); ddClientResolution.AllowDropDown = false; ddClientResolution.PreferredItemLabel = "(recommended)"; var screenBounds = Screen.PrimaryScreen.Bounds; resolutions = GetResolutions(800, 600, screenBounds.Width, screenBounds.Height); // Add "optimal" client resolutions for windowed mode // if they're not supported in fullscreen mode AddResolutionIfFitting(1024, 600, resolutions); AddResolutionIfFitting(1024, 720, resolutions); AddResolutionIfFitting(1280, 600, resolutions); AddResolutionIfFitting(1280, 720, resolutions); AddResolutionIfFitting(1280, 768, resolutions); AddResolutionIfFitting(1280, 800, resolutions); resolutions.Sort(); foreach (var res in resolutions) { var item = new XNADropDownItem(); item.Text = res.ToString(); item.Tag = res.ToString(); ddClientResolution.AddItem(item); } // So we add the optimal resolutions to the list, sort it and then find // out the optimal resolution index - it's inefficient, but works string[] recommendedResolutions = clientConfig.RecommendedResolutions; foreach (string resolution in recommendedResolutions) { string trimmedresolution = resolution.Trim(); int index = resolutions.FindIndex(res => res.ToString() == trimmedresolution); if (index > -1) { ddClientResolution.PreferredItemIndexes.Add(index); } } chkBorderlessClient = new XNAClientCheckBox(WindowManager); chkBorderlessClient.Name = "chkBorderlessClient"; chkBorderlessClient.ClientRectangle = new Rectangle( lblClientResolution.X, lblDetailLevel.Y, 0, 0); chkBorderlessClient.Text = "Fullscreen Client"; chkBorderlessClient.CheckedChanged += ChkBorderlessMenu_CheckedChanged; chkBorderlessClient.Checked = true; var lblClientTheme = new XNALabel(WindowManager); lblClientTheme.Name = "lblClientTheme"; lblClientTheme.ClientRectangle = new Rectangle( lblClientResolution.X, lblRenderer.Y, 0, 0); lblClientTheme.Text = "Client Theme:"; ddClientTheme = new XNAClientDropDown(WindowManager); ddClientTheme.Name = "ddClientTheme"; ddClientTheme.ClientRectangle = new Rectangle( ddClientResolution.X, ddRenderer.Y, ddClientResolution.Width, ddRenderer.Height); int themeCount = ClientConfiguration.Instance.ThemeCount; for (int i = 0; i < themeCount; i++) { ddClientTheme.AddItem(ClientConfiguration.Instance.GetThemeInfoFromIndex(i)[0]); } lblCompatibilityFixes = new XNALabel(WindowManager); lblCompatibilityFixes.Name = "lblCompatibilityFixes"; lblCompatibilityFixes.FontIndex = 1; lblCompatibilityFixes.Text = "Compatibility Fixes (advanced):"; AddChild(lblCompatibilityFixes); lblCompatibilityFixes.CenterOnParent(); lblCompatibilityFixes.Y = Height - 103; lblGameCompatibilityFix = new XNALabel(WindowManager); lblGameCompatibilityFix.Name = "lblGameCompatibilityFix"; lblGameCompatibilityFix.ClientRectangle = new Rectangle(132, lblCompatibilityFixes.Bottom + 20, 0, 0); lblGameCompatibilityFix.Text = "DTA/TI/TS Compatibility Fix:"; btnGameCompatibilityFix = new XNAClientButton(WindowManager); btnGameCompatibilityFix.Name = "btnGameCompatibilityFix"; btnGameCompatibilityFix.ClientRectangle = new Rectangle( lblGameCompatibilityFix.Right + 20, lblGameCompatibilityFix.Y - 4, 133, 23); btnGameCompatibilityFix.FontIndex = 1; btnGameCompatibilityFix.Text = "Enable"; btnGameCompatibilityFix.LeftClick += BtnGameCompatibilityFix_LeftClick; lblMapEditorCompatibilityFix = new XNALabel(WindowManager); lblMapEditorCompatibilityFix.Name = "lblMapEditorCompatibilityFix"; lblMapEditorCompatibilityFix.ClientRectangle = new Rectangle( lblGameCompatibilityFix.X, lblGameCompatibilityFix.Bottom + 20, 0, 0); lblMapEditorCompatibilityFix.Text = "FinalSun Compatibility Fix:"; btnMapEditorCompatibilityFix = new XNAClientButton(WindowManager); btnMapEditorCompatibilityFix.Name = "btnMapEditorCompatibilityFix"; btnMapEditorCompatibilityFix.ClientRectangle = new Rectangle( btnGameCompatibilityFix.X, lblMapEditorCompatibilityFix.Y - 4, btnGameCompatibilityFix.Width, btnGameCompatibilityFix.Height); btnMapEditorCompatibilityFix.FontIndex = 1; btnMapEditorCompatibilityFix.Text = "Enable"; btnMapEditorCompatibilityFix.LeftClick += BtnMapEditorCompatibilityFix_LeftClick; AddChild(lblGameCompatibilityFix); AddChild(btnGameCompatibilityFix); AddChild(lblMapEditorCompatibilityFix); AddChild(btnMapEditorCompatibilityFix); AddChild(chkWindowedMode); AddChild(chkBorderlessWindowedMode); AddChild(chkBackBufferInVRAM); AddChild(chkBorderlessClient); AddChild(lblClientTheme); AddChild(ddClientTheme); AddChild(lblClientResolution); AddChild(ddClientResolution); AddChild(lblRenderer); AddChild(ddRenderer); AddChild(lblDetailLevel); AddChild(ddDetailLevel); AddChild(lblIngameResolution); AddChild(ddIngameResolution); }
public override void Initialize() { ClientRectangle = new Rectangle(0, 0, WindowManager.RenderResolutionX - 64, WindowManager.RenderResolutionY - 64); Name = "CnCNetLobby"; BackgroundTexture = AssetLoader.LoadTexture("cncnetlobbybg.png"); localGameID = ClientConfiguration.Instance.LocalGame; localGame = gameCollection.GameList.Find(g => g.InternalName.ToUpper() == localGameID.ToUpper()); btnNewGame = new XNAClientButton(WindowManager); btnNewGame.Name = "btnNewGame"; btnNewGame.ClientRectangle = new Rectangle(12, ClientRectangle.Height - 29, 133, 23); btnNewGame.Text = "Create Game"; btnNewGame.AllowClick = false; btnNewGame.LeftClick += BtnNewGame_LeftClick; btnJoinGame = new XNAClientButton(WindowManager); btnJoinGame.Name = "btnJoinGame"; btnJoinGame.ClientRectangle = new Rectangle(btnNewGame.ClientRectangle.Right + 12, btnNewGame.ClientRectangle.Y, 133, 23); btnJoinGame.Text = "Join Game"; btnJoinGame.AllowClick = false; btnJoinGame.LeftClick += BtnJoinGame_LeftClick; btnLogout = new XNAClientButton(WindowManager); btnLogout.Name = "btnLogout"; btnLogout.ClientRectangle = new Rectangle(ClientRectangle.Width - 145, btnNewGame.ClientRectangle.Y, 133, 23); btnLogout.Text = "Log Out"; btnLogout.LeftClick += BtnLogout_LeftClick; lbGameList = new GameListBox(WindowManager, localGameID); lbGameList.Name = "lbGameList"; lbGameList.ClientRectangle = new Rectangle(btnNewGame.ClientRectangle.X, 41, btnJoinGame.ClientRectangle.Right - btnNewGame.ClientRectangle.X, btnNewGame.ClientRectangle.Top - 47); lbGameList.DrawMode = PanelBackgroundImageDrawMode.STRETCHED; lbGameList.BackgroundTexture = AssetLoader.CreateTexture(new Color(0, 0, 0, 128), 1, 1); lbGameList.DoubleLeftClick += LbGameList_DoubleLeftClick; lbGameList.AllowMultiLineItems = false; lbPlayerList = new XNAListBox(WindowManager); lbPlayerList.Name = "lbPlayerList"; lbPlayerList.ClientRectangle = new Rectangle(ClientRectangle.Width - 202, 20, 190, btnLogout.ClientRectangle.Top - 26); lbPlayerList.DrawMode = PanelBackgroundImageDrawMode.STRETCHED; lbPlayerList.BackgroundTexture = AssetLoader.CreateTexture(new Color(0, 0, 0, 128), 1, 1); lbPlayerList.LineHeight = 16; lbPlayerList.DoubleLeftClick += LbPlayerList_DoubleLeftClick; lbPlayerList.RightClick += LbPlayerList_RightClick; playerContextMenu = new PlayerContextMenu(WindowManager); playerContextMenu.Name = "playerContextMenu"; playerContextMenu.ClientRectangle = new Rectangle(0, 0, 150, 2); playerContextMenu.Enabled = false; playerContextMenu.Visible = false; playerContextMenu.AddItem("Private Message"); playerContextMenu.AddItem("Add Friend"); playerContextMenu.OptionSelected += PlayerContextMenu_OptionSelected; lbChatMessages = new ChatListBox(WindowManager); lbChatMessages.Name = "lbChatMessages"; lbChatMessages.ClientRectangle = new Rectangle(lbGameList.ClientRectangle.Right + 12, lbGameList.ClientRectangle.Y, lbPlayerList.ClientRectangle.Left - lbGameList.ClientRectangle.Right - 24, lbPlayerList.ClientRectangle.Height); lbChatMessages.DrawMode = PanelBackgroundImageDrawMode.STRETCHED; lbChatMessages.BackgroundTexture = AssetLoader.CreateTexture(new Color(0, 0, 0, 128), 1, 1); lbChatMessages.LineHeight = 16; tbChatInput = new XNATextBox(WindowManager); tbChatInput.Name = "tbChatInput"; tbChatInput.ClientRectangle = new Rectangle(lbChatMessages.ClientRectangle.X, btnNewGame.ClientRectangle.Y, lbChatMessages.ClientRectangle.Width, btnNewGame.ClientRectangle.Height); tbChatInput.Enabled = false; tbChatInput.MaximumTextLength = 200; tbChatInput.EnterPressed += TbChatInput_EnterPressed; lblColor = new XNALabel(WindowManager); lblColor.Name = "lblColor"; lblColor.ClientRectangle = new Rectangle(lbChatMessages.ClientRectangle.X, 14, 0, 0); lblColor.FontIndex = 1; lblColor.Text = "YOUR COLOR:"; ddColor = new XNAClientDropDown(WindowManager); ddColor.Name = "ddColor"; ddColor.ClientRectangle = new Rectangle(lblColor.ClientRectangle.X + 95, 12, 150, 21); chatColors = connectionManager.GetIRCColors(); foreach (IRCColor color in connectionManager.GetIRCColors()) { if (!color.Selectable) { continue; } XNADropDownItem ddItem = new XNADropDownItem(); ddItem.Text = color.Name; ddItem.TextColor = color.XnaColor; ddItem.Tag = color; ddColor.AddItem(ddItem); } int selectedColor = UserINISettings.Instance.ChatColor; ddColor.SelectedIndex = selectedColor >= ddColor.Items.Count || selectedColor < 0 ? ClientConfiguration.Instance.DefaultPersonalChatColorIndex: selectedColor; SetChatColor(); ddColor.SelectedIndexChanged += DdColor_SelectedIndexChanged; ddCurrentChannel = new XNAClientDropDown(WindowManager); ddCurrentChannel.Name = "ddCurrentChannel"; ddCurrentChannel.ClientRectangle = new Rectangle( lbChatMessages.ClientRectangle.Right - 200, ddColor.ClientRectangle.Y, 200, 21); ddCurrentChannel.SelectedIndexChanged += DdCurrentChannel_SelectedIndexChanged; ddCurrentChannel.AllowDropDown = false; lblCurrentChannel = new XNALabel(WindowManager); lblCurrentChannel.Name = "lblCurrentChannel"; lblCurrentChannel.ClientRectangle = new Rectangle( ddCurrentChannel.ClientRectangle.X - 150, ddCurrentChannel.ClientRectangle.Y + 2, 0, 0); lblCurrentChannel.FontIndex = 1; lblCurrentChannel.Text = "CURRENT CHANNEL:"; InitializeGameList(); AddChild(btnNewGame); AddChild(btnJoinGame); AddChild(btnLogout); AddChild(lbPlayerList); AddChild(lbChatMessages); AddChild(lbGameList); AddChild(tbChatInput); AddChild(lblColor); AddChild(ddColor); AddChild(lblCurrentChannel); AddChild(ddCurrentChannel); AddChild(playerContextMenu); base.Initialize(); WindowManager.CenterControlOnScreen(this); PostUIInit(); }