public override void ApplyRandom(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field) { PrepareTheme(); int RandomLevel = TetrisGame.rgen.Next(25); Action <Nomino, TetrisField, int> SelectL = Apply_L; Action <Nomino, TetrisField, int>[] Types = new Action <Nomino, TetrisField, int>[] { Apply_L, Apply_J, Apply_I, Apply_O, Apply_S, Apply_Z, Apply_T }; var selected = TetrisGame.Choose(Types); selected(Group, Field, RandomLevel); }
public override void ApplyTheme(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field, ThemeApplicationReason Reason) { PrepareTheme(); var LineCount = (GameHandler.Statistics is TetrisStatistics ts) ? ts.LineCount : 0; int CurrLevel = Field == null ? 0 : (int)(LineCount / 10); if (Group is Tetromino_L) { Apply_L(Group as Tetromino_L, Field, CurrLevel); } else if (Group is Tetromino_J) { Apply_J(Group as Tetromino_J, Field, CurrLevel); } else if (Group is Tetromino_I) { Apply_I(Group as Tetromino_I, Field, CurrLevel); } else if (Group is Tetromino_O) { Apply_O(Group as Tetromino_O, Field, CurrLevel); } else if (Group is Tetromino_S) { Apply_S(Group as Tetromino_S, Field, CurrLevel); } else if (Group is Tetromino_Z) { Apply_Z(Group as Tetromino_Z, Field, CurrLevel); } else if (Group is Tetromino_T) { Apply_T(Group as Tetromino_T, Field, CurrLevel); } else { foreach (var blockcheck in Group) { if (blockcheck.Block is StandardColouredBlock) { StandardColouredBlock scb = blockcheck.Block as StandardColouredBlock; scb.DisplayStyle = StandardColouredBlock.BlockStyle.Style_Custom; TetrisGame.Choose(new Image[] { GetSolidSquare(CurrLevel), GetDottedLight(CurrLevel), GetDottedDark(CurrLevel), GetFatDotted(CurrLevel), GetInsetBevel(CurrLevel) }); scb._RotationImagesSK = new SKImage[] { SkiaSharp.Views.Desktop.Extensions.ToSKImage(new Bitmap(GetInsetBevel(CurrLevel))) }; //scb.BaseImageKey = Solid_Square; } } } }
MenuStateThemeSelection[] ThemeOptions = null; /*new MenuStateThemeSelection[] { * * new MenuStateThemeSelection("Standard",typeof(StandardTetrominoTheme), ()=>new StandardTetrominoTheme(StandardColouredBlock.BlockStyle.Style_Shine)), * new MenuStateThemeSelection("Nintendo NES",typeof(NESTetrominoTheme),() => new NESTetrominoTheme()), * new MenuStateThemeSelection("Game Boy",typeof(GameBoyTetrominoTheme), ()=>new GameBoyTetrominoTheme()), * new MenuStateThemeSelection("SNES TD&DRM",typeof(SNESTetrominoTheme), ()=>new SNESTetrominoTheme()), * new MenuStateThemeSelection("Outlined",typeof(OutlinedTetrominoTheme), ()=>new OutlinedTetrominoTheme()), * new MenuStateThemeSelection("Simple",typeof(SimpleBlockTheme), ()=>new SimpleBlockTheme()), * * };*/ private IEnumerable <MenuStateThemeSelection> GetThemeSelectionsForHandler(IGameCustomizationHandler handler) { var themetypes = Program.GetHandlerThemes(handler.GetType()); foreach (var themeiter in themetypes) { ConstructorInfo ci = themeiter.GetConstructor(new Type[] { }); if (ci != null) { NominoTheme buildResult = (NominoTheme)ci.Invoke(new object[] { }); MenuStateThemeSelection msst = new MenuStateThemeSelection(buildResult.Name, themeiter, () => buildResult); yield return(msst); } } }
public GameplayGameState(IGameCustomizationHandler Handler, FieldInitializer pFieldInitializer, IAudioHandler pAudio, MenuState MainMenu) { Sounds = pAudio; GameHandler = Handler; MainMenuState = MainMenu; PlayField = new TetrisField(Handler.DefaultTheme, Handler); //PlayField.Settings = Settings; PlayField.OnThemeChangeEvent += PlayField_OnThemeChangeEvent; if (pFieldInitializer != null) { pFieldInitializer.Initialize(PlayField); } PlayField.BlockGroupSet += PlayField_BlockGroupSet; PlayField.SetStandardHotLines(); }
public void SetFieldColors(IGameCustomizationHandler handler) { lock (this) { foreach (var iteraterow in FieldContents) { foreach (var iteratecell in iteraterow) { if (iteratecell != null && iteratecell.Owner != null) { Theme.ApplyTheme(iteratecell.Owner, handler, this, NominoTheme.ThemeApplicationReason.Normal); } } } HasChanged = true; } }
public override void ApplyTheme(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field, ThemeApplicationReason Reason) { char DesiredNomino = 'I'; Dictionary <Type, char> NominoLookup = new Dictionary <Type, char>() { { typeof(Tetromino_T), 'T' }, { typeof(Tetromino_S), 'S' }, { typeof(Tetromino_Z), 'Z' }, { typeof(Tetromino_L), 'L' }, { typeof(Tetromino_J), 'J' }, { typeof(Tetromino_O), 'O' }, { typeof(Tetromino_I), 'I' }, { typeof(Tetromino_Y), 'Y' } }; if (NominoLookup.ContainsKey(Group.GetType())) { DesiredNomino = NominoLookup[Group.GetType()]; } else { DesiredNomino = TetrisGame.Choose(TetOrder); } foreach (var iterate in Group) { if (iterate.Block is StandardColouredBlock) { StandardColouredBlock sbc = iterate.Block as StandardColouredBlock; sbc.DisplayStyle = StandardColouredBlock.BlockStyle.Style_Custom; sbc.BlockColor = Color.Black; if (Field.GetActiveBlockGroups().Contains(Group)) { sbc._RotationImagesSK = new SKImage[] { SKImage.FromBitmap(GetUnsetImage(ColourData[Field.Level > 12 ? 12 : Field.Level].GetColor(DesiredNomino))) } } ; else { sbc._RotationImagesSK = new SKImage[] { SKImage.FromBitmap(GetSetImage(ColourData[Field.Level > 12 ? 12 : Field.Level].GetColor(DesiredNomino))) }; } } } }
public override void ApplyRandom(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field) { //choose a random level... int Randomlevel = TetrisGame.rgen.Next(0, 13); //choose a random tetromino type. char randomTet = TetrisGame.Choose(TetOrder.ToCharArray()); //get the image for it foreach (var iterate in Group) { if (iterate.Block is StandardColouredBlock) { StandardColouredBlock sbc = iterate.Block as StandardColouredBlock; sbc.DisplayStyle = StandardColouredBlock.BlockStyle.Style_Custom; sbc._RotationImagesSK = new SKImage[] { SKImage.FromBitmap(GetSetImage(ColourData[Randomlevel].GetColor(randomTet))) }; } } }
public override void ApplyTheme(Nomino Group, IGameCustomizationHandler handler, TetrisField Field, ThemeApplicationReason Reason) { var LineCount = (handler.Statistics is TetrisStatistics ts) ? ts.LineCount : 0; int CurrLevel = Field == null ? 0 : (int)(LineCount / 10); if (Group is Tetromino_I) { ApplyTheme_I(Group, CurrLevel); } else if (Group is Tetromino_J) { ApplyTheme_J(Group, CurrLevel); } else if (Group is Tetromino_L) { ApplyTheme_L(Group, CurrLevel); } else if (Group is Tetromino_O) { ApplyTheme_O(Group, CurrLevel); } else if (Group is Tetromino_S) { ApplyTheme_S(Group, CurrLevel); } else if (Group is Tetromino_Z) { ApplyTheme_Z(Group, CurrLevel); } else if (Group is Tetromino_T) { ApplyTheme_T(Group, CurrLevel); } else { ApplyImages(Group, new Image[] { GetOutlinedImage(BlockOutlines.Outline_Bottom | BlockOutlines.Outline_Top | BlockOutlines.Outline_Right | BlockOutlines.Outline_Left, GetLevelColor(CurrLevel)) }); } }
/// <summary> /// Helper extension on IStateOwner. This attempts to get the IGameCustomizationHandler that is currently "active" for the handler. /// The customization handler is a part of the GameplayGameState, so this relies on either the current state being the gameplay game state, a Composite state of the gameplay gamestate. If neither of those /// is the case, it will return the last handler that was previously retrieved through this method from that Owner, if this is the first call, it will return null. /// </summary> /// <param name="pOwner"></param> /// <returns></returns> public static IGameCustomizationHandler GetHandler(this IStateOwner pOwner) { IGameCustomizationHandler result = null; if (pOwner.CurrentState is GameplayGameState ggs) { result = ggs.GameHandler; } else if (pOwner.CurrentState is ICompositeState <GameplayGameState> css) { result = css.GetComposite().GameHandler; } else { if (LastHandlers.ContainsKey(pOwner)) { return(LastHandlers[pOwner]); } } LastHandlers[pOwner] = result; return(result); }
public override PlayFieldBackgroundInfo GetThemePlayFieldBackground(TetrisField Field, IGameCustomizationHandler GameHandler) { if (DarkImage == null) { DarkImage = new Bitmap(250, 500); using (Graphics drawdark = Graphics.FromImage(DarkImage)) { drawdark.Clear(Color.FromArgb(10, 10, 10)); } } return(new PlayFieldBackgroundInfo(DarkImage, Color.Transparent)); }
public void PopulateMenu(GenericMenuState Target, IStateOwner pOwner) { Target.StateHeader = "Select Game Type"; //var NewGameItem = new MenuStateTextMenuItem() { Text = "New Game" }; List <MenuStateMenuItem> AllItems = new List <MenuStateMenuItem>(); Dictionary <MenuStateMenuItem, IGameCustomizationHandler> HandlerLookup = new Dictionary <MenuStateMenuItem, IGameCustomizationHandler>(); var BackItem = new MenuStateTextMenuItem() { Text = "Back to Main" }; foreach (var iterate in Program.GetGameHandlers()) { ConstructorInfo ci = iterate.GetConstructor(new Type[] { }); if (ci != null) { IGameCustomizationHandler handler = (IGameCustomizationHandler)ci.Invoke(new object[] { }); MenuStateTextMenuItem builditem = new MenuStateTextMenuItem() { Text = handler.Name }; HandlerLookup.Add(builditem, handler); AllItems.Add(builditem); } } AllItems.Add(BackItem); Target.MenuItemActivated += (o, e) => { if (HandlerLookup.ContainsKey(e.MenuElement)) { IGameCustomizationHandler usehandler = HandlerLookup[e.MenuElement]; if (pOwner is IGamePresenter igp) { pOwner.CurrentState = new GameplayGameState(usehandler, null, TetrisGame.Soundman, Target.PrimaryMenu); igp.StartGame(); } } else if (e.MenuElement == BackItem) { pOwner.CurrentState = RevertState; } }; var FontSrc = TetrisGame.GetRetroFont(14, 1.0f); Target.HeaderTypeface = FontSrc.FontFamily.Name; Target.HeaderTypeSize = (float)(28f * pOwner.ScaleFactor); foreach (var iterate in AllItems) { if (iterate is MenuStateTextMenuItem titem) { titem.FontFace = FontSrc.FontFamily.Name; titem.FontSize = FontSrc.Size; } Target.MenuElements.Add(iterate); } }
public override void ApplyRandom(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field) { int useLevel = TetrisGame.rgen.Next(50); ApplyColorSet(Group, useLevel); }
public virtual String GetNominoKey(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field) { return(GetNominoTypeKey(Group.GetType(), GameHandler, Field)); }
public override PlayFieldBackgroundInfo GetThemePlayFieldBackground(TetrisField Field, IGameCustomizationHandler GameHandler) { return(new PlayFieldBackgroundInfo(TetrisGame.Imageman["background", 0.5f], Color.Transparent)); }
public abstract void ApplyTheme(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field, ThemeApplicationReason Reason);
public virtual String GetNominoTypeKey(Type src, IGameCustomizationHandler GameHandler, TetrisField Field) { return(src.FullName); }
public MenuItemNewGameSelection(IGameCustomizationHandler handler) { _Handler = handler; }
public abstract void ApplyRandom(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field);
public static Dictionary <String, List <SKBitmap> > GetTetrominoBitmapsSK(SKRect Bounds, NominoTheme UseTheme, IGameCustomizationHandler handler, TetrisField PlayField = null, float ScaleFactor = 1) { Dictionary <String, List <SKBitmap> > TetrominoImages = new Dictionary <String, List <SKBitmap> >(); float useSize = 18 * ScaleFactor; SKSize useTetSize = new SKSize(useSize, useSize); Nomino[] AllNominos = handler.GetNominos(); SKBitmap[] bitmaps = new SKBitmap[AllNominos.Length]; foreach (var iterate in AllNominos) { UseTheme.ApplyTheme(iterate, handler, PlayField, NominoTheme.ThemeApplicationReason.Normal); } for (int i = 0; i < AllNominos.Length; i++) { bitmaps[i] = TetrisGame.OutlineImageSK(AllNominos[i].GetImageSK(useTetSize)); String GetNominoKey = UseTheme.GetNominoKey(AllNominos[i], handler, PlayField); if (!TetrominoImages.ContainsKey(GetNominoKey)) { TetrominoImages.Add(GetNominoKey, new List <SKBitmap>()); } TetrominoImages[GetNominoKey].Add(bitmaps[i]); } return(TetrominoImages); }
public override void ApplyRandom(Nomino Group, IGameCustomizationHandler Handler, TetrisField Field) { int LevelUse = TetrisGame.rgen.Next(10); ApplyImages(Group, new Image[] { GetOutlinedImage(BlockOutlines.Outline_Bottom | BlockOutlines.Outline_Top | BlockOutlines.Outline_Right | BlockOutlines.Outline_Left, GetLevelColor(LevelUse)) }); }
public abstract PlayFieldBackgroundInfo GetThemePlayFieldBackground(TetrisField Field, IGameCustomizationHandler GameHandler);
public static Dictionary <String, List <Image> > GetTetrominoBitmaps(RectangleF Bounds, NominoTheme UseTheme, IGameCustomizationHandler Handler, TetrisField PlayField = null, float ScaleFactor = 1) { Dictionary <String, List <Image> > TetrominoImages = new Dictionary <String, List <Image> >(); float useSize = 18 * ScaleFactor; SizeF useTetSize = new SizeF(useSize, useSize); Nomino[] AllNominos = Handler.GetNominos(); Image[] bitmaps = new Image[AllNominos.Length]; foreach (var nom in AllNominos) { UseTheme.ApplyTheme(nom, Handler, PlayField, NominoTheme.ThemeApplicationReason.Normal); } for (int i = 0; i < AllNominos.Length; i++) { bitmaps[i] = OutLineImage(AllNominos[i].GetImage(useTetSize)); String NominoKey = UseTheme.GetNominoKey(AllNominos[i], Handler, PlayField); if (!TetrominoImages.ContainsKey(NominoKey)) { TetrominoImages.Add(NominoKey, new List <Image>()); } TetrominoImages[NominoKey].Add(bitmaps[i]); } return(TetrominoImages); }
public override PlayFieldBackgroundInfo GetThemePlayFieldBackground(TetrisField Field, IGameCustomizationHandler Handler) { if (ColoredBG == null) { ColoredBG = GetColoredBackground(Color.AntiqueWhite, null); } return(ColoredBG); }