コード例 #1
0
        private static TextureOffsets Read_TextureOffsets(Stream s, Flags flags)
        {
            var offsets = new TextureOffsets();

            using (var br = new BinaryReader(s, Encoding.ASCII, true))
            {
                {
                    s.Position     = 0x18;
                    offsets.Top    = br.ReadUInt32();
                    offsets.TopExt = br.ReadUInt32();
                }

                {
                    s.Position     = 0x28;
                    offsets.Bottom = br.ReadUInt32();
                }

                {
                    s.Position           = 0x40;
                    offsets.FolderClosed = br.ReadUInt32();
                    offsets.FolderOpen   = br.ReadUInt32();
                }

                {
                    s.Position        = 0x54;
                    offsets.FileLarge = br.ReadUInt32();
                    offsets.FileSmall = br.ReadUInt32();
                }
            }
            return(offsets);
        }
コード例 #2
0
        public async Task Initialize(Material cubeMaterial)
        {
            const int maxWidth = 1024;

            int x = 0, y = 0;
            var textureFiles = Directory.EnumerateFiles(Path.Combine(Application.streamingAssetsPath, "textures/blocks/"), "*.png").ToList();
            var height       = (int)Math.Ceiling((float)textureFiles.Count / (maxWidth / 16)) * 16;
            var texture      = new Texture2D(maxWidth, height, TextureFormat.ARGB32, true)
            {
                filterMode          = FilterMode.Bilinear,
                alphaIsTransparency = true
            };

            foreach (var texFile in textureFiles)
            {
                using (var www = new WWW(texFile))
                {
                    await www;
                    var   tex = www.texture;
                    texture.SetPixels(x, y, 16, 16, tex.GetPixels());
                }

                TextureOffsets.Add(Path.GetFileNameWithoutExtension(texFile), new Vector2Int(x, y));
                x += 16;

                if (x >= maxWidth)
                {
                    y += 16;
                    x  = 0;
                }
            }

            texture.Apply();

            Texture     = texture;
            TextureSize = new Vector2Int(texture.width, texture.height);
            cubeMaterial.mainTexture = texture;
        }
コード例 #3
0
        private static TextureOffsets Write_Textures(Stream s, Theme b)
        {
            TextureOffsets offsets = new TextureOffsets();

            // Top
            if (b.Flags.TopDrawType == TopDrawType.Texture &&
                b.Textures.Top.Format != RawTexture.DataFormat.Invalid)
            {
                offsets.Top = (uint)s.Position;
                var data = b.Textures.Top.Data;
                s.Write(data, 0, data.Length);
            }
            else if (b.Flags.TopDrawType == TopDrawType.SolidColorTexture &&
                     b.Textures.Top.Format != RawTexture.DataFormat.Invalid)
            {
                offsets.Top = (uint)s.Position;
                var data = b.Textures.Top.Data;
                s.Write(data, 0, data.Length);
            }

            // Top Ext
            if (b.Flags.TopDrawType == TopDrawType.SolidColorTexture &&
                b.Textures.TopExt.Format != RawTexture.DataFormat.Invalid)
            {
                offsets.TopExt = (uint)s.Position;
                var data = b.Textures.TopExt.Data;
                s.Write(data, 0, data.Length);
            }

            // Bottom
            if (b.Flags.BottomDrawType == BottomDrawType.Texture &&
                b.Textures.Bottom.Format != RawTexture.DataFormat.Invalid)
            {
                offsets.Bottom = (uint)s.Position;
                var data = b.Textures.Bottom.Data;
                s.Write(data, 0, data.Length);
            }

            // Folder
            if (b.Flags.FolderTexture &&
                b.Textures.FolderClosed.Format != RawTexture.DataFormat.Invalid &&
                b.Textures.FolderOpen.Format != RawTexture.DataFormat.Invalid)
            {
                offsets.FolderClosed = (uint)s.Position;
                var data = b.Textures.FolderClosed.Data;
                s.Write(data, 0, data.Length);

                offsets.FolderOpen = (uint)s.Position;
                data = b.Textures.FolderOpen.Data;
                s.Write(data, 0, data.Length);
            }

            // Files
            if (b.Flags.FileTexture &&
                b.Textures.FileLarge.Format != RawTexture.DataFormat.Invalid &&
                b.Textures.FileSmall.Format != RawTexture.DataFormat.Invalid)
            {
                offsets.FileLarge = (uint)s.Position;
                var data = b.Textures.FileLarge.Data;
                s.Write(data, 0, data.Length);

                offsets.FileSmall = (uint)s.Position;
                data = b.Textures.FileSmall.Data;
                s.Write(data, 0, data.Length);
            }

            return(offsets);
        }
コード例 #4
0
        private static Textures Read_Textures(Stream s, Flags flags, TextureOffsets offsets)
        {
            var texes = new Textures();

            using (var br = new BinaryReader(s, Encoding.ASCII, true))
            {
                // Top
                if (flags.TopDrawType == TopDrawType.Texture)
                {
                    s.Position = offsets.Top;
                    switch (flags.TopFrameType)
                    {
                    case TopFrameType.Single:
                        texes.Top = new RawTexture(512, 256, RawTexture.DataFormat.Bgr565);
                        break;

                    case TopFrameType.SlowScroll:
                    case TopFrameType.FastScroll:
                        texes.Top = new RawTexture(1024, 256, RawTexture.DataFormat.Bgr565);
                        break;

                    default:
                        throw new ArgumentException("Invalid Texture Format",
                                                    nameof(flags) + "." + nameof(flags.TopFrameType));
                    }
                    texes.Top.Read(s);
                    texes.TopExt = new RawTexture();
                }
                else if (flags.TopDrawType == TopDrawType.SolidColorTexture)
                {
                    s.Position = offsets.Top;
                    texes.Top  = new RawTexture(64, 64, RawTexture.DataFormat.A8);
                    texes.Top.Read(s);
                    if (offsets.TopExt != 0)
                    {
                        s.Position   = offsets.TopExt;
                        texes.TopExt = new RawTexture(64, 64, RawTexture.DataFormat.A8);
                        texes.TopExt.Read(s);
                    }
                    else
                    {
                        texes.TopExt = new RawTexture();
                    }
                }
                else
                {
                    texes.Top    = new RawTexture();
                    texes.TopExt = new RawTexture();
                }

                // Bottom
                if (flags.BottomDrawType == BottomDrawType.Texture)
                {
                    s.Position = offsets.Bottom;
                    switch (flags.BottomFrameType)
                    {
                    case BottomFrameType.Single:
                        texes.Bottom = new RawTexture(512, 256, RawTexture.DataFormat.Bgr565);
                        break;

                    case BottomFrameType.SlowScroll:
                    case BottomFrameType.FastScroll:
                    case BottomFrameType.BounceScroll:
                    case BottomFrameType.PageScroll:
                        texes.Bottom = new RawTexture(1024, 256, RawTexture.DataFormat.Bgr565);
                        break;

                    default:
                        throw new ArgumentException("Invalid Texture Format",
                                                    nameof(flags) + "." + nameof(flags.BottomFrameType));
                    }
                    texes.Bottom.Read(s);
                }
                else
                {
                    texes.Bottom = new RawTexture();
                }

                if (flags.FolderTexture)
                {
                    // Folder Closed
                    s.Position         = offsets.FolderClosed;
                    texes.FolderClosed = new RawTexture(128, 64, RawTexture.DataFormat.Bgr888);
                    texes.FolderClosed.Read(s);

                    // Folder Open
                    s.Position       = offsets.FolderOpen;
                    texes.FolderOpen = new RawTexture(128, 64, RawTexture.DataFormat.Bgr888);
                    texes.FolderOpen.Read(s);
                }
                else
                {
                    texes.FolderOpen   = new RawTexture();
                    texes.FolderClosed = new RawTexture();
                }

                if (flags.FileTexture)
                {
                    // Folder Closed
                    s.Position      = offsets.FileLarge;
                    texes.FileLarge = new RawTexture(64, 128, RawTexture.DataFormat.Bgr888);
                    texes.FileLarge.Read(s);

                    // Folder Open
                    s.Position      = offsets.FileSmall;
                    texes.FileSmall = new RawTexture(32, 64, RawTexture.DataFormat.Bgr888);
                    texes.FileSmall.Read(s);
                }
                else
                {
                    texes.FileLarge = new RawTexture();
                    texes.FileSmall = new RawTexture();
                }
            }
            return(texes);
        }
コード例 #5
0
 private static void Write_Flags
     (Stream s, Theme body, TextureOffsets tOff, ColorOffsets cOff, uint wOff)
 {
     using (BinaryWriter bw = new BinaryWriter(s, Encoding.ASCII, true))
     {
         // Version
         bw.Write(1);
         // BGM Flag
         bw.Write((byte)0);
         bw.Write((byte)(body.Flags.BackgroundMusic ? 1 : 0));
         bw.Write((byte)0);
         bw.Write((byte)0);
         // Unkown
         bw.Write((uint)0);
         // Top Screen
         bw.Write((uint)body.Flags.TopDrawType);
         bw.Write((uint)body.Flags.TopFrameType);
         bw.Write((uint)cOff.TopBackground);
         bw.Write((uint)tOff.Top);
         bw.Write((uint)tOff.TopExt);
         // Bottom Screen
         bw.Write((uint)body.Flags.BottomDrawType);
         bw.Write((uint)body.Flags.BottomFrameType);
         bw.Write((uint)tOff.Bottom);
         // Cursor
         bw.Write((uint)(body.Flags.CursorColor ? 1 : 0));
         bw.Write((uint)cOff.Cursor);
         // 3D Folder
         bw.Write((uint)(body.Flags.FolderColor ? 1 : 0));
         bw.Write((uint)cOff.Folder);
         // 2D Folder
         bw.Write((uint)(body.Flags.FolderTexture ? 1 : 0));
         bw.Write((uint)tOff.FolderClosed);
         bw.Write((uint)tOff.FolderOpen);
         // 3D File
         bw.Write((uint)(body.Flags.FileColor ? 1 : 0));
         bw.Write((uint)cOff.File);
         // 2D File
         bw.Write((uint)(body.Flags.FileTexture ? 1 : 0));
         bw.Write((uint)tOff.FileLarge);
         bw.Write((uint)tOff.FileSmall);
         // Arrow Button
         bw.Write((uint)(body.Flags.ArrowButtonColor ? 1 : 0));
         bw.Write((uint)cOff.ArrowButton);
         // Arrow
         bw.Write((uint)(body.Flags.ArrowColor ? 1 : 0));
         bw.Write((uint)cOff.Arrow);
         // Open Close
         bw.Write((uint)(body.Flags.OpenCloseColor ? 1 : 0));
         bw.Write((uint)cOff.Open);
         bw.Write((uint)cOff.Close);
         // Game Text
         bw.Write((uint)body.Flags.GameTextDrawType);
         bw.Write((uint)cOff.GameText);
         // Bottom Solid
         bw.Write((uint)(body.Flags.BottomBackgroundInnerColor ? 1 : 0));
         bw.Write((uint)cOff.BottomSolid);
         // Bottom Outer
         bw.Write((uint)(body.Flags.BottomBackgroundOuterColor ? 1 : 0));
         bw.Write((uint)cOff.BottomOuter);
         // Folder BG
         bw.Write((uint)(body.Flags.FolderBackgroundColor ? 1 : 0));
         bw.Write((uint)cOff.FolderBackground);
         // Folder Arrow
         bw.Write((uint)(body.Flags.FolderArrowColor ? 1 : 0));
         bw.Write((uint)cOff.FolderArrow);
         // Bottom Corner
         bw.Write((uint)(body.Flags.BottomCornerButtonColor ? 1 : 0));
         bw.Write((uint)cOff.BottomCornerButton);
         // Top Corner
         bw.Write((uint)(body.Flags.TopCornerButtonColor ? 1 : 0));
         bw.Write((uint)cOff.TopCornerButton);
         // Demo Text
         bw.Write((uint)(body.Flags.DemoTextColor ? 1 : 0));
         bw.Write((uint)cOff.DemoText);
         // SFX
         bw.Write((uint)(body.Flags.SoundEffect ? 1 : 0));
         bw.Write((uint)body.CWAV.Length);
         bw.Write((uint)wOff);
     }
 }