Beispiel #1
0
        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();
    }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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);
            }
    }