Exemplo n.º 1
0
  bool AbstractRoutingProfile::ParametrizeForCar(const osmscout::TypeConfig& typeConfig,
                                                 const std::map<std::string,double>& speedMap,
                                                 double maxSpeed)
  {
    bool everythingResolved=true;

    speeds.clear();

    SetVehicle(vehicleCar);
    SetVehicleMaxSpeed(maxSpeed);

    for (const auto &type : typeConfig.GetTypes()) {
      if (!type->GetIgnore() &&
          type->CanRouteCar()) {
        std::map<std::string,double>::const_iterator speed=speedMap.find(type->GetName());

        if (speed==speedMap.end()) {
          log.Error() << "No speed for type '" << type->GetName() << "' defined!";
          everythingResolved=false;

          continue;
        }

        AddType(type,speed->second);
      }
    }

    return everythingResolved;
  }
Exemplo n.º 2
0
void CNetworkPlayer::RemoveFromVehicle( CNetworkVehicle * pVehicle )
{
	DEBUG_TRACE("CNetworkPlayer::RemoveFromVehicle");

	// Is the player and vehicle valid?
	if( m_pPlayerPed && pVehicle && IsSpawned() )
	{
		// Remove the player from the vehicle
		m_pPlayerPed->GetInOutVehicle( pVehicle->GetVehicle()->GetVehicle(), m_seat, false, true );

		// Handle with the vehicle
		pVehicle->HandlePlayerExit ( this, m_seat );

		// Reset
		SetVehicle ( NULL );
		SetSeat ( INVALID_ENTITY_ID );
		m_playerState = ePlayerState::PLAYERSTATE_ONFOOT;
	}

	// Is the player exiting a vehicle?
	if( m_VehicleExit.m_bIsExiting )
	{
		// Reset
		m_VehicleExit.m_bIsExiting = false;
		m_VehicleExit.m_ulExitStartTime = 0;
		m_VehicleExit.m_pExitAICommand = NULL;
	}
}
Exemplo n.º 3
0
void CLocalPlayer::HandleSpawn( bool bRespawn )
{
	// Are we respawning and not dead?
	if( bRespawn && !IsDead() )
		return;

	// Have we already just spawned?
	if( (SharedUtility::GetTime() - m_ulSpawnTime) < 500 )
		return;

	// Set the spawn time
	m_ulSpawnTime = SharedUtility::GetTime();

	// Reset the death time
	m_ulDeathTime = 0;

	// Set the state
	SetState( ePlayerState::PLAYERSTATE_ONFOOT );

	// Mark as not dead
	SetDead( false );

	// Mark as spawned
	SetSpawned( true );

	// Are we in a vehicle?
	if( IsInVehicle() )
	{
		// Handle this enter with the network vehicle
		m_pVehicle->HandlePlayerExit( this, m_seat, false );

		// Reset the vehicle
		SetVehicle( NULL );

		// Reset the seat
		SetSeat( INVALID_ENTITY_ID );
	}

	// Reset the player position and rotation
	Teleport ( CVector3() );
	SetRotation ( CVector3() );

	// Send RPC to server
	pCore->GetNetworkModule()->Call( RPC_PLAYER_SPAWN, NULL, HIGH_PRIORITY, RELIABLE, true );

	// Restore the camera (TODO: Use real game function to reset camera behind player!)
	pCore->GetCamera()->LockControl ( false );
	LockControls ( false );

	// Restore the camera control
	pCore->GetCamera()->LockControl ( bOldCameraState );

	// Restore the control state
	LockControls ( bOldCTRLState );
}
Exemplo n.º 4
0
  void AbstractRoutingProfile::ParametrizeForFoot(const TypeConfig& typeConfig,
                                                  double maxSpeed)
  {
    speeds.clear();

    SetVehicle(vehicleFoot);
    SetVehicleMaxSpeed(maxSpeed);

    for (const auto &type : typeConfig.GetTypes()) {
      if (!type->GetIgnore() &&
          type->CanRouteFoot()) {
        AddType(type,maxSpeed);
      }
    }
  }
Exemplo n.º 5
0
void CNetworkPlayer::PutInVehicle( CNetworkVehicle * pVehicle, EntityId seatId )
{
	DEBUG_TRACE("CNetworkPlayer::PutInVehicle");

	// Is the player spawned and the vehicle valid?
	if( m_pPlayerPed && pVehicle && IsSpawned() && pVehicle->IsSpawned() )
	{
		bool bOldControlState;

		// Is this the localplayer?
		if ( IsLocalPlayer() )
		{
			// Get the old control state
			bOldControlState = ((CLocalPlayer *)this)->AreControlsLocked();

			// Lock the player controls
			((CLocalPlayer *)this)->LockControls( true );
		}

		// Does the target vehicle already have a driver?
		if ( pVehicle->GetDriver() )
		{
			// Todo: some checks to check the last sync time from the driver. If he's timed out of not even connected anymore, reset the driver and put this player in the vehicle
			CLogFile::Printf ( "WARNING: Got tasked to put a player (%d) in vehicle (%d), but there's already a driver (%d) in that vehicle!", m_playerId, pVehicle->GetId(), pVehicle->GetDriver()->GetId() );
			CLogFile::Printf ( "Internal driver ped pointer: 0x%p, Internal driver ped vehicle pointer: 0x%p", pVehicle->GetDriver()->GetPlayerPed()->GetPed(), pVehicle->GetDriver()->GetPlayerPed()->GetPed()->m_pCurrentVehicle );

			// Is the driver still in the vehicle?
			if ( pVehicle->GetDriver()->InternalIsInVehicle ( pVehicle->GetVehicle() ) )
				return;

			// Clean the network vehicle data
			pVehicle->HandlePlayerExit ( pVehicle->GetDriver (), 0 );

			CLogFile::Printf ( "We still have a driver set, but he's no longer inside the vehicle. Cleaned network vehicle driver pointer and continuing code.." );
		}

		// Terminate any sync objects if this is not the localplayer
		if ( !IsLocalPlayer() )
			TerminateSyncObjects ();

		// Put the player in the vehicle
		m_pPlayerPed->GetInOutVehicle( pVehicle->GetVehicle()->GetVehicle(), seatId, true, true );

		// Handle with the vehicle
		pVehicle->HandlePlayerEnter ( this, (seatId - 1) );

		// Set the vehicle
		SetVehicle( pVehicle );

		// Set the seat
		SetSeat( seatId );

		// Reset the target data
		SetEnteringVehicle( NULL, INVALID_ENTITY_ID );

		// Set the player state
		m_playerState = (seatId == 1 ? ePlayerState::PLAYERSTATE_DRIVER : ePlayerState::PLAYERSTATE_PASSENGER);

		// Is this the localplayer?
		if ( IsLocalPlayer() )
		{
			// Lock the player controls
			((CLocalPlayer *)this)->LockControls( bOldControlState );
		}
	}
}
Exemplo n.º 6
0
void CNetworkPlayer::ExitVehicle( bool bExit, bool bQuickly )
{
	DEBUG_TRACE("CNetworkPlayer::ExitVehicle");

	// Are we not in a vehicle?
	if( !m_pVehicle )
		return;

	// Are we already exiting?
	if ( IsExitingVehicle() )
	{
		CLogFile::Printf ( "WARNING: This player (%s) is already exiting a vehicle, skipping!", GetNick().Get () );
		return;
	}

	// Is the player ped active?
	if( m_pPlayerPed && IsSpawned() )
	{
		// Should we remove the player from the vehicle?
		if( bExit )
		{
			// Are we in a vehicle?
			if( InternalIsInVehicle() )
			{
#ifdef DEBUG
				CLogFile::Printf( "CPlayer::ExitVehicle - Quickly? %s", (bQuickly ? "true" : "false") );
#endif

				// Reset the target data
				SetEnteringVehicle( NULL, INVALID_ENTITY_ID );
				m_VehicleEnter.m_bIsEntering = false;

				// Remove from vehicle
				C_SyncObject * pSyncObject = m_pPlayerPed->GetInOutVehicle( m_pPlayerPed->GetCurrentVehicle(), m_seat, bQuickly );

#ifdef DEBUG
				CLogFile::Printf ( "Exit vehicle sync object: 0x%p", pSyncObject );
#endif

				// Are we not quickly exiting?
				if( !bQuickly )
				{
					m_VehicleExit.m_pExitAICommand = new CM2SyncObject( pSyncObject );
					m_VehicleExit.m_bIsExiting = true;
					m_VehicleExit.m_ulExitStartTime = SharedUtility::GetTime ();
				}
			}

#ifdef DEBUG
			CLogFile::Print ( "Handling with vehicle..." );
#endif

			// Handle this enter with the network vehicle
			m_pVehicle->HandlePlayerExit( this, (m_seat - 1) );

#ifdef DEBUG
			CLogFile::Print ( "Done!" );
#endif
		}

		// Reset the vehicle
		SetVehicle( NULL );

		// Reset the seat
		SetSeat( INVALID_ENTITY_ID );

		// Reset the playerstate
		m_playerState = ePlayerState::PLAYERSTATE_ONFOOT;
	}
}
Exemplo n.º 7
0
void CNetworkPlayer::EnterVehicle( CNetworkVehicle * pVehicle, M2Enums::eVehicleSeat seat, bool bEnter )
{
	DEBUG_TRACE("CNetworkPlayer::EnterVehicle");

	// Are we already entering?
	if ( IsEnteringVehicle() )
	{
		CLogFile::Printf ( "WARNING: This player (%s) is already entering a vehicle, skipping!", GetNick().Get () );
		return;
	}

	// Is the player ped and network vehicle active?
	if( m_pPlayerPed && pVehicle && IsSpawned() )
	{
		// Clean up any sync objects
		TerminateSyncObjects ();

		// Should we put the player in the vehicle?
		if( bEnter )
		{
			// Remove the ped from the vehicle if we're already in one
			if( InternalIsInVehicle() )
				m_pPlayerPed->GetInOutVehicle( m_pPlayerPed->GetCurrentVehicle(), m_seat, false, true );

			// Get our current position
			CVector3 vecPosition;
			GetPosition( &vecPosition );

			// Get the vehicle position
			CVector3 vecVehiclePos;
			pVehicle->GetPosition( &vecVehiclePos );

			//
			bool bForced = false;

			// Is the vehicle too far away?
			if( Math::GetDistanceBetweenPoints( vecPosition, vecVehiclePos ) > 4.0f ) // 2.68 = max distance
				bForced = true;

			CLogFile::Printf ( "EnterVehicle - Forced: %s", (bForced ? "Yes" : "No") );

			// Is the vehicle invalid?
			if ( !pVehicle->GetVehicle() || !pVehicle->GetVehicle()->GetVehicle() )
			{
				CLogFile::Printf ( "EnterVehicle - Invalid game vehicle, skipping to prevent crash!" );
				return;
			}

			// Enter the vehicle
			m_VehicleEnter.m_pEnterAICommand = new CM2SyncObject( m_pPlayerPed->GetInOutVehicle( pVehicle->GetVehicle()->GetVehicle(), seat, true, bForced ) );

			CLogFile::Printf ( "Done!" );

			// Don't finish this sync object when we delete it
			m_VehicleEnter.m_pEnterAICommand->SetDoneOnDelete ( false );

			// Handle this enter with the network vehicle
			pVehicle->HandlePlayerEnter( this, (seat - 1) );
		}

		// Set the vehicle
		SetVehicle( pVehicle );

		// Set the seat
		SetSeat( seat );

		// Reset the target data
		SetEnteringVehicle( pVehicle, seat );

		// Set the player state
		m_playerState = (seat == 1 ? ePlayerState::PLAYERSTATE_DRIVER : ePlayerState::PLAYERSTATE_PASSENGER);
	}
}
Exemplo n.º 8
0
void CLocalPlayer::OnLeaveVehicle( void )
{
	// Set the player state
	SetState( PLAYERSTATE_ONFOOT );

	// Is the vehicle instance valid?
	if( m_pVehicle )
	{
		// Get the seat of this player
		EntityId seat = m_seat;

		// Construct a new bitstream
		RakNet::BitStream pBitStream;

		// Write the vehicle id
		pBitStream.WriteCompressed( m_pVehicle->GetId() );

		// Write the seat
		pBitStream.WriteCompressed( seat );

		// Write if we're exiting quickly!
		m_bFastExitVehicle ? pBitStream.Write1() : pBitStream.Write0();

		// Send to the server
		pCore->GetNetworkModule()->Call( RPC_EXIT_VEHICLE, &pBitStream, HIGH_PRIORITY, RELIABLE_ORDERED, true );

#ifdef DEBUG
		pCore->GetChat()->AddDebugMessage( "CLocalPlayer::OnExitVehicle( %d, %d ) - Forcefully: %s", m_pVehicle->GetId(), seat, (IsBeingRemovedForcefully () ? "Yes" : "No") );
#endif

		// Are we not being removed forcefully?
		if ( !IsBeingRemovedForcefully () )
		{
			// Handle this enter with the network vehicle
			m_pVehicle->HandlePlayerExit( this, seat, false );

			// Do we need to respawn this vehicle? (Set to true when vehicle enters water)
			if( bRespawnVehicle && m_seat == 0 )
			{
				// Respawn the vehicle
				m_pVehicle->Respawn();

				// 
				bRespawnVehicle = false;
			}

			// Are we a passenger?
			if( m_seat > 0 )
			{
				// Restore the player controls
				LockControls( bOldControlState );

				// Restore the camera lock state
				pCore->GetCamera()->LockControl( bOldCameraState );

				//
				*(DWORD *)(m_pPlayerPed->GetPed() + 0x310) = 6;
			}
		}

		// Reset the vehicle
		SetVehicle( NULL );

		// Reset the seat
		SetSeat( INVALID_ENTITY_ID );

		// Reset the target data
		SetEnteringVehicle( NULL, INVALID_ENTITY_ID );

		// Reset the fast vehicle exit flag
		FlagForFastExitVehicle ( false );

		// Reset the forceful exit flag
		SetRemoveForcefully ( false );
	}
}
Exemplo n.º 9
0
void CLocalPlayer::OnEnterVehicle( void )
{
	// Get the vehicle instance from the vehicle guid
	CNetworkVehicle * pNetworkVehicle = pCore->GetVehicleManager()->GetFromGameGUID( GetPlayerPed()->GetCurrentVehicle()->m_dwGUID );

	// Is the vehicle instance valid?
	if( pNetworkVehicle )
	{
#ifdef _DEBUG
		M2Vehicle * pVehicle = pNetworkVehicle->GetVehicle()->GetVehicle();
		DWORD dwVehicleData = (DWORD)(pVehicle) + 0xA8;

		pCore->GetChat()->AddDebugMessage ( "Vehicle: 0x%p, VehicleData: 0x%p", pVehicle, dwVehicleData );
#endif

		// Set the initial seat as the driver
		EntityId seat = 0;

		// Is the player in the passenger seat?
		//if( GetState() == PLAYERSTATE_PASSENGER )
		//	seat = pNetworkVehicle->GetVehicle()->GetPedOccupiedSeat( GetPlayerPed()->GetPed() );

		// Does the vehicle already have a driver?
		if ( pNetworkVehicle->GetDriver () )
			seat = pNetworkVehicle->GetVehicle()->GetPedOccupiedSeat( GetPlayerPed()->GetPed() );

		// Are we getting in as the driver?
		if( seat == 0 )
			SetState( PLAYERSTATE_DRIVER );
		else
			SetState( PLAYERSTATE_PASSENGER );

#ifdef _DEBUG
		pCore->GetChat()->AddDebugMessage( "Seat: %d, Driver: 0x%p, State: %d", seat, pNetworkVehicle->GetDriver (), GetState () );
#endif

		// Construct a new bitstream
		RakNet::BitStream pBitStream;

		// Write the vehicle id
		pBitStream.WriteCompressed( pNetworkVehicle->GetId() );

		// Write the seat
		pBitStream.WriteCompressed( seat );

		// Send to the server
		pCore->GetNetworkModule()->Call( RPC_ENTER_VEHICLE, &pBitStream, HIGH_PRIORITY, RELIABLE_ORDERED, true );

#ifdef _DEBUG
		pCore->GetChat()->AddDebugMessage( "CLocalPlayer::OnEnterVehicle( %d, %d )", pNetworkVehicle->GetId(), seat );
#endif

		// Handle this enter with the network vehicle
		pNetworkVehicle->HandlePlayerEnter( this, seat );

		// Set the vehicle
		SetVehicle( pNetworkVehicle );

		// Set the seat
		SetSeat( seat );

		// Set the target data
		SetEnteringVehicle( pNetworkVehicle, seat );
	}
}