Example #1
0
void CCar::DriveForward()
{
	Clutch();
	if(0==CurrentTransmission()) Transmission(1);
	if(1==CurrentTransmission()||0==CurrentTransmission())Starter();
	Drive();
}
Example #2
0
void CCar::DriveBack()
{
	Clutch();
	Transmission(0);
	if(1==CurrentTransmission()||0==CurrentTransmission())Starter();
	Drive();
}
Example #3
0
void CCar::TransmissionDown()
{
	if(0==CurrentTransmission())return;
	size_t transmission=CurrentTransmission()-1;
	transmission<1 ? transmission=1 : transmission;
	Transmission(transmission);

}
Example #4
0
void CCar::TransmissionUp()
{
	if(0==CurrentTransmission())return;
	size_t transmission=1+CurrentTransmission();
	size_t max_transmition_num=m_gear_ratious.size()-1;
	transmission>max_transmition_num ? transmission=max_transmition_num :transmission;
	Transmission(transmission);

}
Example #5
0
void CCar::CircleSwitchTransmission()
{
	if(0==CurrentTransmission())return;
	size_t transmission=1+CurrentTransmission();
	transmission=transmission%m_gear_ratious.size();
	0==transmission ? transmission++ : transmission;
	Transmission(transmission);
	
}
Example #6
0
void CCar::ReleaseForward()
{
	if(bkp)
	{
		Clutch();
		Transmission(0);
		if(1==CurrentTransmission()||0==CurrentTransmission())Starter();
		Drive();
	}
	else
	{
		Unclutch();
		NeutralDrive();
	}

	fwp=false;
}
Example #7
0
void CCar::ReleaseBack()
{
	if(b_breaks)
	{
		StopBreaking();
	}
	if(fwp)
	{
		Clutch();
		if(0==CurrentTransmission()) Transmission(1);
		if(1==CurrentTransmission()||0==CurrentTransmission()) Starter();
		Drive();
	}
	else
	{
		Unclutch();
		NeutralDrive();
	}
	bkp=false;
}
Transmission generateTransmission()
{
	int numGears(0);
	double valueHold(0);
	bool hasEtas;
	std::string transName;
	std::vector<double> gearRatios, gearEtas;

	std::cout << "Enter number of gears: ";
	numGears = util::getSanitizedInput<int>(1,LOWER_BOUND);
	gearRatios.resize(numGears);
	gearEtas.assign(numGears, 1);

	hasEtas = util::yesNo("Does this gearbox have efficiencies?");

	std::cout << "Enter gearbox name: ";
	transName = util::getSanitizedInput<std::string>();

	//Prompts user to enter values for the transmission
	for (int i = 0; i < numGears; ++i)
	{
		std::cout << "Enter gear ratio for gear " << (i + 1) << ": ";

		if (i == 0)
			valueHold = util::getSanitizedInput<double>();
		else
			valueHold = util::getSanitizedInput<double>(0, gearRatios[i - 1]);

		gearRatios[i] = valueHold;

		if (hasEtas)
		{
			std::cout << "Enter efficiency for gear " << (i + 1) << ": ";
			valueHold = util::getSanitizedInput<double>(0,1);
			gearEtas[i] = valueHold;
		}
	}

	return Transmission(gearRatios, gearEtas, transName);
}
Example #9
0
/*----------------------------------------------------------------------------*/
void BlueAuto2(void)
{
	///4 PRELOADS 3 PILE
	/// STARTING TYLE IS FURTHERST TYLE
	int YouAreGoodToCount = 0;
	Transmission(1);
	BallCounter = 4;
	ShootingMode = 1;
	IntakeShoot(6000);//SHOOT 4 PRELOADS // * FAILSAFE POINT
	ShootingMode = 4;
	DistanceCalculatorTurn(1);
	while(DistanceCalculatorTurn(0) < 15) //*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		Move(-1, 50);
	}
	Break2(100,-10);
	delay(200);
	stage = 1;
	SetRPM(2200);
	DistanceCalculator(1);
	while(DistanceCalculator(0) < 12) //*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		Move(2, 127);
	}
	clearTimer(T3);
	while(SensorValue[IR1] == 1 ) //*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		IntakeOnAuto();
		Move(2, 20);
		if(time1[T3] > 6000)
		{
			FailSafeEngaged = 1;
			break;
		}
	}
	if(FailSafeEngaged == 1)Blue1Fail1();/////////////////////RED1FAIL1
		IntakePower(0);
	Break(100,10);
	while(MoveDist(-1, 20,0) == 1) // DO WE NEED FAILSAFE HERE?
	{
		IntakeOnAuto();
	}
	while(MoveDist(35, 40,3000) == 1)//17 // DO WE NEED FAILSAFE HERE?
	{
		IntakeOnAuto();
		if(FailSafeEngaged == 1)Blue1FailInfinite();/////////////////////RED1FAIL1
	}
	IntakePower(0);
	while(LineStatus() == 0)
	{
		Move(-2, 100);
	}
	Break(100,-10);
	while(MoveDist(3, 30,0) == 1);
	delay(200);
	SetRPM(2200);
	while(LineStatus() == 0) //TURN UNTIL YOU SEE THE LINE
	{
		Move(1, 20);
	}
	DistanceCalculator(1);
	while(LineStatus() == 1) //*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		FollowLine(40);
		if(LineStatusOffset() == 1)
		{
			DistanceCalculator(1);
			YouAreGoodToCount = 1;
		}
		if(DistanceCalculator(0) > 18 && YouAreGoodToCount == 1)
		{
			DistanceCalculator(1);
			break;

		}
	}
	if(DistanceCalculator(0) < 50 && YouAreGoodToCount == 0)Blue1FailInfinite();//**FAIL GOOD
		Break(100,20);
	delay(500);
	IntakePower(127);///SHOT FIRST PILE
	delay(3000);
	ShootingMode = 3;
	StopDrive();
	stage = 1;
	DistanceCalculator(1);
	while(SensorValue[IR1] == 1 && LineStatus() == 1) //*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		FollowLine(35);
		IntakeOnAuto();
	}
	Break(100,20);
	StopDrive();
	clearTimer(T3);
	while(stage == 1) // WHAT IF TWO BALLS ARE STUCK FOREVER? TIMER?
	{
		if(time1[T3] > 10000)
		{
			break;
		}
		IntakeOnAuto();
	}
	clearTimer(T3);
	while(LineStatus() == 1 && DistanceCalculator(0) < 37 )//*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		FollowLine(35);
		IntakeOnAuto();
		if(time1[T3] > 10000)
		{
			break;
		}
	}
	MoveTime(500,127);
	StopDrive();
	delay(500);
	IntakePower(127);///SHOT BAR SHOTS
	delay(3500);
	IntakePower(0);
	SetRPM(2200);
	stage = 1;
	//////////////////////////////////////////////////////SHOT 8 COMPLETE
	DistanceCalculator(1);
	while(DistanceCalculator(0) < 50) //*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		Move(-2, 127);
	}
	Break(200,-15);
	delay(200);
	DistanceCalculatorTurn(1);
	clearTimer(T3);
	while(DistanceCalculatorTurn(0) < 62) //*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		Move(-1, 100);
		if(time1[T3] > 5000)
		{
			FailSafeEngaged = 1;
			break;
		}
	}
	if(FailSafeEngaged == 1)Blue1FailInfinite();
	Break2(100,10);
	delay(300);
	DistanceCalculator(1);
	clearTimer(T3);
	while(DistanceCalculator(0) < 24) //*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		Move(2, 127);
		if(time1[T3] > 5000)
		{
			FailSafeEngaged = 1;
			break;
		}
	}
	if(FailSafeEngaged == 1)Blue1FailInfinite();
	clearTimer(T3);
	while(SensorValue[IR1] == 1 )//PILE BY THE WALL
	{
		IntakeOnAuto();
		Move(2, 20);
		if(time1[T3] > 5000)
		{
			FailSafeEngaged = 1;
			break;
		}
	}
	if(FailSafeEngaged == 1)Blue1FailInfinite();
	IntakePower(0);
	Break(100,10);
	while(MoveDist(-1, 20,0) == 1) // DO WE NEED FAILSAFE HERE?
	{
		IntakeOnAuto();
	}
	while(MoveDist(19, 35,2000) == 1) // DO WE NEED FAILSAFE HERE?
	{
		IntakeOnAuto();
	}
	IntakePower(0);
	///////////////////////////////////////////////////////////////////////////////////PICK UP 3RD
	SetRPM(2200);
	clearTimer(T3);
	while(LineStatus() == 0 )
	{
		Move(-2, 127);
		if(time1[T3] > 5000)
		{
			FailSafeEngaged = 1;
			break;
		}
	}
	if(FailSafeEngaged == 1)Blue1FailInfinite(); //**FAIL GOOD
		Break(200,-15);
	while(MoveDist(3, 40,0) == 1);
	clearTimer(T3);
	while(LineStatus() == 0) // TURN UNTILL IT SEES LINE (WHAT IF WE NEVER SEE LINE)
	{
		Move(1,22);
		if(time1[T3] > 5000)
		{
			FailSafeEngaged = 1;
			break;
		}
	}
	if(FailSafeEngaged == 1)Blue1FailInfinite(); //**FAIL GOOD
		DistanceCalculator(1);
	clearTimer(T3);
	while(LineStatus() == 1 && DistanceCalculator(0) < 12)//*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		FollowLine(35);
		if(time1[T3] > 5000)
		{
			FailSafeEngaged = 1;
			break;
		}
	}
	if(FailSafeEngaged == 1)Blue1FailInfinite(); //**FAIL GOOD
		Break(100,20);
	StopDrive();
	delay(500);
	IntakePower(127);///SHOT LAST BALLS BAR SHOTS
	delay(3000);
	TurnDegree(-45,100,2000);
	while(MoveDist(24, 40,0) == 1);
	ShootingMode = 4;
	KillALL();
	while(1);
}
Example #10
0
int UWFEditFile(char *nomfen,char *nomfichier)
{
FILE *input;
TIdFile *pIdent;
int n;
long taille;

// on commence par essayer d'ouvrir le fichier d'entrée
	
	input = fopen(nomfichier,"rb");
	if (input == NULL) {
		Transmission(ERR_OUV);
		return ERR_OUV;
		}


// on verifie que toutes les allocations sont correctes
	
	if ((pIdent=Init_ID(nomfen))==NULL) {
		Transmission(ERR_ALLOC);
		return ERR_ALLOC;
		}


// ouverture du BIT_FILE de sortie
	
	if ((pIdent->fichier=OpenOutputBitFile(pIdent->nomFichierSortie))
			== NULL) {
				Transmission(ERR_ECRIT);
				return ERR_ECRIT;
				}


// on ecrit le nom de la fenetre en tete du premier bloc
	
	EcrireNomFen(nomfen,pIdent->fichier);


// on compresse le fichier et on verifie que tout ce passe bien
// il peut y avoir deux types d'erreur pendant la compression :
//	- probleme d'allocation pour le dictionnaire
//	- probleme d'écriture sur le disque du fichier compressé
	
	taille=file_size(input);
	n=Compresser(pIdent,input,taille);
	

// on referme le fichier de données initiales
	
	fclose(input);


// on referme le fichier temporaire
	
	CloseOutputBitFile(pIdent->fichier);
	pIdent->fichier==NULL;
	
	
// on ouvre le fichier temporaire en lecture
	
	if ((pIdent->Lecture=fopen(pIdent->nomFichierSortie,"rb"))==NULL)
		return ERR_OUV;

	
// on vérifie que la compression c'est bien passée

	if (n==ERR_ALLOC || n==ERR_ECRIT) {
		Transmission(ERR_COMP);
		return ERR_COMP;
		}


// on ajoute le nouveau fichier en tete de file
	
	InsererTete(pIdent);

	
// on commence la transmission
	
	return Transmission(0);

}
Example #11
0
void RedAuto1(void)
{
	int Launch = 0;
	Transmission(1);
	BallCounter = 4;
	ShootingMode = 1;
	IntakeShoot(6000);//SHOOT 4 PRELOADS // * FAILSAFE POINT
	ShootingMode = 4;
	stage = 1;
	TurnDegree(-10,40,0); // DO WE NEED FAILSAFE HERE?
	delay(200);
	Move(2,127);
	delay(500);
	clearTimer(T3);
	while(SensorValue[IR1] == 1) //*FAILSAFE ?WHAT IF WE DONT SEE ANY BALLS
	{
		IntakeOnAuto();
		Move(2,20);
		if(time1[T3] > 8000)
		{
			FailSafeEngaged = 1;
			break;
		}
	}
	if(FailSafeEngaged == 1)Red1Fail1();/////////////////////RED1FAIL1
		IntakePower(0);
	Break(100,10);
	while(MoveDist(-1, 20,0) == 1) // DO WE NEED FAILSAFE HERE?
	{
		IntakeOnAuto();
	}
	while(MoveDist(40, 50,0) == 1) //*FAILSAFE ?WHAT IF WE ARE BLOCKED (ROBOT FINISHED ABOUT MID COURT)
	{
		if(FailSafeEngaged == 1)Red1Fail1();/////////////////////RED1FAIL1
			IntakeOnAuto();
	}
	IntakePower(0);
	TurnDegree(-45,127,2000); //*FAILSAFE ?WHAT IF WE ARE BLOCKED
	if(FailSafeEngaged == 1)Red1FailInfinite();
	delay(200);
	SetRPM(2250);//LAUNCHER ON (NEXT SHOOTING RPM)
	clearTimer(T3);
	while(LineStatus() == 0) //*FAILSAFE AT WHAT POINT DO WE STOP MOVING? WHAT IF WE ARE OF COURSE?
	{
		Move(-2,30);
		if(time1[T3] > 3500)
		{
			FailSafeEngaged = 1;
			break;
		}
	}
	if(FailSafeEngaged == 1)Red1FailInfinite();
	Break(100,-20);
	delay(200);
	while(MoveDist(7, 30,0) == 1){} // DO WE NEED FAILSAFE HERE?
	clearTimer(T3);
	while(LineStatus() == 0) // TURN UNTILL IT SEES LINE (WHAT IF WE NEVER SEE LINE)
	{
		Move(1,22);
		if(time1[T3] > 3000)
		{
			FailSafeEngaged = 1;
			break;
		}
	}
	if(FailSafeEngaged == 1)Red1FailInfinite();
	while(LineStatus() == 1 && LineStatusOffset() == 0) //*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		FollowLine(40);
		if(LineStatus() == 1 && LineStatusOffset() == 1) Launch = 1;//WE REACHED THE CROSS(MIDDLE OF FIELD SET FLAG
	}
	if(LineStatus() == 1 && LineStatusOffset() == 1) Launch = 1;
	Break(100,20);
	StopDrive();
	delay(300);
	if(Launch) //IF LAUNCH FLAG WAS SATISFIED EARLIER THEN WE CAN LAUNCH BALLS
	{
		IntakePower(127); // SHOOT MID COURT
		delay(3000);
	}
	stage = 1;
	ShootingMode = 3;
	DistanceCalculator(1);
	while(SensorValue[IR1] == 1 && LineStatus() == 1 && DistanceCalculator(0) < 55) //*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		FollowLine(35);
		IntakeOnAuto();
	}
	Break(100,20);
	StopDrive();
	while(stage == 1) // WHAT IF TWO BALLS ARE STUCK FOREVER? TIMER?
	{
		IntakeOnAuto();
	}
	while(LineStatus() == 1 && DistanceCalculator(0) < 55)//*FAILSE WHAT IF WE GET OFF THE LINE ( WHAT IF ROBOT BLOCKS PATH AND WE ARE STILL ON THE LINE)
	{
		FollowLine(35);
		IntakeOnAuto();
	}
	MoveTime(300,127);
	StopDrive();
	IntakePower(127);///SHOT LAST BALLS BAR SHOTS
	delay(4000);
	stage = 1;
	///////////
	KillALL();
	while(1);
}
Example #12
0
void CCar::Init()
{

	CPHCollisionDamageReceiver::Init();

	//get reference wheel radius
	IKinematics* pKinematics=smart_cast<IKinematics*>(Visual());
	CInifile* ini = pKinematics->LL_UserData();
	R_ASSERT2(ini,"Car has no description !!! See ActorEditor Object - UserData");
	///SWheel& ref_wheel=m_wheels_map.find(pKinematics->LL_BoneID(ini->r_string("car_definition","reference_wheel")))->second;

	if(ini->section_exist("air_resistance"))
	{
		PPhysicsShell()->SetAirResistance(default_k_l*ini->r_float("air_resistance","linear_factor"),default_k_w*ini->r_float("air_resistance","angular_factor"));
	}
	if(ini->line_exist("car_definition","steer"))
	{
		
		
		m_bone_steer=pKinematics->LL_BoneID(ini->r_string("car_definition","steer"));
		VERIFY2(fsimilar(DET(pKinematics->LL_GetTransform(m_bone_steer)),1.f,EPS_L),"BBADD MTX");
		pKinematics->LL_GetBoneInstance(m_bone_steer).set_callback(bctPhysics,cb_Steer,this);
	}
	m_steer_angle=0.f;
	//ref_wheel.Init();
	m_ref_radius=ini->r_float("car_definition","reference_radius");//ref_wheel.radius;
	b_exploded						=false;
	b_engine_on						=false;
	b_clutch						=false;
	b_starting						=false;
	b_stalling						=false;
	b_transmission_switching		=false;
	m_root_transform.set(bone_map.find(pKinematics->LL_GetBoneRoot())->second.element->mXFORM);
	m_current_transmission_num=0;
	m_pPhysicsShell->set_DynamicScales(1.f,1.f);
	CDamagableItem::Init(GetfHealth(),3);
	float l_time_to_explosion=READ_IF_EXISTS(ini,r_float,"car_definition","time_to_explosion",120.f);
	CDelayedActionFuse::Initialize(l_time_to_explosion,CDamagableItem::DamageLevelToHealth(2));
	{
		xr_map<u16,SWheel>::iterator i,e;
		i=m_wheels_map.begin();
		e=m_wheels_map.end();
		for(;i!=e;++i)
		{
			i->second.Init();
			i->second.CDamagableHealthItem::Init(100.f,2);
		}
	}

	{
		xr_vector<SWheelDrive>::iterator i,e;
		i=m_driving_wheels.begin();
		e=m_driving_wheels.end();
		for(;i!=e;++i)
			i->Init();
	}

	{
		xr_vector<SWheelBreak>::iterator i,e;
		i=m_breaking_wheels.begin();
		e=m_breaking_wheels.end();
		for(;i!=e;++i)
			i->Init();
	}

	{
		xr_vector<SWheelSteer>::iterator i,e;
		i=m_steering_wheels.begin();
		e=m_steering_wheels.end();
		for(;i!=e;++i)
			i->Init();
	}

	{
		xr_vector<SExhaust>::iterator i,e;
		i=m_exhausts.begin();
		e=m_exhausts.end();
		for(;i!=e;++i)
			i->Init();
	}

	{
		xr_map<u16,SDoor>::iterator i,e;
		i=m_doors.begin();
		e=m_doors.end();
		for(;i!=e;++i)
		{
			i->second.Init();
			i->second.CDamagableHealthItem::Init(100,1);
		}
			
	}

	if(ini->section_exist("damage_items"))
	{
		CInifile::Sect& data		= ini->r_section("damage_items");
		for (CInifile::SectCIt		I=data.Data.begin(); I!=data.Data.end(); I++){
			const CInifile::Item& item	= *I;
			u16 index				= pKinematics->LL_BoneID(*item.first); 
			R_ASSERT3(index != BI_NONE, "Wrong bone name", *item.first);
			xr_map   <u16,SWheel>::iterator i=m_wheels_map.find(index);
			
			if(i!=m_wheels_map.end())
					i->second.CDamagableHealthItem::Init(float(atof(*item.second)),2);
			else 
			{
				xr_map   <u16,SDoor>::iterator i=m_doors.find(index);
				R_ASSERT3(i!=m_doors.end(),"only wheel and doors bones allowed for damage defs",*item.first);
				i->second.CDamagableHealthItem::Init(float(atof(*item.second)),1);
			}

		}
	}
	

	if(ini->section_exist("immunities"))
	{
		LoadImmunities("immunities",ini);
	}

	CDamageManager::reload("car_definition","damage",ini);
	
	HandBreak();
	Transmission(1);

}