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); }
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; }
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); }
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); }
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); } }