예제 #1
0
// ゲーム中の銃の操作に関することをします
int Weapon::TreatmentWhileGame( int Wp_equipment){

	/*変数の初期化*/
	int ech = 0;
	int keyin[20] = {0};
	float LightDistance = 0.0f;//光が届く距離
	float MuzzleFlashAlpha = 0.0f;//マズルフラッシュの透明度
	float MuzzlePosArray[3];//マズルフラッシュを表示させる座標配列 
	static int MuzzleFlashConter = 0;//マズルフラッシュカウンター
	D3DXVECTOR3 MuzzlePos( 0.0, 0.0, 0.0);//銃口位置	
	E3DCOLOR4UC MuzzleFlashColor = { 0, 0, 0, 0};//マズルフラッシュの色を指定

	/*キーを取得する*/
	System::GetKeyData(keyin);



	if( Wp_equipment != -1){//武器があれば

			/*変数の初期化*/
			const int NowAmmo = WeaponDataWhileGame[Wp_equipment][0]; //現在の弾薬数
			const int NowMag = WeaponDataWhileGame[Wp_equipment][1]; //現在のマガジン数
			const int WeaponAmmo = WeaponData[Wp_equipment][2]; //武器性能上の弾薬数



			/*武器に新しいモーションを当てる*/
			ech = E3DSetNewPoseML( WeaponModel[Wp_equipment]);
			if(ech != 0 ){//エラーチェック
						_ASSERT( 0 );//エラーダイアログ
			};


			if( WeaponBone[Wp_equipment][0] != 0){
				/*銃の置くボーンの座標を求めます*/
				ech = E3DGetCurrentBonePos( WeaponModel[Wp_equipment], WeaponBone[Wp_equipment][0], 1, &MuzzlePos);
				if(ech != 0 ){//エラーチェック
							_ASSERT( 0 );//エラーダイアログ
				};
			}

			/*重厚の位置に爆発エフェクトを置きます*/
			ech = E3DSetBillboardPos( WeaponEffect[Wp_equipment][0], MuzzlePos); 
			if(ech != 0 ){//エラーチェック
						_ASSERT( 0 );//エラーダイアログ
			};

			if( WeaponFireFlag == 1){

						/*ビルボードを回転させます*/
						ech = E3DRotateBillboard( WeaponEffect[Wp_equipment][0], float( rand() % 360), 1);
						if(ech != 0 ){//エラーチェック
									_ASSERT( 0 );//エラーダイアログ
						};

						//位置を代入
						MuzzlePosArray[0] = MuzzlePos.x;
						MuzzlePosArray[1] = MuzzlePos.y;
						MuzzlePosArray[2] = MuzzlePos.z;
						//サウンドの再生
						PlayWeaponSound( Wp_equipment, 0, MuzzlePosArray);

						/*変数操作*/

						// マズルフラッシュカウンターを表示させます
						MuzzleFlashConter = 4;
						//弾薬をひとつ減らします
						WeaponDataWhileGame[Wp_equipment][0] = WeaponDataWhileGame[Wp_equipment][0] - 1;
						/*連射カウンタに一定数値を代入し射撃を一定停止させます*/
						WeaponRapidFire = WeaponData[Wp_equipment][6];

			}
			if( WeaponFireFlag == 2){//弾なしで空撃ち状態なら

						//位置を代入
						MuzzlePosArray[0] = MuzzlePos.x;
						MuzzlePosArray[1] = MuzzlePos.y;
						MuzzlePosArray[2] = MuzzlePos.z;
						//サウンドの再生
						PlayWeaponSound( Wp_equipment, 1, MuzzlePosArray);

						/*変数操作*/

						/*連射カウンタに一定数値を代入し射撃を一定停止させます*/
						WeaponRapidFire = WeaponData[Wp_equipment][6];
			}


			if( ( keyin[4] == 1) && ( 0 < NowMag) && //Rキーが押されてて //リロードできる状態(Magがあり、AMMOが満タンでないか銃未使用)でリロードするなら
				/**/ ( ( NowAmmo < WeaponAmmo) || ( NowMag == WeaponData[Wp_equipment][3]))){ 

					if( ( WeaponData[Wp_equipment][0] != 3) && ( WeaponData[Wp_equipment][0] != 7) && //グレネードでなく、ショットガンでもなければ
					/**/( NowAmmo >= WeaponAmmo) && ( NowMag == WeaponData[Wp_equipment][3])){// MAGもAMMOも一個も使ってなければ

							WeaponDataWhileGame[Wp_equipment][0] = WeaponAmmo + 1;//AMMOを満タン+1にする
					}
					else{//通常のリロードであれば

							WeaponDataWhileGame[Wp_equipment][0] = WeaponAmmo;//AMMOを満タンにする
					}
					//
					WeaponDataWhileGame[Wp_equipment][1] -= 1;//MAGをひとつ減らす
			}	


			/*マズルフラッシュカウンターがオンなら*/
			if( 0 < MuzzleFlashConter){

				if( MuzzleFlashConter == 4){
							MuzzleFlashAlpha = 0.7f;
							MuzzleFlashColor.r = 200;
							MuzzleFlashColor.g = 200;
							MuzzleFlashColor.b = 200;
				}
				if( MuzzleFlashConter == 3){
							MuzzleFlashAlpha = 0.9f;
							MuzzleFlashColor.r = 240;
							MuzzleFlashColor.g = 240;
							MuzzleFlashColor.b = 240;
				}
				if( MuzzleFlashConter == 2){
							MuzzleFlashAlpha = 0.6f;
							MuzzleFlashColor.r = 160;
							MuzzleFlashColor.g = 160;
							MuzzleFlashColor.b = 160;
				}
				if( MuzzleFlashConter == 1){
							/*ライトを無効にする*/
							MuzzleFlashAlpha = 0.2f;
							MuzzleFlashColor.r = 0;
							MuzzleFlashColor.g = 0;
							MuzzleFlashColor.b = 0;
				}

				/*透明度を変更する*/
				ech = E3DSetBillboardAlpha( WeaponEffect[Wp_equipment][0], MuzzleFlashAlpha);
				if(ech != 0 ){//エラーチェック
							_ASSERT( 0 );//エラーダイアログ
				};
				/*ライトを付ける*/
				if( MuzzleFlashConter != 1){
							ech = E3DSetPointLight( WeaponMuzzleLight[Wp_equipment], MuzzlePos, 700.0f, MuzzleFlashColor);
							if(ech != 0 ){//エラーチェック
										_ASSERT( 0 );//エラーダイアログ
							};
				}
				else{//ライト消灯のお時間です
							ech = E3DSetPointLight( WeaponMuzzleLight[Wp_equipment], MuzzlePos, 0.0f, MuzzleFlashColor);
							if(ech != 0 ){//エラーチェック
										_ASSERT( 0 );//エラーダイアログ
							};			
				}


				/*爆発のエフェクトを(すべてのビルボード)の描画*/
				ech = E3DRenderBillboard( System::scid1, 0);
				if(ech != 0 ){//エラーチェック
							_ASSERT( 0 );//エラーダイアログ
				};

				/*フラッシュカウントをひとつ下げる*/
				MuzzleFlashConter = MuzzleFlashConter -1;

				/*透明度を変更する*/
				if( MuzzleFlashConter == 0){//カウントが0になったら
							ech = E3DSetBillboardAlpha( WeaponEffect[Wp_equipment][0], 0.0f);
							if(ech != 0 ){//エラーチェック
										_ASSERT( 0 );//エラーダイアログ
							};	
				}
			}

			/*連射停止カウンタがオンなら*/
			if( 0 < WeaponRapidFire){
					WeaponRapidFire = WeaponRapidFire - 1;//連射停止カウンタを一つ繰り下げる
			}
	}

	return 0;
}
예제 #2
0
int OneTimeSceneInit()
{
	int ret;

	D3DXVECTOR3 campos = D3DXVECTOR3( -546.0f, 400.0f, -1845.0f );
	ret = E3DSetCameraPos( campos );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	D3DXVECTOR3 camtar = D3DXVECTOR3( 3.2733f, 450.0f, 70.6515f );
	D3DXVECTOR3 camup = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
	ret = E3DSetCameraTarget( camtar, camup );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	ret = E3DSetProjection( 1000.0f, 30000.0f, 60.0f );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	
	char mqoname[MAX_PATH];
	sprintf_s( mqoname, MAX_PATH, "%s\\hdrscene3.mqo", szMediaDir );
	ret = E3DLoadMQOFileAsGround( mqoname, 10.0f, 0, BONETYPE_RDB2, &hsid0 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	//ピクセル単位のPhongライティングにする
	ret = E3DSetShaderType( hsid0, COL_PPHONG );
	_ASSERT( !ret );


	ret = E3DCreateLight( &lid1 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	D3DXVECTOR3 lpos( 1000.0f, 0.0f, 3500.0f );
	E3DCOLOR4UC col= {255, 255, 255, 255 };
	ret = E3DSetPointLight( lid1, lpos, 9000.0f, col );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	
	//HDR用の強い光をセット
	E3DCOLOR4F diffuse = { 10.0f, 10.0f, 10.0f, 1.0f };
	E3DCOLOR4F specular = { 0.2f, 0.2f, 0.2f, 1.0f };
	ret = E3DSetHDRLightDiffuse( lid1, diffuse );
	_ASSERT( !ret );
	ret = E3DSetHDRLightSpecular( lid1, specular );
	_ASSERT( !ret );

	//トーンマップのテクスチャを作成
	int toneok = 0;
	ret = E3DCreateToneMapTexture( 4, toneformat, &tonemapid, &toneok );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}





	int okflag;
	SIZE orgsize = { 640 / 2, 480 };
	SIZE small4 = { orgsize.cx / 4, orgsize.cy / 4 };
	SIZE small8 = { orgsize.cx / 8, orgsize.cy / 8 };

	ret = E3DCreateRenderTargetTexture( orgsize, hdrformat, &scid_org, &texid_org, &okflag );
	if( ret || !okflag ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DCreateRenderTargetTexture( small4, hdrformat, &scid_small, &texid_small, &okflag );
	if( ret || !okflag ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DCreateRenderTargetTexture( small4, D3DFMT_A8R8G8B8, &scid_bright, &texid_bright, &okflag );
	if( ret || !okflag ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DCreateRenderTargetTexture( small8, D3DFMT_A8R8G8B8, &scid_bloom0, &texid_bloom0, &okflag );
	if( ret || !okflag ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DCreateRenderTargetTexture( small8, D3DFMT_A8R8G8B8, &scid_bloom1, &texid_bloom1, &okflag );
	if( ret || !okflag ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DCreateRenderTargetTexture( small8, D3DFMT_A8R8G8B8, &scid_work, &texid_work, &okflag );
	if( ret || !okflag ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DCreateRenderTargetTexture( small8, D3DFMT_A8R8G8B8, &scid_bloom2, &texid_bloom2, &okflag );
	if( ret || !okflag ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DCreateRenderTargetTexture( orgsize, D3DFMT_A8R8G8B8, &scid_final, &texid_final, &okflag );
	if( ret || !okflag ){
		_ASSERT( 0 );
		return 1;
	}



	char spname[MAX_PATH];
	sprintf_s( spname, MAX_PATH, "%s\\dummy256.png", szMediaDir );

	ret = E3DCreateSprite( spname, 0, 0, &spid1 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DSetTextureToDispObj( -2, spid1, texid_org );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetSpriteSize( spid1, &spw1, &sph1 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	ret = E3DCreateSprite( spname, 0, 0, &spid2 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DSetTextureToDispObj( -2, spid2, texid_final );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}
	ret = E3DGetSpriteSize( spid2, &spw2, &sph2 );
	if( ret ){
		_ASSERT( 0 );
		return 1;
	}

	keydir = 0;
	middlegray = 0.1f;
	threshold = 9.5f;
	offset = 7.0f;


	return 0;

}