Beispiel #1
0
void Robo::think(
bool* jump,
bool* fire,
bool* turn,
bool* left,
bool* right,
bool* up,
bool* down ) const {
	Pad* pad = Pad::instance();
	if ( mId == 0 ){ //プレイヤー
		*jump = pad->isOn( Pad::JUMP, mId );
		*fire = pad->isTriggered( Pad::FIRE, mId );
		*turn = pad->isOn( Pad::TURN, mId );
		*left = pad->isOn( Pad::LEFT, mId );
		*right = pad->isOn( Pad::RIGHT, mId );
		*up = pad->isOn( Pad::UP, mId );
		*down = pad->isOn( Pad::DOWN, mId );
	}else{ //AI
		//超馬鹿
		//ロックオンしてなければジャンプする
		*jump = !mLockOn;
		//弾は撃てるだけ撃つ。
		*fire = true;
		//旋回はしない
		*turn = false;
		//移動は変数を持つのが面倒なのでしない。
		*left = *right = *up = *down = false;
	}
}
Beispiel #2
0
void Robo::update( const Vector3& enemyPos ){
	Pad* pad = Pad::instance();
	if ( pad->isOn( Pad::TURN, mId ) ){
		if ( pad->isOn( Pad::LEFT, mId ) ){
			mAngleY += 1.0;
			if ( mAngleY > 180.0 ){ //-PIからPIにおさめる
				mAngleY -= 360.0;
			}
		}
		if ( pad->isOn( Pad::RIGHT, mId ) ){
			mAngleY -= 1.0;
			if ( mAngleY < -180.0 ){ //-PIからPIにおさめる
				mAngleY += 360.0;
			}
		}
	}else{
		//移動処理。まず視点を考慮しない加速度を出す
		Vector3 move( 0.0, 0.0, 0.0 );
		if ( pad->isOn( Pad::UP, mId ) ){
			move.z = -1.0;
		}
		if ( pad->isOn( Pad::DOWN, mId ) ){
			move.z = 1.0;
		}
		if ( pad->isOn( Pad::LEFT, mId ) ){
			move.x = -1.0;
		}
		if ( pad->isOn( Pad::RIGHT, mId ) ){
			move.x = 1.0;
		}
		//視線方向を加味して回転
		Matrix34 m;
		m.setRotationY( mAngleY + 180.0 );
		m.multiply( &move, move );
		mPosition += move;
	}

	//武器生成
	if ( pad->isOn( Pad::FIRE, mId ) ){
		//空き武器を探す
		for ( int i = 0; i < mBulletNumber; ++i ){
			if ( mBullets[ i ].isEmpty() ){
				mBullets[ i ].create(
					mDatabase, 
					"bullet", 
					mPosition,
					45.0,
					mAngleY );
				break;
			}
		}
	}
	//武器更新
	for ( int i = 0; i < mBulletNumber; ++i ){
		if ( !mBullets[ i ].isEmpty() ){
			mBullets[ i ].update( enemyPos );
		}
	}
}