Beispiel #1
0
        public Menu()
        {
            Shader plainShader = new Shader.Plain(new Color8(0, 0, 0), new Color8(0, 0, 0), ' ');
            Image  plainImage  = new Image.Rectangle(plainShader, new Vector2d16(600, 300), 0);

            Shader logoShader = new Shader.TextureSymbol(ResourceLoader.LoadResource <Atlas16>(@"Textures\mainMenu.bms"), new Vector2d16(0, 0), new Vector2d16(51, 5));
            Image  logo       = new Image.Rectangle(logoShader, new Vector2d16(51, 5), 1);

            //Image mainMenuImage = new Image.Rectangle(mainMenu, new Vector2d16(30, 15), 126);

            Image team = new Image.Rectangle(new Shader.RichText("Made by Code0", new Color8(60, 60, 60)), new Vector2d16(14, 1), 200);

            Shader cursorShader = new Shader.Plain(new Color8(0, 0, 255), Color8.GetNull(), '>');
            Image  cursor       = new Image.Rectangle(cursorShader, new Vector2d16(1, 1), 127);

            Shape circle = new Shape.Circle(1);

            var tmp = new GameObject[]
            {
                new VisualObject(new Vector2d16(-100, -50), plainImage),

                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 25, Config.screenHeight / 5), logo),
                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 8, Config.screenHeight / 5 + 8), newGame),
                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 4, Config.screenHeight / 5 + 10), loadGame),
                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 4, Config.screenHeight / 5 + 12), test),
                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 5, Config.screenHeight / 5 + 14), mapEditor),
                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 4, Config.screenHeight / 5 + 16), settings),
                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 3, Config.screenHeight / 5 + 18), credits),
                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 2, Config.screenHeight / 5 + 20), exit),
                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 7, Config.screenHeight / 5 * 4), team)
            };

            map  = new Map("Test", Renderer.Dimensions, 0, tmp);
            hero = new KinematicObject(new Vector2d16(Config.screenWidth / 2 - 10, Config.screenHeight / 5 + 8), circle, cursor);
        }
Beispiel #2
0
        public Credits()
        {
            Shader plainShader = new Shader.Plain(new Color8(0, 0, 0), new Color8(0, 0, 0), ' ');
            Image  plainImage  = new Image.Rectangle(plainShader, new Vector2d16(600, 300), 0);

            Shader logoShader = new Shader.TextureSymbol(ResourceLoader.LoadResource <Atlas16>(@"Textures\mainMenu.bms"), new Vector2d16(0, 12), new Vector2d16(53, 16));
            Image  logo       = new Image.Rectangle(logoShader, new Vector2d16(54, 4), 1);


            Shader cursorShader = new Shader.Plain(new Color8(0, 0, 255), Color8.GetNull(), ' ');
            Image  cursor       = new Image.Rectangle(cursorShader, new Vector2d16(1, 1), 127);

            Shape circle = new Shape.Circle(1);

            var tmp = new GameObject[]
            {
                new VisualObject(new Vector2d16(-100, -50), plainImage),

                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 25, Config.screenHeight / 5), logo),
                new VisualObject(new Vector2d16(Config.screenWidth / 2 - 28, Config.screenHeight / 2.5), credits)
            };

            map  = new Map("Test", Renderer.Dimensions, 0, tmp);
            hero = new KinematicObject(new Vector2d16(0, 0), circle, cursor);
        }
Beispiel #3
0
 public override Fragment8 Compute(Vector2d16 current, Vector2d16 start, Vector2d16 end)
 {
     if (text.Length <= current._2 || text[current._2].Length <= current._1)
     {
         return(Fragment8.GetNull());
     }
     return(new Fragment8(new Color8(255, 255, 255), Color8.GetNull(), text[current._2][current._1]));
 }
Beispiel #4
0
 internal Color8 Delinearize(Color8 color)
 {
     return(new(
                Delinearize(color.R),
                Delinearize(color.G),
                Delinearize(color.B),
                color.A
                ));
 }
Beispiel #5
0
 internal Color8 Linearize(Color8 color)
 {
     return(new(
                Linearize(color.R),
                Linearize(color.G),
                Linearize(color.B),
                color.A
                ));
 }
Beispiel #6
0
 public Plain(
     Color8 foreground,
     Color8 background,
     char symbol
     )
 {
     this.foreground = foreground;
     this.background = background;
     this.symbol     = symbol;
 }
Beispiel #7
0
        public override Fragment8 Compute(Vector2d16 current, Vector2d16 start, Vector2d16 end)
        {
            char ch = (char)atlas.GetData(this.start - start + current);

            if (ch == 0)
            {
                return(Fragment8.GetNull());
            }
            return(new Fragment8(new Color8(255, 255, 255), Color8.GetNull(), ch));
        }
Beispiel #8
0
 public Gradient(
     Color8 foregroundStart,
     Color8 foregroundEnd,
     Color8 backgroundStart,
     Color8 backgroundEnd,
     char symbol
     )
 {
     this.foregroundStart = foregroundStart;
     this.foregroundEnd   = foregroundEnd;
     this.backgroundStart = backgroundStart;
     this.backgroundEnd   = backgroundEnd;
     this.symbol          = symbol;
 }
Beispiel #9
0
        /// <summary>
        /// Extended class for text objects.<br/><br/>
        /// Alignment can be set by putting /l, /r, /c at the beginning of the string.<br/><br/>
        /// Styles can be added by encapsulating text with tags.<br/>
        /// # - bold*<br/>
        /// | - faint*<br/>
        /// / - italic*<br/>
        /// _ - underlined<br/>
        /// ^ - blink*<br/>
        /// % - cross-out*<br/>
        /// ~ - video inverse<br/>
        /// @ - fraktur*<br/><br/>
        ///
        /// <i>*Not supported in windows 10 console.</i>
        /// </summary>
        public RichText(string text, Color8 foreground)
        {
            int max = text.Length;

            if (text[0] == '/')
            {
                switch (text[1])
                {
                case 'c':
                case 'r':
                case 'l':
                    this.text = new string[] { text.Substring(2).Trim() };
                    break;
                }
            }
            else
            {
                this.text = new string[] { text };
            }
            this.foreground = foreground;
        }
Beispiel #10
0
        /// <summary>
        /// Extended class for text objects.<br/><br/>
        /// Alignment can be set by putting /l, /r, /c at the beginning of the string.<br/><br/>
        /// Styles can be added by encapsulating text with tags.<br/>
        /// # - bold*<br/>
        /// | - faint*<br/>
        /// / - italic*<br/>
        /// _ - underlined<br/>
        /// ^ - blink*<br/>
        /// % - cross-out*<br/>
        /// ~ - video inverse<br/>
        /// @ - fraktur*<br/><br/>
        ///
        /// <i>*Not supported in windows 10 console.</i>
        /// </summary>
        public RichText(string[] text, Color8 foreground)
        {
            int max = 0;

            foreach (string str in text)
            {
                if (str.Length > max)
                {
                    max = str.Length;
                }
            }
            for (int i = 0; i < text.Length; ++i)
            {
                if (text[i][0] == '/')
                {
                    switch (text[i][1])
                    {
                    case 'c':
                        text[i] = text[i].Substring(2).Trim();
                        text[i] = text[i].PadLeft((max - text[i].Length) / 2 + text[i].Length).PadRight((max - text[i].Length) / 2 + text[i].Length);
                        break;

                    case 'r':
                        text[i] = text[i].Substring(2).Trim();
                        text[i] = text[i].PadLeft(max);
                        break;

                    case 'l':
                        text[i] = text[i].Substring(2).Trim();
                        text[i] = text[i].PadRight(max);
                        break;
                    }
                }
            }
            this.text       = text;
            this.foreground = foreground;
        }
Beispiel #11
0
        public override Fragment8 Compute(Vector2d16 current, Vector2d16 start, Vector2d16 end)
        {
            if (text.Length <= current._2 || text[current._2].Length <= current._1)
            {
                return(Fragment8.GetNull());
            }
            switch (text[current._2][current._1])
            {
            case '#':     //Bold
                return(new Fragment8(foreground, Color8.GetNull(), (char)0xDB80));

            case '|':     //Faint
                return(new Fragment8(foreground, Color8.GetNull(), (char)0xDB81));

            case '/':     //Italic
                return(new Fragment8(foreground, Color8.GetNull(), (char)0xDB82));

            case '_':     //Underlined
                return(new Fragment8(foreground, Color8.GetNull(), (char)0xDB83));

            case '^':     //Blink
                return(new Fragment8(foreground, Color8.GetNull(), (char)0xDB84));

            case '%':     //Crossed-out
                return(new Fragment8(foreground, Color8.GetNull(), (char)0xDB85));

            case '~':     //Video inverse
                return(new Fragment8(foreground, Color8.GetNull(), (char)0xDB86));

            case '@':     //Fraktur
                return(new Fragment8(foreground, Color8.GetNull(), (char)0xDB87));

            default:
                return(new Fragment8(foreground, Color8.GetNull(), text[current._2][current._1]));
            }
        }
    private static unsafe void ProcessSprite()
    {
        uint scale      = Scale;
        var  spriteSize = SpriteSize;
        var  scaledSize = spriteSize * scale;

        var spriteDataArray = SpriteData !.Clone() as Color16[];
        var spriteData      = spriteDataArray.AsSpan();

        if (GammaCorrection)
        {
            SpriteMaster.Resample.Passes.GammaCorrection.Linearize(spriteData, spriteSize);
        }
        if (AlphaPremultiplication)
        {
            SpriteMaster.Resample.Passes.PremultipliedAlpha.Reverse(spriteData, spriteSize);
        }

        if (scale != 1)
        {
            var xBRZInterface = new SpriteMaster.Resample.Scalers.xBRZ.Scaler.ScalerInterface();

            spriteData = xBRZInterface.Apply(
                new SpriteMaster.Resample.Scalers.xBRZ.Config(
                    wrapped: Vector2B.False,
                    luminanceWeight: LuminanceWeight,
                    gammaCorrected: !GammaCorrection,
                    equalColorTolerance: EqualColorTolerance,
                    dominantDirectionThreshold: DominantDirectionThreshold,
                    steepDirectionThreshold: SteepDirectionThreshold,
                    centerDirectionBias: CenterDirectionBias
                    ),
                scaleMultiplier: scale,
                sourceData: spriteData,
                sourceSize: spriteSize,
                targetData: null,
                targetSize: scaledSize
                );
            spriteSize = scaledSize;
        }

        if (AlphaPremultiplication)
        {
            SpriteMaster.Resample.Passes.PremultipliedAlpha.Apply(spriteData, spriteSize);
        }
        if (GammaCorrection)
        {
            SpriteMaster.Resample.Passes.GammaCorrection.Delinearize(spriteData, spriteSize);
        }

        var resampledData = Color8.Convert(spriteData);

        Bitmap resampledBitmap;

        fixed(Color8 *ptr = resampledData)
        {
            int stride = spriteSize.Width * sizeof(Color8);

            resampledBitmap = new Bitmap(spriteSize.Width, spriteSize.Height, stride, PixelFormat.Format32bppPArgb, (IntPtr)ptr);
        }

        var oldBitmap = PreviewBitmap;

        PreviewBitmap = resampledBitmap;
        oldBitmap?.Dispose();
    }
Beispiel #13
0
 public Fragment8(Color8 foreground, Color8 background, char symbol)
 {
     this.foreground = foreground;
     this.background = background;
     this.symbol     = symbol;
 }