本文整理汇总了C++中ObjectManager::clearRemovedObjects方法的典型用法代码示例。如果您正苦于以下问题:C++ ObjectManager::clearRemovedObjects方法的具体用法?C++ ObjectManager::clearRemovedObjects怎么用?C++ ObjectManager::clearRemovedObjects使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ObjectManager
的用法示例。
在下文中一共展示了ObjectManager::clearRemovedObjects方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: doTurn
void TaeTurn::doTurn() {
//check to make sure the game is still ging and this is not a combat turn
if(isGameOver) {
gameOver();
return;
} else if(combat) {
doCombatTurn();
return;
}
std::set<uint32_t>::iterator itcurr;
Game* game = Game::getGame();
OrderManager* ordermanager = game->getOrderManager();
ObjectManager* objectmanager = game->getObjectManager();
ObjectTypeManager* obtm = game->getObjectTypeManager();
PlayerManager::Ptr playermanager = game->getPlayerManager();
//build map for storing orders
std::map<uint32_t, std::list<IGObject::Ptr > > playerOrders;
containerids.clear();
//separate orders by player
std::set<uint32_t> objects = objectmanager->getAllIds();
for(itcurr = objects.begin(); itcurr != objects.end(); ++itcurr) {
IGObject::Ptr ob = objectmanager->getObject(*itcurr);
if(ob->getType() == planettype || ob->getType() == fleettype) {
OrderQueueObjectParam* oqop = dynamic_cast<OrderQueueObjectParam*>(ob->getParameterByType(obpT_Order_Queue));
if(oqop != NULL) {
OrderQueue::Ptr orderqueue = ordermanager->getOrderQueue(oqop->getQueueId());
if(orderqueue != NULL) {
Order * currOrder = orderqueue->getFirstOrder();
if(currOrder != NULL) {
uint32_t owner = ((OwnedObject*)(ob->getObjectBehaviour()))->getOwner();
std::list<IGObject::Ptr >::iterator i = playerOrders[owner].end();
playerOrders[owner].insert(i, ob);
}
}
}
}
}
//Do orders for players in the correct order
//The order in which orders are processed is rotated each turn
std::set<uint32_t> players = playermanager->getAllIds();
itcurr = players.begin();
for(int i = 0; i < playerTurn; i++) {
itcurr++;
}
for(uint32_t it = 0; it < players.size(); it++) {
if(itcurr == players.end()) {
itcurr = players.begin();
}
if(playerOrders[*itcurr].size() > 0) {
for(std::list<IGObject::Ptr >::iterator i = playerOrders[*itcurr].begin(); i != playerOrders[*itcurr].end(); i++) {
OrderQueue::Ptr orderqueue = ordermanager->getOrderQueue(((OrderQueueObjectParam*)((*i)->getParameterByType(obpT_Order_Queue)))->getQueueId());
Order* currOrder = orderqueue->getFirstOrder();
if(currOrder!= NULL) {
if(currOrder->doOrder(*i)) {
orderqueue->removeFirstOrder();
} else {
orderqueue->updateFirstOrder();
}
}
if((*i)->getContainerType() >= 1) {
containerids.insert((*i)->getID());
}
objectmanager->doneWithObject((*i)->getID());
}
}
itcurr++;
}
awardArtifacts();
//Check for end game condition of less than 3 artifacts remaining
objects = objectmanager->getAllIds();
int numArtifacts = 0;
for(itcurr = objects.begin(); itcurr != objects.end(); itcurr++) {
IGObject::Ptr ob = objectmanager->getObject(*itcurr);
if(ob->getType() == obtm->getObjectTypeByName("Planet")) {
Planet* p = (Planet*) ob->getObjectBehaviour();
if(p->getResource(3) > 0) {
numArtifacts++;
}
}
}
if(numArtifacts < 3) {
isGameOver = true;
gameOver();
return;
}
//Update which player's turn it is
playerTurn = (playerTurn + 1) % playermanager->getNumPlayers();
objectmanager->clearRemovedObjects();
// to once a turn
for(itcurr = objects.begin(); itcurr != objects.end(); ++itcurr) {
//.........这里部分代码省略.........
示例2: doTurn
void RftsTurn::doTurn() {
Game* game = Game::getGame();
OrderManager* ordermanager = game->getOrderManager();
ObjectManager* objectmanager = game->getObjectManager();
PlayerManager::Ptr pm = game->getPlayerManager();
set<uint32_t> objectsIds = objectmanager->getAllIds();
// currently just go through each obj and do each order
// will be prioritized/sorted soon TODO
for(set<uint32_t>::iterator i = objectsIds.begin();
i != objectsIds.end(); ++i)
{
IGObject::Ptr currObj = objectmanager->getObject(*i);
OrderQueueObjectParam* oqop = dynamic_cast<OrderQueueObjectParam*>(currObj->getParameterByType(obpT_Order_Queue));
OrderQueue::Ptr oq;
if(oqop != NULL &&
(oq = ordermanager->getOrderQueue(oqop->getQueueId())) != NULL)
{
for(uint32_t j = 0; j < oq->getNumberOrders(); j++)
{
OwnedObject *orderedObj = dynamic_cast<OwnedObject*>(currObj->getObjectBehaviour());
assert(orderedObj);
Order* order = oq->getOrder(j, orderedObj->getOwner());
if(order->doOrder(currObj))
{
oq->removeOrder(j, orderedObj->getOwner());
j--; // list has been reordered
}
else
oq->updateFirstOrder(); // CHECK
}
currObj->touchModTime();
}
objectmanager->doneWithObject(currObj->getID());
}
objectmanager->clearRemovedObjects();
// re-explore new area
setPlayerVisibleObjects();
// to once a turn (right at the end)
objectsIds = objectmanager->getAllIds();
for(std::set<uint32_t>::iterator i = objectsIds.begin();
i != objectsIds.end(); ++i)
{
IGObject::Ptr obj = objectmanager->getObject(*i);
obj->getObjectBehaviour()->doOnceATurn();
objectmanager->doneWithObject(obj->getID());
}
objectmanager->clearRemovedObjects();
// update in case fleets were destroyed in combat
setPlayerVisibleObjects();
set<uint32_t> players = pm->getAllIds();
for(set<uint32_t>::iterator i = players.begin(); i != players.end(); ++i)
PlayerInfo::getPlayerInfo(*i).clearPdbUpgrade();
Player::Ptr winner = getWinner();
if(winner != NULL)
{
string body;
Message::Ptr gameOver( new Message() );
gameOver->setSubject("Game over!");
if( game->getTurnNumber() ==
static_cast<unsigned>(strtol(Settings::getSettings()->get("game_length").c_str(), NULL, 10)) )
body = "Game length elapsed, winner is: ";
else
body = "Overwhelming victory by: ";
body += winner->getName();
gameOver->setBody(PlayerInfo::appAllVictoryPoints(body));
for(set<uint32_t>::iterator i = players.begin(); i != players.end(); ++i)
pm->getPlayer(*i)->postToBoard( Message::Ptr( new Message(*gameOver) ));
}
int turn = game->getTurnNumber() % 3;
if(turn == 0){
game->setTurnName("Production, Construction, Movement");
}else if(turn == 1){
game->setTurnName("Construction, Movement");
}else{
game->setTurnName("Movement");
}
}
示例3: doCombatTurn
//.........这里部分代码省略.........
combat = true;
uint32_t region = 0;
for(map<uint32_t, uint32_t>::iterator i = combatants.begin(); i != combatants.end() && combat; i++) {
IGObject::Ptr ob = objectmanager->getObject(i->first);
IGObject::Ptr sys = objectmanager->getObject(ob->getParent());
StarSystem* sysData = (StarSystem*) sys->getObjectBehaviour();
i->second = sysData->getRegion();
if(region == 0) {
region = sysData->getRegion();
} else if(region != sysData->getRegion()) {
combat = false;
}
}
}
//Cleanup and Set visibility
objects = objectmanager->getAllIds();
set<uint32_t> views;
for(itcurr = objects.begin(); itcurr != objects.end(); ++itcurr) {
IGObject::Ptr ob = objectmanager->getObject(*itcurr);
if(ob->getType() == obtm->getObjectTypeByName("Fleet") && !combat) {
Fleet* f = (Fleet*) ob->getObjectBehaviour();
f->toggleCombat();
f->setCombatant(false);
}
//Set visibility
views.insert(ob->getID());
}
std::set<uint32_t> players = playermanager->getAllIds();
std::set<uint32_t> vis = objectmanager->getAllIds();
//clear the removed objecs
objectmanager->clearRemovedObjects();
objects = objectmanager->getAllIds();
for(itcurr = objects.begin(); itcurr != objects.end(); ++itcurr) {
IGObject::Ptr ob = objectmanager->getObject(*itcurr);
if(ob->isAlive()) {
ob->getObjectBehaviour()->doOnceATurn();
}
objectmanager->doneWithObject(ob->getID());
}
for(std::set<uint32_t>::iterator itplayer = players.begin(); itplayer != players.end(); ++itplayer) {
Player::Ptr player = playermanager->getPlayer(*itplayer);
PlayerView::Ptr playerview = player->getPlayerView();
//Update visibility
playerview->addVisibleObjects(views);
for(std::set<uint32_t>::iterator itob = vis.begin(); itob != vis.end(); ++itob) {
ObjectView::Ptr obv = playerview->getObjectView(*itob);
if(obv == NULL) {
if(objectmanager->getObject(*itob)->isAlive()) {
playerview->addVisibleObject(*itob, true);
}
objectmanager->doneWithObject(*itob);
} else {
IGObject::Ptr ro = objectmanager->getObject(*itob);
uint64_t obmt = ro->getModTime();
objectmanager->doneWithObject(*itob);
if(obmt > obv->getModTime()) {
obv->setModTime(obmt);
playerview->updateObjectView(*itob);
}
}
示例4: doTurn
//.........这里部分代码省略.........
themap[playerid1].insert(ob->getID());
*itlist = themap;
placed = true;
objectmanager->doneWithObject(itbobj->getID());
break;
}
objectmanager->doneWithObject(itbobj->getID());
}
if(placed)
break;
}
if(placed)
break;
}
if(!placed){
std::map<uint32_t, std::set<uint32_t> > themap;
std::set<uint32_t> theset;
theset.insert(ob->getID());
themap[playerid1] = theset;
combats.push_back(themap);
}
objectmanager->doneWithObject(ob->getID());
}
for(std::list<std::map<uint32_t, std::set<uint32_t> > >::iterator itlist = combats.begin();
itlist != combats.end(); ++itlist){
std::map<uint32_t, std::set<uint32_t> > themap = *itlist;
if(themap.size() >= 2){
combatstrategy->doCombat(themap);
}
}
objectmanager->clearRemovedObjects();
// do other orders (nop, buildfleet, colonise)
for(itcurr = otherorders.begin(); itcurr != otherorders.end(); ++itcurr) {
IGObject::Ptr ob = objectmanager->getObject(*itcurr);
if(ob != NULL){
if(ob->getType() == planettype || ob->getType() == fleettype){
OrderQueueObjectParam* oqop = dynamic_cast<OrderQueueObjectParam*>(ob->getParameterByType(obpT_Order_Queue));
if(oqop != NULL){
OrderQueue::Ptr orderqueue = ordermanager->getOrderQueue(oqop->getQueueId());
if(orderqueue != NULL){
Order * currOrder = orderqueue->getFirstOrder();
if(currOrder != NULL){
if(currOrder->doOrder(ob)){
orderqueue->removeFirstOrder();
}else{
orderqueue->updateFirstOrder();
}
}
}
}
}
objectmanager->doneWithObject(ob->getID());
}
}
objectmanager->clearRemovedObjects();
// to once a turn (right at the end)
objects = objectmanager->getAllIds();
for(itcurr = objects.begin(); itcurr != objects.end(); ++itcurr) {
IGObject::Ptr ob = objectmanager->getObject(*itcurr);