Beispiel #1
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="enParam">種別</param>
        /// <param name="inLength">対象フレーム数</param>
        /// <param name="clPos">座標</param>
        /// <param name="pclVec">各ベクトル</param>
        public ClsDatTween(EnmParam enParam, int inLength, ClsVector3 clPos, List <ClsVector3> pclVec)
        {
            this.mParam  = enParam;
            this.mLength = inLength;

            this.mPos = new ClsVector3();
            if (clPos != null)
            {
                this.mPos.X = clPos.X;
                this.mPos.Y = clPos.Y;
            }

            this.mListVec = new List <ClsVector3>();
            if (pclVec != null)
            {
                int inCnt;
                for (inCnt = 0; inCnt < 3; inCnt++)
                {
                    ClsVector3 clVec = new ClsVector3(pclVec[inCnt].X, pclVec[inCnt].Y, 0.0f);
                    this.mListVec.Add(clVec);
                }
            }

            this.mImage = ClsDatTween.CreateImage(this, 15, 15);
        }
Beispiel #2
0
        /// <summary>
        /// トゥイーン情報を出力用データに変換する処理
        /// </summary>
        /// <param name="clTween">トゥイーン情報</param>
        public static void CreateTweenWeight(ClsDatTween clTween)
        {
            if (clTween == null)
            {
                return;
            }

            byte[] puchRate = new byte[ClsDatTween.MAX_WEIGHT];

            int    inWidth  = ClsDatTween.MAX_WEIGHT;
            int    inHeight = byte.MaxValue;
            Bitmap clImage  = ClsDatTween.CreateImage(clTween, inWidth, inHeight);

            //以下、出力用データ作成処理
            int inX, inY;

            for (inX = 0; inX < inWidth; inX++)
            {
                for (inY = 0; inY < inHeight; inY++)
                {
                    Color stColor = clImage.GetPixel(inX, inY);
                    if (stColor.A != 0)
                    {
                        continue;
                    }

                    puchRate[inX] = (byte)inY;
                    break;
                }
            }

            clTween.mRate = puchRate;
        }
Beispiel #3
0
        public object mValue2;              //値(何の値かはタイプに依存する Y座標など)

        /*
         * //以下、表示設定
         * EnmTypeOption.DISPLAY
         * mValue1 = clParam.mDisplay
         * mValue2 = null
         *
         * //以下、座標設定
         * EnmTypeOption.POSITION
         * mValue1 = clParam.mX
         * mValue2 = clParam.mY
         *
         * //以下、回転設定
         * EnmTypeOption.ROTATION
         * mValue1 = clParam.mRZ
         * mValue2 = null
         *
         * //以下、スケール設定
         * EnmTypeOption.SCALE
         * mValue1 = clParam.mSX
         * mValue2 = clParam.mSY
         *
         * //以下、オフセット設定
         * EnmTypeOption.OFFSET
         * mValue1 = clParam.mCX
         * mValue2 = clParam.mCY
         *
         * //以下、反転設定
         * EnmTypeOption.FLIP
         * mValue1 = clParam.mFlipH
         * mValue2 = clParam.mFlipV
         *
         * //以下、透明設定
         * EnmTypeOption.TRANSPARENCY
         * mValue1 = clParam.mTrans
         * mValue2 = null
         *
         * //以下、カラー設定
         * EnmTypeOption.COLOR
         * mValue1 = clParam.mColor
         * mValue2 = null
         *
         * //以下、ユーザーデータ設定
         * EnmTypeOption.USER_DATA
         * mValue1 = clParam.mUserData
         * mValue2 = null
         */

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="enTypeOption">オプションタイプ</param>
        /// <param name="inFrame">フレームNo</param>
        /// <param name="isEnable1">有効フラグ</param>
        /// <param name="isEnable2">有効フラグ</param>
        /// <param name="clTween1">トゥイーン1</param>
        /// <param name="clTween2">トゥイーン2</param>
        /// <param name="clValue1">値1</param>
        /// <param name="clValue2">値2</param>
        public ClsDatKeyFrame(EnmTypeOption enTypeOption, int inFrameNo, bool isEnable1, bool isEnable2, ClsDatTween clTween1, ClsDatTween clTween2, object clValue1, object clValue2)
        {
            this.mFrameNo    = inFrameNo;
            this.mTypeOption = enTypeOption;
            this.mEnable1    = isEnable1;
            this.mEnable2    = isEnable2;
            this.mTween1     = clTween1;
            this.mTween2     = clTween2;
            this.mValue1     = clValue1;
            this.mValue2     = clValue2;
        }
Beispiel #4
0
        /// <summary>
        /// キーフレームの全てを削除する処理
        /// </summary>
        public void RemoveAll()
        {
            //以下、トゥイーン全削除処理
            if (this.mTween1 != null)
            {
                this.mTween1.RemoveAll();
                this.mTween1 = null;
            }

            if (this.mTween2 != null)
            {
                this.mTween2.RemoveAll();
                this.mTween2 = null;
            }
        }
Beispiel #5
0
        /// <summary>
        /// トゥイーン情報をアイコン画像に変換する処理
        /// </summary>
        /// <param name="clTween">トゥイーン情報</param>
        /// <param name="inWidth">イメージ幅</param>
        /// <param name="inHeight">イメージ高さ</param>
        /// <returns>画像</returns>
        public static Bitmap CreateImage(ClsDatTween clTween, int inWidth, int inHeight)
        {
            Pen    clPen   = new Pen(Color.Green);
            Bitmap clImage = new Bitmap(inWidth, inHeight);

            //以下、ペン作成処理
            Pen stPen = new Pen(Color.Red);

//このデータの取得方法だとまずい
//ちゃんと緑のラインから取得するようにする

            //以下、ライン作成処理
            float flPosX0 = (float)(ClsDatTween.POS_X0 * inWidth);
            float flPosY0 = (float)(ClsDatTween.POS_Y0 * inHeight) - 1.0f;
            float flPosX1 = (float)(clTween.mPos.X * inWidth);
            float flPosY1 = (float)(clTween.mPos.Y * inHeight);
            float flPosX2 = (float)(ClsDatTween.POS_X2 * inWidth) - 1.0f;
            float flPosY2 = (float)(ClsDatTween.POS_Y2 * inHeight);
            float flVecX0 = flPosX0 + (float)(clTween.mListVec[0].X * inWidth);
            float flVecY0 = flPosY0 + (float)(clTween.mListVec[0].Y * inHeight);
            float flVecX1 = flPosX1 - (float)(clTween.mListVec[1].X * inWidth);
            float flVecY1 = flPosY1 - (float)(clTween.mListVec[1].Y * inHeight);
            float flVecX2 = flPosX1 + (float)(clTween.mListVec[1].X * inWidth);
            float flVecY2 = flPosY1 + (float)(clTween.mListVec[1].Y * inHeight);
            float flVecX3 = flPosX2 - (float)(clTween.mListVec[2].X * inWidth);
            float flVecY3 = flPosY2 - (float)(clTween.mListVec[2].Y * inHeight);
            Point stPos0  = new Point((int)Math.Round(flPosX0), (int)Math.Round(flPosY0));
            Point stVec0  = new Point((int)Math.Round(flVecX0), (int)Math.Round(flVecY0));
            Point stVec1  = new Point((int)Math.Round(flVecX1), (int)Math.Round(flVecY1));
            Point stPos1  = new Point((int)Math.Round(flPosX1), (int)Math.Round(flPosY1));
            Point stVec2  = new Point((int)Math.Round(flVecX2), (int)Math.Round(flVecY2));
            Point stVec3  = new Point((int)Math.Round(flVecX3), (int)Math.Round(flVecY3));
            Point stPos2  = new Point((int)Math.Round(flPosX2), (int)Math.Round(flPosY2));

            Point[] pclListPos = { stPos0, stVec0, stVec1, stPos1, stVec2, stVec3, stPos2 };

            //以下、画像作成処理
            using (Graphics g = Graphics.FromImage(clImage))
            {
                g.Clear(Color.Transparent);
                g.DrawBeziers(stPen, pclListPos);
            }

            return(clImage);
        }
Beispiel #6
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);
            }
        }
Beispiel #7
0
        public byte[] mRate = null; //要素数MAX_X個のリスト

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="enParam">種別</param>
        /// <param name="inLength">対象フレーム数</param>
        /// <param name="clPos">座標</param>
        /// <param name="pclVec">各ベクトル</param>
        public ClsDatTween(EnmParam enParam, int inLength)
        {
            this.mParam  = enParam;
            this.mLength = inLength;

            this.mPos   = new ClsVector3();
            this.mPos.X = ClsDatTween.POS_X1;
            this.mPos.Y = ClsDatTween.POS_Y1;

            this.mListVec = new List <ClsVector3>();
            ClsVector3 clVec = new ClsVector3(ClsDatTween.VEC_X0, ClsDatTween.VEC_Y0, 0.0f);

            this.mListVec.Add(clVec);
            clVec = new ClsVector3(ClsDatTween.VEC_X1, ClsDatTween.VEC_Y1, 0.0f);
            this.mListVec.Add(clVec);
            clVec = new ClsVector3(ClsDatTween.VEC_X2, ClsDatTween.VEC_Y2, 0.0f);
            this.mListVec.Add(clVec);

            this.mImage = ClsDatTween.CreateImage(this, 15, 15);
        }
Beispiel #8
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);
        }
Beispiel #9
0
        /// <summary>
        /// クローン処理
        /// </summary>
        /// <returns>トゥイーン情報</returns>
        public ClsDatTween Clone()
        {
            ClsDatTween clTween = new ClsDatTween(this.mParam, this.mLength, this.mPos, this.mListVec);

            return(clTween);
        }
Beispiel #10
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);
        }
Beispiel #11
0
        private void button_Tween_Click(object sender, EventArgs e)
        {
            Button clButton = sender as Button;

            EnmParam enParam = EnmParam.NONE;

            if ("button_TweenX".Equals(clButton.Name))
            {
                enParam = EnmParam.POSITION_X;
            }
            else if ("button_TweenY".Equals(clButton.Name))
            {
                enParam = EnmParam.POSITION_Y;
            }
            else if ("button_TweenRZ".Equals(clButton.Name))
            {
                enParam = EnmParam.ROTATION;
            }
            else if ("button_TweenSX".Equals(clButton.Name))
            {
                enParam = EnmParam.SCALE_X;
            }
            else if ("button_TweenSY".Equals(clButton.Name))
            {
                enParam = EnmParam.SCALE_Y;
            }
            else if ("button_TweenCX".Equals(clButton.Name))
            {
                enParam = EnmParam.OFFSET_X;
            }
            else if ("button_TweenCY".Equals(clButton.Name))
            {
                enParam = EnmParam.OFFSET_Y;
            }
            else if ("button_TweenT".Equals(clButton.Name))
            {
                enParam = EnmParam.TRANS;
            }
            else if ("button_TweenC".Equals(clButton.Name))
            {
                enParam = EnmParam.COLOR;
            }
            if (enParam == EnmParam.NONE)
            {
                return;
            }

            //以下、トゥイーンウィンドウ設定処理
            int         inFrameNo = ClsSystem.GetSelectFrameNo();
            FormTween   clForm    = null;
            ClsDatTween clTween   = clButton.Tag as ClsDatTween;

            if (clTween == null)
            {
                clForm = new FormTween(this.mFormMain, enParam, 10, 20, inFrameNo);
            }
            else
            {
                clForm = new FormTween(this.mFormMain, enParam, 10, 20, inFrameNo, clTween.mPos, clTween.mListVec);
            }
            clForm.ShowDialog();
            if (clForm.DialogResult != DialogResult.OK)
            {
                return;
            }

            //以下、トゥイーン設定
            clTween = clForm.GetTween();
            FormTween.CreateTweenWeight(clTween);   //重みリスト作成処理
            clButton.Image = clTween.mImage;
            clButton.Tag   = clTween;

            this.Param_ValueChanged(sender, e);
        }
Beispiel #12
0
        /// <summary>
        /// エレメント情報変更処理
        /// </summary>
        /// <param name="clElem">変更対象となるエレメント</param>
        /// <param name="enTypeOption">オプションタイプ</param>
        /// <param name="inSelectFrameNo">フレーム番号</param>
        /// <param name="isExistKeyFrame">キーフレーム存在フラグ</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>
        private void ChangeElem(ClsDatElem clElem, EnmTypeOption enTypeOption, int inSelectFrameNo, bool isExistKeyFrame, bool isEnable1, bool isEnable2, ClsDatTween clTween1, ClsDatTween clTween2, object clValue1, object clValue2)
        {
            ClsDatOption clOption = null;

            if (inSelectFrameNo == 0)
            {
                clElem.SetOption(enTypeOption, isEnable1, isEnable2, clTween1, clTween2, clValue1, clValue2);
            }
            else
            {
                bool isExist = clElem.IsExistOption(enTypeOption);
                if (isExist)
                {
                    clOption = clElem.GetOption(enTypeOption);
                }
                else
                {
                    clValue1 = ClsParam.GetDefaultValue1(enTypeOption);
                    clValue2 = ClsParam.GetDefaultValue2(enTypeOption);
                    clElem.SetOption(enTypeOption, isEnable1, isEnable2, clTween1, clTween2, clValue1, clValue2);
                    clOption = clElem.GetOption(enTypeOption);
                }

                if (isExistKeyFrame)
                {
                    clOption.SetKeyFrame(inSelectFrameNo, isEnable1, isEnable2, clTween1, clTween2, clValue1, clValue2);  //追加または更新
                }
                else
                {
                    clOption.RemoveKeyFrame(inSelectFrameNo);
                }
            }
        }
Beispiel #13
0
        /// <summary>
        /// 読み込み処理
        /// </summary>
        /// <param name="clXmlNode">xmlノード</param>
        public void Load(XmlNode clXmlNode)
        {
            XmlNodeList clListNode = clXmlNode.ChildNodes;

            this.mFrameNo = ClsTool.GetIntFromXmlNodeList(clListNode, "Frame");

            string clValue1 = ClsTool.GetStringFromXmlNodeList(clListNode, "Value1");
            string clValue2 = ClsTool.GetStringFromXmlNodeList(clListNode, "Value2");

            switch (this.mTypeOption)
            {
            case EnmTypeOption.NONE:
                this.mValue1 = null;
                break;

            case EnmTypeOption.DISPLAY:
                this.mValue1 = Convert.ToBoolean(clValue1);
                break;

            case EnmTypeOption.FLIP:
                this.mValue1 = Convert.ToBoolean(clValue1);
                this.mValue2 = Convert.ToBoolean(clValue2);
                break;

            case EnmTypeOption.POSITION:
            case EnmTypeOption.ROTATION:
            case EnmTypeOption.SCALE:
            case EnmTypeOption.OFFSET:
                this.mValue1 = Convert.ToSingle(clValue1);
                this.mValue2 = Convert.ToSingle(clValue2);
                break;

            case EnmTypeOption.TRANSPARENCY:
                this.mValue1 = Convert.ToSingle(clValue1);
                break;

            case EnmTypeOption.COLOR:
                this.mValue1 = Convert.ToInt32(clValue1);
                break;

            case EnmTypeOption.USER_DATA:
                this.mValue1 = clValue1;
                break;
            }

            //以下、各管理クラス作成処理
            foreach (XmlNode clNode in clListNode)
            {
                if ("Tween1".Equals(clNode.Name))
                {
                    ClsDatTween clDatTween = new ClsDatTween(EnmParam.NONE, 0, null, null);
                    clDatTween.Load(clNode);

                    this.mTween1 = clDatTween;
                    continue;
                }

                if ("Tween2".Equals(clNode.Name))
                {
                    ClsDatTween clDatTween = new ClsDatTween(EnmParam.NONE, 0, null, null);
                    clDatTween.Load(clNode);

                    this.mTween2 = clDatTween;
                    continue;
                }
            }
        }
Beispiel #14
0
        /// <summary>
        /// トゥイーン情報の取得
        /// </summary>
        /// <returns>トゥイーン情報</returns>
        public ClsDatTween GetTween()
        {
            ClsDatTween clTween = new ClsDatTween(this.mParam, this.mFrmEnd - this.mFrmStart, this.mListPos[1], this.mListVec);

            return(clTween);
        }