Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #10
0
 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));
 }
Exemple #11
0
        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);
            }
        }
Exemple #12
0
        public override void ApplyRandom(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field)
        {
            int useLevel = TetrisGame.rgen.Next(50);

            ApplyColorSet(Group, useLevel);
        }
Exemple #13
0
 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));
 }
Exemple #15
0
 public abstract void ApplyTheme(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field, ThemeApplicationReason Reason);
Exemple #16
0
 public virtual String GetNominoTypeKey(Type src, IGameCustomizationHandler GameHandler, TetrisField Field)
 {
     return(src.FullName);
 }
 public MenuItemNewGameSelection(IGameCustomizationHandler handler)
 {
     _Handler = handler;
 }
Exemple #18
0
 public abstract void ApplyRandom(Nomino Group, IGameCustomizationHandler GameHandler, TetrisField Field);
Exemple #19
0
        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)) });
        }
Exemple #21
0
 public abstract PlayFieldBackgroundInfo GetThemePlayFieldBackground(TetrisField Field, IGameCustomizationHandler GameHandler);
Exemple #22
0
        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);
        }