コード例 #1
0
        private void RefreshPage()
        {
            if (_target != null)
            {
                //_currentPage = (int)numFrame.Value - 1;

                _currentFrame = _target.GetAnimFrame(_currentPage);

                numScaleX.Value = _currentFrame.Scale._x;
                numScaleY.Value = _currentFrame.Scale._y;
                numScaleZ.Value = _currentFrame.Scale._z;

                numRotX.Value = _currentFrame.Rotation._x;
                numRotY.Value = _currentFrame.Rotation._y;
                numRotZ.Value = _currentFrame.Rotation._z;

                numTransX.Value = _currentFrame.Translation._x;
                numTransY.Value = _currentFrame.Translation._y;
                numTransZ.Value = _currentFrame.Translation._z;

                for (int i = 0; i < 9; i++)
                {
                    UpdateBox(i);
                }

                btnPrev.Enabled = _currentPage > 0;
                btnNext.Enabled = _currentPage < (_numFrames - 1);

                listKeyframes.SelectedIndex = FindKeyframe(_currentPage);
            }
        }
コード例 #2
0
        public FrameState(CHRAnimationFrame frame)
        {
            _scale     = frame.Scale;
            _rotate    = frame.Rotation;
            _translate = frame.Translation;

            CalcTransforms();
        }
コード例 #3
0
        public void SetKeyframeOnlyScale(int index, CHRAnimationFrame frame)
        {
            float *v = (float *)&frame.Scale;

            for (int i = 0; i < 3; i++)
            {
                SetKeyframe(i, index, *v++);
            }
        }
コード例 #4
0
        public void SetKeyframeOnlyRot(int index, CHRAnimationFrame frame)
        {
            float *v = (float *)&frame.Rotation;

            for (int i = 3; i < 6; i++)
            {
                SetKeyframe(i, index, *v++);
            }
        }
コード例 #5
0
        public void SetKeyframeOnlyTrans(int index, CHRAnimationFrame frame)
        {
            float *v = (float *)&frame.Translation;

            for (int i = 6; i < 9; i++)
            {
                SetKeyframe(i, index, *v++);
            }
        }
コード例 #6
0
        private void ReloadIcons()
        {
            if (miscdata80 == null)
            {
                return;
            }
            CHR0Node chr0 = miscdata80.FindChild("AnmChr(NW4R)/MenSelmapPos_TopN__" + (MyMusic ? "1" : "0"), false) as CHR0Node;

            if (chr0 == null)
            {
                return;
            }

            icons = new Tuple <Image, RectangleF> [_numIcons + 1];

            CHR0EntryNode entry  = chr0.FindChild("MenSelmapPos_TopN", false) as CHR0EntryNode;
            Vector3       offset = entry.GetAnimFrame(_numIcons + OFFSET).Translation;

            for (int i = 1; i <= _numIcons; i++)
            {
                entry = chr0.FindChild("pos" + i.ToString("D2"), false) as CHR0EntryNode;
                CHRAnimationFrame frame = entry.GetAnimFrame(_numIcons + OFFSET, true);
                float             x     = (BRAWLWIDTH / 2 + frame.Translation._x + offset._x) / BRAWLWIDTH;
                float             y     = (BRAWLHEIGHT / 2 - frame.Translation._y - offset._y) / BRAWLHEIGHT;
                float             w     = 6.4f * (frame.Scale._x) / BRAWLWIDTH;
                float             h     = 5.6f * (frame.Scale._y) / BRAWLHEIGHT;
                RectangleF        r     = new RectangleF(x, y, w, h);

                TextureContainer tc = new TextureContainer(miscdata80,
                                                           IconOrder != null && i <= IconOrder.Length ? IconOrder[i - 1] : 100);
                if (tc.icon.tex0 == null)
                {
                    continue;
                }
                Image image = tc.icon.tex0.GetImage(0);

                icons[i] = new Tuple <Image, RectangleF>(image, r);
            }

            var nexttex0 = miscdata80.FindChild("Textures(NW4R)/MenSelmapIcon_Change.1", false) as TEX0Node;

            if (nexttex0 != null)
            {
                float NEXTOFFSET = 10.8f;
                entry = chr0.FindChild("pos" + (_numIcons + 1).ToString("D2"), false) as CHR0EntryNode;
                CHRAnimationFrame frame2 = entry.GetAnimFrame(_numIcons + OFFSET, true);
                float             x2     = (BRAWLWIDTH / 2 + frame2.Translation._x - NEXTOFFSET) / BRAWLWIDTH;
                float             y2     = (BRAWLHEIGHT / 2 - frame2.Translation._y) / BRAWLHEIGHT;
                float             w2     = 14.4f * (frame2.Scale._x) / BRAWLWIDTH;
                float             h2     = 4.8f * (frame2.Scale._y) / BRAWLHEIGHT;
                RectangleF        r2     = new RectangleF(x2, y2, w2, h2);
                Image             image2 = nexttex0.GetImage(0);
                icons[0] = new Tuple <Image, RectangleF>(image2, r2);                //pos00 is not used anyway, so let's overwrite it
            }

            this.Invalidate();
        }
コード例 #7
0
        private void listKeyframes_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = listKeyframes.SelectedIndex;

            if (index >= 0)
            {
                CHRAnimationFrame f = (CHRAnimationFrame)listKeyframes.SelectedItem;
                numFrame.Value = f.Index + 1;
            }
        }
コード例 #8
0
        public CHRAnimationFrame GetAnimFrame(int index, bool returnOutFrame = false)
        {
            CHRAnimationFrame frame = new CHRAnimationFrame()
            {
                Index = index
            };
            float *dPtr = (float *)&frame;

            for (int x = 0; x < 9; x++)
            {
                frame.SetBool(x, Keyframes.GetKeyframe(x, index) != null);
                *dPtr++ = GetFrameValue(x, index, returnOutFrame);
            }
            return(frame);
        }
コード例 #9
0
 private static void FillKeyList(CHRAnimationFrame AnimFrame, int frame, uint AnimOffset, List <float> Frames, List <float> Keys)
 {
     if (AnimFrame.hasTx && AnimOffset == 0x10)
     {
         Frames.Add(frame);
         Keys.Add(AnimFrame.Translation._x);
     }
     if (AnimFrame.hasTy && AnimOffset == 0x14)
     {
         Frames.Add(frame);
         Keys.Add(AnimFrame.Translation._y);
     }
     if (AnimFrame.hasTz && AnimOffset == 0x18)
     {
         Frames.Add(frame);
         Keys.Add(AnimFrame.Translation._z);
     }
     if (AnimFrame.hasRx && AnimOffset == 0x20)
     {
         Frames.Add(frame);
         Keys.Add(AnimFrame.Rotation._x * Deg2Rad);
     }
     if (AnimFrame.hasRy && AnimOffset == 0x24)
     {
         Frames.Add(frame);
         Keys.Add(AnimFrame.Rotation._y * Deg2Rad);
     }
     if (AnimFrame.hasRz && AnimOffset == 0x28)
     {
         Frames.Add(frame);
         Keys.Add(AnimFrame.Rotation._z * Deg2Rad);
     }
     if (AnimFrame.hasSx && AnimOffset == 0x04)
     {
         Frames.Add(frame);
         Keys.Add(AnimFrame.Scale._x);
     }
     if (AnimFrame.hasSy && AnimOffset == 0x08)
     {
         Frames.Add(frame);
         Keys.Add(AnimFrame.Scale._y);
     }
     if (AnimFrame.hasSz && AnimOffset == 0x0C)
     {
         Frames.Add(frame);
         Keys.Add(AnimFrame.Scale._z);
     }
 }
コード例 #10
0
        public void UpdateKeyframe(int x)
        {
            if (!Visible)
            {
                return;
            }

            _updating = true;
            if (_target is CHR0EntryNode || _target is SRT0TextureNode)
            {
                IKeyframeSource entry = _target as IKeyframeSource;
                for (int w = 0; w < listKeyframes.Items.Count; w++)
                {
                    if (_target is CHR0EntryNode)
                    {
                        CHRAnimationFrame a = (CHRAnimationFrame)listKeyframes.Items[w];
                        if (a.Index == x)
                        {
                            CHRAnimationFrame r = ((CHR0EntryNode)entry).GetAnimFrame(x);

                            if (r.HasKeys)
                            {
                                listKeyframes.Items[w] = r;
                            }
                            else
                            {
                                listKeyframes.Items.RemoveAt(w);
                            }

                            _updating = false;
                            return;
                        }
                    }
                    else if (_target is SRT0TextureNode)
                    {
                        SRTAnimationFrame a = (SRTAnimationFrame)listKeyframes.Items[w];
                        if (a.Index == x)
                        {
                            SRTAnimationFrame r = ((SRT0TextureNode)entry).GetAnimFrame(x);

                            if (r.HasKeys)
                            {
                                listKeyframes.Items[w] = r;
                            }
                            else
                            {
                                listKeyframes.Items.RemoveAt(w);
                            }

                            _updating = false;
                            return;
                        }
                    }
                }

                UpdateKeyframes();
            }
            else if (_target is SHP0VertexSetNode)
            {
                SHP0VertexSetNode entry = _target as SHP0VertexSetNode;
                int w = 0;
                foreach (FloatKeyframe a in listKeyframes.Items)
                {
                    if (a.Index == x)
                    {
                        KeyframeEntry e = entry.GetKeyframe(x);

                        if (e != null)
                        {
                            listKeyframes.Items[w] = new FloatKeyframe(e);
                        }
                        else
                        {
                            listKeyframes.Items.RemoveAt(w);
                        }

                        _updating = false;
                        return;
                    }
                    w++;
                }

                UpdateKeyframes();
            }
            else if (_target is SCN0EntryNode)
            {
                if (_target is SCN0CameraNode)
                {
                    SCN0CameraNode entry = _target as SCN0CameraNode;
                    for (int w = 0; w < listKeyframes.Items.Count; w++)
                    {
                        CameraAnimationFrame a = (CameraAnimationFrame)listKeyframes.Items[w];
                        if (a.Index == x)
                        {
                            CameraAnimationFrame r = entry.GetAnimFrame(x);

                            if (r.HasKeys)
                            {
                                listKeyframes.Items[w] = r;
                            }
                            else
                            {
                                listKeyframes.Items.RemoveAt(w);
                            }

                            _updating = false;
                            return;
                        }
                    }

                    UpdateKeyframes();
                }
                else if (_target is SCN0LightNode)
                {
                    SCN0LightNode entry = _target as SCN0LightNode;
                    for (int w = 0; w < listKeyframes.Items.Count; w++)
                    {
                        LightAnimationFrame a = (LightAnimationFrame)listKeyframes.Items[w];
                        if (a.Index == x)
                        {
                            LightAnimationFrame r = entry.GetAnimFrame(x);

                            if (r.HasKeys)
                            {
                                listKeyframes.Items[w] = r;
                            }
                            else
                            {
                                listKeyframes.Items.RemoveAt(w);
                            }

                            _updating = false;
                            return;
                        }
                    }

                    UpdateKeyframes();
                }
                else if (_target is SCN0FogNode)
                {
                    SCN0FogNode entry = _target as SCN0FogNode;
                    for (int w = 0; w < listKeyframes.Items.Count; w++)
                    {
                        FogAnimationFrame a = (FogAnimationFrame)listKeyframes.Items[w];
                        if (a.Index == x)
                        {
                            FogAnimationFrame r = entry.GetAnimFrame(x);

                            if (r.HasKeys)
                            {
                                listKeyframes.Items[w] = r;
                            }
                            else
                            {
                                listKeyframes.Items.RemoveAt(w);
                            }

                            _updating = false;
                            return;
                        }
                    }

                    UpdateKeyframes();
                }
            }
            _updating = false;
        }