Пример #1
0
        /// <summary>
        /// 読み込み処理
        /// </summary>
        /// <param name="clXmlNode">xmlノード</param>
        public void Load(XmlNode clXmlNode)
        {
            XmlNodeList clListNode   = clXmlNode.ChildNodes;
            string      clTypeOption = ClsTool.GetStringFromXmlNodeList(clListNode, "TypeOption");

            this.mTypeOption = (EnmTypeOption)Enum.Parse(typeof(EnmTypeOption), clTypeOption);

            //以下、各管理クラス作成処理
            foreach (XmlNode clNode in clListNode)
            {
                if (!"KeyFrame".Equals(clNode.Name))
                {
                    continue;
                }

                bool           isEnable1     = false;
                bool           isEnable2     = false;
                object         clValue1      = ClsParam.GetDefaultValue1(this.mTypeOption);
                object         clValue2      = ClsParam.GetDefaultValue2(this.mTypeOption);
                ClsDatKeyFrame clDatKeyFrame = new ClsDatKeyFrame(this.mTypeOption, 0, isEnable1, isEnable2, null, null, clValue1, clValue2);
                clDatKeyFrame.Load(clNode);

                this.mDicKeyFrame[clDatKeyFrame.mFrameNo] = clDatKeyFrame;
                continue;
            }
        }
Пример #2
0
 /// <summary>
 /// オプションの全てを削除する処理
 /// </summary>
 public void RemoveAll()
 {
     //以下、キーフレーム全削除処理
     foreach (int inKey in this.mDicKeyFrame.Keys)
     {
         ClsDatKeyFrame clDatKeyFrame = this.mDicKeyFrame[inKey];
         clDatKeyFrame.RemoveAll();
     }
     this.mDicKeyFrame.Clear();
 }
Пример #3
0
        /// <summary>
        /// キーフレーム取得処理
        /// </summary>
        /// <param name="inFrameNo">フレーム番号</param>
        /// <returns>キーフレーム</returns>
        public ClsDatKeyFrame GetKeyFrame(int inFrameNo)
        {
            bool isExist = this.mDicKeyFrame.ContainsKey(inFrameNo);

            if (!isExist)
            {
                return(null);
            }

            ClsDatKeyFrame clKeyFrame = this.mDicKeyFrame[inFrameNo];

            return(clKeyFrame);
        }
Пример #4
0
        private Dictionary <int, ClsDatKeyFrame> mDicKeyFrame;  //キーはフレーム番号 値はキーフレーム管理クラス

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="clElemParent">親エレメント</param>
        /// <param name="enType">オプションタイプ</param>
        /// <param name="isEnable1">有効フラグ1</param>
        /// <param name="isEnable2">有効フラグ2</param>
        /// <param name="clTween1">トゥイーン1</param>
        /// <param name="clTween2">トゥイーン2</param>
        /// <param name="clValue1">初期状態の値1</param>
        /// <param name="clValue2">初期状態の値2</param>
        public ClsDatOption(ClsDatElem clElemParent, EnmTypeOption enTypeOption, bool isEnable1, bool isEnable2, ClsDatTween clTween1, ClsDatTween clTween2, object clValue1, object clValue2)
        {
            this.mTypeItem = TYPE_ITEM.OPTION;

            this.mElemParent  = clElemParent;
            this.mTypeOption  = enTypeOption;
            this.mDicKeyFrame = new Dictionary <int, ClsDatKeyFrame>();

            //以下、0フレーム目にキーフレームを登録する処理(0フレーム目には必ずキーフレームが存在する)
            ClsDatKeyFrame clKeyFrame = new ClsDatKeyFrame(enTypeOption, 0, isEnable1, isEnable2, clTween1, clTween2, clValue1, clValue2);

            this.mDicKeyFrame.Add(0, clKeyFrame);
        }
Пример #5
0
        /// <summary>
        /// 保存処理
        /// </summary>
        /// <param name="clHeader">ヘッダー</param>
        public void Save(string clHeader)
        {
            //以下、オプション保存処理
            ClsTool.AppendElementStart(clHeader, "Option");
            ClsTool.AppendElement(clHeader + ClsSystem.FILE_TAG, "TypeOption", this.mTypeOption.ToString());

            //以下、キーフレーム保存処理
            foreach (int inKey in this.mDicKeyFrame.Keys)
            {
                ClsDatKeyFrame clDatKeyFrame = this.mDicKeyFrame[inKey];
                clDatKeyFrame.Save(clHeader + ClsSystem.FILE_TAG);
            }

            ClsTool.AppendElementEnd(clHeader, "Option");
        }
Пример #6
0
        /// <summary>
        /// 選択中のキーフレームを取得する処理
        /// </summary>
        /// <returns>選択中のキーフレーム</returns>
        private static ClsDatKeyFrame GetKeyFrameFromSelectFrame()
        {
            ClsDatItem clItem = ClsSystem.GetItemFromSelectLineNo();

            if (clItem == null)
            {
                return(null);
            }

            //以下、エレメント設定
            ClsDatElem   clElem   = null;
            ClsDatOption clOption = null;

            if (clItem.mTypeItem == ClsDatItem.TYPE_ITEM.ELEM)
            {
                clElem   = clItem as ClsDatElem;
                clOption = clElem.mDicOption[EnmTypeOption.DISPLAY];
            }
            else if (clItem.mTypeItem == ClsDatItem.TYPE_ITEM.OPTION)
            {
                clOption = clItem as ClsDatOption;
                clElem   = clOption.mElemParent;
            }

            if (clOption == null)
            {
                return(null);
            }

            int inIndex = ClsSystem.GetSelectFrameNo();

            if (inIndex != 0)
            {
                bool isExist = clOption.IsExistKeyFrame(inIndex);
                if (!isExist)
                {
                    return(null);
                }
            }

            //以下、キーフレーム取得処理
            ClsDatKeyFrame clKeyFrame = clOption.GetKeyFrame(inIndex);

            return(clKeyFrame);
        }
Пример #7
0
        /// <summary>
        /// キーフレーム削除処理
        /// </summary>
        /// <param name="inFrameNo">フレーム番号</param>
        public void RemoveKeyFrame(int inFrameNo)
        {
            if (inFrameNo == 0)
            {
                return;                 //0フレーム目のキーフレームは消せない
            }
            bool isExist = this.IsExistKeyFrame(inFrameNo);

            if (!isExist)
            {
                return;
            }

            ClsDatKeyFrame clDatKeyFrame = this.mDicKeyFrame[inFrameNo];

            clDatKeyFrame.RemoveAll();
            this.mDicKeyFrame.Remove(inFrameNo);
        }
Пример #8
0
        /// <summary>
        /// キーフレーム登録・更新処理
        /// </summary>
        /// <param name="inFrameNo">フレーム番号</param>
        /// <param name="isEnable1">有効フラグ1</param>
        /// <param name="isEnable2">有効フラグ2</param>
        /// <param name="clTween1">トゥイーン1</param>
        /// <param name="clTween2">トゥイーン2</param>
        /// <param name="clValue1">値1</param>
        /// <param name="clValue2">値2</param>
        public void SetKeyFrame(int inFrameNo, bool isEnable1, bool isEnable2, ClsDatTween clTween1, ClsDatTween clTween2, object clValue1, object clValue2)
        {
            bool isExist = this.mDicKeyFrame.ContainsKey(inFrameNo);

            if (isExist)
            {
                ClsDatKeyFrame clKeyFrame = this.mDicKeyFrame[inFrameNo];
                clKeyFrame.mEnable1 = isEnable1;
                clKeyFrame.mEnable2 = isEnable2;
                clKeyFrame.mValue1  = clValue1;
                clKeyFrame.mValue2  = clValue2;
                clKeyFrame.mTween1  = clTween1;
                clKeyFrame.mTween2  = clTween2;
            }
            else
            {
                this.mDicKeyFrame[inFrameNo] = new ClsDatKeyFrame(this.mTypeOption, inFrameNo, isEnable1, isEnable2, clTween1, clTween2, clValue1, clValue2);
            }
        }
Пример #9
0
        private void ToolStripMenuItem_AddKeyFrame_Click(object sender, EventArgs e)
        {
            int inIndex = (int)this.numericUpDown_NowFlame.Value;

            if (inIndex <= 0)
            {
                return;                 //0フレーム目には作成できない
            }
            ClsDatMotion clMotion = ClsSystem.GetSelectMotion();

            if (clMotion == null)
            {
                return;
            }

            ClsDatOption clOption = ClsSystem.GetOptionFromSelectLineNo();

            if (clOption == null)
            {
                return;
            }

            //以下、キーフレーム作成・更新処理
            ClsDatElem clElem       = clOption.mElemParent;
            bool       isParentFlag = ClsParam.GetDefaultParentFlag(clElem.mElem, clOption.mTypeOption);

            //以下、現在の値を取得する処理
            object         clValue1   = clOption.GetValue1(inIndex);
            object         clValue2   = clOption.GetValue2(inIndex);
            ClsDatKeyFrame clKeyFrame = new ClsDatKeyFrame(clOption.mTypeOption, inIndex, false, false, null, null, clValue1, clValue2);

            clOption.SetKeyFrame(inIndex, false, false, null, null, clValue1, clValue2);    //存在していたら更新、存在していなかったら追加

            //以下、コントロール更新処理
            this.RefreshControl();
            this.panel_Control.Refresh();
            this.panel_Time.Refresh();
            this.mFormMain.Refresh();
        }
Пример #10
0
        /// <summary>
        /// 重みを返す処理
        /// </summary>
        /// <param name="clDatTween">トゥイーン情報</param>
        /// <param name="puchRate">重みリスト</param>
        /// <param name="inFrmCurrent">カレントフレーム</param>
        /// <returns>重み(0.0~1.0)</returns>
        public static float GetRate(ClsDatKeyFrame clDatKeyFrame, ClsDatTween clDatTween, byte[] puchRate, int inFrmCurrent)
        {
            if (clDatTween == null)
            {
                return(0.0f);
            }
            if (clDatTween.mRate == null)
            {
                return(0.0f);
            }

            if (!(clDatKeyFrame.mFrameNo <= inFrmCurrent && inFrmCurrent <= clDatKeyFrame.mFrameNo + clDatTween.mLength))
            {
                return(0.0f);
            }

            float flFrmLength = clDatTween.mLength;

            inFrmCurrent -= clDatKeyFrame.mFrameNo;
            byte  uchRate = (byte)((float)inFrmCurrent / flFrmLength * ClsDatTween.MAX_WEIGHT);
            float flRate  = (float)uchRate / byte.MaxValue;

            return(flRate);
        }
Пример #11
0
        /// <summary>
        /// エレメントのタイムライン描画処理
        /// </summary>
        /// <param name="g">描画管理クラス</param>
        /// <param name="inSelectLineNo">選択中のライン番号</param>
        /// <param name="inSelectFrameNo">選択中のフレーム</param>
        /// <param name="inMaxFrameNum">最大フレーム数</param>
        /// <param name="inWidth">描画先の幅</param>
        /// <param name="inHeight">描画先の高さ</param>
        public void DrawTime(Graphics g, int inSelectLineNo, int inSelectFrameNo, int inMaxFrameNum, int inWidth, int inHeight)
        {
            //以下、表示しなくてはいけない種別かどうかチェックする処理
            bool isDraw = ClsDatOption.IsDraw(this.mTypeOption);

            if (!isDraw)
            {
                return;
            }

            //以下、背景を塗る処理
            SolidBrush clBrush;
            int        inX = inSelectFrameNo * FormControl.CELL_WIDTH;
            int        inY = this.mLineNo * FormControl.CELL_HEIGHT;

            if (inSelectLineNo == this.mLineNo)
            {
                //選択中Elementsの背景強調
                clBrush = new SolidBrush(Color.DarkGreen);
                g.FillRectangle(clBrush, 0, inY, inWidth, FormControl.CELL_HEIGHT);
            }
            else
            {
                if (this.mLineNo % 2 == 0)
                {
                    clBrush = new SolidBrush(Color.Black);
                    g.FillRectangle(clBrush, 0, inY, inWidth, FormControl.CELL_HEIGHT);
                }
                else
                {
                    clBrush = new SolidBrush(Color.FromArgb(0xFF, 20, 20, 30));
                    g.FillRectangle(clBrush, 0, inY, inWidth, FormControl.CELL_HEIGHT);
                }
            }

            //以下、フレームの背景(Tweenの影響下にあるかどうか)を表示する処理
            Color      stColorTween = Color.FromArgb(128, Color.LightBlue);
            SolidBrush clBrushTween = new SolidBrush(stColorTween);
            bool       isFlag       = false;
            int        inFrameNo    = 0;

            for (inFrameNo = 0; inFrameNo < inMaxFrameNum; inFrameNo++)
            {
                //以下、キーフレームが存在するかチェックする処理
                if (inFrameNo == 0)
                {
                    isFlag = true;
                }
                else
                {
                    bool isExist = this.IsExistKeyFrame(inFrameNo);
                    if (isExist)
                    {
                        ClsDatKeyFrame clKeyFrame = this.GetKeyFrame(inFrameNo);
                        isFlag = (clKeyFrame.mTween1 != null || clKeyFrame.mTween2 != null);
                    }
                }
                if (!isFlag)
                {
                    continue;
                }

                inX = inFrameNo * FormControl.CELL_WIDTH;
                inY = this.mLineNo * FormControl.CELL_HEIGHT;
                g.FillRectangle(clBrushTween, inX, inY + 10, FormControl.CELL_WIDTH, FormControl.CELL_HEIGHT / 2 - 4);
            }

            //以下、選択中のフレーム描画処理
            inX = inSelectFrameNo * FormControl.CELL_WIDTH;
            inY = this.mLineNo * FormControl.CELL_HEIGHT;
            if (inSelectLineNo == this.mLineNo)
            {
                Color stColor = Color.FromArgb(128, Color.Green);
                clBrush = new SolidBrush(stColor);
            }
            else
            {
                Color stColor = Color.FromArgb(128, Color.DarkGreen);
                clBrush = new SolidBrush(stColor);
            }
            g.FillRectangle(clBrush, inX, inY, FormControl.CELL_WIDTH, FormControl.CELL_HEIGHT);

            //以下、境界線描画処理
            Pen clPen = new Pen(Color.Green);

            inY = this.mLineNo * FormControl.CELL_HEIGHT + FormControl.CELL_HEIGHT - 1;
            g.DrawLine(clPen, 0, inY, inWidth, inY);

            //以下、キーフレーム表示処理
            for (inFrameNo = 0; inFrameNo < inMaxFrameNum; inFrameNo++)
            {
                bool isExist = this.mDicKeyFrame.ContainsKey(inFrameNo);
                if (!isExist)
                {
                    continue;
                }

                g.DrawImage(Properties.Resources.markRed, inFrameNo * FormControl.CELL_WIDTH + 2, this.mLineNo * FormControl.CELL_HEIGHT + 1);
            }
        }
Пример #12
0
        /// <summary>
        /// 指定フレームの値2を取得する処理
        /// </summary>
        /// <param name="inFrameNo">フレームNo</param>
        /// <returns>値2</returns>
        public object GetValue2(int inFrameNo)
        {
            ClsDatMotion clMotion = ClsSystem.GetSelectMotion();

            if (clMotion == null)
            {
                goto RETURN_DEFAULT2;
            }

            int inMaxFrameNum   = clMotion.GetMaxFrameNum();
            int inFrameNoBefore = 0;
            int inFrameNoAfter  = 0;

            this.GetKeyFrameNo(inFrameNo, inMaxFrameNum, out inFrameNoBefore, out inFrameNoAfter);

            //以下、キーフレーム存在チェック
            bool isExist = this.mDicKeyFrame.ContainsKey(inFrameNoBefore);

            if (!isExist)
            {
                goto RETURN_DEFAULT2;
            }
            isExist = this.mDicKeyFrame.ContainsKey(inFrameNoAfter);
            if (!isExist)
            {
                goto RETURN_DEFAULT2;
            }

            //以下、キーフレーム取得処理
            ClsDatKeyFrame clKeyFrameBefore = this.mDicKeyFrame[inFrameNoBefore];

            if (clKeyFrameBefore == null)
            {
                goto RETURN_DEFAULT2;
            }

            if (clKeyFrameBefore.mTween2 == null)
            {
                object clValueTmp = clKeyFrameBefore.mValue2;
                return(clValueTmp);
            }

            ClsDatKeyFrame clKeyFrameAfter = this.mDicKeyFrame[inFrameNoAfter];

            if (clKeyFrameAfter == null)
            {
                goto RETURN_DEFAULT2;
            }

            //以下、キーフレームの値取得処理
            object clValueBefore = clKeyFrameBefore.mValue2;

            if (clValueBefore == null)
            {
                goto RETURN_DEFAULT2;
            }

            if (clValueBefore is bool && clValueBefore is string)
            {
                return(clValueBefore);
            }

            object clValueAfter = clKeyFrameAfter.mValue2;

            if (clValueAfter == null)
            {
                goto RETURN_DEFAULT2;
            }

            if (clValueAfter is bool && clValueAfter is string)
            {
                goto RETURN_DEFAULT2;
            }

            //以下、現在フレームの値(トゥイーン込みの)計算処理
            if (clValueBefore is int && clValueAfter is int)
            {
                //Tweenを見て値を分割する処理
            }
            else if (clValueBefore is float && clValueAfter is float)
            {
                //Tweenを見て値を分割する処理
            }

RETURN_DEFAULT2:
            object clValue = ClsParam.GetDefaultValue2(this.mTypeOption);

            return(clValue);
        }
Пример #13
0
        /// <summary>
        /// 指定フレームの値1を取得する処理
        /// </summary>
        /// <param name="inFrameNo">フレームNo</param>
        /// <returns>値1</returns>
        public object GetValue1(int inFrameNo)
        {
            ClsDatMotion clMotion = ClsSystem.GetSelectMotion();

            if (clMotion == null)
            {
                goto RETURN_DEFAULT1;
            }

            int inMaxFrameNum   = clMotion.GetMaxFrameNum();
            int inFrameNoBefore = 0;
            int inFrameNoAfter  = 0;

            this.GetKeyFrameNo(inFrameNo, inMaxFrameNum, out inFrameNoBefore, out inFrameNoAfter);

            ClsDatKeyFrame clKeyFrameBefore = this.mDicKeyFrame[inFrameNoBefore];

            if (clKeyFrameBefore == null)
            {
                goto RETURN_DEFAULT1;
            }

            if (clKeyFrameBefore.mTween1 == null)
            {
                object clValueTmp = clKeyFrameBefore.mValue1;
                return(clValueTmp);
            }

            bool isExist = this.mDicKeyFrame.ContainsKey(inFrameNoAfter);

            if (!isExist)
            {
                goto RETURN_DEFAULT1;
            }

            ClsDatKeyFrame clKeyFrameAfter = this.mDicKeyFrame[inFrameNoAfter];

            if (clKeyFrameAfter == null)
            {
                goto RETURN_DEFAULT1;
            }

            object clValueBefore = clKeyFrameBefore.mValue1;

            if (clValueBefore == null)
            {
                goto RETURN_DEFAULT1;
            }

            if (clValueBefore is bool && clValueBefore is string)
            {
                return(clValueBefore);
            }

            object clValueAfter = clKeyFrameAfter.mValue1;

            if (clValueAfter == null)
            {
                goto RETURN_DEFAULT1;
            }

            if (clValueAfter is bool && clValueAfter is string)
            {
                goto RETURN_DEFAULT1;
            }

            //以下、現在フレームの値(トゥイーン込みの)計算処理
            if (clValueBefore is int && clValueAfter is int)
            {
                //Tweenを見て値を分割する処理
                //clKeyFrameBefore.mTween1.GetRate //←中でその場で256の重みリストを作成してない?
                //もしそうなら、そのリストをメンバ内に保持するようにする
            }
            else if (clValueBefore is float && clValueAfter is float)
            {
                //Tweenを見て値を分割する処理
                //clKeyFrameBefore.mTween1.GetRate //←中でその場で256の重みリストを作成してない?
                //もしそうなら、そのリストをメンバ内に保持するようにする
            }

RETURN_DEFAULT1:
            object clValue = ClsParam.GetDefaultValue1(this.mTypeOption);

            return(clValue);
        }