Example #1
0
//------------------------------------------------------------------------
void CVehicleWeapon::StartUse(EntityId userId)
{
	if (m_owner.GetId() && userId != m_owner.GetId())
		return; 

  if (GetEntity()->GetParent())
  { 
		const EntityId vehicleId = GetEntity()->GetParent()->GetId();
		m_vehicleId = vehicleId;
    IVehicle* pVehicle = gEnv->pGame->GetIGameFramework()->GetIVehicleSystem()->GetVehicle(vehicleId);
    assert(pVehicle && "Using VehicleWeapons on non-vehicles may lead to unexpected behavior.");

    if (pVehicle)
    {
      IVehicleSeat* pOwnerSeat = pVehicle->GetWeaponParentSeat(GetEntityId());
      IVehicleSeat* pSeatUser = pVehicle->GetSeatForPassenger(userId);
			m_bOwnerInSeat = (pOwnerSeat == pSeatUser);

			if(userId == g_pGame->GetIGameFramework()->GetClientActorId())
			{
				pVehicle->RegisterVehicleEventListener(this, "CVehicleWeapon");
			}
    }
  }
  
	SetOwnerId(userId);
  Select(true);	
	m_stats.used = true;

	EnableUpdate(true, eIUS_General);
	RequireUpdate(eIUS_General);

  if (OutOfAmmo(false))
    Reload(false);

  m_shootCounter = 0;
	
	if(userId == g_pGame->GetIGameFramework()->GetClientActorId())
	{
		SHUDEvent	event;

		event.eventType			= eHUDEvent_OnItemSelected;
		event.eventIntData	= CItem::GetEntityId();

		CHUDEventDispatcher::CallEvent(event);

		SHUDEventWrapper::FireModeChanged(this, m_firemode);
	}
}
	void SetActive(const bool bActive)
	{
		if (m_bActive == bActive)
			return;

		m_bActive = bActive;

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

		if (bActive)
		{
			CRY_ASSERT(pVehicle);
			m_fStartedTime = gEnv->pTimer->GetFrameStartTime().GetSeconds();
			m_actInfo.pGraph->SetRegularlyUpdated(m_actInfo.myID, true);

			if (pVehicle)
			{
				pVehicle->RegisterVehicleEventListener(this, "CFlowVehicleDriveForward");
			}

			ActivateOutput(&m_actInfo, EOP_Started, true);
		}
		else
		{
			m_bNeedsCleanup = true; // To ensure event listener gets cleaned up when its safe to do so

			if (pVehicle)
			{
				if (pVehicle->GetSeatCount() != 0) // Restore back
				{
					IVehicleSeat* pSeat = pVehicle->GetSeatById(1);
					if (pSeat)
					{
						pSeat->SetLocked(m_prevSeatLockStatus);
						//pSeat->ExitRemotely();
					}
				}
			}
		}
	}