public static Theme CreateTheme(Game game) { // Load theme from RegistryKey if it exists. This will restore // the theme used last time this game was played RegistryKey gameKey = getKeyForGame(game, false); if (gameKey != null) { game.RegistryKey = gameKey; return(loadThemeFromRegistry(game, gameKey)); } // Defaults ColorScheme colorScheme = ColorSchemeLibrary.Default; PieceSet pieceSet = PieceSetLibrary.Default; int numColors = 2; // Find AppearanceAttribute and update defaults (if it exists) object[] attrs = null; if (Program.Manager.AppearanceAttributes.ContainsKey(game.Name)) { attrs = new object[] { Program.Manager.AppearanceAttributes[game.Name] } } ; else { attrs = game.GetType().GetCustomAttributes(typeof(AppearanceAttribute), false); } if (attrs != null && attrs.Length >= 1) { AppearanceAttribute appearance = (AppearanceAttribute)attrs[0]; if (appearance.Game != null && appearance.Game != game.Name) { appearance = null; } numColors = appearance != null ? appearance.NumberOfSquareColors : 2; if (appearance != null && appearance.ColorScheme != null) { if (ColorSchemeLibrary.Contains(appearance.ColorScheme)) { colorScheme = ColorSchemeLibrary.Lookup(appearance.ColorScheme); } } if (appearance != null && appearance.PieceSet != null) { if (PieceSetLibrary.Contains(appearance.PieceSet)) { pieceSet = PieceSetLibrary.Lookup(appearance.PieceSet); } } bool colorSchemeChanged = false; if (appearance != null && appearance.Player1Color != null) { string[] colorNumbers = appearance.Player1Color.Split(','); colorScheme.PlayerColors[0] = Color.FromArgb(Convert.ToInt32(colorNumbers[0]), Convert.ToInt32(colorNumbers[1]), Convert.ToInt32(colorNumbers[2])); colorSchemeChanged = true; } if (appearance != null && appearance.Player2Color != null) { string[] colorNumbers = appearance.Player2Color.Split(','); colorScheme.PlayerColors[1] = Color.FromArgb(Convert.ToInt32(colorNumbers[0]), Convert.ToInt32(colorNumbers[1]), Convert.ToInt32(colorNumbers[2])); colorSchemeChanged = true; } if (colorSchemeChanged) { colorScheme.Modified = true; colorScheme.Name = "(custom)"; } game.NumberOfSquareColors = numColors; } gameKey = getKeyForGame(game, true); string customThemeName = null; if (game.GetCustomThemes() != null) { customThemeName = game.GetDefaultCustomTheme(); } Theme theme = new Theme(colorScheme, pieceSet, numColors, customThemeName); theme.SaveToRegistry(gameKey); return(theme); }
static void Main() { // *** INITIALIZATION *** // Manager = new ChessV.Manager.Manager(); // Are we running on Windows? RunningOnWindows = Path.DirectorySeparatorChar == '\\'; // Base manager for registry key settings int currentRegistryVersion = RegistrySettings.Initialize(); // Factory object for dynamically creating a BoardPresentation for any Game object PresentationFactory.Initialize(); // Library object containing the collection of bitmap textures TextureLibrary.Initialize(); // Library object cointaining the collection of defined color schemes ColorSchemeLibrary.Initialize(currentRegistryVersion); // Library object containing the collection of defined piece sets PieceSetLibrary.Initialize(); // Make sure we loaded at least a standard piece set successfully or // else we'll need to inform the user to reinstall and then exit if (PieceSetLibrary.PieceSets == null) { MessageBox.Show("Directory of piece set graphics could not be found.\n" + "Please re-install ChessV.", "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); Application.Exit(); return; } if (!PieceSetLibrary.PieceSets.ContainsKey("Standard")) { MessageBox.Show("The 'Standard' piece set graphics could not be found.\n" + "Please re-install ChessV.", "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); Application.Exit(); return; } // *** INITIALIZE GAME CATALOG *** // string gameCatalog = ".Chess" + "\n\tChess" + "\n\t.Shuffled Variants|Fischer Random Chess" + "\n\t\tFischer Random Chess" + "\n\t\tChess480" + "\n\t\tWild Castle" + "\n\t\tChess256" + "\n\tPocket Knight" + "\n\tChess with Different Armies" + "\n\tKnightmate" + "\n\tAlice Chess" + "\n.Medium" + "\n\t.Capablanca Variants|Capablanca Chess" + "\n\t\tCapablanca Chess" + "\n\t\tCarrera's Chess" + "\n\t\tBird's Chess" + "\n\t\tModern Carrera's Chess" + "\n\t\tGothic Chess" + "\n\t\tGrotesque Chess" + "\n\t\tEmbassy Chess" + "\n\t\tVictorian Chess" + "\n\t\tLadorean Chess" + "\n\t\tSchoolbook Chess" + "\n\t\tUnivers Chess" + "\n\t\tOpti Chess" + "\n\tGrand Chess" + "\n\tFalcon Chess" + "\n\tOdin's Rune Chess" + "\n\tEurasian Chess" + "\n\tUnicorn Great Chess" + "\n.Large" + "\n\tWildebeest Chess" + "\n\tOmega Chess" + "\n\tGross Chess" + "\n\tDouble Chess (16 x 8)" + "\n\tOdyssey" + "\n\tChess on a 12 by 12 Board" + "\n.Historical" + "\n\tShatranj" + "\n\tCourier Chess" + "\n\tArchchess" + "\n\tEmperor's Game"; byte[] gameCatalogBytes = Encoding.ASCII.GetBytes(gameCatalog); TextReader textReader = new StreamReader(new MemoryStream(gameCatalogBytes)); GameCatalog.LoadIndex(textReader); // *** START APPLICATION *** // Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new MainForm()); } catch (Exception ex) { ExceptionForm exform; if (ex is ChessV.Exceptions.ChessVException) { exform = new ExceptionForm(((ChessV.Exceptions.ChessVException)ex).InnerException, ((ChessV.Exceptions.ChessVException)ex).Game); } else { exform = new ExceptionForm(ex, null); } exform.ShowDialog(); return; } }
private static Theme loadThemeFromRegistry(Game game, RegistryKey gameKey) { // find AppearanceAttribute (if any) to fill in any data missing // from the registry key with game defaults AppearanceAttribute appearance = null; object[] attrs; if (Program.Manager.AppearanceAttributes.ContainsKey(game.Name)) { attrs = new object[] { Program.Manager.AppearanceAttributes[game.Name] } } ; else { attrs = game.GetType().GetCustomAttributes(typeof(AppearanceAttribute), true); } if (attrs.Length >= 1) { appearance = (AppearanceAttribute)attrs[0]; if (appearance.Game != null && appearance.Game != game.Name) { appearance = null; } } // get number of colors object objNSquareColors = gameKey.GetValue("NSquareColors"); if (objNSquareColors == null) { if (appearance != null) { objNSquareColors = appearance.NumberOfSquareColors; } else { objNSquareColors = 2; } gameKey.SetValue("NSquareColors", objNSquareColors); } // get color scheme object objColorSchemeName = gameKey.GetValue("ColorScheme"); ColorScheme scheme; if (objColorSchemeName == null) { scheme = new ColorScheme(gameKey); } else { if (ColorSchemeLibrary.Contains((string)objColorSchemeName)) { scheme = ColorSchemeLibrary.Lookup((string)objColorSchemeName); } else { scheme = ColorSchemeLibrary.Default; } } // get piece set object objPieceSetName = gameKey.GetValue("PieceSet"); PieceSet pieceSet = null; if (objPieceSetName == null) { if (appearance != null) { if (PieceSetLibrary.Contains(appearance.PieceSet)) { pieceSet = PieceSetLibrary.Lookup(appearance.PieceSet); } else { pieceSet = PieceSetLibrary.Default; } } else { pieceSet = PieceSetLibrary.Default; } gameKey.SetValue("PieceSet", pieceSet.Name); } else if (PieceSetLibrary.Contains((string)objPieceSetName)) { pieceSet = PieceSetLibrary.Lookup((string)objPieceSetName); } else { pieceSet = PieceSetLibrary.Default; } // get custom theme name string customThemeName = (string)gameKey.GetValue("CustomTheme"); // create the Theme and return return(new Theme(scheme, pieceSet, (int)objNSquareColors, customThemeName)); }