Пример #1
0
//------------------------------------------------------------------------
void CVehicleMountedWeapon::StartUse(EntityId userId)
{
	IVehicle *pVehicle = gEnv->pGame->GetIGameFramework()->GetIVehicleSystem()->GetVehicle(m_vehicleId);
	if (!IsRippingOff() && pVehicle)
	{ 
		m_pOwnerSeat = pVehicle->GetWeaponParentSeat(GetEntityId());
		m_pSeatUser = pVehicle->GetSeatForPassenger(userId);

		IActor* pOwner = GetOwnerActor();
		if (pOwner && !pOwner->IsPlayer())
		{
			SHUDEvent hudEvent(eHUDEvent_AddEntity);
			hudEvent.AddData((int)pVehicle->GetEntityId());
			CHUDEventDispatcher::CallEvent(hudEvent);
		}

		ClearItemFlags(eIF_InformClientsAboutUse);
 	}

	CHeavyMountedWeapon::StartUse(userId);

	CActor* pActor = GetOwnerActor();
	if (pActor && pActor->IsPlayer())
	{
		static_cast<CPlayer*>(pActor)->RefreshVisibilityState();
	}
}
Пример #2
0
//------------------------------------------------------------------------
void CVehicleMountedWeapon::Update( SEntityUpdateContext& ctx, int update)
{
	CHeavyMountedWeapon::Update(ctx, update);

 	if(update==eIUS_General)
 	{ 
 		if (m_fm && m_fm->IsFiring())
 		{
 			m_dtWaterLevelCheck -= ctx.fFrameTime;      
 
 			if (m_dtWaterLevelCheck <= 0.f)
 			{ 
 				if (!CheckWaterLevel())        
 					StopFire();          
 
 				m_dtWaterLevelCheck = 2.0f;
 			}
 		}

		// Perform position sync if necessary
		if(IsRippingOff() && gEnv->bMultiplayer)
		{
			CorrectRipperEntityPosition(ctx.fFrameTime); 
		}
	}

	m_usedThisFrame = false;
}
Пример #3
0
bool CHeavyMountedWeapon::AllowInteraction( EntityId interactionEntity, EInteractionType interactionType )
{
	if(interactionType==eInteraction_GameRulesPickup && (IsRippingOff()||!IsRippedOff()))
	{
		return false;
	}
	return BaseClass::AllowInteraction(interactionEntity, interactionType);
}
Пример #4
0
void CVehicleMountedWeapon::Use( EntityId userId )
{
	IVehicle *pVehicle = gEnv->pGame->GetIGameFramework()->GetIVehicleSystem()->GetVehicle(m_vehicleId);
	if (!IsRippingOff() && pVehicle)
	{ 
		IActor* pUserActor = gEnv->pGame->GetIGameFramework()->GetIActorSystem()->GetActor(userId);
		if(pUserActor && pUserActor->IsPlayer())
		{
			CPlayer* pPlayer = static_cast<CPlayer*>(pUserActor);
			IInteractor* pInteractor = pPlayer->GetInteractor();

			pVehicle->OnUsed(userId, pInteractor->GetOverSlotIdx());
			return;
		}
	}

	CHeavyMountedWeapon::Use(userId);
}
Пример #5
0
void CVehicleMountedWeapon::StopUse( EntityId userId )
{
	CActor* pOwner = GetOwnerActor();
	if (pOwner && pOwner->IsPlayer())
	{
		static_cast<CPlayer*>(pOwner)->RefreshVisibilityState();
	}

	//Need to make sure we clean up the state here in case the normal logic has not run for some reason (E.g. Being killed during rip off)
	if(IsRippingOff())
	{
		ResetState();
	}
	else
	{
		m_usedThisFrame = true;
	}

	CHeavyMountedWeapon::StopUse(userId);
}
Пример #6
0
bool CVehicleMountedWeapon::CanUse( EntityId userId ) const
{
	if(m_usedThisFrame)
	{
		return false;
	}

	IVehicle *pVehicle = gEnv->pGame->GetIGameFramework()->GetIVehicleSystem()->GetVehicle(m_vehicleId);

	//Ask the owning vehicle if we can use it
	if (!IsRippingOff() && pVehicle)
	{ 
		if(!pVehicle->IsUsable(userId))
		{
			return false;
		}
	}

	//No vehicle so resort to usual use case
	return CHeavyMountedWeapon::CanUse(userId);
}
Пример #7
0
bool CHeavyMountedWeapon::CanDeselect() const
{
	return !IsRippingOff();
}