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