/// <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); }
/// <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; }
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; }
/// <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; } }
/// <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); }
/// <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); } }
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); }
/// <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); }
/// <summary> /// クローン処理 /// </summary> /// <returns>トゥイーン情報</returns> public ClsDatTween Clone() { ClsDatTween clTween = new ClsDatTween(this.mParam, this.mLength, this.mPos, this.mListVec); return(clTween); }
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); }
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); }
/// <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); } } }
/// <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; } } }
/// <summary> /// トゥイーン情報の取得 /// </summary> /// <returns>トゥイーン情報</returns> public ClsDatTween GetTween() { ClsDatTween clTween = new ClsDatTween(this.mParam, this.mFrmEnd - this.mFrmStart, this.mListPos[1], this.mListVec); return(clTween); }