Beispiel #1
0
void World::battleEventCheck()
{
    BattleState* bs = static_cast<BattleState*>( GetWorldStateManager().getState( GAME_WORLD_STATE_BATTLE ) );
    assert( bs );

    // Detect battle event.
    // If current selected unit isn't hero unit, and isn't talkable,
    // regard as enemy. And if hero is in the fight area of enemy, start battle.
    UnitSet::iterator it = m_unitSet.begin();
    for ( ; it != m_unitSet.end(); ++it )
    {
        if ( (*it) != getHeroUnit() )
        {
            Enemy* oppCharacter = static_cast<Enemy*>( *it );
            assert( oppCharacter );
            if ( oppCharacter->getType() == UT_ENEMY && oppCharacter->isTalkable() == false && !oppCharacter->getRemoveFlag() )
            {
                if ( isInEventArea( getHeroUnit(), oppCharacter ) == true)
                {
                    //////////////////////////////////////////////////////////////////////////
                    // Check whether there is obstacle between hero and enemy.
                    // Shoot ray from hero to enemy, and if distance to the third intersected
                    // mesh is shorter than distance between hero and enemy, then there exists
                    // at least one obstacle.
                    ArnVec3 vStartPos( getHero()->getPos() );
                    ArnVec3 vRayDir = oppCharacter->getPos() - getHero()->getPos();
                    float fRayLength = ArnVec3Length( &vRayDir );
                    ArnVec3Normalize( &vRayDir, &vRayDir );
                    float f3rdDist = Utility::FullTraverseExhaustiveRayTesting(
                                         getArnSceneGraphPt()->getSceneRoot(),
                                         vStartPos,
                                         vRayDir,
                                         1 );

                    //printf( "3rd dist, ray length %f, %f\n", f3rdDist, fRayLength );

                    if ( f3rdDist < fRayLength )
                        continue;
                    //////////////////////////////////////////////////////////////////////////


                    // No more move!
                    getHeroUnit()->clearKey();
                    oppCharacter->clearKey();
                    getHeroUnit()->setControllable( false );

                    // view each other
                    getHero()->setViewAt( &oppCharacter->getPos() );
                    oppCharacter->setViewAt( &getHero()->getPos() );

                    // Insert to enemy pool at BattleState
                    bs->insertEnemy( oppCharacter );

                    if ( GetWorldStateManager().curStateEnum() == GAME_WORLD_STATE_FIELD )
                        GetWorldStateManager().setNextState( GAME_WORLD_STATE_BATTLE );
                }
            }
        }
    }
}
Beispiel #2
0
void GameLevel::dieImpl() {
  mDieFlag = false;

  pause();

  // Camera effect.
  getGameLayer()->getBlockRoot()->runAction(CameraShake::create(0.3f, 10));

  auto hero = getHero();

  // Particle effect.
  ParticleSystem *ps = ParticleSystemQuad::create(DIE_FX_NAME);
  ParticleBatchNode *batch = ParticleBatchNode::createWithTexture(ps->getTexture());
  batch->addChild(ps);
  batch->setPosition(hero->getRenderer()->getPosition());
  batch->setCameraMask((unsigned short) CameraFlag::USER2);
  mGameLayer->getBlockRoot()->addChild(batch, ZORDER_DIE_FX, DIE_FX_TAG);

  hero->getRenderer()->getNode()->runAction(Sequence::create(ScaleTo::create(0.2, 0.1, 0.1),
                                                             CallFunc::create([this] {
    getHero()->getRenderer()->setVisible(false);
  }), nullptr));

  mGameLayer->runAction(Sequence::create(DelayTime::create(0.5), CallFunc::create([this] {
    enableGame(false);
    enableGame(true);
  }), nullptr));
}
void CActionsDlg::setReplay (W3GReplay* replay)
{
  w3g = replay;
  actions.setReplay (replay);
  history->setReplay (replay);
  selPlayer.Reset ();
  hkeys.DeleteAllItems ();
  for (int i = 0; i < NUM_ACTIONS; i++)
    actions.SetItemText (i, 1, "");
  if (w3g && w3g->dota.isDota)
  {
    selPlayer.EnableWindow (TRUE);
    if (w3g->dota.numSentinel)
      selPlayer.InsertItem ("Sentinel", getImageIndex ("RedBullet"), 0);
    for (int i = 0; i < w3g->dota.numSentinel; i++)
    {
      if (w3g->players[w3g->dota.sentinel[i]].hero)
        selPlayer.InsertItem (wmprintf (L"%s (%s)", w3g->players[w3g->dota.sentinel[i]].uname,
          makeucd (getHero (w3g->players[w3g->dota.sentinel[i]].hero->id)->name)),
          getImageIndex (getHero (w3g->players[w3g->dota.sentinel[i]].hero->id)->imgTag),
          getLightColor (w3g->players[w3g->dota.sentinel[i]].slot.color), w3g->dota.sentinel[i]);
      else
        selPlayer.InsertItem (wmprintf (L"%s (No Hero)", w3g->players[w3g->dota.sentinel[i]].uname),
          getImageIndex ("Empty"),
          getLightColor (w3g->players[w3g->dota.sentinel[i]].slot.color), w3g->dota.sentinel[i]);
    }
    if (w3g->dota.numScourge)
      selPlayer.InsertItem ("Scourge", getImageIndex ("GreenBullet"), 0);
    for (int i = 0; i < w3g->dota.numScourge; i++)
    {
      if (w3g->players[w3g->dota.scourge[i]].hero)
        selPlayer.InsertItem (wmprintf (L"%s (%s)", w3g->players[w3g->dota.scourge[i]].uname,
          makeucd (getHero (w3g->players[w3g->dota.scourge[i]].hero->id)->name)),
          getImageIndex (getHero (w3g->players[w3g->dota.scourge[i]].hero->id)->imgTag),
          getLightColor (w3g->players[w3g->dota.scourge[i]].slot.color), w3g->dota.scourge[i]);
      else
        selPlayer.InsertItem (wmprintf (L"%s (No Hero)", w3g->players[w3g->dota.scourge[i]].uname),
          getImageIndex ("Empty"),
          getLightColor (w3g->players[w3g->dota.scourge[i]].slot.color), w3g->dota.scourge[i]);
    }
    selPlayer.SetCurSel (1);
    OnCbnSelchangeSelplayer ();
  }
  else if (w3g)
  {
    selPlayer.EnableWindow (TRUE);
    for (int i = 0; i < w3g->numPlayers; i++)
      selPlayer.InsertItem (w3g->players[w3g->pindex[i]].uname,
        getImageIndex (raceImage[w3g->players[w3g->pindex[i]].race]),
        getLightColor (w3g->players[w3g->pindex[i]].slot.color), w3g->pindex[i]);
    selPlayer.SetCurSel (0);
    OnCbnSelchangeSelplayer ();
  }
  else
    selPlayer.EnableWindow (FALSE);
}
Beispiel #4
0
bool GameLayer::init() {
    
    CCLayer::init();
    
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    
    screenW = size.width;
    screenH = size.height;
    
    createBox2DWorld();
    
    generateBackground();
    
    setTerrain(Terrain::terrainWithWorld(world));
    
    addChild(getTerrain());
    
    setHero(Hero::heroWithWorld(world));
    getTerrain()->addChild(getHero());
    
    setTouchEnabled(true);
    
    tapDown = false;
    
    scheduleUpdate();
    return true;
}
Beispiel #5
0
int BlackDogState::update(float delta)
{
  int result;

  // Update dynamic game objects
  result = GameState::update(delta);
  if(result != CONTINUE)
    return result;

  // end of game
  if(difficulty < 0.0f)
  {
    if(!victory)
      victory = true;
  }
  else
  {
    // Update difficulty based on player progress
    player_progress = ((AngelThing*)getHero())->getFurthestX();
    difficulty = (player_progress > 0.8f * WINDOW_DEFAULT_W)
                    ? -1.0f
                    : player_progress / (WINDOW_DEFAULT_W * 0.8f);
    if(player_progress > PROGRESS_THRESHOLD)
      obstacle.setDifficulty(difficulty);
  }

  // Update background parallax tunnel
  parallax.update(delta);

  // Update forground obstacle tunnel
  obstacle.update(delta);

  // All clear
  return EXIT_SUCCESS;
}
Beispiel #6
0
void GameLevel::updateCamera(cocos2d::Camera *cam, bool forceUpdate) {
  if ((!mGameEnabled || mPause) && !forceUpdate) {
    return;
  }
  auto halfFrame = VisibleRect::getFrameSize() / 2;
  auto heroRel = getHero()->getRenderer()->getPosition() - halfFrame;
  auto newPos = Vec2(halfFrame) + heroRel;

#if EDITOR_MODE
  newPos.x = std::max(newPos.x, halfFrame.width);
  newPos.x = std::min(newPos.x, mBounds.size.width - halfFrame.width);
  newPos.y = std::max(newPos.y, halfFrame.height);
  newPos.y = std::min(newPos.y, mBounds.size.height + UI_LAYER_HIGHT - halfFrame.height);
  auto camRelative = newPos - VisibleRect::getVisibleRect().size / 2 - Vec2(0, UI_LAYER_HIGHT / 2);
#else
  auto center = VisibleRect::center();
  newPos.x = std::max(newPos.x, center.x);
  newPos.x = std::min(newPos.x, mBounds.size.width - center.x);
  newPos.y = std::max(newPos.y, center.y);
  newPos.y = std::min(newPos.y, mBounds.size.height - center.y);
  auto camRelative = newPos - VisibleRect::getVisibleRect().size / 2;
#endif

  mGameLayer->onCameraUpdate(camRelative);
  cam->setPosition(newPos);
}
Beispiel #7
0
void GameLevel::enableGame(bool enable) {
  if (mGameEnabled == enable) {
    return;
  }
  mGameEnabled = enable;
  mPause = false;

  reset();

  getHero()->getRenderer()->setVisible(mGameEnabled);

  if (!mGameEnabled) {
    getHero()->getComponent<InputComponent>()->setEnabled(false);
  }

  for (auto &obj : mObjectManager->mObjects) {
    obj.second->setEnabled(enable);
  }
  mGameLayer->onGameEnabled(mGameEnabled);
}
Beispiel #8
0
void GameLevel::reset() {
  if (mGameLayer->getBlockRoot()->getChildByTag(DIE_FX_TAG)) {
    mGameLayer->getBlockRoot()->removeChildByTag(DIE_FX_TAG);
  }

  auto hero = getHero();
  hero->getRenderer()->setPosition(mHeroSpawnPos);
  hero->getRenderer()->setOpacity(255);
  mDieFlag = false;
  mWinFlag = false;
}
BOOL CSearchDlg::OnInitDialog ()
{
  CDialog::OnInitDialog ();

  mode[0].Attach (GetDlgItem (IDC_PMODE1)->m_hWnd);
  mode[1].Attach (GetDlgItem (IDC_PMODE2)->m_hWnd);
  mode[2].Attach (GetDlgItem (IDC_PMODE3)->m_hWnd);
  mode[3].Attach (GetDlgItem (IDC_PMODE4)->m_hWnd);
  mode[4].Attach (GetDlgItem (IDC_PMODE5)->m_hWnd);
  mode[BOX_FILE].Attach (GetDlgItem (IDC_FFUNC)->m_hWnd);
  mode[BOX_NAME].Attach (GetDlgItem (IDC_NFUNC)->m_hWnd);
  mode[BOX_MODE].Attach (GetDlgItem (IDC_MFUNC)->m_hWnd);
  hero[0].Attach (GetDlgItem (IDC_PHERO1)->m_hWnd);
  hero[1].Attach (GetDlgItem (IDC_PHERO2)->m_hWnd);
  hero[2].Attach (GetDlgItem (IDC_PHERO3)->m_hWnd);
  hero[3].Attach (GetDlgItem (IDC_PHERO4)->m_hWnd);
  hero[4].Attach (GetDlgItem (IDC_PHERO5)->m_hWnd);
  dfrom.Attach (GetDlgItem (IDC_SAVEDA)->m_hWnd);
  dto.Attach (GetDlgItem (IDC_SAVEDB)->m_hWnd);
  lfrom.Attach (GetDlgItem (IDC_LENGTHA)->m_hWnd);
  lto.Attach (GetDlgItem (IDC_LENGTHB)->m_hWnd);
  for (int i = 0; i < 8; i++)
    mode[i].SetCurSel (0);
  dfrom.SetTime (&CTime (1971, 1, 1, 0, 0, 0));
  dto.SetTime (&CTime::GetCurrentTime ());
  lfrom.SetTime (&CTime (2000, 1, 1, 0, 0, 0));
  lto.SetTime (&CTime (2000, 1, 1, 23, 59, 59));

  for (int i = 0; i < 5; i++)
  {
    hero[i].SetImageList (getImageList ());
    int cur = 0;
    int cnt = getNumHeroes ();
    hero[i].InsertItem ("Any hero", getImageIndex ("Unknown"));
    for (int j = 0; j < getNumTaverns (); j++)
    {
      DotaTavern* tavern = getTavern (j);
      hero[i].InsertItem (tavern->name, getImageIndex (tavern->side == 0 ? "RedBullet" : "GreenBullet"), 0, -1);
      for (int cur = 0; cur < getNumHeroes (); cur++)
      {
        DotaHero* h = getHero (cur);
        if (h->tavern == j)
          hero[i].InsertItem (h->name, getImageIndex (h->imgTag), RGB (255, 255, 255), h->point);
      }
    }
    selhero[i] = 0;
    hero[i].SetCurSel (0);
  }

  return TRUE;
}
Beispiel #10
0
// Delete hero pointer from UnitSet of this world and return hero's pointer.
Hero* World::pullOutHero()
{
    UnitSet::iterator it = m_unitSet.begin();
    for ( ; it != m_unitSet.end(); ++it )
    {
        if ( *it == m_heroUnit )
        {
            m_unitSet.erase( it );
            break;
        }
    }
    assert( m_heroUnit );
    return static_cast<Hero*>(getHero());
}
Beispiel #11
0
void BlackDogState::draw_feather_ui()
{
  // constants
  static const int SIZE = 32, SPACING = 2;
  static Animation* feather_ui
    = GraphicsManager::getInstance()->get_animation("feather_ui");

  // cache
  fRect src, dest = fRect(SPACING, SPACING, SIZE, SIZE);
  int n_feathers = ((AngelThing*)getHero())->countFeathers();

  // iterate through each feather of total possible storage
  for(int i = 0; i < AngelThing::MAX_FEATHERS; i++, dest.x += SIZE+SPACING)
  {
    // frame 0 is a full feather, 1 is an empty one
    src = feather_ui->getFrame(i < n_feathers ? 0 : 1);
    feather_ui->getTexture()->draw(&src, &dest);
  }
}
Beispiel #12
0
void BlackDogState::draw_orb_ui()
{
  // constants
  static const int SIZE = 32, SPACING = 2;
  static Animation* orb_ui
    = GraphicsManager::getInstance()->get_animation("orb_ui");

  // cache
  fRect src, dest
    = fRect(WINDOW_DEFAULT_W-(SIZE+SPACING)*AngelThing::MAX_ORBS, SPACING, SIZE, SIZE);
  int n_orbs = ((AngelThing*)getHero())->countOrbs();

  // iterate through each feather of total possible storage
  for(int i = 0; i < AngelThing::MAX_ORBS; i++, dest.x += SIZE+SPACING)
  {
    // frame 0 is a full feather, 1 is an empty one
    src = orb_ui->getFrame(i < n_orbs ? 1 : 0);
    orb_ui->getTexture()->draw(&src, &dest);
  }
}
bool GameLayer::init() {
    
    CCLayer::init();
    
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    
    screenW = size.width;
    screenH = size.height;
    
    createBox2DWorld();
    
    //setBackground(CCSprite::spriteWithFile("background.png"));
    //setBackground(generateBackground());
    //getBackground()->setPosition(ccp(screenW/2, screenH/2));
    
    //getBackground()->setScaleX(screenW/getBackground()->getTextureRect().size.width);
    //getBackground()->setScaleY(screenH/getBackground()->getTextureRect().size.height);
    
    //CCLog("sw = %f, sh = %f, bw = %f, bh = %f", screenW, screenH, getBackground()->getTextureRect().size.width, getBackground()->getTextureRect().size.height);
    
    //ccTexParams tp = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
    //getBackground()->getTexture()->setTexParameters(&tp);
    //addChild(getBackground());
    
    generateBackground();
    
    setTerrain(Terrain::terrainWithWorld(world));
    
    addChild(getTerrain());
    
    setHero(Hero::heroWithWorld(world));
    getTerrain()->addChild(getHero());
    
    setIsTouchEnabled(true);
    
    tapDown = false;
    
    scheduleUpdate();

    return true;
}
Beispiel #14
0
void World::wannaTalkingEventCheck()
{
    BattleState* bs = static_cast<BattleState*>( GetWorldStateManager().getState( GAME_WORLD_STATE_BATTLE ) );
    assert( bs );

    // Check if hero is in the talking enemy's fight area. If true, the enemy look at hero.
    // This work is almost same as battle event check.
    UnitSet::iterator it = m_unitSet.begin();
    for ( ; it != m_unitSet.end(); ++it )
    {
        if ( (*it) != getHeroUnit() )
        {
            Enemy* unconfirmedEnemy = dynamic_cast<Enemy*>( *it );
            if ( unconfirmedEnemy != NULL
                    && unconfirmedEnemy->isTalkable() == true
                    && !unconfirmedEnemy->getRemoveFlag() )
            {
                Enemy* talkingEnemy = unconfirmedEnemy;

                if ( isInEventArea( getHeroUnit() , talkingEnemy ) == true )
                {
                    // no more move!
                    talkingEnemy->clearKey();

                    // View at hero
                    talkingEnemy->setViewAt( &getHero()->getPos() );

                    //bs->insertEnemy( talkingEnemy );
                }
                else
                {
                    talkingEnemy->setRotZ( 0.0f );
                }
            }
        }
    }
}
/* 插入仇恨id,有则叠加,没有则添加*/
void MonsterAttRed::InpushEnmityValues(HatVal &hatva)
{
    Hero *hero;
    list<HatVal>::iterator enmityValues_it;
    for(enmityValues_it = enmityValues.begin();enmityValues_it != enmityValues.end();enmityValues_it++)
    {
        if(strcmp((*enmityValues_it).id, hatva.id) == 0)
		{
            (*enmityValues_it).value += hatva.value;    
             break;
        }		
    }
    if(enmityValues_it == enmityValues.end())
    {
        enmityValues.push_back(hatva);
    }
	hero = getHero(hatva.id);
	if(hero != NULL)
	{				
		hero->insertAttList(identity);
	}
    enmityValues.sort(ComFun);
   
}
Beispiel #16
0
const CGHeroInstance* CGameInfoCallback::getSelectedHero( TPlayerColor Player ) const
{
	const PlayerState *p = getPlayer(Player);
	ERROR_RET_VAL_IF(!p, "No player info!", NULL);
	return getHero(p->currentSelection);
}
Beispiel #17
0
bool Player::isDead()
{
    return getHero()->getCurrentHealth() <= 0;
}
void CDraftDlg::setReplay (W3GReplay* tw3g)
{
  w3g = tw3g;
  draftPool.DeleteAllItems ();
  draftBans.DeleteAllItems ();
  draftPicks.DeleteAllItems ();
  draftPool.EnableWindow (FALSE);
  draftBans.EnableWindow (FALSE);
  draftPicks.EnableWindow (FALSE);
  if (w3g && w3g->dota.isDota)
  {
    DraftData* draft = &(w3g->game.draft);
    if (draft->numPool)
    {
      draftPool.EnableWindow (TRUE);
      for (int i = 0; i < draft->numPool; i++)
      {
        DotaHero* hero = getHero (draft->pool[i]);
        int pos = draftPool.InsertItem (i, hero->abbr, getImageIndex (hero->imgTag));
        draftPool.SetItemData (pos, (DWORD_PTR) (i & 1 ? 0xFFEEEE : 0xFFFFFF));
      }
    }
    if (draft->numPicks[0] || draft->numPicks[1] || draft->numBans[0] || draft->numBans[1])
    {
      int seCapt = w3g->getCaptain (1);
      int scCapt = w3g->getCaptain (2);
      wchar_t fmt[512];
      if (seCapt >= 0)
      {
        swprintf (fmt, sizeof fmt, L"Sentinel captain: %s", w3g->players[seCapt].uname);
        SetDlgItemTextW (m_hWnd, IDC_SENTINEL_TIP, fmt);
        GetDlgItem (IDC_SENTINEL_TIP)->ShowWindow (SW_SHOW);
      }
      else
        GetDlgItem (IDC_SENTINEL_TIP)->ShowWindow (SW_HIDE);
      if (scCapt >= 0)
      {
        swprintf (fmt, sizeof fmt, L"Scourge captain: %s", w3g->players[scCapt].uname);
        SetDlgItemTextW (m_hWnd, IDC_SCOURGE_TIP, fmt);
        GetDlgItem (IDC_SCOURGE_TIP)->ShowWindow (SW_SHOW);
      }
      else
        GetDlgItem (IDC_SCOURGE_TIP)->ShowWindow (SW_HIDE);
    }
    DWORD colors[2] = {getLightColor (0), getLightColor (6)};
    if (draft->numBans[0] || draft->numBans[1])
    {
      draftBans.EnableWindow (TRUE);
      int cur = draft->firstPick - 1;
      int ptr[2] = {0, 0};
      while (ptr[0] < draft->numBans[0] || ptr[1] < draft->numBans[1])
      {
        if (ptr[cur] < draft->numBans[cur])
        {
          DotaHero* hero = getHero (draft->bans[cur][ptr[cur]++]);
          int pos = draftBans.InsertItem (draftBans.GetItemCount (),
            hero->abbr, getImageIndex (hero->imgTag));
          draftBans.SetItemData (pos, colors[cur]);
        }
        cur = 1 - cur;
      }
    }
    if (draft->numPicks[0] || draft->numPicks[1])
    {
      draftPicks.EnableWindow (TRUE);
      int cur = draft->firstPick - 1;
      int mod = 1;
      int ptr[2] = {0, 0};
      while (ptr[0] < draft->numPicks[0] || ptr[1] < draft->numPicks[1])
      {
        if (ptr[cur] < draft->numPicks[cur])
        {
          DotaHero* hero = getHero (draft->picks[cur][ptr[cur]++]);
          int pos = draftPicks.InsertItem (draftPicks.GetItemCount (),
            hero->abbr, getImageIndex (hero->imgTag));
          draftPicks.SetItemData (pos, colors[cur]);
        }
        mod++;
        if (mod >= 2)
        {
          cur = 1 - cur;
          mod = 0;
        }
      }
    }
  }
}
Beispiel #19
0
void Player::damage(int dmg)
{
    getHero()->setCurrentHealth(getHero()->getCurrentHealth() - dmg);
    std::clog << "Dealing " << dmg << " damage to player " << this << "\n";
}
/* 过滤仇恨列表中的角色*/
void MonsterAttRed::PasSchRge(void) 
{
    list<HatVal>::iterator hatVal_it;
	map<string,Hero*>::iterator hero_it;
	Point heroPt;
	Hero *hero;
	bool flgGods;
	flgGods = true;

	
	for(hatVal_it = enmityValues.begin(); hatVal_it != enmityValues.end();)
	{
		hero_it = heroId_to_pHero.find((*hatVal_it).id);
		
		/*下线死亡就从仇恨列表清除*/
		if(hero_it == heroId_to_pHero.end())
        {
			if(flgGods)
			{
				if(strlen(goodsOwner) > 0 && strcmp(goodsOwner,(*hatVal_it).id) == 0)
				{
					flgGods = false;
				}
			}
			if(perHerId != NULL && strlen(perHerId) != 0 && strcmp(perHerId,(*hatVal_it).id) == 0)
			{
				memset(perHerId,'\0',SHOR_MID_VALUE_LENGTH + 1);
			}
			
			hatVal_it = enmityValues.erase(hatVal_it);
            continue;
        }
		/*死亡就从仇恨列表清除*/
		if(hero_it->second->getLifeStation() == DEAD || !hero_it->second->getWalkingFlg())
		{
			if(flgGods)
			{
				if(strlen(goodsOwner) > 0 && strcmp(goodsOwner,(*hatVal_it).id) == 0)
				{
					flgGods = false;
				}
			}
			if(perHerId != NULL && strlen(perHerId) != 0 && strcmp(perHerId,(*hatVal_it).id) == 0)
			{
				memset(perHerId,'\0',SHOR_MID_VALUE_LENGTH + 1);
			}
			hatVal_it = enmityValues.erase(hatVal_it);
			continue;
		}
		/*为了减少误差,用像素判断*/
        heroPt = hero_it->second->getLocation();   

        /*判断是否在仇恨范围内*/		
		/*现在是以出生点为圆心,仇恨范围不动的格式做的*/
		
     
        if(sqrt(pow(fabs(heroPt._x - pt._x),2)+pow(fabs(heroPt._y - pt._y),2)) > hatRge) //by benliao,not follow hero in all the copy map.
        {
			hero = getHero(((*hatVal_it).id));
			if(hero != NULL)
			{				
				hero->deleteAttList(identity);
			}
			if(flgGods)
			{
				if(strlen(goodsOwner) > 0 && strcmp(goodsOwner,(*hatVal_it).id) == 0)
				{
					flgGods = false;
				}
			}
			
			if(perHerId != NULL && strcmp(perHerId,(*hatVal_it).id) == 0)
			{
				memset(perHerId,'\0',SHOR_MID_VALUE_LENGTH + 1);
			}
			
            hatVal_it = enmityValues.erase(hatVal_it);
            continue;                       
        }
		hatVal_it++;
	}
}      
Beispiel #21
0
HRESULT World::handleMessages(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    m_pic.handleMessages(hWnd, uMsg, wParam, lParam);

    if ( m_sound )
        m_sound->handleMessages(hWnd, uMsg, wParam, lParam);

    bool bTalking = false;

    DialogList::iterator itDialog = m_scriptedDialog.begin();
    for ( ; itDialog != m_scriptedDialog.end(); ++itDialog )
    {
        (*itDialog)->handleMessages( hWnd, uMsg, wParam, lParam );
        bTalking |= (*itDialog)->isTalking();
    }

    UnitSet::iterator it = m_unitSet.begin();
    for ( ; it != m_unitSet.end(); ++it )
    {
        if ( (*it)->getType() == UT_HERO && GetWorldStateManager().curStateEnum() == GAME_WORLD_STATE_FIELD )
        {
            if ( !bTalking )
            {
                (*it)->handleMessages(hWnd, uMsg, wParam, lParam);
            }
            else
                getHero()->clearKey();
        }
    }

    if (uMsg == WM_KEYDOWN)
    {
        if (wParam == VK_ESCAPE)
        {
            if ( GetWorldStateManager().curStateEnum() != GAME_WORLD_STATE_BATTLE )
                GetWorldStateManager().setNextState(GAME_WORLD_STATE_MENU);
        }
        if (wParam == 'P')
        {
            printf("이녀석의 x 위치 : %d\n", m_heroUnit->getTilePosX());
            printf("이녀석의 y 위치 : %d\n", m_heroUnit->getTilePosY());
        }
    }

    if (uMsg == WM_KEYUP)
    {
        if (wParam == VK_RETURN)
        {
            if ( !m_curDialog )
                startTileDefinedDialogIfExist();

            if ( m_curDialog )
                proceedCurDialog();
        }
        if (wParam == VK_END)
        {
            forceCloseCurDialog();
        }
    }

    switch ( uMsg )
    {
    case WM_KEYDOWN:
        switch ( wParam )
        {
        case 'C':
            //////////////////////////////////////////////////////////////////////////
            // External camera test
            EpCamera& rCamera = GetG().m_camera;
            const ArnVec3& vHeroPos = getHeroPos();
            static bool bExtCam = true;
            if ( bExtCam )
            {
                rCamera.setExternalCamera(
                    static_cast<ArnCamera*>(m_modelSg->getSceneRoot()->getNodeByName( "Camera" )) );
                rCamera.begin( CAMERA_EXTERNAL );
            }
            else
            {
                rCamera.setAttachPos( &vHeroPos );
                rCamera.setSmoothCameraDuration( 1.0f );
                rCamera.begin( CAMERA_SMOOTH_ATTACH );

            }
            bExtCam = !bExtCam;
            //////////////////////////////////////////////////////////////////////////
            break;
        }
        break;
    case WM_KEYUP:
        break;
    }

    if ( GetWorldStateManager().getCurState() )
        GetWorldStateManager().getCurState()->handleMessages(hWnd, uMsg, wParam, lParam);

    return S_OK;
}
void MonsterActive::response(void)
{		
	
	StyObj obj(identity,MONSTER_STYLE_TYPE);
	vector<string> herId;		
	Point heroPt;
	Hero *perHero;		
	Nbox *box;
	
	if(map_now == NULL)
	{
		return;
	}
	
	box = map_now->getBox();	
	if(box == NULL || !isAlive)
	{
		return;
	}
	
	/*判断任务是否还在*/
	if(judgeTask())
	{
		cout<<"the task mon of the task is illeay:"<<endl;
		return;
	}
	
	if(!isPlayOver())
	{
		// cout<<"it is playCd time:"<<endl;
		return;
	}	
	
	memset(otherMsg,'\0',MONSTER_MSG_LENGTH + 1);
	
	box->getStaInSrcVec(obj);
	
	/*处理延时性技能*/
	hitedSkiFun();
	
	/*地图没人,判断是否已眩晕*/
	if(!dizz)     
	{
		stopMove();
		return;
	}	
	
	/*回血功能*/
	recoverBloodSelf();
	
	/*boss逃跑*/
	if(flgRun)    
	{
		/*判断是否已定身*/
		if(!skiBody)
		{
			stopMove();
			return;
		}		
	}
	else
	{			
		/*仇恨范围搜寻*/
		schRge();
		
		/*如果仇恨列表不为空*/
		if(!enmityValues.empty())   
		{						
			/*这个是从仇恨列表里面得到的最高值,至于怎么得到的,则要看仇恨计算*/
			perHero = getHero(perHerId);
			
			if(perHero == NULL || !perHero->getLifeStation())
			{
				return;	
			}
			
			heroPt = perHero->getLogPt();
			
			/*攻击距离判断*/
			int fight_state = attackRangePoint(pt,perHero->getLocation(),attack_range);	
			
			
			if(fight_state != 1)
			{				
				/*判断是否已定身*/
				if(!skiBody)
				{
					stopMove();					
					return;
				}
         
                /*如果人物没动,则这次就不必要再寻一次路*/
                if(jdgSmePt(heroPt))
                {					
                    findAttWay(heroPt);						
					isPersuitHero = true;
                }
			}
			
			else
			{			
				stopMove();	
				exchageHat(herId);
				if(attackPoint && useSkill(herId))
				{					
					return;
				}
				attPerHero(otherMsg,sizeof(otherMsg),perHero);					
				box->sentBoxMsg(otherMsg);
			}			
		}
		else
		{
			/*如果上次正在追人,而这次仇恨没人,则立即停下来*/
			if(isPersuitHero)
			{
				stopMove();
				
				isPersuitHero = false;
			}
		
			/*归位*/
            if(Rec)
            { 			
				/*判断是否已定身*/
				if(!skiBody)
				{
					stopMove();	
					return;
				}
				
				if(perLstPt == logic_pt)
				{
					Rec = false;
					return;
				}
				
				/*避免多次寻路*/
				if(keyPath.empty())
				{
					findSlfWay(perLstPt);		
				}			
            }		
			
		}
		
	}
	
	if(perLstPt == logic_pt)
	{
		Rec = false;
	}
	else
	{
		Rec = true;
	}		
	
}	
void MonsterAttRed::response(void)
{
	StyObj obj(identity,MONSTER_STYLE_TYPE);	
	vector<string> herId;	
	Point heroPt;
	Hero *perHero;		
	Nbox *box;
	
	if(map_now == NULL)
	{
		return;
	}
	
	box = map_now->getBox();
	
	if(box == NULL || !isAlive)
	{
		return;
	}	
	
	/*判断任务是否还在*/
	if(judgeTask())
	{
		cout<<"the task mon of the task is illeay:"<<endl;
		return;
	}
	
	if(!isPlayOver())
	{
	//	cout<<"it is playCd time:"<<endl;
		return;
	}
	
	memset(otherMsg,'\0',MONSTER_MSG_LENGTH + 1);	
	
	box->getStaInSrcVec(obj);	
	
	/*处理延时性技能*/
	hitedSkiFun();	
	
	/*判断地图是否有人,怪物是否已眩晕*/
	if(!dizz)     
	{
		stopMove();
		return;
	}

	/*回血功能*/
	recoverBloodSelf();
	
    /*这个是从仇恨列表里面得到的最高值,至于怎么得到的,则要看仇恨计算*/	
	if(flgRun)    
	{
		/*判断是否已定身*/
		if(!skiBody)
		{
			stopMove();
			return;
		}		
	}
	else
	{		
		
		/*终究还是专打红名了 add by chenzhen 201301300950*/
		redSchRge();
		
		if(!enmityValues.empty())
		{
			chageEny(((*(enmityValues.begin())).id)); 

			/*这个是从仇恨列表里面得到的最高值,至于怎么得到的,则要看仇恨计算*/
			perHero = getHero(perHerId); 
			if(perHero == NULL || !perHero->getLifeStation())
			{
				return;
			}
			
			heroPt = perHero->getLogPt();
			int fight_state = attackRangePoint(pt,perHero->getLocation(),attack_range);     
				
			if(fight_state != 1)
			{
				/*判断是否已定身*/
				if(!skiBody)
				{
					stopMove();					
					return;
				}
				
				 /*如果人物没动,则这次就不必要再寻一次路*/
                if(jdgSmePt(heroPt))
                {					
					findAttWay(heroPt);					
					isPersuitHero = true;
                }	
				
				isInPatrol = false;
			}
			
			else
			{
				stopMove();					
				exchageHat(herId);
				if(attackPoint && useSkill(herId))
				{					
					return;
				}
				attPerHero(otherMsg,sizeof(otherMsg),perHero);					
				box->sentBoxMsg(otherMsg);
			}			
		}
		else
		{	
			/*如果上次正在追人,而这次仇恨没人,则立即停下来*/
			if(isPersuitHero)
			{
				stopMove();
				
				isPersuitHero = false;
			}
			
			/*回血功能*/
	//		recoverBloodSelf();	
		
			if(Rec && !isInPatrol)
			{					
				/*判断是否已定身*/
				if(!skiBody)
				{
					stopMove();	
					return;
				}
				if(logic_pt == perLstPt)
				{
					Rec = false;
					return;	
				}
				
				/*避免多次寻路*/
				if(keyPath.empty())
				{
					findAttWay(perLstPt,false);			
				}			
				
			}
			else
			{					
				if(!isInPatrol)
				{
					/*模糊反应*/
					if(!judgeGoFor())
					{
						stopMove();	
						return;
					}	
				}
				
				/*判断是否已定身*/
				if(!skiBody)
				{
					stopMove();	
					return;
				}
				
				/*生成寻路终点*/
				getEnd();  
				
				if(logic_pt == endFinPt)
				{
					Rec = true;
					isInPatrol = false;
					return;
				}
				
				/*避免多次寻路*/
				if(keyPath.empty())
				{
					findSlfWay(endFinPt);		
				}			
			}
		}
	}
	if(perLstPt == logic_pt)
	{
		Rec = false;
	}
	else
	{
		Rec = true;
	}
}
Beispiel #24
0
void GameLevel::setHeroSpawnPosition(const cocos2d::Vec2 &pos) {
  mHeroSpawnPos = pos;
  getHero()->getRenderer()->setOriginalPosition(pos);
}