private void OpenFiles() { Bitmap atlas = null; KBuild build = null; KAnim anim = null; if (currentAtlasFile != null) { using (FileStream fs = new FileStream(currentAtlasFile, FileMode.Open)) { Bitmap bmp = new Bitmap(fs); atlas = (Bitmap)bmp.Clone(); } } if (currentBuildFile != null) { build = KAnimUtils.ReadBuild(currentBuildFile); } if (currentAnimFile != null) { anim = KAnimUtils.ReadAnim(currentAnimFile); } OpenData(atlas, build, anim); }
public void Render(KBuild build, KAnimBank bank, int frameNumber) { Matrix4 modelMat = Matrix4.Identity; Matrix4 pivotMat = Matrix4.Identity; Matrix4 transformMat = Matrix4.Identity; geoShader.Activate(); // Draw Origin geoShader.SetUniform("Model", ref modelMat); origin.Draw(); if (frameNumber < 0 || frameNumber >= bank.FrameCount) { frameNumber = 0; } KAnimFrame frame = bank.Frames[frameNumber]; Matrix4 frameMat = Matrix4.CreateTranslation(frame.X, frame.Y, 0); spriteShader.Activate(); texture.Bind(); for (int i = frame.ElementCount - 1; i >= 0; i--) { KAnimElement element = frame.Elements[i]; string symbol = build.GetSymbolName(element.SymbolHash); if (symbol == null) { continue; } KFrame sprite = build.GetFrame(symbol, element.FrameNumber); if (sprite == null) { continue; } pivotMat = Matrix4.CreateTranslation(sprite.PivotX, sprite.PivotY, 0); transformMat = new Matrix4( element.M00, -element.M10, 0, 0, element.M01, -element.M11, 0, 0, 0, 0, -1, 0, element.M02, -element.M12, 0, 1 ); modelMat = halfScaleMat * pivotMat * transformMat; spriteShader.SetUniform("Model", ref modelMat); MakeQuadVBO(sprite.PivotWidth, sprite.PivotHeight, element.Red, element.Green, element.Blue, element.Alpha, sprite.GetUVRectangle(), out Vertex[] vertices, out int[] elements); quad.SetData(OpenTK.Graphics.OpenGL.PrimitiveType.Triangles, vertices, elements); quad.Draw(); } }
//public static Sprite GenerateBuildingSprite(int width, int height) //{ //} public static Sprite[] BuildSprites(Bitmap atlas, KBuild buildData) { List <Sprite> sprites = new List <Sprite>(); foreach (KSymbol symbol in buildData.Symbols) { foreach (KFrame frame in symbol.Frames) { Bitmap croppedImg = atlas.Clone(frame.GetUVRectangle(atlas.Width, atlas.Height), atlas.PixelFormat); Sprite spr = new Sprite(frame, croppedImg); sprites.Add(spr); } } return(sprites.ToArray()); }
private void OpenData(Bitmap atlas, KBuild build, KAnim anim) { data = new KAnimPackage(); data.Texture = atlas; UpdateAtlasView(data.Texture); data.Build = build; data.Anim = anim; UpdateBuildTree(data); closeToolStripMenuItem.Enabled = FilesAreOpen; convertToSCMLToolStripMenuItem.Enabled = data.IsComplete; splitTextureAtlasToolStripMenuItem.Enabled = data.IsValidAtlas; rebuildTextureAtlasToolStripMenuItem.Enabled = data.IsValidAtlas; saveTextureAtlasToolStripMenuItem.Enabled = data.HasTexture; saveBuildFileToolStripMenuItem.Enabled = data.HasBuild; saveAnimFileToolStripMenuItem.Enabled = data.HasAnim; previewAnimToolStripMenuItem.Enabled = data.IsComplete; }