コード例 #1
0
ファイル: ActorInput.cpp プロジェクト: NeoAnomaly/xray
void CActor::IR_OnKeyboardPress(int cmd)
{
	if (m_blocked_actions.find((EGameActions)cmd) != m_blocked_actions.end() ) return; // Real Wolf. 14.10.2014

	if (Remote())		return;

//	if (conditions().IsSleeping())	return;
	if (IsTalking())	return;
	if (m_input_external_handler && !m_input_external_handler->authorized(cmd))	return;
	
	switch (cmd)
	{
	case kWPN_FIRE:
		{
			mstate_wishful &=~mcSprint;
			//-----------------------------
			if (OnServer())
			{
				NET_Packet P;
				P.w_begin(M_PLAYER_FIRE); 
				P.w_u16(ID());
				u_EventSend(P);
			}
		}break;
	default:
		{
		}break;
	}

	if (!g_Alive()) return;

	if(m_holder && kUSE != cmd)
	{
		m_holder->OnKeyboardPress			(cmd);
		if(m_holder->allowWeapon() && inventory().Action(cmd, CMD_START))		return;
		return;
	}else
		if(inventory().Action(cmd, CMD_START))					return;

	switch(cmd){
	case kJUMP:		
		{
			mstate_wishful |= mcJump;
			{
//				NET_Packet	P;
//				u_EventGen(P, GE_ACTOR_JUMPING, ID());
//				u_EventSend(P);
			}
		}break;
	case kCROUCH_TOGGLE:
		{
			g_bAutoClearCrouch = !g_bAutoClearCrouch;
			if (!g_bAutoClearCrouch)
				mstate_wishful |= mcCrouch;

		}break;
	case kSPRINT_TOGGLE:	
		{
			if (mstate_wishful & mcSprint)
				mstate_wishful &=~mcSprint;
			else
				mstate_wishful |= mcSprint;					
		}break;
	case kCAM_1:	cam_Set			(eacFirstEye);				break;
	case kCAM_2:	cam_Set			(eacLookAt);				break;
	case kCAM_3:	cam_Set			(eacFreeLook);				break;
	case kNIGHT_VISION:
		{
			const xr_vector<CAttachableItem*>& all = CAttachmentOwner::attached_objects();
			xr_vector<CAttachableItem*>::const_iterator it = all.begin();
			xr_vector<CAttachableItem*>::const_iterator it_e = all.end();
			for(;it!=it_e;++it){
				CTorch* torch = smart_cast<CTorch*>(*it);
				if (torch){		
					torch->SwitchNightVision();
					break;
				}
			}
		}break;
	case kTORCH:{ 
		const xr_vector<CAttachableItem*>& all = CAttachmentOwner::attached_objects();
		xr_vector<CAttachableItem*>::const_iterator it = all.begin();
		xr_vector<CAttachableItem*>::const_iterator it_e = all.end();
		for(;it!=it_e;++it){
				CTorch* torch = smart_cast<CTorch*>(*it);
				if (torch){		
					torch->Switch();
					break;
				}
		}
		}break;
	case kWPN_1:	
	case kWPN_2:	
	case kWPN_3:	
	case kWPN_4:	
	case kWPN_5:	
	case kWPN_6:	
	case kWPN_RELOAD:
		//Weapons->ActivateWeaponID	(cmd-kWPN_1);			
		break;
	case kUSE:
		ActorUse();
		break;
	case kDROP:
		b_DropActivated			= TRUE;
		f_DropPower				= 0;
		break;
	case kNEXT_SLOT:
		{
			OnNextWeaponSlot();
		}break;
	case kPREV_SLOT:
		{
			OnPrevWeaponSlot();
		}break;

	case kUSE_BANDAGE:
	case kUSE_MEDKIT:
		{
			if(IsGameTypeSingle())
			{
				PIItem itm = inventory().item((cmd==kUSE_BANDAGE)?  CLSID_IITEM_BANDAGE:CLSID_IITEM_MEDKIT );	
				if(itm)
				{
					inventory().Eat				(itm);
					SDrawStaticStruct* _s		= HUD().GetUI()->UIGame()->AddCustomStatic("item_used", true);
					_s->m_endTime				= Device.fTimeGlobal+3.0f;// 3sec
					string1024					str;
					strconcat					(sizeof(str),str,*CStringTable().translate("st_item_used"),": ", itm->Name());
					_s->wnd()->SetText			(str);
				}
			}
		}break;
#ifdef INV_NEW_SLOTS_SYSTEM
	case kUSE_SLOT_QUICK_ACCESS_0:
	case kUSE_SLOT_QUICK_ACCESS_1:
	case kUSE_SLOT_QUICK_ACCESS_2:
	case kUSE_SLOT_QUICK_ACCESS_3:
		{
			if(IsGameTypeSingle())
			{
				PIItem itm = 0;
				switch (cmd){
				case kUSE_SLOT_QUICK_ACCESS_0:
					
					itm = inventory().m_slots[SLOT_QUICK_ACCESS_0].m_pIItem;
					break;
				case kUSE_SLOT_QUICK_ACCESS_1:	
					itm = inventory().m_slots[SLOT_QUICK_ACCESS_1].m_pIItem;
					break;
				case kUSE_SLOT_QUICK_ACCESS_2:
					itm = inventory().m_slots[SLOT_QUICK_ACCESS_2].m_pIItem;
					break;
				case kUSE_SLOT_QUICK_ACCESS_3:
					itm = inventory().m_slots[SLOT_QUICK_ACCESS_3].m_pIItem;
					break;					
				}

				if (itm){
					CMedkit*			pMedkit				= smart_cast<CMedkit*>			(itm);
					CAntirad*			pAntirad			= smart_cast<CAntirad*>			(itm);
					CEatableItem*		pEatableItem		= smart_cast<CEatableItem*>		(itm);
					CBottleItem*		pBottleItem			= smart_cast<CBottleItem*>		(itm);				
					string1024					str;
					
					if(pMedkit || pAntirad || pEatableItem || pBottleItem){
						PIItem iitm = inventory().Same(itm,true);
						if(iitm){
							inventory().Eat(iitm);
							strconcat(sizeof(str),str,*CStringTable().translate("st_item_used"),": ", iitm->Name());
						}else{
							inventory().Eat(itm);
							strconcat(sizeof(str),str,*CStringTable().translate("st_item_used"),": ", itm->Name());
						}
						
						SDrawStaticStruct* _s		= HUD().GetUI()->UIGame()->AddCustomStatic("item_used", true);
						_s->m_endTime				= Device.fTimeGlobal+3.0f;// 3sec
						_s->wnd()->SetText			(str);
					}
				}
			}
		}break;
#endif		
		
	}
}