Beispiel #1
0
int MoveChara()
{
	int ret;
	float posstep = 100.0f;
	float degstep = 5.0f;
	//keybuf は、GetKeyboardState 命令で、セットされます。

	if( keybuf[VK_UP] == 1 ){
		ret = E3DPosForward( hsid1, posstep );//矢印上
		_ASSERT( !ret );
	}
	if( keybuf[VK_DOWN] == 1 ){
		ret = E3DPosForward( hsid1, -posstep );//矢印下
		_ASSERT( !ret );
	}
	if( keybuf[VK_LEFT] == 1 ){
		ret = E3DRotateY( hsid1, -degstep );//矢印左
		_ASSERT( !ret );
	}
	if( keybuf[VK_RIGHT] == 1 ){
		ret = E3DRotateY( hsid1, degstep );//矢印右
		_ASSERT( !ret );
	}



	return 0;
}
int PlayerChara::TurnBackDir( int Qid, D3DXVECTOR3 WantDeg, int FixFlag){

	/* 初期化 */
	const D3DXVECTOR3 BASEVEC( 0.0, 0.0, -1.0);//向きの初期方向ベクトル

	int ech = 0;
	int MotionID = 0;
	int FrameNo = 0; 

	/* //////////////////////////// */
	/* キャラクタの向きを変更します */
	/* //////////////////////////// */


	/*キャラクターモデルの方向を初期化します*/
	ech = E3DRotateInit( Get_BodyModel());
	_ASSERT( ech != 1 );//エラーチェック

	/*「首付け根」部分のモーションはどうか調べます*/
	ech = E3DGetMotionFrameNoML( Get_BodyModel(), Get_Bone_ID(2), &MotionID, &FrameNo);
	_ASSERT( ech != 1 );//エラーチェック

	/*「首付け根」部分のクォータニオンを調べます*/
	ech = E3DGetCurrentBoneQ( Get_BodyModel(), Get_Bone_ID(2), 2, Qid);
	_ASSERT( ech != 1 );//エラーチェック

	/*向きたい方向への計算を行います*/
	ech = E3DLookAtQ( Qid, WantDeg, BASEVEC, 0, 0);
	_ASSERT( ech != 1 );//エラーチェック


	/*向きたい方向の修正を加えます*/
	if( FixFlag == 1) ech = E3DRotateQY( Qid, -Get_PC_Deg_XZ());
	_ASSERT( ech != 1 );//エラーチェック

	/*計算したクォーターニオンを代入します*/
	ech = E3DSetBoneQ( Get_BodyModel(), Get_Bone_ID(2), MotionID, FrameNo, Qid);
	_ASSERT( ech != 1 );//エラーチェック

	/*マルチレイヤーモーションの計算を行います*/
	ech = E3DCalcMLMotion( Get_BodyModel());
	_ASSERT( ech != 1 );//エラーチェック

	/*キャラクターを回転させます*/
	ech = E3DRotateY( Get_BodyModel(), Get_PC_Deg_XZ());
	_ASSERT( ech != 1 );//エラーチェック


	return 0;
}
Beispiel #3
0
int MoveChara()
{
	float movestep = 100.0f;
	float degstep = 5.0f;

	if( keybuf[VK_SHIFT] == 0 ){
		//シフトキーを押していないときキャラクターを動かす
		//シフトキーを押しているときはカメラを動かす(MoveCamera)
		if( keybuf[VK_UP] != 0 ){
			E3DPosForward( hsid1, movestep );
		}
		if( keybuf[VK_DOWN] != 0 ){
			E3DPosForward( hsid1, -movestep );
		}
		if( keybuf[VK_LEFT] != 0 ){
			E3DRotateY( hsid1, -degstep );
		}
		if( keybuf[VK_RIGHT] != 0 ){
			E3DRotateY( hsid1, degstep );
		}
	}

	return 0;
}
Beispiel #4
0
/*自分の向くべき方向を調節したり、射撃したりする関数*/
int PlayerChara::GunConflictTarget( int ScreenPosArray[2], Stage *Stg, Enemy *Ene){
    
	
	/* /////////////////////////////////////////////////////// */
	// キャラクターモデルを壁があれば壁に向ける
	// なければ銃の攻撃が届く範囲までの距離を取得し、そこに向ける
	/* /////////////////////////////////////////////////////// */

	/*変数の初期化*/
	int NowWpKind = 0;//今の武器の種類を取得します
	int ech = 0;//エラー確認変数
	int MotionID = 0;//MLから取得した現在の「首付け根」モーションID
	int FrameNo = 0;//MLから取得した現在の「首付け根」モーションが現在再生している番号
	int NearEnemyID = 0;//一番近い敵キャラの識別番号
	int EnemyConflict = 0;//敵に当たった数の合計
	int Wall_HitResult = 0;//当たり判定モデルが壁に当たっているかどうか調べます
	int EneHitResult = 0;//敵が照準に入っているかの結果を入れます
	int HitResult = 0;//銃を向ける方向があるか入れますかの結果を入れます
	float NowWpRange = 0.0f;//今の武器の射程を代入します
	float Wall_HitDistance = 0.0f;//当たった面のところからの距離が代入されます
	float EneDistance = 0.0f;//当たった敵のところからの距離が代入されます
	float EneNearDistance = 0.0f;//当たっている一番近い敵の距離が代入されます
	D3DXVECTOR3 Wall_ReflectVec( 0.0, 0.0, 0.0);//地面の反射ベクトルの構造体
	D3DXVECTOR3 Wall_GunTargetPos( 0.0, 0.0, 0.0);//銃が向くべき座標
	D3DXVECTOR3 ReflectVec( 0.0, 0.0, 0.0);//反射ベクトルの構造体
	D3DXVECTOR3 GunTargetPos( 0.0, 0.0, 0.0);//銃が向くべき座標
	D3DXVECTOR3 WantVec( 0.0, 0.0, 0.0);//「首つけ根」の向きたい方向へのベクトル
	D3DXVECTOR3 BaseVec( 0.0, 0.0, -1.0);//向きの初期方向ベクトル
	D3DXVECTOR3 StomachPos( 0.0, 0.0, 0.0);//「首つけ根」の座標
	D3DXVECTOR3 MyPos1( 0.0, 0.0, 0.0);//最初自分の座標
	D3DXVECTOR3 OriginPos( 0.0, 0.0, 0.0);//キャラクターをおくべき原点座標
	D3DXVECTOR3 GarbageD3DVec( 0.0, 0.0, 0.0);//要らないXYZのデータの一次入れ
	POINT ScreenPos = { ScreenPosArray[0], ScreenPosArray[1]};//2Dスクリーン座標構造体

	/*装備をきちんとつけていれば*/
	if( Get_Wp_equipment() != -1){

			NowWpKind = Wpn.GetWeaponData( Get_Wp_equipment(), 0);
			NowWpRange = float( Wpn.GetWeaponData( Get_Wp_equipment(), 4) * 500);
			EneNearDistance = float(NowWpRange);
	}

	/**/
	//壁の銃取得をどのようにするか指定します*/
	/**/

	/*通常モード( モデル[0]から取得する )*/
	if( Stg->Stage_GunTarget == 0){
			ech = E3DPickFace( System::scid1, Stg->Stage_hsid[0], ScreenPos, NowWpRange, &Wall_HitResult, &HitResult, &Wall_GunTargetPos, &Wall_ReflectVec, &Wall_HitDistance);
			_ASSERT( ech != 1 );//エラーチェック
	}


	if(Get_Wp_equipment() != -1){//装備をきちんとつけていれば
		/*武器の種類が、ハンドガンであれば*/
		if((NowWpKind == 1) || (NowWpKind == 4)|| (NowWpKind == 5)){
			
				/*敵にあたっていないかチェックします*/
				for( int i=0; i< Ene->EnemyNum; i++){//エネミーの数だけ
									ech = E3DPickFace( System::scid1, Ene->Ene[i]->Get_BodyModel(), ScreenPos, NowWpRange, &EneHitResult, &EneHitResult, &GarbageD3DVec, &GarbageD3DVec, &EneDistance);
									_ASSERT( ech != 1 );//エラーチェック
									if( (EneHitResult != 0) && ( EneDistance < EneNearDistance) ){
												EneNearDistance = EneDistance;//一番近い敵の距離に更新します
												NearEnemyID = i;//一番近いモデル番号を入れます
												EnemyConflict = 1;//近い敵がいることを代入します
												HitResult = 1;//ヒットフラグを1にする
									}
				}

				if( (EnemyConflict == 1) && ( Wall_HitDistance > EneNearDistance) ){//敵に銃先を向ける
						ech = E3DPickFace( System::scid1, Ene->Ene[NearEnemyID]->Get_BodyModel(), ScreenPos, NowWpRange, &EneHitResult, &EneHitResult, &GunTargetPos, &ReflectVec, &EneDistance);
						_ASSERT( ech != 1 );//エラーチェック
				}
				else{//壁に銃先を向ける
						GunTargetPos = Wall_GunTargetPos;
						ReflectVec = Wall_ReflectVec;
				}
			

				/*壁に当たっていれば*/
				if( HitResult != -1){

						/*「首付け根」部分の座標を取得します*/
						ech = E3DGetCurrentBonePos( Get_BodyModel(), Get_Bone_ID(2), 1, &StomachPos);
						_ASSERT( ech != 1 );//エラーチェック

						WantVec.x =  GunTargetPos.x - StomachPos.x;
						WantVec.y =  GunTargetPos.y - StomachPos.y;
						WantVec.z =  GunTargetPos.z - StomachPos.z;

						/*キャラクターの向きを初期化します*/
						ech = E3DRotateInit( Get_BodyModel());
						_ASSERT( ech != 1 );//エラーチェック


						/*「首付け根」部分のクォータニオンを調べます*/
						ech = E3DGetCurrentBoneQ( Get_BodyModel(), Get_Bone_ID(2), 2, Get_Quaternion(5));
						_ASSERT( ech != 1 );//エラーチェック

						/*「首付け根」部分のモーションはどうか調べます*/
						ech = E3DGetMotionFrameNoML( Get_BodyModel(), Get_Bone_ID(2), &MotionID, &FrameNo);
						_ASSERT( ech != 1 );//エラーチェック

						/*向きたい方向への計算を行います*/
						ech = E3DLookAtQ( Get_Quaternion(5), WantVec, BaseVec, 0, 0);
						_ASSERT( ech != 1 );//エラーチェック



						/*向きたい方向の修正を加えます*/
						ech = E3DRotateQY( Get_Quaternion(5), -(Get_PC_Deg_XZ()));
						_ASSERT( ech != 1 );//エラーチェック

						/*計算したクォーターニオンを代入します*/
						ech = E3DSetBoneQ( Get_BodyModel(), Get_Bone_ID(2), MotionID, FrameNo, Get_Quaternion(5));
						_ASSERT( ech != 1 );//エラーチェック

						/*マルチレイヤーモーションの計算を行います*/
						ech = E3DCalcMLMotion( Get_BodyModel());
						_ASSERT( ech != 1 );//エラーチェック

						/*キャラクターを回転させます*/
						ech = E3DRotateY( Get_BodyModel(), Get_PC_Deg_XZ());
						_ASSERT( ech != 1 );//エラーチェック
			}
		}
		else{



		}
	}




	return 0;
}
Beispiel #5
0
int ChkConf()
{
	int ret;


//壁(hsid2)とキャラクタ(hsid1)のあたり判定
	ret = E3DChkConfWall( hsid1, hsid2, 10.0f, &result1, &adj1, &n1 );
	_ASSERT( !ret );
	if( result1 ){

		//向きを、修正する。

			//面の法線と90度、ー90度の2つのベクトルを求める。
		D3DXVECTOR3 kabe1, kabe2;
		D3DXVECTOR3 nkabe1, nkabe2;

		ret = E3DVec3RotateY( n1, 90.0f, &kabe1 );
		_ASSERT( !ret );
		ret = E3DVec3Normalize( kabe1, &nkabe1 );
		_ASSERT( !ret );

		ret = E3DVec3RotateY( n1, -90.0f, &kabe2 );
		_ASSERT( !ret );
		ret = E3DVec3Normalize( kabe2, &nkabe2 );
		_ASSERT( !ret );

			//キャラクターの向いている向きを求める。
		ret = E3DGetPos( hsid1, &pos1 );
		_ASSERT( !ret );
		D3DXVECTOR3 vec, nvec;
		vec = D3DXVECTOR3( pos1.x - befpos1.x, 0.0f, pos1.z - befpos1.z );
		ret = E3DVec3Normalize( vec, &nvec );
		_ASSERT( !ret );

			// 90度、ー90度の2つのベクトルのベクトルと、キャラクターの向きの内積を取り、
			// 内積の大きな方を選んで、そちらに、向きを変える。
		float dot, dot1, dot2;
		dot1 = D3DXVec3Dot( &nvec, &nkabe1 );
		dot2 = D3DXVec3Dot( &nvec, &nkabe2 );

		D3DXVECTOR2 nvecxz, nkabexz;
		int ccw;

		if( dot1 >= dot2 ){
			nvecxz = D3DXVECTOR2( nvec.x, nvec.z );
			nkabexz = D3DXVECTOR2( nkabe1.x, nkabe1.z );
			dot = dot1;
			ret = E3DVec2CCW( nvecxz, nkabexz, &ccw );
			_ASSERT( !ret );
		}else{
			nvecxz = D3DXVECTOR2( nvec.x, nvec.z );
			nkabexz = D3DXVECTOR2( nkabe2.x, nkabe2.z );
			dot = dot2;
			ret = E3DVec2CCW( nvecxz, nkabexz, &ccw );
			_ASSERT( !ret );
		}

		dot = min( 1.0f, dot );
		dot = max( -1.0f, dot );

		float newdeg;
		newdeg = (float)acos( dot ) * (float)PAI2DEG;
		
		if( ccw > 0 ){
			newdeg *= -1.0f;
		}
		ret = E3DRotateY( hsid1, newdeg / 20.0f );
		_ASSERT( !ret );

		// 位置を修正する
		pos1 = adj1;
		ret = E3DSetPos( hsid1, pos1 );
		_ASSERT( !ret );
	}


	// 地面と、キャラクタのあたり判定	
	ret = E3DChkConfGround( hsid1, hsid0, 1, 200.0f, -1000.0f, &result2, &adj2, &n2 );
	if( result2 != 0 ){
		ret = E3DSetPos( hsid1, adj2 );
		_ASSERT( !ret );
	}

	return 0;
}
Beispiel #6
0
int MoveChara( int chara1, int chara2, char key1, char key2, char key3, char key4, 
	char key5, char key6, char key7 )
{
	int ret;

	int eventno;

	if( ci[chara1].nagerare == 0 ){
		eventno = 0;
		if( keybuf[key5] == 1 )
			eventno = 2;
		if( keybuf[key6] == 1 )
			eventno = 4;
		if( keybuf[key7] == 1 )
			eventno = 8;
		if( (keybuf[key5] != 0) || (keybuf[key6] != 0) ){
			ret = E3DPosForward( ci[chara1].hsid, 5.0f );
			if( ret ){
				_ASSERT( 0 );
				return 1;
			}
			ret = E3DGetPos( ci[chara1].hsid, &(ci[chara1].pos) );
			if( ret ){
				_ASSERT( 0 );
				return 1;
			}
		}
		if( eventno == 0 ){
			if( keybuf[key1] != 0 ){
				ret = E3DPosForward( ci[chara1].hsid, 16.0f );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				ret = E3DGetPos( ci[chara1].hsid, &(ci[chara1].pos) );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				eventno = 1;
			}
			if( keybuf[key2] != 0 ){
				ret = E3DPosForward( ci[chara1].hsid, -16.0f );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				ret = E3DGetPos( ci[chara1].hsid, &(ci[chara1].pos) );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				eventno = 1;
			}
			if( keybuf[key3] != 0 ){
				ret = E3DRotateY( ci[chara1].hsid, 2.0f );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				eventno = 1;
			}
			if( keybuf[key4] != 0 ){
				ret = E3DRotateY( ci[chara1].hsid, -2.0f );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				eventno = 1;
			}
		}
		if( (ci[chara1].motid == *(motionidptr + MOT_MOCHIAGE)) && (ci[chara1].nage == 0) && 
			(ci[chara2].nagerare == 0) ){
			ret = E3DDirToTheOther( ci[chara1].hsid, ci[chara2].hsid );
			if( ret ){
				_ASSERT( 0 );
				return 1;
			}

			D3DXVECTOR3 diff;
			diff = ci[chara1].pos - ci[chara2].pos;
			float mag;
			mag = diff.x * diff.x + diff.y * diff.y + diff.z * diff.z;
			if( mag < 900000.0f ){
				ci[chara1].nage = 1;
				ci[chara2].nagerare = 1;
				ci[chara2].nagevy = NAGEY;
				D3DXVECTOR3 bonepos;
				ret = E3DGetBonePos( ci[chara1].hsid, 18, 1, ci[chara1].motid, ci[chara1].frameno, &bonepos );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				ret = E3DGetDirQ2( ci[chara1].hsid, ci[chara1].qid );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}
				D3DXVECTOR3 befvec( 0.0f, 0.0f, -1.0f );
				D3DXVECTOR3 dir;
				ret = E3DMultQVec( ci[chara1].qid, befvec, &dir );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				ci[chara2].pos.x = bonepos.x + dir.x * 300.0f;
				ci[chara2].pos.y = bonepos.y - 300.0f;
				ci[chara2].pos.z = bonepos.z + dir.z * 300.0f;
				ret = E3DSetPos( ci[chara2].hsid, ci[chara2].pos );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				ret = E3DGetBoneQ( ci[chara1].hsid, 18, ci[chara1].motid, ci[chara1].frameno, 2, ci[chara2].qid );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}
				ret = E3DSetDirQ2( ci[chara2].hsid, ci[chara2].qid );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}
				ret = E3DSetNewPoseByMOA( ci[chara2].hsid, 16 );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

			}
		}
		ret = E3DSetNewPoseByMOA( ci[chara1].hsid, eventno );
		if( ret ){
			_ASSERT( 0 );
			return 1;
		}

	}else{

		ci[chara1].nagerare += 1;

		if( ci[chara1].nagerare < 50 ){	
			ret = E3DSetNewPoseByMOA( ci[chara1].hsid, 16 );
			if( ret ){
				_ASSERT( 0 );
				return 1;
			}

		}else{
			if( ci[chara1].nagerare < 120 ){
				ret = E3DGetDirQ2( ci[chara2].hsid, ci[chara2].qid );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				D3DXVECTOR3 befvec2( 0.0f, 0.0f, -1.0f );
				D3DXVECTOR3 dir2;
				ret = E3DMultQVec( ci[chara2].qid, befvec2, &dir2 );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				ci[chara1].pos.x += dir2.x * 20.0f;
				ci[chara1].pos.z += dir2.z * 20.0f;
				ci[chara1].nagevy += GRAVITY;
				ci[chara1].pos.y += ci[chara1].nagevy;

				if( ci[chara1].pos.y < GROUND_HEIGHT )
					ci[chara1].pos.y = GROUND_HEIGHT;
				ret = E3DSetPos( ci[chara1].hsid, ci[chara1].pos );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				ret = E3DSetNewPoseByMOA( ci[chara1].hsid, 32 );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

			}else{
				ci[chara1].nagerare = 0;
				ci[chara2].nage = 0;
				ci[chara1].pos.y = GROUND_HEIGHT;
				ret = E3DCopyQ( ci[chara1].qid, ci[chara2].qid );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				ret = E3DSetDirQ2( ci[chara1].hsid, ci[chara1].qid );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				ret = E3DSetPos( ci[chara1].hsid, ci[chara1].pos );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

				ret = E3DSetNewPoseByMOA( ci[chara1].hsid, 0 );
				if( ret ){
					_ASSERT( 0 );
					return 1;
				}

 			}	
		}
	}

	int tempframeno;
	ret = E3DGetMotionFrameNo( ci[chara1].hsid, &(ci[chara1].motid), &(ci[chara1].frameno) );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	if( ci[chara1].motid == 0 ){
		ret = E3DGetNextMotionFrameNo( ci[chara1].hsid, 0, &(ci[chara1].motid), &tempframeno );
		if( ret ){
			_ASSERT( 0 );
			return 1;
		}

 	}







	return 0;
}
Beispiel #7
0
int OneTimeSceneInit()
{
	int ret;

	cameradist = 3000.0f;
	cameraheight = 800.0f;
	campos.x = (float)GROUND_SIZE * 0.5f;
	campos.y = (float)GROUND_HEIGHT + cameraheight;
	campos.z = ( (float)GROUND_SIZE * 0.5f ) - cameradist;

	ret = E3DSetProjection( 500.0f, 50000.0f, 60.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	ZeroMemory( ci, sizeof( CHARAINFO ) * CHARA_MAX );


//赤キャラ初期化
	char signame[MAX_PATH];
	sprintf_s( signame, MAX_PATH, "%s\\poo\\poo.sig", szMediaDir );
	ret = E3DSigLoad( signame, 0, 1.0f, &(ci[CHARA_RED].hsid) ); 
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	
	ci[CHARA_RED].pos = D3DXVECTOR3( 1000.0f, GROUND_HEIGHT, 0.0f );
	ret = E3DSetPos( ci[CHARA_RED].hsid, ci[CHARA_RED].pos );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	E3DCOLOR4UC redcol = { 255, 255, 0, 0 };
	ret = E3DSetToonEdge0Color( ci[CHARA_RED].hsid, -1, "dummy", redcol );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DSetToonEdge0Width( ci[CHARA_RED].hsid, -1, "dummy", 10.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DRotateY( ci[CHARA_RED].hsid, 90.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	char motname[MAX_PATH];
	sprintf_s( motname, MAX_PATH, "%s\\poo\\poo.moa", szMediaDir );
	ret = E3DLoadMOAFile( ci[CHARA_RED].hsid, motname, 10, 1.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DCreateQ( &(ci[CHARA_RED].qid) );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DSetBeforePos( ci[CHARA_RED].hsid );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ci[CHARA_RED].hp = HPMAX;

//青きゃらの初期化
	sprintf_s( signame, MAX_PATH, "%s\\poo\\poo.sig", szMediaDir );
	ret = E3DSigLoad( signame, 0, 1.0f, &(ci[CHARA_BLUE].hsid) ); 
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	
	ci[CHARA_BLUE].pos = D3DXVECTOR3( -1000.0f, GROUND_HEIGHT, 0.0f );
	ret = E3DSetPos( ci[CHARA_BLUE].hsid, ci[CHARA_BLUE].pos );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	E3DCOLOR4UC bcol = { 255, 0, 0, 255 };
	ret = E3DSetToonEdge0Color( ci[CHARA_BLUE].hsid, -1, "dummy", bcol );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DSetToonEdge0Width( ci[CHARA_BLUE].hsid, -1, "dummy", 10.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DRotateY( ci[CHARA_BLUE].hsid, -90.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	sprintf_s( motname, MAX_PATH, "%s\\poo\\poo.moa", szMediaDir );
	ret = E3DLoadMOAFile( ci[CHARA_BLUE].hsid, motname, 10, 1.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DCreateQ( &(ci[CHARA_BLUE].qid) );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DSetBeforePos( ci[CHARA_BLUE].hsid );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ci[CHARA_BLUE].hp = HPMAX;
///////////////////

	E3DGetMotionNum( ci[CHARA_RED].hsid, &motnum );
	motionidptr = (int*)malloc( sizeof( int ) * motnum );
	if( !motionidptr ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetMotionIDByName( ci[CHARA_RED].hsid, "idling", motionidptr + MOT_IDLING );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetMotionIDByName( ci[CHARA_RED].hsid, "walk", motionidptr + MOT_WALK );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetMotionIDByName( ci[CHARA_RED].hsid, "tsuki", motionidptr + MOT_TSUKI );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetMotionIDByName( ci[CHARA_RED].hsid, "kick", motionidptr + MOT_KICK );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetMotionIDByName( ci[CHARA_RED].hsid, "defence", motionidptr + MOT_DEFENCE );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetMotionIDByName( ci[CHARA_RED].hsid, "mochiage", motionidptr + MOT_MOCHIAGE );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetMotionIDByName( ci[CHARA_RED].hsid, "jitabata", motionidptr + MOT_JITABATA );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetMotionIDByName( ci[CHARA_RED].hsid, "nagerare", motionidptr + MOT_NAGERARE );
		if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetMotionIDByName( ci[CHARA_RED].hsid, "tsunagi", motionidptr + MOT_TSUNAGI );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
////////////////////

	char bgname[MAX_PATH];	
	sprintf_s( bgname, MAX_PATH, "%s\\bmpfile\\a007bcg.bmp", szMediaDir );
	ret = E3DCreateBG( scid, bgname, "dummy", 0.0f, 0.0f, 0, 50000.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	char gname[MAX_PATH];
	sprintf_s( gname, MAX_PATH, "%s\\bmpfile\\gplane.mqo", szMediaDir );
	ret = E3DLoadMQOFileAsGround( gname, 100.0, 0, BONETYPE_RDB2, &groundhsid );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}



	ret = E3DCreateLight( &lid1 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	D3DXVECTOR3 ldir( 0.0f, -1.0f, 1.0f );
	E3DCOLOR4UC col= {255, 255, 255, 255 };
	ret = E3DSetDirectionalLight( lid1, ldir, col );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}


	confflag = 0;
	gameflag = 0;


	return 0;
}
Beispiel #8
0
/*キャラを動かします、前後左右に動けます*/
int PlayerChara::MoveChara(){

	/*変数の初期化*/
	int ech = 0;//エラー確認変数
	int KeyMov = 0;//キーを押してどの方向に動くかの変数
	int MovOn = 0;//動いていいかのフラグ
	int keyin[20];//キー情報配列を作成 
	float WantDeg = 0;//向きたい方向の変数
	float FixedMoveSpeed = 0.0f;//それぞれの状態の固定速度
	D3DXVECTOR3 SubPos( 0.0, 0.0, 0.0);//キャラクターを置く場所の座標
	D3DXVECTOR3 PCPos( 0.0, 0.0, 0.0);//プレイヤーキャラクターの位置の座標

	/*ダッシュ操作がオンになっていないかチェック*/


	/*キーによる分岐*/

	System::GetKeyData(keyin);//キー情報を格納

	if( keyin[0] == 1){//左
				KeyMov = KeyMov +1;
	}
	if( keyin[1] == 1){//上
				KeyMov = KeyMov +2;
	}
	if( keyin[2] == 1){//右
				KeyMov = KeyMov +4;
	}
	if( keyin[3] == 1){//下
				KeyMov = KeyMov +8;
	}

	/*キーから取得した情報を変換*/
	if(KeyMov == 1){//左
				WantDeg = -90.0f + Get_PC_Deg_XZ();
				MovOn = 1;

				/*モーションを「左歩き」にする*/
				Set_UnderMotion(3);
	}
	if(KeyMov == 3){//左上
				WantDeg = -45.0f + Get_PC_Deg_XZ(); 
				MovOn = 1;

				/*モーションを「左前進」にする*/
				Set_UnderMotion(4);
	}
	if(KeyMov == 2){//上
				WantDeg = Get_PC_Deg_XZ(); 
				MovOn = 1;

				/*モーションを「歩行」にする*/
				Set_UnderMotion(1);//通常

	}
	if(KeyMov == 6){//右上
				WantDeg = 45.0f + Get_PC_Deg_XZ(); 
				MovOn = 1;

				/*モーションを「左前進」にする*/
				Set_UnderMotion(5);
	}
	if(KeyMov == 4){//右
				WantDeg = 90.0f + Get_PC_Deg_XZ(); 
				MovOn = 1;

				/*モーションを「右歩き」にする*/
				Set_UnderMotion(2);
	}
	if(KeyMov == 12){//右下
				WantDeg = 135.0f + Get_PC_Deg_XZ(); 
				MovOn = 1;

				/*モーションを「右後進」にする*/
				Set_UnderMotion(7);
	}
	if(KeyMov == 8){//下
				WantDeg = 180.0f + Get_PC_Deg_XZ(); 
				MovOn = 1;

				/*モーションを「後進」にする*/
				Set_UnderMotion(8);
	}
	if(KeyMov == 9){//左下
				WantDeg = -135.0f + Get_PC_Deg_XZ(); 
				MovOn = 1;

				/*モーションを「左後進」にする*/
				Set_UnderMotion(6);

	}

	//キーが入力されていても、キック中なら
	if( Get_MyState() == 1) {
				MovOn = 0;//絶対動かない
	}

	//空中で、ダッシュ状態なら
	if( ( Get_AirOnPC() == 1) && ( Get_MyState() == 2)){
				WantDeg = Get_PC_Deg_XZ();//まっすぐ進む
				MovOn = 1;//絶対動く
	}

	//左飛び状態なら
	if( Get_MyState() == 3) {
				WantDeg = -90.0f + Get_PC_Deg_XZ();
				MovOn = 1;//絶対動く
	}

	//右飛び状態なら
	if( Get_MyState() == 4) {
				WantDeg = 90.0f + Get_PC_Deg_XZ(); 
				MovOn = 1;//絶対動く
	}


	/*動く方向を決めるよ*/
	if(MovOn == 1){

					if( Get_MyState() == 0){//通常状態なら
							if( Get_AirOnPC() == 0){//空中でなければ
									if(Get_Attitude() == 0){//姿勢が「立っている状態」なら
											/*スピードを増加させる*/
											Set_MoveSpeed( Get_MoveSpeed() + 0.8f);

											//スピードに制限をかける
											if( 25.0f <= Get_MoveSpeed() ){
														Set_MoveSpeed( 25.0f);
											}

											//固定スピードの設定(立ち)
											FixedMoveSpeed = 50.0f;
									}

									if(Get_Attitude() == 1){//姿勢が「しゃがみ状態」なら
											/*スピードを増加させる*/
											Set_MoveSpeed( Get_MoveSpeed() + 0.4f);

											//スピードに制限をかける
											if( 20.0f <= Get_MoveSpeed() ){
														Set_MoveSpeed( 20.0f);
											}

											//固定スピードの設定(しゃがみ)
											FixedMoveSpeed = 30.0f;
									}
							}
							if( Get_AirOnPC() == 1){//空中にいるなら
									
									/*スピードを増加させる*/
									Set_MoveSpeed(Get_MoveSpeed() + 0.3f);

									//スピードに制限をかける
									if( 10.0f <= Get_MoveSpeed() ){
												Set_MoveSpeed( 10.0f);
									}

									//固定スピードの設定(しゃがみ)
									FixedMoveSpeed = 20.0f;
							}

					}
					if( Get_MyState() == 2){//ダッシュ状態なら

							if( Get_AirOnPC() == 0){//地上にいるなら
									/*スピードを増加させる*/
									Set_MoveSpeed( Get_MoveSpeed() + 2.0f);

									//スピードに制限をかける
									if( 40.0f <= Get_MoveSpeed() ){
												Set_MoveSpeed(40.0f);
									}

									//固定スピードの設定(しゃがみ)
									FixedMoveSpeed = 70.0f;
							}
							if( Get_AirOnPC() == 1){//空中にいるなら
									/*スピードを増加させる*/
									Set_MoveSpeed( Get_MoveSpeed() + 2.0f);

									//スピードに制限をかける
									if( 40.0f <= Get_MoveSpeed() ){
												Set_MoveSpeed(40.0f);
									}

									//固定スピードの設定(しゃがみ)
									FixedMoveSpeed = 70.0f;
							}
					}
					if( ( Get_MyState() == 3) || ( Get_MyState() == 4)){//左飛び状態なら
									/*スピードを固定*/
									Set_MoveSpeed(0.0f);

									//固定スピードの設定(しゃがみ)
									FixedMoveSpeed = 90.0f;
					}



					/*ダミーモデルの座標に設定*/
					ech = E3DRotateInit ( Get_DummyModel());
					_ASSERT( ech != 1 );//エラーチェック

					ech = E3DGetPos( Get_BodyModel(), &PCPos);
					_ASSERT( ech != 1 );//エラーチェック

					ech = E3DSetPos( Get_DummyModel(), PCPos);
					_ASSERT( ech != 1 );//エラーチェック

					ech = E3DRotateY( Get_DummyModel(), WantDeg);
					_ASSERT( ech != 1 );//エラーチェック

					ech = E3DPosForward( Get_DummyModel(), (float)Get_MoveSpeed() + FixedMoveSpeed);
					_ASSERT( ech != 1 );//エラーチェック

					ech = E3DGetPos( Get_DummyModel(), &SubPos);
					_ASSERT( ech != 1 );//エラーチェック

					ech = E3DSetPos( Get_BodyModel(), SubPos);
					_ASSERT( ech != 1 );//エラーチェック
	}
	else{//減速をさせなければならないなら
					if( Get_AirOnPC() == 0){//空中にいるなら
								if( Get_Attitude() == 0) Set_MoveSpeed( Get_MoveSpeed() - 0.8f);//姿勢が「通常状態」なら
								if( Get_Attitude() == 1) Set_MoveSpeed( Get_MoveSpeed() - 1.0f);//姿勢が「しゃがみ状態」なら
					}
					if( Get_AirOnPC() == 1) Set_MoveSpeed( Get_MoveSpeed() - 0.6f);//姿勢が「しゃがみ状態」なら


					//スピードに制限をかける
					if( Get_MoveSpeed() <= 0.0 ){
								Set_MoveSpeed( 0.0f);
					}


					Set_UnderMotion(0);
	}




	return 0;
}