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); }
void CreateMesh(MeshGroupFrame frame,Vector2 size, KAnim.Frame srcframe) { //Debug.Log("MeshGroupGroupDataK.CreateMesh"); MeshGroupFrame.InitShader(); frame.BeginMesh(); for(int i =srcframe.elems.Count-1;i>=0;i--) { DoAttm(frame, size, srcframe.elems[i]); } frame.FinishMesh(); }
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; }
public static Rect Calc_Bound(KAnim.Anim anim,KAnim.Element elem) { //if(anim.parent.seeds.ContainsKey(elem.seednow)==false) //{ // Debug.LogError("failed Calc_Bound:" + elem.seednow); //} var seed = anim.parent.seeds[elem.seednow]; //string filename = System.IO.Path.GetFileNameWithoutExtension(elem.seed.texname); //block = tmgr.GetTexture(System.IO.Path.Combine(texpath, seed.texname)); var seedorient = seed.orient; //seedsize = seed.size; //color = elem.color; var pos = elem.pos; var scale = elem.scale; var rotate = elem.rotate; Vector2 seed_size = seed.size; seed_size.x *= scale.x; seed_size.y *= scale.y; Vector2 seed_orient = seed.orient; seed_orient.x *= scale.x; seed_orient.y *= scale.y; var bounds = Seed.CalcRotate(seed_size, seed_orient, rotate); //bounds.Offset(pos.X, pos.Y); bounds.x += pos.x; bounds.y += pos.y; return bounds; }
void DoAttm(MeshGroupFrame meshframe,Vector2 anisize, KAnim.Element elem) { //跳过dummy的绘制 if (elem.tag.IndexOf("dummy:") == 0) return; var seed = dataK.seeds[elem.seed]; TextureBlock? tb = TextureBlockMgr.getTexture(seed.texname.ToLower()); //Vector2 size = new Vector2(tb.Value.uv.width * tb.Value.tex.width *scaleWorld, // tb.Value.uv.height * tb.Value.tex.height *scaleWorld); Vector2 size = seed.size; Vector2 orient = seed.orient; Matrix4x4 dest = Matrix4x4.identity; //目标位置 { Vector2 t = new Vector2( elem.pos.x - anisize.x/2 ,anisize.y -elem.pos.y); float rotate = (float)(elem.rotate / Math.PI * 180.0); while (rotate < 0) rotate += 360; while (rotate > 360) rotate -= 360; if (float.IsNaN(rotate)) rotate = 0; Matrix4x4 move = Matrix4x4.TRS(t, Quaternion.identity, Vector3.one); Matrix4x4 rs = Matrix4x4.TRS(Vector3.zero, Quaternion.AngleAxis(rotate, new Vector3(0, 0, -1)), elem.scale); Matrix4x4 scaleworld = Matrix4x4.Scale(new Vector3(scaleWorld, scaleWorld, scaleWorld)); dest = scaleworld * move * rs;// scaleworld* rs *move; } Color c = Color.white; c.a = (float)elem.color.a / 255.0f; c.r = (float)elem.color.r / 255.0f; c.g = (float)elem.color.g / 255.0f; c.b = (float)elem.color.b / 255.0f; if (tb != null) { meshframe.DrawRect(tb.Value, size, orient, dest, c); } else { meshframe.DrawRect(TextureBlock.Empty, new Vector2(1, 1), dest, c); } }