void CCar::DriveForward() { Clutch(); if(0==CurrentTransmission()) Transmission(1); if(1==CurrentTransmission()||0==CurrentTransmission())Starter(); Drive(); }
void CCar::DriveBack() { Clutch(); Transmission(0); if(1==CurrentTransmission()||0==CurrentTransmission())Starter(); Drive(); }
void CCar::TransmissionDown() { if(0==CurrentTransmission())return; size_t transmission=CurrentTransmission()-1; transmission<1 ? transmission=1 : transmission; Transmission(transmission); }
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); }
void CCar::CircleSwitchTransmission() { if(0==CurrentTransmission())return; size_t transmission=1+CurrentTransmission(); transmission=transmission%m_gear_ratious.size(); 0==transmission ? transmission++ : transmission; Transmission(transmission); }
void CCar::ReleaseForward() { if(bkp) { Clutch(); Transmission(0); if(1==CurrentTransmission()||0==CurrentTransmission())Starter(); Drive(); } else { Unclutch(); NeutralDrive(); } fwp=false; }
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); }
/*----------------------------------------------------------------------------*/ 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); }
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); }
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); }
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); }