Exemplo n.º 1
0
//---------------------------------------------------------
bool CWeapon::OnActionReload(EntityId actorId, const ActionId& actionId, int activationMode, float value)
{
	if(activationMode==eAAM_OnPress)
	{
		COffHand * offHandWeapon = NULL;
		bool isOffHandSelected = false;
		GetOffHandInfo(this,isOffHandSelected,&offHandWeapon);

		if (!IsBusy() && !m_modifying && !isOffHandSelected)
		{
			bool isDualWield = false;
			CWeapon *dualWield = NULL;
			GetDualWieldInfo(this,isDualWield,&dualWield);

			if(IsWeaponRaised() && m_fm && m_fm->CanReload())
				RaiseWeapon(false);

			Reload();

			if (isDualWield)
			{
				if(dualWield->IsWeaponRaised() && dualWield->CanReload())
					dualWield->RaiseWeapon(false);
				dualWield->Reload();
			}
		}
	}

	return true;
}
Exemplo n.º 2
0
//---------------------------------------------------------------------------------
bool CWeapon::OnActionFiremode(EntityId actorId, const ActionId& actionId, int activationMode, float value)
{
	if (activationMode==eAAM_OnPress)
	{
		bool isDualWield = false;
		CWeapon *dualWield = NULL;
		GetDualWieldInfo(this,isDualWield,&dualWield);

		if (isDualWield)
		{
			if(IsWeaponRaised())
				RaiseWeapon(false,true);

			if(dualWield->IsWeaponRaised())
				dualWield->RaiseWeapon(false,true);

			StartChangeFireMode();
		}
		else
		{
			if(m_weaponRaised)
				RaiseWeapon(false,true);

			StartChangeFireMode();
		}
	}

	return true;
}
Exemplo n.º 3
0
bool CWeapon::OnActionAttackSecondary(EntityId actorId, const ActionId& actionId, int activationMode, float value)
{




	if(!m_modifying)
	{
		bool isDualWield = false;
		CWeapon *dualWield = NULL;
		GetDualWieldInfo(this,isDualWield,&dualWield);

		if (isDualWield)
		{
			COffHand * offHandWeapon = NULL;
			bool isOffHandSelected = false;
			GetOffHandInfo(this,isOffHandSelected,&offHandWeapon);

			if (activationMode == eAAM_OnPress)
			{

				if(!PreActionAttack(true))
				{
					m_fire_alternation = false;
					
					if(!IsWeaponRaised())// && CanFire())
					{
						StartFire();
					}
					/*else if(OutOfAmmo(false))
						Reload();*/

					m_requestedFire = true;
				}
			}
			else if (activationMode == eAAM_OnRelease)
			{
				PreActionAttack(false);

				// Don't stop slave!!!
				if (m_fm)
					m_fm->StopFire();
				//StopFire(actorId);
				m_requestedFire = false;
			}
		}
		else if (m_fm && activationMode == eAAM_OnPress)
		{
			m_fm->StartSecondaryFire(actorId);
		}
	}




	return true;
}
Exemplo n.º 4
0
//-----------------------------------------------------------------------
void CFists::PostFilterView(SViewParams &viewParams)
{
	CWeapon::PostFilterView(viewParams);

	if(m_camerastats.animating && IsWeaponRaised())
	{
		viewParams.nearplane = 0.1f;
	}

}
Exemplo n.º 5
0
//-----------------------------------------
//Just a timeout to change to "Relaxed" state
void CFists::UpdateAnimState(float frameTime)
{
	//Only if selected
	if(!IsSelected() || m_frozen || IsWeaponRaised() || m_underWater || m_inFreeFall)
		return;

	if(m_timeOut>=0.0f && m_currentAnimState == eFAS_FIGHT)
		m_timeOut -= frameTime;

	if(m_timeOut<0.0f)
		RequestAnimState(eFAS_RELAXED);
}
Exemplo n.º 6
0
//------------------------------------------------------
void CWeapon::ForcePendingActions()
{
	CItem::ForcePendingActions();

	CActor* pOwner = GetOwnerActor();
	if(!pOwner || !pOwner->IsClient())
		return;

	//Force start firing, if needed and possible
	/*if(m_requestedFire)
	{
		if(!IsDualWield() && !IsWeaponRaised())
		{
			m_requestedFire = false;
			if(IsTargetOn() || (m_fm && !m_fm->AllowZoom()))
				return;
			
			OnAction(GetOwnerId(),"attack1",eAAM_OnPress,0.0f);
		}
		else if(IsDualWield() && IsDualWieldMaster())
		{
			IItem *slave = GetDualWieldSlave();
			if(!IsWeaponRaised())
			{
				m_requestedFire = false;
				OnAction(GetOwnerId(),"attack1",eAAM_OnPress,0.0f);
			}
			else if(slave && slave->GetIWeapon())
			{
				CWeapon* dualwield = static_cast<CWeapon*>(slave);
				if(!dualwield->IsWeaponRaised())
				{
					m_requestedFire = false;
					OnAction(GetOwnerId(),"attack1",eAAM_OnPress,0.0f);
				}
			}
		}
	}*/

	// EXP 1: Rewritten dual wield handling
	if(m_requestedFire && !IsWeaponRaised())
	{
		m_requestedFire = false;
		if(IsTargetOn() || (m_fm && !m_fm->AllowZoom()))
			return;
		
		if (!IsDualWield() || IsDualWieldSlave())
			OnAction(GetOwnerId(),"attack1",eAAM_OnPress,0.0f);
		else
			OnAction(GetOwnerId(),"attack2",eAAM_OnPress,0.0f);
	}
}
Exemplo n.º 7
0
//------------------------------------------------------
void CWeapon::ForcePendingActions(uint8 blockedActions)
{
	CItem::ForcePendingActions(blockedActions);

	CActor* pOwner = GetOwnerActor();
	if(!pOwner || !pOwner->IsClient())
		return;

	//Force start firing, if needed and possible
	if(m_requestedFire)
	{
		if(!IsDualWield() && !IsWeaponRaised())
		{
			m_requestedFire = false;
			OnAction(GetOwnerId(),"attack1",eAAM_OnPress,0.0f);
		}
		else if(IsDualWield() && IsDualWieldMaster())
		{
			IItem *slave = GetDualWieldSlave();
			if(!IsWeaponRaised())
			{
				m_requestedFire = false;
				OnAction(GetOwnerId(),"attack1",eAAM_OnPress,0.0f);
			}
			else if(slave && slave->GetIWeapon())
			{
				CWeapon* dualwield = static_cast<CWeapon*>(slave);
				if(!dualwield->IsWeaponRaised())
				{
					m_requestedFire = false;
					OnAction(GetOwnerId(),"attack1",eAAM_OnPress,0.0f);
				}
			}
		}
	}
}
Exemplo n.º 8
0
//------------------------------------------------------------------------------
bool CWeapon::OnActionZoomXI(EntityId actorId, const ActionId& actionId, int activationMode, float value)
{
	COffHand * offHandWeapon = NULL;
	bool isOffHandSelected = false;
	GetOffHandInfo(this,isOffHandSelected,&offHandWeapon);

	if (!m_modifying && !isOffHandSelected && !IsWeaponRaised())
	{
		bool isDualWield = false;
		CWeapon *dualWield = NULL;
		GetDualWieldInfo(this,isDualWield,&dualWield);

		if (m_useViewMode)
		{
			if (activationMode == eAAM_OnPress)
				IncrementViewmode();
		}
		else if (g_pGameCVars->hud_ctrlZoomMode)
		{
			if (activationMode == eAAM_OnPress)
			{
				if (!isDualWield)
				{
					if(m_fm && !m_fm->IsReloading())
					{
						// The zoom code includes the aim assistance
						if (m_fm->AllowZoom())
							StartZoom(actorId,1);
						else
							m_fm->Cancel();
					}
				}
				else
				{
					// If the view does not zoom, we need to force aim assistance
					AssistAiming(1, true);
				}
			}
			else if (activationMode == eAAM_OnRelease)
			{
				if (!isDualWield)
				{
					if(m_fm && !m_fm->IsReloading())
						StopZoom(actorId);
				}
			}
		}
		else
		{
			if (activationMode == eAAM_OnPress && m_fm && !m_fm->IsReloading())
			{
				if (!isDualWield)
				{
					if (m_fm->AllowZoom())
						StartZoom(actorId,1);		
					else
						m_fm->Cancel();
				}
				else
				{
					// If the view does not zoom, we need to force aim assistance
					AssistAiming(1, true);
				}
			}
		}
	}

	return true;
}
Exemplo n.º 9
0
//--------------------------------------------------------------------
bool CWeapon::OnActionAttack(EntityId actorId, const ActionId& actionId, int activationMode, float value)
{
	if(!m_modifying)
	{
		if(IsTwoHand())
		{
			COffHand * offHandWeapon = NULL;
			bool isOffHandSelected = false;
			GetOffHandInfo(this,isOffHandSelected,&offHandWeapon);

			if(offHandWeapon && 
				(offHandWeapon->GetOffHandState()&(eOHS_HOLDING_GRENADE|eOHS_SWITCHING_GRENADE|eOHS_PICKING_ITEM)))
				return false;
		}

		if (activationMode == eAAM_OnPress)
		{

			if(PreActionAttack(true))
				return true;

			bool isDualWield = false;
			CWeapon *dualWield = NULL;
			GetDualWieldInfo(this,isDualWield,&dualWield);

			if (isDualWield)
			{
				m_fire_alternation = !m_fire_alternation;
				m_requestedFire = true;

				if (m_fire_alternation || !dualWield->CanFire())
				{
					if(!IsWeaponRaised() && CanFire())
						StartFire();
					else if(!dualWield->IsWeaponRaised())
						dualWield->StartFire();
				}
				else if (dualWield->CanFire())
				{
					if(!dualWield->IsWeaponRaised() && dualWield->CanFire())
						dualWield->StartFire();
					else if(!IsWeaponRaised())
						StartFire();
				}
				else if(OutOfAmmo(false))
				{
					Reload();
					dualWield->Reload();
				}
			}
			else
			{
				if(!m_weaponRaised)
					StartFire();

				m_requestedFire = true;
			}
		}
		else if (activationMode == eAAM_OnRelease)
		{
			PreActionAttack(false);

			StopFire();
			m_requestedFire = false;
		}
	}

	return true;
}
Exemplo n.º 10
0
void CFists::RaiseWeapon(bool raise, bool faster /*= false*/)
{
	//Only when colliding something while running
	if(raise && (GetCurrentAnimState()==eFAS_RUNNING || GetCurrentAnimState()==eFAS_JUMPING) && !IsWeaponRaised())
	{
		if((m_fm && m_fm->IsFiring())||(m_melee && m_melee->IsFiring()))
			return;

		PlayAction(g_pItemStrings->raise);

		SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->idle_relaxed);
		SetWeaponRaised(true);

		//Also give the player some impulse into the opposite direction
		CActor *pPlayer = GetOwnerActor();
		Vec3		pos;
		if(pPlayer)
		{
			IPhysicalEntity* playerPhysics = pPlayer->GetEntity()->GetPhysics();
			if(playerPhysics)
			{
				IMovementController *pMC = pPlayer->GetMovementController();
				if(pMC)
				{
					SMovementState state;
					pMC->GetMovementState(state);
					
					pe_action_impulse impulse;
					impulse.iApplyTime = 1;
					impulse.impulse = -state.eyeDirection*600.0f;
					playerPhysics->Action(&impulse);

					pos = state.eyePosition + state.eyeDirection*0.5f;
				}
				
			}
		}

		GetScheduler()->TimerAction(GetCurrentAnimationTime(eIGS_FirstPerson), CSchedulerAction<EndRaiseWeaponAction>::Create(EndRaiseWeaponAction(this)), true);

		//Sound and FX feedback
		CollisionFeeback(pos,m_currentAnimState);
	}
	else if(!raise)
		SetWeaponRaised(false);

}
Exemplo n.º 11
0
//------------------------------------------
//CFists::RequestAnimState(EFistAnimState eFAS)
//
//This method changes (if possible) the current animation for the fists
// eFAS - Requested anim state
void CFists::RequestAnimState(EFistAnimState eFAS, bool force /*=false*/)
{

	//Only if selected
	if(!IsSelected() || m_frozen || IsWeaponRaised())
		return;

	if(!m_underWater)
	{
		switch(eFAS)
		{
					case eFAS_NOSTATE:	m_currentAnimState = eFAS_NOSTATE;
															m_timeOut = TIMEOUT;
															break;

					case eFAS_RELAXED: if(m_currentAnimState!=eFAS_NOSTATE && m_currentAnimState!=eFAS_RELAXED)
															{
																m_currentAnimState = eFAS_RELAXED;
																m_timeOut = TIMEOUT;
																PlayAction(g_pItemStrings->deselect);
																SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->idle_relaxed);
															 }
																break;

					case eFAS_FIGHT:		//if(m_currentAnimState!=eFAS_RUNNING)
															{
																SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->idle);
																m_currentAnimState = eFAS_FIGHT;
																m_timeOut = TIMEOUT;
															}
															break;

					case eFAS_RUNNING:	if(m_currentAnimState==eFAS_RELAXED || CanMeleeAttack())
															{
																PlayAction(g_pItemStrings->run_forward,0,true);
																m_currentAnimState = eFAS_RUNNING;
															}
															break;

					case eFAS_JUMPING:	if(m_currentAnimState==eFAS_RUNNING)
															{
																PlayAction(g_pItemStrings->jump_start);
																SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->jump_idle);
																m_currentAnimState = eFAS_JUMPING;
															}
															break;

					case eFAS_LANDING:	 if(m_currentAnimState==eFAS_JUMPING)
															{
																PlayAction(g_pItemStrings->jump_end);
																SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->idle_relaxed);
																m_currentAnimState = eFAS_RELAXED;
															}
															 break;

					case eFAS_CRAWL:		if(m_currentAnimState!=eFAS_CRAWL)
															{
																PlayAction(g_pItemStrings->crawl,0,true);
																//SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->crawl);
																m_currentAnimState = eFAS_CRAWL;
															}
															break;


		}
	}
	else
	{
		switch(eFAS)
		{
					case eFAS_SWIM_IDLE:		if(m_currentAnimState!=eFAS_SWIM_IDLE)
																	{
																		m_currentAnimState = eFAS_SWIM_IDLE;
																		PlayAction(g_pItemStrings->swim_idle,0,true,eIPAF_Default|eIPAF_CleanBlending);
																		//SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->swim_idle);
																	}
																	break;

					case eFAS_SWIM_FORWARD:	if(m_currentAnimState!=eFAS_SWIM_FORWARD)
																	{
																		m_currentAnimState = eFAS_SWIM_FORWARD;
																		PlayAction(g_pItemStrings->swim_forward,0,true,eIPAF_Default|eIPAF_CleanBlending);
																		//SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->swim_forward);
																	}
																	break;

					case eFAS_SWIM_BACKWARD: if(m_currentAnimState!=eFAS_SWIM_BACKWARD)
																	 {
																		 m_currentAnimState = eFAS_SWIM_BACKWARD;
																		 PlayAction(g_pItemStrings->swim_backward,0,true,eIPAF_Default|eIPAF_CleanBlending);
																		 //SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->swim_backward);
																	 }
																	 break;

					case eFAS_SWIM_SPEED:		if(m_currentAnimState!=eFAS_SWIM_SPEED)
																	{
																		m_currentAnimState = eFAS_SWIM_SPEED;
																		PlayAction(g_pItemStrings->speed_swim,0,true,eIPAF_Default|eIPAF_CleanBlending);
																		//SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->speed_swim);
																	}
																	break;

					case eFAS_SWIM_FORWARD_S: if(m_currentAnimState!=eFAS_SWIM_FORWARD_S)
																		{
																			m_currentAnimState = eFAS_SWIM_FORWARD_S;
																			PlayAction(g_pItemStrings->swim_forward_2,0,true,eIPAF_Default|eIPAF_CleanBlending);
																			//SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->swim_forward_2);
																		}
																		break;
		}
	}

}