bool CCar::TurnOffEngine() { if (IsEngineOn() == true && m_gear == 0 && m_speed == 0) { m_isEngineTurnedOn = false; return true; } return false; }
bool CCar::TurnOnEngine() { if (IsEngineOn()) { return false; } m_isEngineTurnedOn = true; return true; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CPropVehicleDriveable::SetupMove( CBasePlayer *player, CUserCmd *ucmd, IMoveHelper *pHelper, CMoveData *move ) { // If the engine's not active, prevent driving if ( !IsEngineOn() ) return; // If the player's entering/exiting the vehicle, prevent movement if ( m_bEnterAnimOn || m_bExitAnimOn ) return; DriveVehicle( player, ucmd ); }
bool CCar::SetGear(int gear) { int currentGear = GetGear(); if (gear == currentGear) { return true; } if (!IsEngineOn()) { std::cout << "Couldn't change gear(Engine is off)." << std::endl; return false; } if (currentGear == -1) { if (gear == 1 && GetSpeed() != 0) { std::cout << "Couldn't change gear(from -1 to 1 on speed)." << std::endl; return false; } else if (gear > 1) { std::cout << "Couldn't change gear(from -1 to > 1)." << std::endl; return false; } } if (gear == -1 && ((currentGear == 0 || currentGear == 1) && GetSpeed() != 0)) { std::cout << "Couldn't change gear(from -1 to 1 on speed)." << std::endl; return false; } int currentSpeed = GetSpeed(); std::array<int,2> speedRange = GetSpeedRange(gear); if (currentSpeed >= speedRange[0] && currentSpeed <= speedRange[1]) { m_gear = gear; return true; } std::cout << "Couldn't change gear(Incorrect speed interval)." << std::endl; return false; }
bool CCar::SetSpeed(int speed) { if (!IsEngineOn()) { std::cout << "Couldn't change speed(Engine is off)." << std::endl; return false; } if (GetGear() == 0 && speed > GetSpeed()) { std::cout << "Couldn't change speed(can't increase speed on 0-gear)." << std::endl; return false; } std::array<int, 2> speedRange = GetSpeedRange(GetGear()); if (speed >= speedRange[0] && speed <= speedRange[1]) { m_speed = speed; return true; } std::cout << "Couldn't change speed(Your gear does not support this speed)." << std::endl; return false; }
void CFloppyController::Periodic() { if (!IsEngineOn()) return; // Вращаем дискеты только если включен мотор // Вращаем дискеты во всех драйвах сразу for (int drive = 0; drive < 4; drive++) { m_drivedata[drive].dataptr += 2; if (m_drivedata[drive].dataptr >= FLOPPY_RAWTRACKSIZE) m_drivedata[drive].dataptr = 0; } #if !defined(PRODUCT) if (m_pDrive != NULL && m_pDrive->dataptr == 0) DebugLogFormat(_T("Floppy Index\n")); #endif // Далее обрабатываем чтение/запись на текущем драйве if (m_pDrive == NULL) return; if (!IsAttached(m_drive)) return; if (!m_writing) // Read mode { m_datareg = (m_pDrive->data[m_pDrive->dataptr] << 8) | m_pDrive->data[m_pDrive->dataptr + 1]; if (m_status & FLOPPY_STATUS_MOREDATA) { if (m_crccalculus) // Stop CRC calculation { m_crccalculus = FALSE; //TODO: Compare calculated CRC to m_datareg m_status |= FLOPPY_STATUS_CHECKSUMOK; } } else { if (m_searchsync) // Search for marker { if (m_pDrive->marker[m_pDrive->dataptr / 2]) // Marker found { m_status |= FLOPPY_STATUS_MOREDATA; m_searchsync = FALSE; #if !defined(PRODUCT) DebugLogFormat(_T("Floppy Marker Found\n")); #endif } } else // Just read m_status |= FLOPPY_STATUS_MOREDATA; } } else // Write mode { if (m_shiftflag) { m_pDrive->data[m_pDrive->dataptr] = LOBYTE(m_shiftreg); m_pDrive->data[m_pDrive->dataptr + 1] = HIBYTE(m_shiftreg); m_shiftflag = FALSE; m_trackchanged = TRUE; if (m_shiftmarker) { //#if !defined(PRODUCT) // DebugLogFormat(_T("Floppy WRITING %06o MARKER\r\n"), m_shiftreg); //DEBUG //#endif m_pDrive->marker[m_pDrive->dataptr / 2] = TRUE; m_shiftmarker = FALSE; m_crccalculus = TRUE; // Start CRC calculation } else { //#if !defined(PRODUCT) // DebugLogFormat(_T("Floppy WRITING %06o\r\n"), m_shiftreg); //DEBUG //#endif m_pDrive->marker[m_pDrive->dataptr / 2] = FALSE; } if (m_writeflag) { m_shiftreg = m_writereg; m_shiftflag = m_writeflag; m_writeflag = FALSE; m_shiftmarker = m_writemarker; m_writemarker = FALSE; m_status |= FLOPPY_STATUS_MOREDATA; } else { if (m_crccalculus) // Stop CRC calclation { m_shiftreg = 0x4444; //STUB m_shiftflag = TRUE; m_shiftmarker = FALSE; m_crccalculus = FALSE; m_status |= FLOPPY_STATUS_CHECKSUMOK; } } } } }