///////////////////////////////////////////////////////////////////////////// // 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; } }
bool TrafficNetwork::loadFromFile(const string fileName){ int nbBands; long currentNode,otherNode; string roadName; double roadLength; double roadSpeedLimit; int metric; json_t *root; json_error_t error; root = json_load_file(fileName.c_str(), 0, &error); if(!root){ std::cout<<std::endl<<"ERROR: while opening "<<fileName<<" at line "<<error.line<<" - "<<error.text<<std::endl; return false; } if(!json_is_object(root)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - expected root to be an object"<<std::endl; json_decref(root); return false; } json_t *_metric, *_roads, *_nodes; _metric = json_object_get(root,"metric"); if(!json_is_integer(_metric)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - 'metric' field not present or wrong type"<<std::endl; json_decref(root); return false; } metric = json_integer_value(_metric); _nodes = json_object_get(root,"nodes"); if(!json_is_array(_nodes)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - 'nodes' field not present or not an array"<<std::endl; json_decref(root); return false; } size_t n = json_array_size(_nodes); nbNodes = n; nodes = NodeVec(nbNodes); json_t *nodeId,*_node, *nodeType; for(size_t i = 0; i < n; i++){ _node = json_array_get(_nodes,i); if(!json_is_object(_node)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - expected node "<<i<<" to be an object"<<std::endl; json_decref(root); return false; } nodeId = json_object_get(_node,"id"); if(!json_is_integer(nodeId)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - 'id' field of node "<<i<<" not present or wrong type"<<std::endl; json_decref(root); return false; } nodeType = json_object_get(_node,"type"); if(json_is_integer(nodeType)){ nodes[i] = new Node(json_integer_value(nodeId),json_integer_value(nodeType)); }else{ nodes[i] = new Node(json_integer_value(nodeId)); } } _roads = json_object_get(root,"roads"); if(!json_is_array(_roads)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - 'roads' field not present or not an array"<<std::endl; json_decref(root); return false; } n = json_array_size(_roads); json_t *_roadName,*_roadSpeedLimit,*_roadNbBands,*_roadLength,*_road,*startId,*endId; for(size_t i = 0; i < n; i++){ _road = json_array_get(_roads,i); if(!json_is_object(_road)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - expected road "<<i<<" to be an object"<<std::endl; json_decref(root); return false; } _roadName = json_object_get(_road,"name"); if(!json_is_string(_roadName)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - 'name' field of road "<<i<<" not present or wrong type"<<std::endl; json_decref(root); return false; } roadName = json_string_value(_roadName); _roadSpeedLimit = json_object_get(_road,"speedLimit"); if(!json_is_integer(_roadSpeedLimit)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - 'speedLimit' field of road "<<i<<" not present or wrong type"<<std::endl; json_decref(root); return false; } roadSpeedLimit = formatSpeedLimit(json_integer_value(_roadSpeedLimit),metric); _roadLength = json_object_get(_road,"length"); if(!json_is_real(_roadLength)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - 'length' field of road "<<i<<" not present or wrong type"<<std::endl; json_decref(root); return false; } roadLength = formatLength(json_real_value(_roadLength),metric); _roadNbBands = json_object_get(_road,"nbBands"); if(!json_is_integer(_roadNbBands)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - 'nbBands' field of road "<<i<<" not present or wrong type"<<std::endl; json_decref(root); return false; } nbBands = json_integer_value(_roadNbBands); startId = json_object_get(_road,"startId"); if(!json_is_integer(startId)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - 'startId' field of road "<<i<<" not present or wrong type"<<std::endl; json_decref(root); return false; } currentNode = json_integer_value(startId); endId = json_object_get(_road,"endId"); if(!json_is_integer(endId)){ std::cout<<std::endl<<"ERROR: input file "<<fileName<<" has not the correct structure - 'endId' field of road "<<i<<" not present or wrong type"<<std::endl; json_decref(root); return false; } otherNode = json_integer_value(endId); addRoad(currentNode, otherNode, roadName, roadLength, roadSpeedLimit,nbBands); } //clean up json_array_clear(_nodes); json_object_clear(_road); json_array_clear(_roads); json_object_clear(root); json_decref(root); return true; }
GameTrack::GameTrack(GameTrackDesc* desc,GameGraphic* graphics, GameResourceManager* _manager,DRenderNode* parent) { manager=_manager; ground_image=NULL; sim=new R2DSim(); parent_node=parent; render_node=parent->createNode(); num_start_positions=0; num_cars=0; sim->set_query_func(surface_query,this); DResource *ground[4]; ground[0]=manager->getImg(desc->colors[0]); ground[1]=manager->getImg(desc->colors[1]); ground[2]=manager->getImg(desc->colors[2]); ground[3]=manager->getImg(desc->colors[3]); DResource *ground_a=manager->getImg(desc->alpha); initGround(manager->client->createTerrain(ground,ground_a),desc->size); size=desc->size; dvect size2=size/2; int quadtree_levels=0; float x=max(size.x,size.y); while(x>5) { x/=2; quadtree_levels++; } printf("Quadtree depth: %d\n",quadtree_levels); quadtree=new DQuadTree(-size2,size2,quadtree_levels,NULL); for(vector<GameRoadDesc>::iterator i=desc->roads.begin();i!=desc->roads.end();i++) { GameRoadDesc* d=&(*i); addRoad(manager->client,new GameRoad(d),manager->getImg(i->color)); } for(vector<GameTrackObject>::iterator i=desc->objects.begin();i!=desc->objects.end();i++) { GameTrackObject* o=&(*i); GameCarBody* body=manager->getBody(o->id); if(!body) { printf("Can't load object %s, skipping.\n",o->id.c_str()); continue; } float scale=o->size_scale.x; GameCar* c=new GameCar(body,graphics,manager,scale); addObject(c,o->is_static); } for(int i=0;i<4;i++) { grips[i]=desc->grips[i]; roughnesses[i]=desc->roughnesses[i]; } float b=0.5; float f=1; sim->add_static_line(cpv(size2.x,size2.y),cpv(size2.x,-size2.y),b,f); sim->add_static_line(cpv(size2.x,size2.y),cpv(-size2.x,size2.y),b,f); sim->add_static_line(cpv(-size2.x,-size2.y),cpv(-size2.x,size2.y),b,f); sim->add_static_line(cpv(-size2.x,-size2.y),cpv(size2.x,-size2.y),b,f); //TODO: multiple update points update_radius=100; update_rad2=dvect(update_radius,update_radius)/2; lifetime_skids=7000; runtime=0; resource_skid=manager->getImg("media/skid01.png"); //resource_skid=manager->getImg("media/car.png"); }
bool DirtyListVisit::add(Feature* F) { if (DeletePass) return false; if (F->isDeleted()) return false; // TODO Needed to add children of updated imported features. Sure there is no advert cases? //if (!F->isDirty()) return false; // Allow "Force Upload" of OSM objects //if (F->hasOSMId()) return false; if (Future.willBeErased(F)) return EraseFromHistory; for (int i=0; i<AlreadyAdded.size(); ++i) if (AlreadyAdded[i] == F) return EraseResponse[i]; bool x; if (Node* Pt = CAST_NODE(F)) { if (Pt->isInteresting()) { if (F->hasOSMId()) x = updatePoint(Pt); else x = addPoint(Pt); AlreadyAdded.push_back(F); EraseResponse.push_back(x); return x; } else return EraseFromHistory; } else if (Way* R = dynamic_cast<Way*>(F)) { for (int i=0; i<R->size(); ++i) if (!R->getNode(i)->isVirtual()) if (!(R->get(i)->hasOSMId()) && notYetAdded(R->get(i))) add(R->get(i)); if (F->hasOSMId()) x = updateRoad(R); else x = addRoad(R); AlreadyAdded.push_back(F); EraseResponse.push_back(x); return x; } else if (Relation* Rel = dynamic_cast<Relation*>(F)) { for (int i=0; i<Rel->size(); ++i) if (!(Rel->get(i)->hasOSMId()) && notYetAdded(Rel->get(i))) add(Rel->get(i)); if (F->hasOSMId()) x = updateRelation(Rel); else x = addRelation(Rel); AlreadyAdded.push_back(F); EraseResponse.push_back(x); return x; } return EraseFromHistory; }