示例#1
0
/////////////////////////////////////////////////////////////////////////////
// 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;
	}
}
示例#2
0
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;
}
示例#3
0
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");
}
示例#4
0
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;
}