예제 #1
0
void PlayerBehavior::pickupCrystal( const CONTROLL& controll ) {
	//コントロールプレイヤーじゃなかったら取れない
	if ( !_controll ) {
		return;
	}

	AppPtr app = App::getTask();
	CrystalsPtr crystals = app->getCrystals();
	if ( !crystals ) {
		return;
	}
	if ( controll.action == CONTROLL::ATTACK ) {
		int crystal_num = 0;
		FieldPtr field = app->getField( );
		Vector pos = _parent->getPos( );
		for ( int i = -CRYSTAL_LENGTH; i < CRYSTAL_LENGTH; i++ ) {
			for ( int j = -CRYSTAL_LENGTH; j < CRYSTAL_LENGTH; j++ ) {
				ObjectPtr object = field->getTarget( ( int )pos.x + i, ( int )pos.y + j );
				CrystalPtr crystal = std::dynamic_pointer_cast< Crystal >( object );
				if ( !crystal ) {
					continue;
				}
				//大きいクリスタルをとったら
				if ( crystals->getCrystalNum( ) >= Crystals::MAX_CRYSTAL_NUM ) {
					CameraPtr camera = Camera::getTask();
					PlayerCameraPtr p_camera = std::dynamic_pointer_cast< PlayerCamera >( camera );
					Vector boss_map_pos = Vector( Ground::BOSS_X * Ground::CHIP_WIDTH + 2, Ground::BOSS_Y * Ground::CHIP_HEIGHT + 2, 0 );
					p_camera->setPos( Vector( boss_map_pos.x, boss_map_pos.y - 250, 20 ) );
					boss_map_pos -= _keep_pos;
					_parent->move( boss_map_pos );
				}
				crystal->pickup( );
				Effect effect;
				int id = effect.setEffect( Effect::EFFECT_PICKUP_CRYSTAL );
				effect.drawEffect( id, Vector( 0.5, 0.5, 0.5 ), crystal->getPos( ) - Vector( 0, 0, 0.3 ), Vector( 0, 0, 1 ) );
				return;
			}
		}
	}
}