//----------------------------------------------------------------------------- // Purpose: Player has chosen to draw the currently selected weapon //----------------------------------------------------------------------------- void CBaseHudWeaponSelection::SelectWeapon( void ) { if ( !GetSelectedWeapon() ) { engine->ClientCmd( "cancelselect\n" ); return; } C_BasePlayer *player = C_BasePlayer::GetLocalPlayer(); if ( !player ) return; // Don't allow selections of weapons that can't be selected (out of ammo, etc) if ( !GetSelectedWeapon()->CanBeSelected() ) { player->EmitSound( "Player.DenyWeaponSelection" ); } else { SetWeaponSelected(); m_hSelectedWeapon = NULL; engine->ClientCmd( "cancelselect\n" ); // Play the "weapon selected" sound player->EmitSound( "Player.WeaponSelected" ); } }
void CLocalPlayer::SendPassengerSync( void ) { // Are we not connected to the network? if( !pCore->GetNetworkModule()->IsConnected() ) return; // Are we dead? if( IsDead() ) return; // Get the vehicle instance CNetworkVehicle * pVehicle = pCore->GetVehicleManager()->GetFromGameGUID( GetPlayerPed()->GetCurrentVehicle()->m_dwGUID ); // Did we fail to find the vehicle? if( !pVehicle ) return; // Construct a new bitstream RakNet::BitStream pBitStream; // Construct a new passenger sync data structure InPassengerSync passengerSync; // Get the player health passengerSync.m_fHealth = GetHealth (); // Get the player selected weapon passengerSync.m_dwSelectedWeapon = GetSelectedWeapon (); // Write the sync structure to the bitstream pBitStream.Write( (char *)&passengerSync, sizeof(InPassengerSync) ); // Send the bitstream to the server pCore->GetNetworkModule()->Call( RPC_PASSENGER_SYNC, &pBitStream, LOW_PRIORITY, UNRELIABLE_SEQUENCED, true ); }
virtual void SetWeaponSelected() { CBaseHudWeaponSelection::SetWeaponSelected(); switch( hud_fastswitch.GetInt() ) { case HUDTYPE_FASTSWITCH: case HUDTYPE_CAROUSEL: ActivateFastswitchWeaponDisplay( GetSelectedWeapon() ); break; case HUDTYPE_PLUS: ActivateWeaponHighlight( GetSelectedWeapon() ); break; default: // do nothing break; } }
void CLocalPlayer::SendOnFootSync( void ) { // Are we not connected to the network? if( !pCore->GetNetworkModule()->IsConnected() ) return; // Are we dead? if( IsDead() ) return; // Construct a new bitstream RakNet::BitStream pBitStream; // Construct a new foot sync data structure OnFootSync onFootSync; // Get the player position GetPosition ( &onFootSync.m_vecPosition ); // Get the player rotation GetRotation ( &onFootSync.m_vecRotation ); // Get the player direction m_pPlayerPed->GetDirection ( &onFootSync.m_vecDirection ); // Get the player health onFootSync.m_fHealth = GetHealth (); // Get the player selected weapon onFootSync.m_dwSelectedWeapon = GetSelectedWeapon (); // Get the player control state onFootSync.m_bControlState = m_pPlayerPed->GetControlState (); // Get the look at position pCore->GetCamera()->GetLookAt ( &onFootSync.m_vecLookAt ); // Get the aim state onFootSync.m_bAiming = m_pPlayerPed->IsAiming (); // Get the shooting state onFootSync.m_bShooting = m_pPlayerPed->IsShooting (); // Write the model index onFootSync.m_uiModelIndex = Game::GetIdFromPlayerModel ( m_pPlayerModelManager->GetModelName() ); // Write the sync structure into the bitstream pBitStream.Write( (char *)&onFootSync, sizeof(OnFootSync) ); // Send the bitstream to the server pCore->GetNetworkModule()->Call( RPC_PLAYER_SYNC, &pBitStream, LOW_PRIORITY, UNRELIABLE_SEQUENCED, true ); }
void GuardControllerSubSystem::Update(Actor& actor, double DeltaTime) { Opt<GuardControllerComponent> guardCC=actor.Get<IControllerComponent>(); if (!guardCC.IsValid()||!guardCC->IsEnabled()) { return; } if (mProgramState.mMode == core::ProgramState::Client) { return; } auto targetHolderC = actor.Get<ITargetHolderComponent>(); if (!targetHolderC.IsValid()) { return; } auto healthC = actor.Get<IHealthComponent>(); if (!healthC.IsValid() || !healthC->IsAlive()) { return; } UpdateTarget( actor, targetHolderC ); Opt<Actor> currentTarget( mScene.GetActor( targetHolderC->GetTargetGUID() ) ); auto moveC( actor.Get<IMoveComponent>() ); guardCC->SetNextMoveTimer( guardCC->GetNextMoveTimer() - DeltaTime ); if (currentTarget.IsValid()) { auto positionC( actor.Get<IPositionComponent>() ); auto targetPositionC( currentTarget->Get<IPositionComponent>() ); auto const distSqr = GetDistanceSqr( positionC, targetPositionC ); glm::vec2 const distV( (targetPositionC->GetX() - positionC->GetX()), (targetPositionC->GetY() - positionC->GetY()) ); double const Rot = atan2( distV.y, distV.x ); positionC->SetOrientation( Rot ); auto inventoryC = actor.Get<IInventoryComponent>(); if (inventoryC.IsValid()) { Opt<Weapon> weapon = inventoryC->GetSelectedWeapon(); if (weapon.IsValid()) { int32_t const aggroAltDistSqr = guardCC->GetAggroAltDist() * guardCC->GetAggroAltDist(); if (distSqr < aggroAltDistSqr) { weapon->SetShoot( false ); weapon->SetShootAlt( true ); } else { weapon->SetShoot( true ); weapon->SetShootAlt( false ); } } } if (guardCC->GetNextMoveTimer() <= 0.0) { const int32_t ran = RandomGenerator::global()() % 3; if (ran == 0) { guardCC->SetMoveDirection( GuardControllerComponent::Left ); } else if (ran == 1) { guardCC->SetMoveDirection( GuardControllerComponent::Right ); } else { guardCC->SetMoveDirection( GuardControllerComponent::None ); } guardCC->SetNextMoveTimer(guardCC->GetNextMoveTimerMax() + (RandomGenerator::global()() % 100*0.02*- 1)*guardCC->GetNextMoveTimerVariance() ); } int32_t const tooCloseDistSqr = guardCC->GetCloseDist() * guardCC->GetCloseDist(); int32_t const walkAwayDistSqr = guardCC->GetWalkAwayDist() * guardCC->GetWalkAwayDist(); double heading = 0.0; static const double pi = boost::math::constants::pi<double>(); if (distSqr > tooCloseDistSqr) { heading = Rot; if (guardCC->GetMoveDirection() == GuardControllerComponent::Left) { heading -= pi / 4; } else if (guardCC->GetMoveDirection() == GuardControllerComponent::Right) { heading += pi / 4; } moveC->SetMoving( true ); } else if (distSqr < walkAwayDistSqr) { heading = Rot-pi; if (guardCC->GetMoveDirection() == GuardControllerComponent::Left) { heading += pi / 4; } else if (guardCC->GetMoveDirection() == GuardControllerComponent::Right) { heading -= pi / 4; } moveC->SetMoving( true ); } else { heading = Rot; if (guardCC->GetMoveDirection() == GuardControllerComponent::Left) { heading -= pi / 2; moveC->SetMoving( true ); } else if (guardCC->GetMoveDirection() == GuardControllerComponent::Right) { heading += pi / 2; moveC->SetMoving( true ); } else { moveC->SetMoving( false ); } } moveC->SetHeading( heading ); } else { moveC->SetMoving( false ); Opt<IInventoryComponent> inventoryC = actor.Get<IInventoryComponent>(); if (inventoryC.IsValid()) { Opt<Weapon> weapon = inventoryC->GetSelectedWeapon(); if (weapon.IsValid()) { weapon->SetShoot( false ); weapon->SetShootAlt( false ); } } } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CBaseHudWeaponSelection::SetWeaponSelected( void ) { Assert( GetSelectedWeapon() ); // Mark selection so that it's placed into next CUserCmd created input->MakeWeaponSelection( GetSelectedWeapon() ); }