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; } }
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 ); } } }