Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static void LoadIconDataFromSymbol(MEX_mexMapData data, MEXStageIconEntry[] icons)
        {
            var tobjs    = data.IconMatAnimJoint.Child.MaterialAnimation.Next.TextureAnimation.ToTOBJs();
            var tobjanim = data.IconMatAnimJoint.Child.MaterialAnimation.Next.TextureAnimation.AnimationObject.FObjDesc.GetDecodedKeys();

            var nametobjs    = data.StageNameMaterialAnimation.Child.Child.MaterialAnimation.TextureAnimation.ToTOBJs();
            var nametobjanim = data.StageNameMaterialAnimation.Child.Child.MaterialAnimation.TextureAnimation.AnimationObject.FObjDesc.GetDecodedKeys();

            for (int i = 0; i < data.PositionModel.Children.Length; i++)
            {
                icons[i].Joint     = data.PositionModel.Children[i];
                icons[i].Animation = MexMenuAnimationGenerator.FromAnimJoint(data.PositionAnimJoint.Children[i], icons[i].Joint);
                icons[i].IconTOBJ  = tobjs[(int)tobjanim[i + 2].Value];
                icons[i].NameTOBJ  = nametobjs[(int)nametobjanim[i].Value];
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="stage"></param>
        /// <param name="icons"></param>
        public static MEX_mexMapData GenerateMexMap(SBM_MnSelectStageDataTable stage, IEnumerable <MEXStageIconEntry> icons)
        {
            MEX_mexMapData mapData = new MEX_mexMapData();

            var nameTexAnim = new HSD_TexAnim();
            var nameKeys    = new List <FOBJKey>();

            var iconTexAnim = new HSD_TexAnim();
            var iconKeys    = new List <FOBJKey>();

            HSD_JOBJ root = new HSD_JOBJ()
            {
                SX    = 1, SY = 1, SZ = 1,
                Flags = JOBJ_FLAG.CLASSICAL_SCALING
            };

            HSD_AnimJoint animRoot = new HSD_AnimJoint();

            // extra
            {
                var tobjs = stage.IconLargeMatAnimJoint.Child.MaterialAnimation.Next.TextureAnimation.ToTOBJs();

                var index = iconTexAnim.AddImage(tobjs[0]);
                iconKeys.Add(new FOBJKey()
                {
                    Frame = index, Value = index, InterpolationType = GXInterpolationType.HSD_A_OP_CON
                });

                index = iconTexAnim.AddImage(tobjs[1]);
                iconKeys.Add(new FOBJKey()
                {
                    Frame = index, Value = index, InterpolationType = GXInterpolationType.HSD_A_OP_CON
                });
            }

            foreach (var v in icons)
            {
                var index = iconTexAnim.AddImage(v.IconTOBJ);
                if (index == -1)
                {
                    index = 0;
                }
                iconKeys.Add(new FOBJKey()
                {
                    Frame = index, Value = index, InterpolationType = GXInterpolationType.HSD_A_OP_CON
                });

                index = nameTexAnim.AddImage(v.NameTOBJ);
                if (index == -1)
                {
                    index = 0;
                }
                nameKeys.Add(new FOBJKey()
                {
                    Frame = index, Value = index, InterpolationType = GXInterpolationType.HSD_A_OP_CON
                });

                v.Joint.Next      = null;
                v.Joint.Child     = null;
                v.AnimJoint.Next  = null;
                v.AnimJoint.Child = null;

                root.AddChild(v.Joint);
                animRoot.AddChild(v.AnimJoint);
            }

            iconKeys.Add(new FOBJKey()
            {
                Frame = 1600, Value = 0, InterpolationType = GXInterpolationType.HSD_A_OP_CON
            });

            iconTexAnim.GXTexMapID               = HSDRaw.GX.GXTexMapID.GX_TEXMAP0;
            iconTexAnim.AnimationObject          = new HSD_AOBJ();
            iconTexAnim.AnimationObject.EndFrame = 1600;
            iconTexAnim.AnimationObject.FObjDesc = new HSD_FOBJDesc();
            iconTexAnim.AnimationObject.FObjDesc.SetKeys(iconKeys, (byte)TexTrackType.HSD_A_T_TIMG);
            iconTexAnim.AnimationObject.FObjDesc.Next = new HSD_FOBJDesc();
            iconTexAnim.AnimationObject.FObjDesc.Next.SetKeys(iconKeys, (byte)TexTrackType.HSD_A_T_TCLT);

            var iconJOBJ = HSDAccessor.DeepClone <HSD_JOBJ>(stage.IconDoubleModel);

            iconJOBJ.Child = iconJOBJ.Child.Next;

            var iconAnimJoint = HSDAccessor.DeepClone <HSD_AnimJoint>(stage.IconDoubleAnimJoint);

            iconAnimJoint.Child = iconAnimJoint.Child.Next;

            var iconMatAnimJoint = HSDAccessor.DeepClone <HSD_MatAnimJoint>(stage.IconDoubleMatAnimJoint);

            iconMatAnimJoint.Child = iconMatAnimJoint.Child.Next;
            iconMatAnimJoint.Child.MaterialAnimation.Next.TextureAnimation = iconTexAnim;

            var iconNameAnim = HSDAccessor.DeepClone <HSD_MatAnimJoint>(stage.StageNameMatAnimJoint);

            nameTexAnim.AnimationObject          = new HSD_AOBJ();
            nameTexAnim.AnimationObject.EndFrame = 1600;
            nameTexAnim.AnimationObject.FObjDesc = new HSD_FOBJDesc();
            nameTexAnim.AnimationObject.FObjDesc.SetKeys(nameKeys, (byte)TexTrackType.HSD_A_T_TIMG);
            iconNameAnim.Child.Child.MaterialAnimation.TextureAnimation = nameTexAnim;

            mapData.IconModel                  = iconJOBJ;
            mapData.IconAnimJoint              = iconAnimJoint;
            mapData.IconMatAnimJoint           = iconMatAnimJoint;
            mapData.PositionModel              = root;
            mapData.PositionAnimJoint          = animRoot;
            mapData.StageNameMaterialAnimation = iconNameAnim;

            return(mapData);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="stage"></param>
        /// <returns></returns>
        public static MEX_mexMapData LoadIconDataFromVanilla(SBM_MnSelectStageDataTable stage)
        {
            List <HSD_TOBJ> nameTags = new List <HSD_TOBJ>();

            List <HSD_TOBJ> iconTOBJs = new List <HSD_TOBJ>();

            HSD_JOBJ root = new HSD_JOBJ()
            {
                SX    = 1,
                SY    = 1,
                SZ    = 1,
                Flags = JOBJ_FLAG.CLASSICAL_SCALING
            };

            HSD_AnimJoint animRoot = new HSD_AnimJoint();


            var tex0       = stage.IconDoubleMatAnimJoint.Child.Next.MaterialAnimation.Next.TextureAnimation.ToTOBJs();
            var tex0_extra = stage.IconDoubleMatAnimJoint.Child.MaterialAnimation.Next.TextureAnimation.ToTOBJs();
            var tex1       = stage.IconLargeMatAnimJoint.Child.MaterialAnimation.Next.TextureAnimation.ToTOBJs();
            var tex2       = stage.IconSpecialMatAnimJoint.Child.MaterialAnimation.Next.TextureAnimation.ToTOBJs();

            var nameTOBJs     = stage.StageNameMatAnimJoint.Child.Child.MaterialAnimation.TextureAnimation.ToTOBJs();
            var nameTOBJsAnim = stage.StageNameMatAnimJoint.Child.Child.MaterialAnimation.TextureAnimation.AnimationObject.FObjDesc.GetDecodedKeys();

            var positionAnimation = new List <HSD_AnimJoint>();

            foreach (var c in stage.PositionAnimation.Children)
            {
                var pos = new HSD_AnimJoint();
                pos.AOBJ = HSDAccessor.DeepClone <HSD_AOBJ>(c.AOBJ);
                positionAnimation.Add(pos);
            }

            var g1 = tex0.Length - 2;
            var g2 = tex0.Length - 2 + tex1.Length - 2;
            var g3 = tex0.Length - 2 + tex1.Length - 2 + tex2.Length - 2;

            for (int i = 0; i < stage.PositionModel.Children.Length; i++)
            {
                var childIndex = i;
                if (unswizzle.ContainsKey(i))
                {
                    childIndex = unswizzle[i];
                }

                HSD_TOBJ icon = null;
                HSD_TOBJ name = null;
                var      keys = positionAnimation[childIndex].AOBJ.FObjDesc.GetDecodedKeys();
                var      Y    = stage.PositionModel.Children[childIndex].TY;
                var      Z    = stage.PositionModel.Children[childIndex].TZ;
                var      SX   = 1f;
                var      SY   = 1f;

                if (i >= g3)
                {
                    //RandomIcon
                    name = nameTOBJs[(int)nameTOBJsAnim[nameTOBJsAnim.Count - 1].Value];
                }
                else
                if (i >= g2)
                {
                    name = nameTOBJs[(int)nameTOBJsAnim[24 + (i - g2)].Value];
                    icon = tex2[i - g2 + 2];
                    SX   = 0.8f;
                    SY   = 0.8f;
                }
                else
                if (i >= g1)
                {
                    name = nameTOBJs[(int)nameTOBJsAnim[22 + texunswizzle[i - g1]].Value];
                    icon = tex1[i - g1 + 2];
                    SY   = 1.1f;
                }
                else
                {
                    icon = tex0[texunswizzle[i] + 2];
                    name = nameTOBJs[(int)nameTOBJsAnim[texunswizzle[i]].Value * 2];

                    root.AddChild(new HSD_JOBJ()
                    {
                        TX    = keys[keys.Count - 1].Value,
                        TY    = Y,
                        TZ    = Z,
                        SX    = SX,
                        SY    = SY,
                        SZ    = 1,
                        Flags = JOBJ_FLAG.CLASSICAL_SCALING
                    });
                    iconTOBJs.Add(icon);
                    nameTags.Add(name);
                    animRoot.AddChild(HSDAccessor.DeepClone <HSD_AnimJoint>(positionAnimation[childIndex]));

                    Y   -= 5.6f;
                    Z    = 0;
                    icon = tex0_extra[texunswizzle[i] + 2];
                    name = nameTOBJs[(int)nameTOBJsAnim[texunswizzle[i]].Value * 2 + 1];
                }

                root.AddChild(new HSD_JOBJ()
                {
                    TX    = keys[keys.Count - 1].Value,
                    TY    = Y,
                    TZ    = Z,
                    SX    = SX,
                    SY    = SY,
                    SZ    = 1,
                    Flags = JOBJ_FLAG.CLASSICAL_SCALING
                });
                iconTOBJs.Add(icon);
                nameTags.Add(name);
                animRoot.AddChild(HSDAccessor.DeepClone <HSD_AnimJoint>(positionAnimation[childIndex]));
            }


            var extraIcons = stage.IconLargeMatAnimJoint.Child.MaterialAnimation.Next.TextureAnimation.ToTOBJs();

            iconTOBJs.Insert(0, extraIcons[0]);
            iconTOBJs.Insert(0, extraIcons[1]);
            iconTOBJs.Add(extraIcons[0]);


            var iconJOBJ = HSDAccessor.DeepClone <HSD_JOBJ>(stage.IconDoubleModel);

            iconJOBJ.Child = iconJOBJ.Child.Next;

            var iconAnimJoint = HSDAccessor.DeepClone <HSD_AnimJoint>(stage.IconDoubleAnimJoint);

            iconAnimJoint.Child = iconAnimJoint.Child.Next;

            var iconMatAnimJoint = HSDAccessor.DeepClone <HSD_MatAnimJoint>(stage.IconDoubleMatAnimJoint);

            iconMatAnimJoint.Child = iconMatAnimJoint.Child.Next;
            iconMatAnimJoint.Child.MaterialAnimation.Next.TextureAnimation.FromTOBJs(iconTOBJs.ToArray(), true);


            var mapdata = new MEX_mexMapData();

            mapdata.IconModel                  = iconJOBJ;
            mapdata.IconAnimJoint              = iconAnimJoint;
            mapdata.IconMatAnimJoint           = iconMatAnimJoint;
            mapdata.PositionModel              = root;
            mapdata.PositionAnimJoint          = animRoot;
            mapdata.StageNameMaterialAnimation = HSDAccessor.DeepClone <HSD_MatAnimJoint>(stage.StageNameMatAnimJoint);
            mapdata.StageNameMaterialAnimation.Child.Child.MaterialAnimation.TextureAnimation.FromTOBJs(nameTags, true);

            return(mapdata);
        }