void PlayerBehavior::update( ) { //何もしなかったら待機 _player_state = PLAYER_STATE_WAIT; CONTROLL controll = makeControll( ); walk( controll ); attack( controll ); AppPtr app = App::getTask( ); if ( _parent->getStatus( ).hp <= 0 ) { _player_state = PLAYER_STATE_DEAD; SoundPtr sound = Sound::getTask( ); sound->playSE( Sound::SE_GAME_OVER ); ClientPtr client = Client::getTask( ); SERVERDATA data; data.command = COMMAND_STATUS_POS; data.value[ 0 ] = _player_id; data.value[ 1 ] = 0; data.value[ 2 ] = 0; client->send( data ); if ( _controll ) { app->setState( App::STATE_DEAD ); } } else { PlayerPtr player = std::dynamic_pointer_cast< Player >( _parent ); player->addSP( 1 ); } _before_state = _player_state; PlayerPtr player = std::dynamic_pointer_cast< Player >( _parent ); int sp = player->getSP( ); //AdventurePtr adventure = app->getAdventure( ); if ( ( !_is_tutorial_sence ) && ( sp == Player::FULL_SP_NUM ) && _controll ) { //adventure->set( Adventure::TYPE_COMMON_TUTORIAL_3 ); _is_tutorial_sence = true; } for ( int i = PLAYER_ETUDE_RED; i <= PLAYER_ETUDE_BLUE; i++ ) { Vector pos = _parent->getPos( ) - app->getPlayer( i )->getPos( ); if ( !_is_conntact_minotaur && ( _player_id < PLAYER_ETUDE_RED ) && ( pos.getLength( ) < CONNTACT_MINOTAUR_LENGTH ) && _controll ) { //adventure->set( Adventure::TYPE_COMMON_CYCLOPS_CONTACT ); //adventure->set( Adventure::TYPE_COMMON_AFTER_MINOTAUR_ENTRY ); _is_conntact_minotaur = true; } } _keep_pos = _parent->getPos( ); }
void PlayerBehavior::walk( const CONTROLL& controll ) { if ( _before_state != PLAYER_STATE_ATTACK && _before_state != PLAYER_STATE_DEAD && !isDeathblow( ) ) { if ( controll.move.getLength( ) > 0.0 ) { //進める場合移動 _parent->move( controll.move ); if ( _controll ) { Vector pos = _parent->getPos( ); int x = ( int )pos.x; int y = ( int )pos.y; ClientPtr client = Client::getTask( ); CLIENTDATA status = client->getClientData( ); if ( status.player[ _player_id ].x != x || status.player[ _player_id ].y != y ) { SERVERDATA data; data.command = COMMAND_STATUS_POS; data.value[ 0 ] = _player_id; data.value[ 1 ] = x; data.value[ 2 ] = y; client->send( data ); } } _player_state = PLAYER_STATE_WALK; } bool long_wait = ( _player_state == PLAYER_STATE_WAIT && _animation->getAnimTime( ) > 10 ); if ( _player_state == PLAYER_STATE_WALK || long_wait ) { _attack_pattern = 0; } pickupCrystal( controll ); } }