Exemplo n.º 1
0
Arquivo: CCar.cpp Projeto: dlxgit/OOP
bool CCar::TurnOffEngine()
{
	if (IsEngineOn() == true && m_gear == 0 && m_speed == 0)
	{
		m_isEngineTurnedOn = false;
		return true;
	}
	return false;
}
Exemplo n.º 2
0
Arquivo: CCar.cpp Projeto: dlxgit/OOP
bool CCar::TurnOnEngine()
{
	if (IsEngineOn())
	{
		return false;
	}
	m_isEngineTurnedOn = true;
	return true;
}
Exemplo n.º 3
0
//-----------------------------------------------------------------------------
// 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 );
}
Exemplo n.º 4
0
Arquivo: CCar.cpp Projeto: dlxgit/OOP
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;
}
Exemplo n.º 5
0
Arquivo: CCar.cpp Projeto: dlxgit/OOP
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;
}
Exemplo n.º 6
0
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;
                }
            }

        }
    }

}