void CPlayer::Init() { /* Player Animation, Sprite Init */ mDie = NNSprite::Create( L"Resource/Sprite/Player/die.png" ); //mStop = NNSpriteAtlas::Create( L"Resource/Sprite/Player/player.png" ); //mStop->SetCutSize( NNSize(0,41,65,83) ); //mMove = NNAnimationAtlas::Create( L"Resource/Sprite/Player/player.png", 3, 0.05f, NNSize(0,0,65,41), NNSize(0,41,65,83), NNSize(0,83,65,125) ); AddChild( mDie ); InitStopImage(); InitMoveImage(); InitAttackImage(); INitDieImage(); mDie->SetVisible( false ); mStopNormal->SetVisible( false ); mMoveNormal->SetVisible( false ); mStopFire->SetVisible( false ); mMoveFire->SetVisible( false ); TransState(PlayerState::IDLE); mPlayerUI = PlayerUI::Create(this); mPlayerUI->SetParent( this ); mPlayerUI->SetPosition( 21.f, 24.f ); AddChild( mPlayerUI ); }
CPlayer::CPlayer( void ) : m_PlayerSprite(NULL),m_MoveDirection(NNPoint(0,0)), m_Hp(100),m_RebirthDelayTime(10) { TransState(PlayerState::IDLE); m_PlayerUI = PlayerUI::Create(); AddChild( m_PlayerUI ); }
void Player::Damaged(int damage) { if(mHP < damage) { //죽었슴다 TransState(PLAYER_STATE_DIE); } else { mHP-=damage; //현재 피 얼마라고 브로드캐스팅 HPUpdateResult outPacket = HPUpdateResult(); outPacket.mPlayerId = mPlayerId; outPacket.mHP = mHP; mClient->Broadcast(&outPacket); } }
void Player::Update( float dTime) { mDTime = dTime; if(mAttackDelay > 0) mAttackDelay -= dTime; if(mUserSkillDelay > 0) mUserSkillDelay -= dTime; if(mTypeSkillDelay > 0) mTypeSkillDelay -= dTime; switch (mPlayerState) { case PLAYER_STATE_IDLE: { if( mGameKeyStates.typeActiveSkillKey == KEYSTATE_PRESSED) { TransState(PLAYER_STATE_TYPESKILL); break; } if( mGameKeyStates.userActiveSkillKey == KEYSTATE_PRESSED) { TransState(PLAYER_STATE_USERSKILL); break; } if( mGameKeyStates.attackKey == KEYSTATE_PRESSED ) { TransState(PLAYER_STATE_ATTACK); break; } else if ( mGameKeyStates.leftDirectKey == KEYSTATE_PRESSED || mGameKeyStates.rightDirectKey == KEYSTATE_PRESSED || mGameKeyStates.upDirectKey == KEYSTATE_PRESSED || mGameKeyStates.downDirectKey == KEYSTATE_PRESSED ) { TransState(PLAYER_STATE_WALK); }else if ( mGameKeyStates.typeActiveSkillKey == KEYSTATE_PRESSED) TransState(PLAYER_STATE_TYPESKILL); } break; case PLAYER_STATE_WALK: { if( mGameKeyStates.typeActiveSkillKey == KEYSTATE_PRESSED) { TransState(PLAYER_STATE_TYPESKILL); break; } if( mGameKeyStates.userActiveSkillKey == KEYSTATE_PRESSED) { TransState(PLAYER_STATE_USERSKILL); break; } if( mGameKeyStates.attackKey == KEYSTATE_PRESSED ) { TransState(PLAYER_STATE_ATTACK); break; } //Move myPlayer with Game Key States. //Check Moving Input, and set Position to d Point willGoDirection = Point(0,0); if ( mGameKeyStates.leftDirectKey == KEYSTATE_PRESSED )willGoDirection = willGoDirection + Point( -1.f, 0.f ); if ( mGameKeyStates.rightDirectKey == KEYSTATE_PRESSED )willGoDirection = willGoDirection + Point( +1.f, 0.f ); if ( mGameKeyStates.upDirectKey == KEYSTATE_PRESSED ) willGoDirection = willGoDirection + Point( 0.f, -1.f ); if ( mGameKeyStates.downDirectKey == KEYSTATE_PRESSED ) willGoDirection = willGoDirection + Point( 0.f, +1.f ); Point willGoPosition; //wasd 전부 다 땠는지 확인 if ( mGameKeyStates.leftDirectKey == KEYSTATE_NOTPRESSED && mGameKeyStates.rightDirectKey == KEYSTATE_NOTPRESSED && mGameKeyStates.upDirectKey == KEYSTATE_NOTPRESSED && mGameKeyStates.downDirectKey == KEYSTATE_NOTPRESSED ) { TransState(PLAYER_STATE_IDLE); break; } //지금 갈려고 하는 방향이 map에서 이동 불가능한 지역이니? if ( CouldGoPosition( GetPosition() + willGoDirection * dTime * 100.f ) == false ) { //X좌표라도 갈수있니? if ( CouldGoPosition( GetPosition() + Point(willGoDirection.x,0) * dTime * 100.f ) == true ) { willGoDirection = Point(willGoDirection.x,0); } //Y좌표라도 갈 수 있니? else if ( CouldGoPosition( GetPosition() + Point(0,willGoDirection.y) * dTime * 100.f ) == true ) { willGoDirection = Point(0,willGoDirection.y); } else { willGoDirection = Point(0,0); } } willGoPosition = GetPosition() + willGoDirection * dTime * 100.f; SetPosition(willGoPosition); //이전과 다른 방향으로 이동했니? if( mMoveDirection == Point(-10.f,-10.f) || mMoveDirection != willGoDirection) { mMoveDirection = willGoDirection; //방향바뀐 key정보를 보내야함. GameKeyStatesUpdateResult outPacket = GameKeyStatesUpdateResult(); outPacket.mMyPlayerInfo = this->GetPlayerInfo(); mClient->Broadcast(&outPacket); } } break; case PLAYER_STATE_ATTACK: { Point AttackPoint = mPosition + Point(cos(mRotation) * mAttackRange,sin(mRotation) * mAttackRange); std::map<int,Player*> players = GPlayerManager->GetPlayers(); for( std::map<int,Player*>::iterator it = players.begin(); it != players.end(); ++it ) { Player* enemy = it->second; if(enemy == this)continue; if( Point().GetDistance( enemy->GetPosition(), AttackPoint ) - mRadius < mAttackRange ) { //피격데스네 enemy->Damaged(mDamage+rand()%10); } } TransState(PLAYER_STATE_IDLE); break; } break; case PLAYER_STATE_DIE: { mResponTime -= dTime; if(mResponTime < 0) { //살려내야합니다. while(1) { float x = rand() % (GGameMap->GetWidth() * 64); float y = rand() % (GGameMap->GetHeight() * 64); if(CouldGoPosition(Point(x,y)) == true) { mPosition = Point(x,y); break; } } SetHP(100); TransState(PLAYER_STATE_IDLE); break; } } break; case PLAYER_STATE_TYPESKILL: { TransState(PLAYER_STATE_IDLE); break; } break; case PLAYER_STATE_USERSKILL: { TransState(PLAYER_STATE_IDLE); break; } break; default: break; } }