void MySnake::moveSnake(float dt) { MySprite *footSnake = (MySprite *)getChildByTag(getChildrenCount()-2+batchNodeStartTag); for (int i=getChildrenCount()-2; i >= 0; i--) { MySprite *sprite = (MySprite *)getChildByTag(i+batchNodeStartTag); MySprite *sprite1 = (MySprite *)getChildByTag(i-1+batchNodeStartTag); if (sprite != snakeHeader) { sprite->setIndex(sprite1->getIndex()); //setPosition(getChildByTag(i-1+batchNodeStartTag)->getPosition()); } else { this->moveSnakeHeader(); } } if (snakeHeader->getIndex() == randomSprite->getIndex()) { addSnake(footSnake->getIndex()); changeRandomSpritePozition(); } checkGameOver(); isNormal = true; }
void HUILayer::animOutEnd() { if (m_pPreEndingLayer) { m_pPreEndingLayer->onEnterBackground(); removeChild(m_pPreEndingLayer); m_pPreEndingLayer = NULL; } m_pCurrentLayer = NULL; if (getChildrenCount() < 1) { if (m_pQueneRootLayers->count() > 0) { HRootLayer *layer = (HRootLayer *)m_pQueneRootLayers->objectAtIndex(0); presentRootLayer(layer); // addChild(layer); m_pCurrentLayer = layer; // layer->animIn(NULL); m_pQueneRootLayers->removeObjectAtIndex(0); } } updateAllRootLayers(); HCommonLayer::animOutEnd(); if (getChildrenCount() > 0) { HRootLayer *rootLayer = dynamic_cast<HRootLayer *>(getChildren()->objectAtIndex(getChildrenCount() - 1)); if (rootLayer) { rootLayer->onShowEditbox(true); rootLayer->onEnterForeground(); m_pCurrentLayer = rootLayer; } } if (this == AppDelegate::getInstance()->getGameManager()->getUILayer()) { AppDelegate::getInstance()->getGameManager()->onRootLayerCountChanged(getChildrenCount()); } }
Node* Number::convert(const char* name, int number, Gravity gravity /* = Gravity::GRAVITY_CENTER */) { auto numbers = _numberContainer.at(name); if (number == 0) { auto numberZero = Sprite::createWithSpriteFrame(numbers->at(0)); numberZero->setAnchorPoint(Point(0.5, 0)); return numberZero; } auto numberNode = Node::create(); float totalWidth = 0; while(number){ int temp = number % 10; number /= 10; auto sprite = Sprite::createWithSpriteFrame(numbers->at(temp)); totalWidth += sprite->getContentSize().width; numberNode->addChild(sprite); } auto numberZero = Sprite::createWithSpriteFrame(numbers->at(0)); numberNode->setContentSize(Size(totalWidth, numberZero->getContentSize().height)); if(gravity == Gravity::GRAVITY_CENTER) { float singleWidth = totalWidth/numberNode->getChildrenCount(); int index = numberNode->getChildrenCount()/2; for(auto child : numberNode->getChildren()) { child->setAnchorPoint(Point(0.5, 0)); float offLength = singleWidth*index--; child->setPositionX(offLength); } }else if(gravity == Gravity::GRAVITY_RIGHT) { float singleWidth = totalWidth/numberNode->getChildrenCount(); int index = numberNode->getChildrenCount(); for(auto child : numberNode->getChildren()) { child->setAnchorPoint(Point(1, 0)); float offLength = singleWidth*index--; child->setPositionX(offLength); } }else if(gravity == Gravity::GRAVITY_LEFT) { float singleWidth = totalWidth/numberNode->getChildrenCount(); int index = 0; for(auto child : numberNode->getChildren()) { child->setAnchorPoint(Point::ZERO); float offLength = singleWidth*index++; child->setPositionX(offLength); } } return numberNode; }
void YogaLayoutableShadowNode::appendChild(SharedYogaLayoutableShadowNode child) { ensureUnsealed(); auto nonConstYogaNode = std::const_pointer_cast<YGNode>(yogaNode_); auto nonConstChildYogaNode = std::const_pointer_cast<YGNode>(child->yogaNode_); nonConstYogaNode->insertChild(nonConstChildYogaNode.get(), nonConstYogaNode->getChildrenCount()); }
bool RandomAccessVerificationGeoOptimizationOperator::validateChildren(){ // this operator cannot have any children if(getChildrenCount() > 0){ return false; } return true; }
void ChoiceLayer::setChoices(vector<string> choices) { size_t btnCount = getChildrenCount(); size_t choiceCount = choices.size(); float btnHeight = GlobalConfig::getInstance()->getChoiceMenuFontSize() + 10; float spaceBetweenBtn = btnHeight; float deltaUnit = btnHeight + spaceBetweenBtn; float initHeight = choiceCount % 2 == 0 ? spaceBetweenBtn*0.5 + (choiceCount / 2 - 1)*deltaUnit : spaceBetweenBtn + btnHeight*0.5 + ((choiceCount - 1) / 2 - 1)*deltaUnit; if (choiceCount > btnCount) for (int i = btnCount; i<choices.size(); i++) { auto btn = createButton(i, choices[i]); } for (int i = 0; i < choiceCount; i++) { auto btn = (ControlButton*)getChildByTag(i); string choice = choices.at(i); btn->setPosition(Vec2(0, initHeight - i*deltaUnit)); #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) GBKToUTF(choice); #endif btn->setTitleForState(choice, Control::State::NORMAL); btn->setOpacity(255); } }
void MySnake::addSnake(int index) { MySprite *sprite = MySprite::create(this->getTexture()); sprite->setAnchorPoint(Point(0, 1)); sprite->setTag(getChildrenCount()-1+batchNodeStartTag); sprite->setIndex(index); this->addChild(sprite); }
CharacterSheetItem* Section::getChildAt(int i) const { if((i<getChildrenCount())&&(i>=0)) { return m_dataHash.value(m_keyList.at(i)); } return NULL; }
void MySnake::checkGameOver() { for (int i=1; i < getChildrenCount()-1; i++) { MySprite *sprite = (MySprite *)getChildByTag(i+batchNodeStartTag); if (sprite->getIndex() == snakeHeader->getIndex()) { auto scene = GameOverScene::createScene(); Director::getInstance()->pushScene(scene); } } }
FHEADER_INLINE FWidget* FHeader::widgetFromPoint(int xPos, int yPos) const { /** 此控件不可见 */ if (!isVisible()) { return NULL; } /** 此控件不在坐标范围 */ if (!getLayoutRect().isIntersects(xPos, yPos)) { return NULL; } FWidget *widgetLast = NULL; for (int i = 0; i < getChildrenCount(); ++i) { FWidget *widget = getChild(i); if (!widget->isVisible()) { continue; } FHeaderElement *headerElement = static_cast<FHeaderElement*>(widget->getInterface(FOOWC_HEADERELEMENT)); if (NULL != headerElement && headerElement->isSizable() && headerElement->getLayoutRect().isEmpty()) { // 当列表头项宽度为0时,使能够得到改变宽度的机会(鼠标拉伸) if (NULL != widgetLast && xPos >= widgetLast->getLayoutRect().right && xPos <= widgetLast->getLayoutRect().right + FHEADER_SIZEGRIP_DELTA ) { return widget; } else if (xPos >= getLayoutRect().left && xPos <= getLayoutRect().left + FHEADER_SIZEGRIP_DELTA) { return widget; } } FWidget *pFindWidget = widget->widgetFromPoint(xPos, yPos); if (NULL != pFindWidget) { return pFindWidget; } widgetLast = widget; } return NULL; }
void HUILayer::dismissAllRootLayers() { stopMaskAnimation(); m_pCurrentLayer = NULL; m_pPreEndingLayer = NULL; m_pQueneRootLayers->removeAllObjects(); int count = getChildrenCount(); CCArray *children = getChildren(); for (int i = 0; i < count; ++i) { HRootLayer *layer = (HRootLayer *)children->objectAtIndex(i); layer->onEnterBackground(); } removeAllChildrenWithCleanup(true); updateAllRootLayers(); endPresentFadeOut(); if (this == AppDelegate::getInstance()->getGameManager()->getUILayer()) { AppDelegate::getInstance()->getGameManager()->onRootLayerCountChanged(getChildrenCount()); } }
bool ASTElement::replaceChild(ASTElement* child, ASTElement* element) { ASTElement** children = getChildrenElements(); size_t length = getChildrenCount(); for (size_t i = 0; i < length; i++) { if (children[i] == child) { children[i] = element; return true; } } return false; }
void YogaLayoutableShadowNode::appendChild(SharedYogaLayoutableShadowNode child) { ensureUnsealed(); auto yogaNodeRawPtr = &yogaNode_; auto childYogaNodeRawPtr = &child->yogaNode_; yogaNodeRawPtr->insertChild(childYogaNodeRawPtr, yogaNodeRawPtr->getChildrenCount()); if (childYogaNodeRawPtr->getOwner() == nullptr) { child->ensureUnsealed(); childYogaNodeRawPtr->setOwner(yogaNodeRawPtr); } }
Node* NumberManager::convertNumberToNode(const std::string& serialName, int base, int number) { int totalWidth = 0; auto node = Node::create(); std::string fontNameForZero = serialName + String::createWithFormat("_0%d.png", base)->getCString(); auto spriteFrame = SpriteFrameCache::getInstance()->getSpriteFrameByName(fontNameForZero); if (NULL == spriteFrame) { return NULL; } auto spriteForZero = Sprite::createWithSpriteFrame(spriteFrame); auto size = spriteForZero->getContentSize(); int numberWidth = size.width; int numberHeight = size.height; if (0 == number) { node->addChild(spriteForZero); spriteForZero->setAnchorPoint(Point::ZERO); spriteForZero->setPosition(Point::ZERO); node->setContentSize(size); } else { int temp = 0; while(number > 0) { temp = number % 10; number = number/10; std::string tempNumberName = serialName + String::createWithFormat("_0%d.png", temp + base)->getCString(); auto sprite = Sprite::createWithSpriteFrameName(tempNumberName); sprite->setAnchorPoint(Point::ZERO); node->addChild(sprite); totalWidth += numberWidth; } auto children = node->getChildren(); auto childrenCount = node->getChildrenCount(); bool isOddCount = childrenCount % 2; auto halfCount = childrenCount/2; auto xdelta = isOddCount ? (-halfCount*numberWidth - numberWidth/2) : (-halfCount*numberWidth); for (int i = childrenCount-1, j=0; i>=0; i--, j++) { auto sprite = children.at(i); sprite->setPosition(Point(xdelta + j*numberWidth, 0)); } node->setContentSize(Size(totalWidth, numberHeight)); } return node; }
void HUILayer::backupAllRootLayers() { m_pBackupRootLayer->removeAllObjects(); int count = getChildrenCount(); CCArray *children = getChildren(); for (int i = 0; i < count; ++i) { HRootLayer *layer = (HRootLayer *)children->objectAtIndex(i); layer->onShowEditbox(false); m_pBackupRootLayer->addObject(layer); layer->onEnterBackground(); } removeAllChildrenWithCleanup(false); updateAllRootLayers(); }
bool HUILayer::onBackPressed() { int count = getChildrenCount(); if (count < 1) return false; HRootLayer *layer = (HRootLayer *)getChildren()->objectAtIndex(count - 1); if (count == 1) { if ((AppDelegate::getInstance()->getGameScene()->getGameDecorationLayer()->getChildrenCount() < 1) && (AppDelegate::getInstance()->getGameScene()->getGameShowLayer()->getChildrenCount() < 1)) { return false; } } if (layer->getClass() == "HLoginMainWindow") return false; dismissRootLayer(layer); return true; }
void RogueScene::logMessage(const char * pszFormat, ...) { char szBuf[kMaxLogLen+1] = {0}; va_list ap; va_start(ap, pszFormat); vsnprintf(szBuf, kMaxLogLen, pszFormat, ap); va_end(ap); CCLOG("logMessage: %s", szBuf); auto pGameLogNode = getChildByTag(RogueScene::kGameLogTag); // とりあえず子要素がないなら無理 if (!pGameLogNode || pGameLogNode->getChildrenCount() <= 0) { return; } auto pGameLogText = static_cast<LabelTTF*>(pGameLogNode->getChildren().at(0)); // TODO: 1子しかaddしてないから動く。ちゃんとしないと・・・ if (pGameLogText) { // TODO: 別クラスにしてログをlistで保持する。デフォルトの表示は1件だけで、center寄せ表示でいいかと auto pMessage = String::create(szBuf); pMessage->append("\n"); std::string nowString = pGameLogText->getString(); int count = f_r(nowString, '\n'); // 3行まで表示 if (count >= 3) { int size = nowString.size(); unsigned int loc = nowString.find_last_of('\n', size); CCLOG("logMessage: loc = %d size = %d", loc, size); if (loc != std::string::npos) { nowString.erase(loc, nowString.size() - loc); } } pMessage->append(nowString); pGameLogText->setString(pMessage->getCString()); pGameLogText->setVerticalAlignment(cocos2d::TextVAlignment::TOP); pGameLogText->setHorizontalAlignment(cocos2d::TextHAlignment::LEFT); pGameLogText->setPosition(Point(pGameLogText->getFontSize() / 4 + pGameLogText->getContentSize().width / 2, pGameLogNode->getContentSize().height - pGameLogText->getContentSize().height / 2 - pGameLogText->getFontSize() / 4)); } }
void HUILayer::updateAllRootLayers() { if (this == AppDelegate::getInstance()->getGameScene()->getGameDecorationLayer()) return; HCommonLayer *gameShowLayer = AppDelegate::getInstance()->getGameScene()->getGameShowLayer(); HCommonLayer *gameDecorationLayer = AppDelegate::getInstance()->getGameScene()->getGameDecorationLayer(); bool gameShow = false; int childrenCount = getChildrenCount(); if (childrenCount > 0) { int fullScreenLayerCount = 0; int i = childrenCount - 1; for (; i >= 0; --i) { HRootLayer *layer = (HRootLayer *)getChildren()->objectAtIndex(i); if (fullScreenLayerCount < 1) { layer->setOutOfScreen(false); } else { layer->setOutOfScreen(true); } if (layer->getIsFullScreen()) { ++fullScreenLayerCount; } if (fullScreenLayerCount > 1) break; } if (fullScreenLayerCount > 0) { gameShow = false; } else { gameShow = true; } for (; i >= 0; --i) { HRootLayer *layer = (HRootLayer *)getChildren()->objectAtIndex(i); layer->setOutOfScreen(true); } } else { gameShow = true; } gameShowLayer->setOutOfScreen(!gameShow); gameDecorationLayer->setOutOfScreen(!gameShow); if (childrenCount < 1) { gameShowLayer->onEnter(); gameDecorationLayer->onEnter(); } else { gameShowLayer->onExit(); gameDecorationLayer->onExit(); } }
bool RogueScene::tileSetEnemyActorMapItem(ActorSprite::ActorDto enemyActorDto, MapIndex mapIndex) { // すでにプレイヤーが置いてある場合は置けない if (m_mapManager.getActorMapItem(&mapIndex)->mapDataType != MapDataType::NONE) { return false; } auto pTileMapLayer = getChildByTag(RogueScene::kTiledMapTag); auto pEnemyLayer = pTileMapLayer->getChildByTag(RogueScene::kTiledMapEnemyBaseTag); // TODO: 倒したときのことも考えないといけない 出現数のカウントでOK? long enemyCount = pEnemyLayer->getChildrenCount(); ActorMapItem enemyMapItem; enemyMapItem.mapDataType = MapDataType::ENEMY; enemyMapItem.mapIndex = mapIndex; enemyMapItem.seqNo = enemyCount; enemyMapItem.moveDist = enemyActorDto.movePoint; enemyMapItem.attackDist = enemyActorDto.attackRange; enemyMapItem.moveDone = false; enemyMapItem.attackDone = false; auto enemySprite = ActorSprite::createWithActorDto(enemyActorDto); enemySprite->setPosition(indexToPoint(enemyMapItem.mapIndex)); enemySprite->setActorMapItem(enemyMapItem); enemySprite->runBottomAction(); pEnemyLayer->addChild(enemySprite, RogueScene::zTiledMapEnemyBaseIndex, (RogueScene::kTiledMapEnemyBaseTag + enemyMapItem.seqNo)); // マップに追加 m_mapManager.addActor(enemySprite->getActorMapItem()); // ミニマップも更新 auto pMiniMapLayer = getChildByTag(kMiniMapTag); // 敵の位置表示用(同じく1/8サイズ)TODO: 数が多くなるならBatchNodeとかにしないと? auto miniMapEnemyLayer = LayerColor::create(Color4B::RED); // タイルの1/8サイズ miniMapEnemyLayer->setContentSize(m_baseTileSize / 8); // 現在位置からPositionを取得して1/8にする miniMapEnemyLayer->setPosition(indexToPointNotTileSize(enemySprite->getActorMapItem()->mapIndex) / 8); // 移動時に更新できるようにplayerIdをtag管理 miniMapEnemyLayer->setTag(enemySprite->getTag()); // add pMiniMapLayer->addChild(miniMapEnemyLayer); return true; }
bool SortByScoreOptimizationOperator::validateChildren(){ for(unsigned i = 0 ; i < getChildrenCount() ; i++){ PhysicalPlanOptimizationNode * child = getChildAt(i); PhysicalPlanNodeType childType = child->getType(); switch (childType) { case PhysicalPlanNode_RandomAccessTerm: case PhysicalPlanNode_RandomAccessAnd: case PhysicalPlanNode_RandomAccessOr: case PhysicalPlanNode_RandomAccessNot: case PhysicalPlanNode_RandomAccessGeo: return false; default:{ continue; } } } return true; }
bool RandomAccessVerificationAndOptimizationOperator::validateChildren(){ // all it's children must be RandomAccessNodes for(unsigned i = 0 ; i < getChildrenCount() ; i++){ PhysicalPlanOptimizationNode * child = getChildAt(i); PhysicalPlanNodeType childType = child->getType(); switch (childType) { case PhysicalPlanNode_RandomAccessTerm: case PhysicalPlanNode_RandomAccessAnd: case PhysicalPlanNode_RandomAccessOr: case PhysicalPlanNode_RandomAccessNot: case PhysicalPlanNode_RandomAccessGeo: continue; default: return false; } } return true; }
void MySnake::changeRandomSpritePozition() { Array *totalArray = Array::createWithCapacity(col_num * row_num); for (int i=0; i<totalArray->capacity(); i++) { totalArray->addObject(Integer::create(i)); } for (int i=0; i < getChildrenCount()-1; i++) { MySprite *sprite = (MySprite *)getChildByTag(i+batchNodeStartTag); totalArray->removeObjectAtIndex(sprite->getIndex()); } int randIndex = (CCRANDOM_0_1()+1) * totalArray->count(); randIndex = CCRANDOM_0_1() * totalArray->count(); Integer* pozitionIndex = (Integer *)totalArray->getObjectAtIndex(randIndex); randomSprite->setIndex(pozitionIndex->getValue()); }
bool UnionSortedByIDOptimizationOperator::validateChildren(){ for(unsigned i = 0 ; i < getChildrenCount() ; i++){ PhysicalPlanOptimizationNode * child = getChildAt(i); PhysicalPlanNodeType childType = child->getType(); switch (childType) { case PhysicalPlanNode_RandomAccessTerm: case PhysicalPlanNode_RandomAccessAnd: case PhysicalPlanNode_RandomAccessOr: case PhysicalPlanNode_RandomAccessNot: case PhysicalPlanNode_RandomAccessGeo: case PhysicalPlanNode_UnionLowestLevelTermVirtualList: case PhysicalPlanNode_GeoNearestNeighbor: // this operator cannot have TVL as a child, TVL overhead is not needed for this operator return false; default:{ continue; } } } return true; }
Node* Number::convert(const char *name, int number, Gravity gravity /* = Gravity::GRAVITY_CENTER */) { auto numbers = numberContainer.at(name); if (number == 0) { auto numberZero = Sprite::createWithSpriteFrame(numbers->at(0)); numberZero->setAnchorPoint(Point(0.5,0)); return numberZero; } auto numberNode = Node::create(); float totalWidth = 0; while (number) { int temp = number % NUMBER_MAX; number /= NUMBER_MAX; auto sprite = Sprite::createWithSpriteFrame(numbers->at(temp)); totalWidth += sprite->getContentSize().width; numberNode->addChild(sprite); } int index; float numberWidth,numberHeight,offsetWidth; numberHeight = Sprite::createWithSpriteFrame(numbers->at(0))->getContentSize().height; numberNode->setContentSize(Size(totalWidth, numberHeight)); numberWidth = totalWidth / numberNode->getChildrenCount(); switch (gravity) { case Gravity::GRAVITY_LEFT: index = 0; for (auto child : numberNode->getChildren()) { child->setAnchorPoint(Point(0,0)); offsetWidth = numberWidth*index++; child->setPositionX(offsetWidth); } break; case Gravity::GRAVITY_CENTER: index = numberNode->getChildrenCount()/2; for (auto child : numberNode->getChildren()) { child->setAnchorPoint(Point(0.5,0)); offsetWidth = numberWidth*index--; child->setPositionX(offsetWidth); } break; case Gravity::GRAVITY_RIGHT: index = numberNode->getChildrenCount(); for (auto child : numberNode->getChildren()) { child->setAnchorPoint(Point(1,0)); offsetWidth = numberWidth*index--; child->setPositionX(offsetWidth); } break; default: index = numberNode->getChildrenCount()/2; for (auto child : numberNode->getChildren()) { child->setAnchorPoint(Point(0.5,0)); offsetWidth = numberWidth*index--; child->setPositionX(offsetWidth); } break; } return numberNode; }
bool LLConversationItemSession::hasChildren() const { return getChildrenCount() > 0; }
void GameScene::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *unused_event){ pointList.clear(); Point location = touch->getLocation(); cur_point = location; if((pre_point - cur_point).getLengthSq()>25){ seg.p1=pre_point; seg.p2=cur_point; segment.push_back(seg); pre_point=cur_point; } if (p_2dPath.size() < 1){ return ; } RecognitionResult result = g_rGemertricRecognizer->recognize(p_2dPath); p_2dPath.clear(); if (result.score<0.70) { return; } size_t len = curWave.size(); ValueVector temp_vec; log(" 剩余数量 :%zd ",curWave.size()); for (int i =0; i < len; i ++) { auto em = curWave.at(i); // 获取enmey数组 主要目的是获取signarr auto emy = curEnWave.at(i); // 获取sprite auto sign = em->getSignArr().back(); // 获取signarr中最上层的一个 //判断最上层标志是否与手势相符 log("界面图片%d:用户手势%d",sign->getSignType(),this->resultTypeByName(Value(result.name))); if (sign->getSignType()==this->resultTypeByName(Value(result.name))) { log(" em->getSignArr().capacity()-BEFORE:%zd getSignArrBEFORE:%zd ",emy->getChildrenCount(),em->getSignArr().size()); emy->removeChildByTag(sign->getTag()); Vector<Sign*> arr = em->getSignArr(); arr.eraseObject(sign); em->setSignArr(arr); arr.clear(); log(" em->getSignArr().capacity():%zd getSignArr:%zd",emy->getChildrenCount(),em->getSignArr().size()); if (emy->getChildrenCount() == 0) { // 移除之后判断有无子精灵 // em->removeFromParent(); // 没有则销毁该精灵 // emy->removeFromParent(); // curWave.eraseObject(em); // curEnWave.eraseObject(emy); temp_vec.push_back(Value(i)); }else{ emy->stopActionByTag(DropActionTag); GameScene::startDrop(10.f, emy,true); } } } // size_t curLen = len; for(Value val:temp_vec){ int curIndex = val.asInt(); this->curWave.at(curIndex)->removeFromParent(); this->curEnWave.at(curIndex)->removeFromParent(); this->curWave.erase(curIndex); this->curEnWave.erase(curIndex); curLen--; if (curLen == 0) { waveCount++; this->curWave.clear(); this->curEnWave.clear(); if (waveCount>=1&&waveCount<=3) { lvl = 1; }else if(waveCount>=4&&waveCount<=8){ lvl = 2; }else if (waveCount>=9&&waveCount<=14){ lvl = 3; }else if (waveCount>14){ lvl = 4; } GameScene::addNewEnemyByLevel(lvl); } } temp_vec.clear(); }
void HUILayer::presentRootLayer(HRootLayer *layer, bool inQueue) { if (inQueue && (getChildrenCount() > 0)) { m_pQueneRootLayers->addObject(layer); } else { if (!layer->getDisableAnimInOut()) stopMaskAnimation(); CCDirector::sharedDirector()->getTouchDispatcher()->setDispatchEvents(false); m_pCurrentLayer = layer; stopAIV(); if (getChildrenCount() > 0) { HRootLayer *rootLayer = dynamic_cast<HRootLayer *>(getChildren()->objectAtIndex(getChildrenCount() - 1)); if (rootLayer) { rootLayer->onShowEditbox(false); rootLayer->onEnterBackground(); } } int zOrder = !layer->getIsFullScreen() ? 1000 : 0; int iLayerBasePriority = ((this == AppDelegate::getInstance()->getGameScene()->getUILayer()) ? 20 : 10) * -HTOUCHPRIORITY_LAYERSPACE; for (int i = getChildrenCount() - 1; i >= 0; --i) { HRootLayer *prelayer = (HRootLayer *)getChildren()->objectAtIndex(i); if ((prelayer->getIsFullScreen() && layer->getIsFullScreen()) || (!prelayer->getIsFullScreen() && !layer->getIsFullScreen())) { iLayerBasePriority = prelayer->getBaseTouchPriority() - HTOUCHPRIORITY_LAYERSPACE; zOrder = prelayer->getZOrder() + 1; break; } } zOrder = 0; iLayerBasePriority = 0; addChild(layer, zOrder); if (this == AppDelegate::getInstance()->getGameScene()->getUILayer()) { if (!layer->getIsFullScreen()) { layer->setBaseTouchPriority(iLayerBasePriority); // layer->setTouchEnabled(false); } layer->setTouchEnabled(true); } else { layer->setBaseTouchPriority(iLayerBasePriority); layer->setTouchEnabled(false); } layer->onEnterForeground(); if (this == AppDelegate::getInstance()->getGameManager()->getUILayer()) { AppDelegate::getInstance()->getGameManager()->onRootLayerCountChanged(getChildrenCount()); } if (!layer->getDisableAnimInOut()) { if (layer->getActionIn()) { layer->animIn(NULL); } else { m_spMasklayer->setVisible(true); m_spMasklayer->setPresentUI(true); layer->setVisible(false); CCFadeIn *fadeIn = CCFadeIn::create(gfDurationFadeIn); CCCallFunc *cfIn = CCCallFunc::create(this, callfunc_selector(HUILayer::endPresentFadeIn)); CCFadeOut *fadeOut = CCFadeOut::create(gfDurationFadeOut); CCCallFunc *cfOut = CCCallFunc::create(this, callfunc_selector(HUILayer::endPresentFadeOut)); m_spMasklayer->runAction(CCSequence::create(fadeIn, cfIn, fadeOut, cfOut, NULL)); } } else { updateAllRootLayers(); CCDirector::sharedDirector()->getTouchDispatcher()->setDispatchEvents(true); layer->didMoveToWindow(layer->getParent()); layer->onEnterTransitionDidFinish(); } layer->onShowEditbox(true); } }
void Family::AddChild(Person *child) { Person **new_members = new Person*[size + 1]; for (int i = 0; i < size; i++) new_members[i] = members[i]; new_members[size] = child; delete[] members; members = new_members; size++; Relation *new_relations = new Relation[relation_count + 2]; for (int i = 0; i < relation_count; i++) new_relations[i] = relations[i]; switch ((*members[size - 1]).gender) { case MALE: new_relations[relation_count] = Relation(members[0], members[size - 1], FATHER_SON); new_relations[relation_count + 1] = Relation(members[1], members[size - 1], MOTHER_SON); break; case FEMALE: new_relations[relation_count] = Relation(members[0], members[size - 1], FATHER_DAUGHTER); new_relations[relation_count + 1] = Relation(members[1], members[size - 1], MOTHER_DAUGHTER); break; default: break; } delete[] relations; relations = new_relations; new_relations = 0; relation_count += 2; //Если дети до этого уже были, то нужно добавить дополнительные Relations между ними и новым ребенком if (int childrenCount = getChildrenCount() - 1) { new_relations = new Relation[relation_count + childrenCount]; for (int i = 0; i < relation_count; i++) new_relations[i] = relations[i]; for (int i = 2; i < size - 1; i++) { switch ((*members[size - 1]).gender) { case MALE: new_relations[relation_count + (i - 1 - childrenCount)] = Relation(members[size - 1], members[i], (*members[i]).gender ? BROTHER_SISTER : BROTHER_BROTHER); break; case FEMALE: new_relations[relation_count + (i - 1 - childrenCount)] = Relation(members[size - 1], members[i], (*members[i]).gender ? SISTER_SISTER : BROTHER_SISTER); break; default: break; } } delete[] relations; relations = new_relations; relation_count += childrenCount; childrenCount++; } }
ReturnValue alphaBeta(Configuration v, int alpha, int beta, int depth){ // int counter=0; if (DEBUG_STACK){ printstack(); printf("alphabeta a=%d b=%d d=%d\n", alpha, beta, depth); // printBoardNonBlock(v); } ++stackcount; HashRetVal s; s=retrieve(v); ReturnValue ret; ReturnValue temp; ret.alpha=alpha; ret.beta=beta; if (s!=NULL) { switch (s->type){ case EXACT: if (s->lowerbound>=beta) { ret.value=s->lowerbound; ret.move=s->mv; --stackcount; if (DEBUG_STACK){ printstack(); printf("hit exact 1\n"); } return ret; } if (s->upperbound<=alpha) { ret.value=s->upperbound; ret.move=s->mv; --stackcount; if (DEBUG_STACK){ printstack(); printf("hit exact 2\n"); } return ret; } ret.alpha=max(alpha, s->lowerbound); ret.beta=min(beta, s->upperbound); ret.move=s->mv; break; case FAIL_LOW: if (s->upperbound<=alpha) { ret.value=s->upperbound; ret.move=s->mv; --stackcount; if (DEBUG_STACK){ printstack(); printf("hit fail low\n"); } return ret; } break; case FAIL_HIGH: if (s->lowerbound>=beta) { ret.value=s->lowerbound; ret.move=s->mv; --stackcount; if (DEBUG_STACK){ printstack(); printf("hit fail high\n"); } return ret; } break; default: break; } free(s); } if (depth==0) { ChildIterator itr=getExpansion(v); ret.value=getCurrentValue(itr); ret.move=getCurrent(itr); releaseChildIterator(itr); if (getType(v)==MAXNODE) updateMoveHeuristic(v, ret.move.x, ret.move.y, ret.value); else updateMoveHeuristic(v, ret.move.x, ret.move.y, -ret.value); if (DEBUG_STACK){ printBoardNonBlock(v); printstack(); printf("eval %d\n", ret.value); printstack(); printf("(%d, %d)\n", ret.move.x, ret.move.y); } } else if (getType(v)==MAXNODE) { // printf("*\n"); ChildIterator itr=getExpansion(v); // printf("e: %d %d %d\n", getCurrent(itr).x, getCurrent(itr).y, depth); int a=alpha; ret.value=-FIVE_SCORE; ret.move=getCurrent(itr); if (getCurrentValue(itr)>=FIVE_SCORE){ ret.value=FIVE_SCORE; } else { while (itr!=NULL && ret.value<beta) { // printf("depth=%d, move=%d %d\n", // depth, getCurrent(itr).x, // getCurrent(itr).y); if (tickTimer()==0) break; applyMove(v, getCurrent(itr)); // printBoardNonBlock(v); if (DEBUG_STACK){ printstack(); printf("black trying %d %d\n", getCurrent(itr).x, getCurrent(itr).y); } switch (getChildrenCount(itr)){ // case 1: /* ++quadcount; temp=alphaBeta(v, a, beta, depth-((doublecount & 3)==0));*/ case 1: // case 2: ++doublecount; temp=alphaBeta(v, a, beta, depth-1); --doublecount; break; default: temp=alphaBeta(v, a, beta, depth-1); break; } updateMoveHeuristic(v, temp.move.x, temp.move.y, temp.value); if (DEBUG_STACK){ printstack(); printf("black try %d %d, result=%d\n", getCurrent(itr).x, getCurrent(itr).y, temp.value); } if (temp.value>ret.value) { ret.value=temp.value; ret.move=getCurrent(itr); // printf("current black move = %d %d\n", ret.move.x, ret.move.y); } undoMove(v, getCurrent(itr)); // printBoard(v); if (a<ret.value){ a=ret.value; } // printf("a=%d ret.value=%d\n", a, ret.value); // TODO to be verified /* if (temp.value<=-INFINITY){ ++counter; } if (counter>2) break;*/ getNext(&itr); // printf("e: %d %d\n", itr->current.x, itr->current.y); } if (DEBUG_STACK){ if (ret.value>=beta){ printstack(); printf("pruned\n"); } } } releaseChildIterator(itr); } else { // printf("-\n"); ChildIterator itr=getExpansion(v); // printf("n: %d %d %d\n", getCurrent(itr).x, getCurrent(itr).y, depth); int b=beta; ret.value=FIVE_SCORE; ret.move=getCurrent(itr); if (getCurrentValue(itr)<=-FIVE_SCORE){ ret.value=-FIVE_SCORE; } else { while (itr!=NULL && ret.value>alpha) { if (tickTimer()==0) break; applyMove(v, getCurrent(itr)); if (DEBUG_STACK){ printstack(); printf("white trying %d %d\n", getCurrent(itr).x, getCurrent(itr).y); } if (getChildrenCount(itr)<=1){ ++doublecount; temp=alphaBeta(v, alpha, b, depth-1); --doublecount; } else { temp=alphaBeta(v, alpha, b, depth-1); } updateMoveHeuristic(v, temp.move.x, temp.move.y, -temp.value); if (DEBUG_STACK){ printstack(); printf("white try %d %d, result=%d\n", getCurrent(itr).x, getCurrent(itr).y, temp.value); printf("retval=%d\n", ret.value); } if (temp.value<ret.value){ ret.value=temp.value; ret.move=getCurrent(itr); // printf("current white move = %d %d\n", ret.move.x, ret.move.y); } undoMove(v, getCurrent(itr)); if (b>ret.value){ b=ret.value; } // printf("a=%d ret.value=%d\n", b, ret.value); /* if (ret.value<=-INFINITY-10) break;*/ // TODO to be verified /* if (temp.value>=INFINITY){ ++counter; } if (counter>2) break;*/ getNext(&itr); } if (DEBUG_STACK){ if (ret.value<=alpha){ printstack(); printf("pruned\n"); } } } releaseChildIterator(itr); } if (ret.value<=alpha && getType(v)==MINNODE) { /* fail low */ v->upperbound=ret.value; if (depth>0) store(v, ret.move, FAIL_LOW); /* Fail low result implies an upper bound */ } else if (ret.value>alpha && ret.value<beta) { /* accurate window */ v->upperbound=v->lowerbound=ret.value; if (depth>0) store(v, ret.move, EXACT); } else if (getType(v)==MINNODE && ret.value>=MAXNODE){ /* fail high */ v->lowerbound=ret.value; if (depth>0) store(v, ret.move, FAIL_HIGH); } /* printstack(); printf("ab return %d (%d,%d))\n", ret.value, ret.move.x, ret.move.y);*/ // getchar(); --stackcount; return ret; }
Handle<Value> XML::GetChildrenCount(const Arguments& args) { HandleScope scope; Handle<Integer> count = Integer::New(getChildrenCount()); return(scope.Close(count)); }