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 ); } } } } }
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); }
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; }
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; }
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); }
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); }
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; }
// 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()); }
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); } }
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; }
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); }
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); }
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; } } } } }
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++; } }
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; } }
void GameLevel::setHeroSpawnPosition(const cocos2d::Vec2 &pos) { mHeroSpawnPos = pos; getHero()->getRenderer()->setOriginalPosition(pos); }