Esempio n. 1
0
void moveBulldozer(int dist){
	
	for(int n=0; n<dist;n++){
		//	d.game->sim->getRailPen()->move(1, d.game->sim);
		Point p = d.game->sim.railPen.getPos();
		if(d.game->sim.railPen.getMode() == RailPen::PAINTING){
			Rail * newRail = d.game->sim.railPen.makeNewRail(d.game->sim.railMap.getRailAt(p.row, p.col));
			d.game->sim.railMap.setRail(p.row, p.col, newRail);

			ForkRail *rf = dynamic_cast<ForkRail *>(newRail);
			if(rf){
				d.game->sim.addFork(rf);
			}

			Point lastPoint = d.game->sim.railPen.getPos();
			Dir lastDir = d.game->sim.railPen.getLastDir();
			Dir backDir = -lastDir; 
			lastPoint.move(backDir);
			Rail * lastRail = d.game->sim.railMap.getRailAt(lastPoint.row, lastPoint.col);
			if(lastRail){
				newRail->linkRailAt(backDir, lastRail);
			}
		}
		d.game->sim.railPen.forward();
	}
}
Esempio n. 2
0
Rail * RailPen::makeNewRail(Rail * rail){
	DirEnv env;
	if(rail){
		env = rail->getEnv();
	}
	env.addPath(-lastDir, dir);
	Rail * newRail = env.makeNewRail();
	if(rail){
		for(int n(Dir::E) ;n<(Dir::NUM_DIRS); n++){
			Dir dir (n);
			Rail * linked = rail->getLinkedRailAt(dir);
			if(linked){
				newRail->linkRailAt(dir, linked);
			}
		}
	}
	return newRail;	
}
Esempio n. 3
0
// ojo, no pinta cuando distance es mayor que 1. Testear esto!!!!!!!!!!!!!!
bool RailPen::move(int distance, Sim * sim){
	Point p = getPos();
	if(getMode() == PAINTING){
		if(distance>0){
			for(int n= 0; n<distance;n++){
				Rail * newRail = makeNewRail(sim->railMap.getRailAt(p.row, p.col));
				sim->railMap.setRail(p.row, p.col, newRail);

				ForkRail *rf = dynamic_cast<ForkRail *>(newRail);
				if(rf){
					sim->addFork(rf);
				}

				Point lastPoint = getPos();
				Dir lastDir = getLastDir();
				Dir backDir = -lastDir; 
				lastPoint.move(backDir);
				Rail * lastRail = sim->railMap.getRailAt(lastPoint.row, lastPoint.col);
				if(lastRail){
					newRail->linkRailAt(backDir, lastRail);
				}
			 	forward();	
			}
		}else{
			for(int n=0; n>distance;n--){
				Point p = getPos();
				sim->railMap.setRail(p.row, p.col, 0);
				backwards();
			}
		}
	}else{
		pos.move(dir, distance);
		lastDir=dir;
	}
	return true;
}