예제 #1
0
        public GlobalCache(PakIndex index)
        {
            Index      = index;
            VBucksIcon = index.GetPackage("/FortniteGame/Content/UI/Foundation/Shell/Textures/T-Icon-VBucks-L").GetExport <Texture2D>().Image;

            var img = index.GetPackage("/FortniteGame/Content/VisualThreatManager/StormVisuals/Test/SpawnParticles/Streamers/LowResBlurredNoise").GetExport <Texture2D>().Image; // don't dispose objects given by exports

            using (var b = SKBitmap.FromImage(img))
                using (var b2 = new SKBitmap(new SKImageInfo(b.Width * 2, b.Height * 2), SKBitmapAllocFlags.ZeroPixels))
                {
                    using (var c = new SKCanvas(b2))
                        using (var s = SKShader.CreateColorFilter(SKShader.CreateBitmap(b, SKShaderTileMode.Repeat, SKShaderTileMode.Repeat), SKColorFilter.CreateLighting(new SKColor(160, 160, 160), new SKColor(15, 15, 15))))
                        {
                            c.DrawRect(0, 0, b2.Width, b2.Height, new SKPaint {
                                Shader = s
                            });
                        }
                    using (var borderNoiseBig = b2.Resize(new SKImageInfo(b2.Width * 16, b2.Height * 16), SKFilterQuality.Medium))
                        using (var borderNoise = new SKBitmap(b.Width * 16, b.Width * 16))
                        {
                            borderNoiseBig.ExtractSubset(borderNoise, new SKRectI(b2.Width * 4, b2.Width * 4, b2.Width * 12, b2.Width * 12));
                            BaseBorderShader = SKShader.CreateBitmap(borderNoise, SKShaderTileMode.Repeat, SKShaderTileMode.Repeat);
                        }
                }

            NameTypeface             = SKTypeface.FromStream(index.GetFile("/FortniteGame/Content/UI/Foundation/Fonts/BurbankBigCondensed-Black.ufont").AsStream());
            ShortDescriptionTypeface = SKTypeface.FromStream(index.GetFile("/FortniteGame/Content/UI/Foundation/Fonts/NotoSans-Regular.ufont").AsStream());
            PriceTypeface            = SKTypeface.FromStream(index.GetFile("/FortniteGame/Content/UI/Foundation/Fonts/NotoSans-Bold.ufont").AsStream());
            CategoryTypeface         = SKTypeface.FromStream(index.GetFile("/FortniteGame/Content/UI/Foundation/Fonts/NotoSans-Bold.ufont").AsStream());

            ImagePaint = new SKPaint
            {
                IsAntialias   = true,
                FilterQuality = SKFilterQuality.High
            };

            {
                var types = EnumHelper <DrawType> .Values;
                SectionCaches = new SectionCache[types.Length];
                for (int i = 0; i < types.Length; i++)
                {
                    SectionCaches[i] = new SectionCache(types[i], this);
                }
            }

            {
                RarityColors = new ColorPalette[]
                {
                    new ColorPalette(this, default, new SKColor(150, 150, 150), new SKColor(50, 53, 58), new SKColor(212, 212, 212), new SKColor(249, 249, 249)),  // COMMON
        internal override void UpdatePaint(SKPaint fillPaint, SKRect bounds)
        {
            if (Surface is SkiaCompositionSurface scs)
            {
                var imageShader         = SKShader.CreateImage(scs.Image, SKShaderTileMode.Repeat, SKShaderTileMode.Repeat, TransformMatrix.ToSKMatrix());
                var opacity             = 255 * Compositor.CurrentOpacity;
                var filteredImageShader = SKShader.CreateColorFilter(imageShader, SKColorFilter.CreateBlendMode(new SKColor(0xFF, 0xFF, 0xFF, (byte)opacity), SKBlendMode.Modulate));

                fillPaint.Shader = filteredImageShader;

                fillPaint.IsAntialias = true;
            }
            else
            {
                fillPaint.Shader = null;
            }
        }