示例#1
0
        private void Update()
        {
            if (ppu == null)
            {
                return;
            }

            if (paletteImages != null)
            {
                var palette  = manager.Palette;
                var palettes = new byte[paletteTextures.Length][];

                var width        = paletteTextures[0].width;
                var height       = paletteTextures[0].height;
                var bufferLength = width * height;

                for (int i = 0; i < paletteTextures.Length; i++)
                {
                    FillPaletteBuffer(i);
                    palettes[i] = paletteBuffer;

                    for (int j = 0; j < bufferLength; j++)
                    {
                        paletteBuffers[i][j] = palette[palettes[i][j]];
                    }

                    var nativePaletteTexture = paletteTextures[i].GetRawTextureData <Color32>();
                    var nativePaletteBuffer  = new NativeArray <Color32>(paletteBuffers[i], Allocator.Temp);

                    nativePaletteBuffer.CopyTo(nativePaletteTexture);
                    nativePaletteBuffer.Dispose();

                    paletteTextures[i].Apply(false);
                }
            }

            if (patternImages != null)
            {
                var palette       = manager.Palette;
                var patternTables = new byte[patternTextures.Length][, ];

                var width        = patternTextures[0].width;
                var height       = patternTextures[0].height;
                var bufferLength = width * height;

                for (int i = 0; i < patternTextures.Length; i++)
                {
                    FillPatternBuffer(i);
                    patternTables[i] = patternBuffer;

                    for (int j = 0; j < bufferLength; j++)
                    {
                        patternBuffers[i][j] = palette[patternTables[i][j % width, height - j / width - 1]];
                    }

                    var nativePatternTexture = patternTextures[i].GetRawTextureData <Color32>();
                    var nativePatternBuffer  = new NativeArray <Color32>(patternBuffers[i], Allocator.Temp);

                    nativePatternBuffer.CopyTo(nativePatternTexture);
                    nativePatternBuffer.Dispose();

                    patternTextures[i].Apply(false);
                }
            }

            if (oamText != null)
            {
                oamBuilder.Clear();

                for (int i = 0; i < 64; i++)
                {
                    var oamSprite = ppu.GetOamSprite(i);
                    oamBuilder.Append($"{i,2} X:{oamSprite.x,3} Y:{oamSprite.y,3} I:{(byte)oamSprite.tileIndex:X2} A:{(byte)oamSprite.attributes:X2}\n");
                }

                oamText.text = oamBuilder.ToString();
            }

            if (framesText != null)
            {
                framesText.text = $"Frames:{ppu.TotalFrames}";
            }
        }