void BuildingFunc::addSoldier( Coord pos,int id,int popution ) { if (_camps.empty()) { return; } //排序 sort(_camps.begin(),_camps.end(),[=](DBuilding * a,DBuilding * b){return (pos.x - a->coord.x)*(pos.x - a->coord.x) + (pos.y - a->coord.y)*(pos.y - a->coord.y) < (pos.x - b->coord.x)*(pos.x - b->coord.x) + (pos.y - b->coord.y)*(pos.y - b->coord.y);}); //TODO 分配兵力 for (auto item : _camps) { auto sitem = BarrackData::getBarrackFromId(item->id); if (sitem->maxpopulation - sitem->curpopulation >= popution) { sitem->curpopulation += popution; sitem->addSoldier(id); sitem->updateData(); break; } } for (auto item :_allSoldiers) { delete item.second; } _allSoldiers.clear(); }
void UIConveyorLayer::UpDataConveyorInfo(int id, int TypeId ) { //添加运输机内士兵 auto info = ConveyorConfig::getConveyorConfigFromId(id); int Barrackid = 0; if(info) { auto tmpmap = BarrackData::getBarrackDataMap(); bool boolen = true; for (auto item:tmpmap) { for(auto item2:item.second->soldieritems) { if(item2->soldierid == TypeId && boolen) { if(item2->soldierstate < item2->number) { Barrackid = item2->id; boolen = false; } else break; } } } if(Barrackid == 0 )return; info->addSoldier(Barrackid,TypeId); //减少可用士兵 auto map = BarrackData::getBarrackDataMap(); for (auto item:map) { auto Soldier = item.second; if(Soldier->id == Barrackid){ Soldier->updataSoldierUseState(TypeId,Barrackid,1); auto tmpmap = BuildingFunc::getInstance()->getAllSoldier(); auto iter = tmpmap.find(TypeId); if(iter != tmpmap.end()) iter->second->soldierstate++; break; } } } //刷新界面 showConveyorInfoLayer(); showSoldierInfoLayer(); }
///////////////////////////////////////////////////////////////////////////// // add a new item to the tree ///////////////////////////////////////////////////////////////////////////// void CUndoDialog::addItem(int iAction, CUndo *pUndo) { switch(iAction) { case UNDO_SETTLE_PLACE: addPlacement(TRUE); break; case UNDO_THIRD_ROAD_PLACE: case UNDO_ROAD_PLACE: addPlacement(FALSE); break; case UNDO_SHIP_PLACE: addPlacement(FALSE, TRUE); break; case UNDO_FIRST_ROLL: addRoll(TRUE, ((CUndoOne *) pUndo)->m_iOne); break; case UNDO_ROLL: addRoll(FALSE, ((CUndoOne *) pUndo)->m_iOne); break; case UNDO_ACTION_START: addActionStart(); break; case UNDO_ACTION: addAction(); break; case UNDO_ROAD: addRoad(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_SHIP: addShip(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_CITY: addCity(); break; case UNDO_MOVE_SHIP: addMoveShip(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_SETTLEMENT: addSettle(); break; case UNDO_BUY_DEVCARD: addDevcard(); break; case UNDO_ROBBER_PLACE: addRobber(); break; case UNDO_PIRATE_PLACE: addPirate(); break; case UNDO_PLAY_VICTORY: addVictory(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_PLAY_MONOPOLY: addMonopoly((CUndoMonopoly *) pUndo); break; case UNDO_PLAY_ROAD: addRoadBuild(); break; case UNDO_PLAY_YEAR: addYearPlenty(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_PLAY_SOLDIER: addSoldier(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_TRADE: addTrade((CUndoTrade *) pUndo); break; case UNDO_STEAL: addSteal(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_LOSECARDS: addLoseCards((CUndoTrade *) pUndo); break; case UNDO_ACTION_END: endTurn(); break; case UNDO_WIN: addWin(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_WASTE: addWaste(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_GOLD: addGold((CUndoGold *) pUndo); break; case UNDO_CHITLESS: addChitless(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_VOLCANO: addVolcano(); break; case UNDO_TRADE_JUNGLE: addJungle((CUndoTrade *) pUndo); break; case UNDO_SPECIAL_BUILD: addSpecialBuild(((CUndoOne *) pUndo)->m_iOne); break; case UNDO_SPECIAL_BUILD_END: addSpecialBuildEnd(); break; default: break; } }