Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Help] hud attm is underclared identifier Help

Experienced Elementalist
Joined
Sep 13, 2013
Messages
205
Reaction score
23
@DNC input error - [Help] hud attm is underclared identifier Help - RaGEZONE Forums error erros - [Help] hud attm is underclared identifier Help - RaGEZONE Forums So thats my problem I had this problem with first person I now the fix but I just got the one error if anyone knows how to fix that will be great
 

Attachments

You must be registered for see attachments list
Last edited by a moderator:
Experienced Elementalist
Joined
Sep 13, 2013
Messages
205
Reaction score
23
I fixed the first person only file I have no binding for c firstperson so i cant switch between fps tps thats why i asked you so do you know a fix?


DNC ????


DNC please help this is all i need to get fps and tps working
 
Upvote 0
Joined
Oct 28, 2011
Messages
2,465
Reaction score
1,258
Did you add back in the ---> kbsC <--- keyboard C to the file you edited?

When I say backups, I really mean it.
I can't undo any better than you can. Since I didn't do the edits, it makes it much more difficult to determine what to say.
 
Upvote 0
Experienced Elementalist
Joined
Sep 13, 2013
Messages
205
Reaction score
23
@DNC please can you just help me like tell me what i need to add I can send you the tut i followed from one of my friends but please just help
 
Upvote 0
Joined
Oct 28, 2011
Messages
2,465
Reaction score
1,258
Post all files that you have edited.
I said I cannot promise anything and you needed to have backups.
All I can do is "attempt" to look.

Unless you plan on uploading the source folder in whole and PM'ing me with a link. At which point you will have to wait for my schedule to clear.
 
Upvote 0
Experienced Elementalist
Joined
Sep 13, 2013
Messages
205
Reaction score
23
I cant upload the files because I have some poop that I dont want any one to have as sad as it sounds Ill upload the tut i was using


DNC https://mega.co.nz/#!jwBiXISa!uxashldxjpCoYGrG8kVkYTtUawaQYtc1N8TWwyZ082o
 
Upvote 0
Joined
Oct 28, 2011
Messages
2,465
Reaction score
1,258
Like I said.
PM <----- me a link...
I cannot fix it without seeing the definitions and how they are broken.

Now if you search for what you "added" / "changed" and replace it with the "original" information and it did not help.
Then you need to upload to mega, copy the link to a "Private Message" to my Inbox, the entire src folder.

Not post a link in a reply here in this thread.



src\Eternity\SF\Console\Vars.h
Code:
REG_VAR( r_first_person,			false,					0 );

Change to:
Code:
REG_VAR( r_first_person,			true,					0 );


Solution: WarZ_Server.sln
Folder: WZ\src\Eternity\Source
File: r3dInput.cpp
Find:
Code:
// m_Mapping[KS_SWITCH_FPS_TPS] =		KeyboardMapping(INPUTMAP_KEYBOARD, kbsC, "$HUD_Switch_FPS_TPS");

Change to:
Code:
m_Mapping[KS_SWITCH_FPS_TPS] =		KeyboardMapping(INPUTMAP_KEYBOARD, kbsC, "$HUD_Switch_FPS_TPS");

Rebuild ALL solutions in the proper build types.


Don't forget to validate your GameSettings.ini file. If you have an issue, just delete GameSettings.ini from My Documents\RaGEZONE Community Edition\WarZ folder and it will "auto create" clean version based on your compiled code.


I should not have to go back 6 days, to another thread, to reverse what I told you to do, when its clear as day.

Above you will find, every step I asked you to take REVERSED.
So, if you ONLY did as I asked, making the above REVERSED changes, would put you back exactly where you were originally.
Again ---> ONLY <--- if you did Not modify anything beyond what I said to.

Caps used to highlight important words and because I'm slightly upset.
 
Last edited:
Upvote 0
Experienced Elementalist
Joined
Sep 13, 2013
Messages
205
Reaction score
23
Its the tut I followed ill send you that and you can tell me if it was right all i can say there is no bind for c there is now but one bit of the code dosent work :( DNC
 
Upvote 0
Experienced Elementalist
Joined
Sep 13, 2013
Messages
205
Reaction score
23
Omg i have done that
the code i get the problem with it this

void ProcessPlayerMovement(obj_Player* pl, bool editor_debug )
{
r3d_assert(pl->NetworkLocal);


// check fire weapon should be called all the time, as it will reset weapon fire in case if you are sitting on the menu, etc
{
R3DPROFILE_FUNCTION("update fire");
pl->CheckFireWeapon();
}


if(InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_SWITCH_FPS_TPS) && !(hudAttm && hudAttm->isActive()) && !(hudMain && hudMain->isChatInputActive()) && !Mouse->GetMouseVisibility() && !pl->bSwim)
{
pl->switchFPS_TPS();
}


if (pl->bSwim && g_camera_mode->GetInt() == 2)
{
pl->switchFPS_TPS();
}


r3dPoint3D prevAccel = pl->InputAcceleration;
pl->InputAcceleration.Assign(0, 0, 0);



that give me a hudattm and hudmain undeclared error DNC
 
Upvote 0
Joined
Oct 28, 2011
Messages
2,465
Reaction score
1,258
Do you have swim code in your source code?

Don't OMG me either. I told you backups, I'm trying to help, but OMG'ing me is going to result in some real negative energy.



Code:
void ProcessPlayerMovement(obj_Player* pl, bool editor_debug )
{
r3d_assert(pl->NetworkLocal);


// check fire weapon should be called all the time, as it will reset weapon fire in case if you are sitting on the menu, etc
{
R3DPROFILE_FUNCTION("update fire");
pl->CheckFireWeapon();
}


if(InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_SWITCH_FPS_TPS) && !(hudAttm && hudAttm->isActive()) && !(hudMain && hudMain->isChatInputActive()) && !Mouse->GetMouseVisibility())
{
pl->switchFPS_TPS();
}


r3dPoint3D prevAccel = pl->InputAcceleration;
pl->InputAcceleration.Assign(0, 0, 0);



If not, change it to that.
 
Upvote 0
Experienced Elementalist
Joined
Sep 13, 2013
Messages
205
Reaction score
23
Wait yes it does have swimming sorry DNC



if(InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_SWITCH_FPS_TPS) && !(hudAttm && hudAttm->isActive()) && !(hudMain && hudMain->isChatInputActive()) && !Mouse->GetMouseVisibility())



Thats where the error is pin pointed at by visual studio
 
Upvote 0
Joined
Oct 28, 2011
Messages
2,465
Reaction score
1,258
@beastgameer

After you do what it says here.
1. You'll REBUILD ALL
2. You'll make a backup of your FULL src code
3. You will click that Like button
4. Put a bit more respect in those PM's
Because
5. You didn't put the information I've already told you into this file...



Open the following file:
src\EclipseStudio\Sources\UI\HUD_TPSGame.cpp

Delete everything inside the file and replace with the following code...

Code:
#include "r3dPCH.h"
#include "r3d.h"

#include "r3dBackgroundTaskDispatcher.h"

#include "d3dfont.h"

#include "GameCommon.h"
#include "Gameplay_Params.h"

#include "UI\HUD_TPSGame.h"
#include "ObjectsCode/AI/AI_Player.h"
#include "ObjectsCode/AI/AI_PlayerAnim.h"
#include "ObjectsCode/Gameplay/BasePlayerSpawnPoint.h"
#include "ObjectsCode/weapons/WeaponArmory.h"

#include "APIScaleformGfx.h"

#include "multiplayer/ClientGameLogic.h"

#include "HUDCameraEffects.h"

#include "UI\HUDDisplay.h"
#include "UI\HUDPause.h"
#include "UI\HUDAttachments.h"
#include "UI\HUDActionUI.h"
#include "UI\HUDGeneralStore.h"
#include "UI\HUDVault.h"
#include "UI\HUDCraft.h" //craft

#include "..\GameEngine\gameobjects\obj_Vehicle.h"

#include "rendering/Deffered/D3DMiscFunctions.h"

extern float GameFOV;

HUDDisplay*	hudMain = NULL;
HUDPause*	hudPause = NULL;
HUDAttachments*	hudAttm = NULL;
HUDActionUI*	hudActionUI = NULL;
HUDGeneralStore* hudGeneralStore = NULL;
HUDVault* hudVault = NULL;
HUDCraft* hudCraft = NULL; //craft

#define VEHICLE_CINEMATIC_MODE 0

void TPSGameHUD_AddHitEffect(GameObject* from)
{
	obj_Player* pl = gClientLogic().localPlayer_;
	if(!pl) return;
	if(pl->bDead) return;

	pl->BloodEffect = 3.0f;
}



TPSGameHUD::TPSGameHUD()
{
	FPS_Acceleration.Assign(0,0,0);
	FPS_vViewOrig.Assign(0,0,0);
	FPS_ViewAngle.Assign(0,0,0);
	FPS_vVision.Assign(0,0,0);
	FPS_vRight.Assign(0,0,0);
	FPS_vUp.Assign(0,0,0);
	FPS_vForw.Assign(0,0,0);
	cameraRayLen = 20000.0f;
}

TPSGameHUD::~TPSGameHUD()
{
}

static bool TPSGameHud_Inited;
void TPSGameHUD_OnStartGame()
{
	const GBGameInfo& ginfo = gClientLogic().m_gameInfo;

	hudMain = new HUDDisplay();
	hudPause = new HUDPause();
	hudActionUI = new HUDActionUI();
	hudAttm = new HUDAttachments();
	hudGeneralStore = new HUDGeneralStore();
	hudVault = new HUDVault();
	hudCraft = new HUDCraft(); // craft
		
	hudMain->Init();
	hudPause->Init();
	hudActionUI->Init();
	hudAttm->Init();
	hudGeneralStore->Init();
	hudVault->Init();
	hudCraft->Init(); //craft

	Mouse->Hide(true);
	// lock mouse to a window when playing a game
	d_mouse_window_lock->SetBool(true);
	Mouse->SetRange(r3dRenderer->HLibWin);


	extern int g_CCBlackWhite;
	extern float g_fCCBlackWhitePwr;
	g_CCBlackWhite = false;
	g_fCCBlackWhitePwr = 0.0f;

	TPSGameHud_Inited = true;
}

void TPSGameHUD :: DestroyPure()
{
	if(TPSGameHud_Inited)
	{
		TPSGameHud_Inited = false;

		hudPause->Unload();
		hudMain->Unload();
		hudActionUI->Unload();
		hudAttm->Unload();
		hudGeneralStore->Unload();
		hudVault->Unload();
		hudCraft->Unload(); //craft

		SAFE_DELETE(hudMain);
		SAFE_DELETE(hudPause);
		SAFE_DELETE(hudActionUI);
		SAFE_DELETE(hudAttm);
		SAFE_DELETE(hudGeneralStore);
		SAFE_DELETE(hudVault);
		SAFE_DELETE(hudCraft); //craft
	}
}

void TPSGameHUD :: SetCameraDir (r3dPoint3D vPos )
{

}

r3dPoint3D TPSGameHUD :: GetCameraDir () const
{
	return r3dVector(1,0,0);
}


extern	PlayerStateVars_s TPSHudCameras[3][PLAYER_NUM_STATES];
extern	Playerstate_e ActiveCameraRigID;
extern	PlayerStateVars_s ActiveCameraRig;

extern 	Playerstate_e CurrentState;
extern 	PlayerStateVars_s CurrentRig;
extern 	PlayerStateVars_s SourceRig;
extern 	PlayerStateVars_s TargetRig;
extern 	float LerpValue;
extern	r3dPoint3D TPSHudCameraTarget;

extern  float	TPSCameraPointToAdj[3];
extern  float   TPSCameraPointToAdjCrouch[3];

void TPSGameHUD :: InitPure()
{
	// reinit hud rigs based on camera mode
	CurrentRig = TPSHudCameras[g_camera_mode->GetInt()][PLAYER_IDLE];
	SourceRig  = CurrentRig;
	TargetRig  = CurrentRig;
}


// camPos = current camera pos. target = player's head pos
bool CheckCameraCollision(r3dPoint3D& camPos, const r3dPoint3D& target, bool checkCamera)
{
	R3DPROFILE_FUNCTION("CheckCameraCollision");

	r3dPoint3D origCamPos = camPos;
    int LoopBreaker = 0;

	r3dPoint3D motion = (camPos - target);
	float motionLen = motion.Length();
	int MaxLoopBreaker = 10;
	if(motionLen > 0.1f)
	{
		motion.Normalize();
		MaxLoopBreaker = int(ceilf(motionLen/0.05f));

		PxSphereGeometry camSphere(0.3f);
		PxTransform camPose(PxVec3(target.x, target.y, target.z), PxQuat(0,0,0,1));

		PxSweepHit sweepResults[32];
		bool blockingHit;
		PxSceneQueryFilterData filter(PxFilterData(COLLIDABLE_PLAYER_COLLIDABLE_MASK, 0, 0, 0), PxSceneQueryFilterFlag::eSTATIC|PxSceneQueryFilterFlag::eDYNAMIC);
		while(int numRes=g_pPhysicsWorld->PhysXScene->sweepMultiple(camSphere, camPose, PxVec3(motion.x, motion.y, motion.z), motionLen, PxSceneQueryFlag::eINITIAL_OVERLAP|PxSceneQueryFlag::eNORMAL, sweepResults, 32, blockingHit, filter) && LoopBreaker<MaxLoopBreaker)
		{
			if(numRes == -1)
			{
				r3d_assert(false);
				break;
			}
			/* PxVec3 collNormal = PxVec3(0,0,0);
			for(int i=0; i<numRes; ++i)
			{
			collNormal += sweepResults[i].normal;
			}

			collNormal.normalize();*/

			//r3dPoint3D tmp(collNormal.x, collNormal.y, collNormal.z);
			r3dPoint3D tmp = -motion;
			tmp.Normalize();
			camPos += tmp * 0.05f;

			LoopBreaker++;

			motion = (camPos - target);
			motionLen = motion.Length();
			if(motionLen < 0.005f)
			{
				LoopBreaker = MaxLoopBreaker;
				break;
			}
			motion.Normalize();
		}
	}

	if(checkCamera)
	{
		extern bool g_CameraInsidePlayer;
		if((camPos - target).Length() < 0.6f)
			g_CameraInsidePlayer = true;
		else
			g_CameraInsidePlayer = false;

		if(g_camera_mode->GetInt()==2) // in FPS mode this check not needed
			g_CameraInsidePlayer = false;
	}

	return (LoopBreaker == MaxLoopBreaker);
}

float g_shootCameraShakeTimer = 0.0f;
void Get_Camera_Bob(r3dPoint3D& camBob, r3dPoint3D& camUp, const obj_Player* player)
{
	r3d_assert(player);
	camBob.Assign(0,0,0);
	camUp.Assign(0,1,0);

	static float accumul = 0.0f;
	accumul += r3dGetFrameTime()*1.0f*u_GetRandom(0.75f, 1.25f);

	
	// only use this in FPS, but calculate out here.

	float wave = r3dSin(accumul) * g_shootCameraShakeTimer;
	if(g_shootCameraShakeTimer>0)
	{
		g_shootCameraShakeTimer = R3D_MAX(g_shootCameraShakeTimer-r3dGetFrameTime()*3.f, 0.0f);
	}

	if(g_camera_mode->GetInt()==2)
	{
		r3dPoint3D up(0,1,0);
		r3dPoint3D rightVector = player->m_vVision.Cross( up );
		up.RotateAroundVector(rightVector, wave*20.0f );

		camUp = up;
		
		float mStepDist = 0.1f;
		r3dPoint3D mCurPos = player->GetPosition();
		mCurPos -= player->oldstate.Position;
		float len = mCurPos.Length();

		//BP ok, make step distance the lenth of the anim
		// then len, is the current frame converted to percent :)
		std::vector<r3dAnimation::r3dAnimInfo>::iterator it;
		float curframe = 0;
		float numframe = 0;
		for(it = player->uberAnim_->anim.AnimTracks.begin(); it != player->uberAnim_->anim.AnimTracks.end(); ++it) 
		{
			r3dAnimation::r3dAnimInfo &ai = *it;
			if(!(ai.dwStatus & ANIMSTATUS_Playing)) 
				continue;
			if(!(ai.dwStatus & ANIMSTATUS_Paused)) 
			{
				if(ai.pAnim && ai.pAnim->NumFrames < 60)
				{
					curframe = ai.fCurFrame;
					numframe = (float)ai.pAnim->NumFrames;
					break;
				}
			}
		}
		if(player->PlayerState == PLAYER_MOVE_SPRINT)
			mStepDist *=2;

		float mWave = 0;
		bool rightlean = true;
		if(numframe > 0)
		{
			mWave = curframe / numframe; 
			
			// want to go 0-1-0 at 0,50,100
			// want to go 0-1-0-(-1)-0 at 0,25,50,75,100
 			if(mWave >= 0.5f)
			{	
				mWave -= 0.5f;
				rightlean = false; 
			} else 
			{
				rightlean = true; 

			}

 			mWave *=2;
			// if greater than .5, subtract .5 to make 0.5
			// now go back down to zero if > .5
			if(mWave >= 0.5f)
				mWave = 1.0f - mWave;
			mWave *=2;
		}

		float boba = 0.1f;
		float rolla = 0.2f;

		// in aim mode no bob
		switch ( player->PlayerState)
		{
		case PLAYER_MOVE_WALK_AIM:
			// crouch mode no bob
		case PLAYER_MOVE_CROUCH: // intentional fallthrough
		case PLAYER_MOVE_CROUCH_AIM:// intentional fallthrough
		case PLAYER_MOVE_PRONE: // intentional fallthrough
		case PLAYER_PRONE_AIM:// intentional fallthrough
		case PLAYER_PRONE_IDLE:// intentional fallthrough
		case PLAYER_IDLE:// intentional fallthrough
		case PLAYER_IDLEAIM:// intentional fallthrough
			// no bob if turn in place or idle
			{
				mWave = 0; 
				boba = 0.0f;
			}
			break;
		// lower bob on low speed
		case PLAYER_MOVE_RUN:
			{
				boba *= .6f; // yeah this doesn't do anything, it's here in case we want to tweak it. 
				rolla = 1;
			}
			break;
		case PLAYER_MOVE_SPRINT:

			{
				boba *=1.0f; 
				rolla = 2;
			}
			break;
		}

		//boba = 0; // disable bob
		camBob.y = boba * sin(mWave * R3D_PI_2);

		r3dPoint3D p(0,1,0);

		float _angle = sin(mWave * R3D_PI_2 ) * rolla;
		if(_angle < 0)
			_angle += 360.0f;
		else if(_angle > 360.0f)
			_angle -=360.0f;
	
		if ( rightlean == false ) 
		{
			_angle = -(_angle);
		}

		p.RotateAroundZ(_angle);
		p.Normalize();
		
		// this currently will half the camUp's lean.  But the system works with this. 
		camUp = camUp + p;
		camUp.Normalize();
	}

	return;

}

static bool g_CameraPointToAdj_HasAdjustedVec = false;
static r3dPoint3D g_CameraPointToAdj_adjVec(0,0,0);
static r3dPoint3D g_CameraPointToAdj_nextAdjVec(0,0,0);

float		g_CameraLeftSideSource = -0.7f;
float		g_CameraLeftSideTarget = 1.0f;
float		g_CameraLeftSideLerp = 1.0f;

float		getCameraLeftSide()
{
	return R3D_LERP(g_CameraLeftSideSource, g_CameraLeftSideTarget, g_CameraLeftSideLerp);
}

void		updateCameraLeftSide()
{
	if(g_CameraLeftSideLerp < 1.0f)
		g_CameraLeftSideLerp = R3D_CLAMP(g_CameraLeftSideLerp+r3dGetFrameTime()*5.0f, 0.0f, 1.0f);
}

r3dPoint3D getAdjustedPointTo(obj_Player* pl, const r3dPoint3D& PointTo, const r3dPoint3D& CamPos)
{
	if(g_camera_mode->GetInt()==2)
		return R3D_ZERO_VECTOR;

	static r3dPoint3D currentLookAt(0,0,0);
	static float	  currentLookAtDist = 0.0f;
	if(LerpValue == 1.0f)
	{
		//r3dOutToLog("Lerp finished\n");
		g_CameraPointToAdj_adjVec = g_CameraPointToAdj_nextAdjVec;
	}
	else if(!g_CameraPointToAdj_HasAdjustedVec)
	{
        {
            r3dPoint3D dir;
            if(pl->m_isInScope || g_camera_mode->GetInt() != 1 )
                r3dScreenTo3D(r3dRenderer->ScreenW2, r3dRenderer->ScreenH2, &dir);
            else
                r3dScreenTo3D(r3dRenderer->ScreenW2, r3dRenderer->ScreenH*0.32f, &dir);

            PxRaycastHit hit;
            PxSceneQueryFilterData filter(PxFilterData(COLLIDABLE_STATIC_MASK|(1<<PHYSCOLL_NETWORKPLAYER), 0, 0, 0), PxSceneQueryFilterFlag::eSTATIC|PxSceneQueryFilterFlag::eDYNAMIC);
            if(g_pPhysicsWorld->raycastSingle(PxVec3(gCam.x, gCam.y, gCam.z), PxVec3(dir.x, dir.y, dir.z), 2000.0f, PxSceneQueryFlag::eIMPACT|PxSceneQueryFlag::eDISTANCE, hit, filter))
            {
                currentLookAt.Assign(hit.impact.x, hit.impact.y, hit.impact.z);
                currentLookAtDist = hit.distance;
            }
            else
            {
                currentLookAt = CamPos + dir * 1000.0f;
                currentLookAtDist = 1000.0f;
            }
        }


		g_CameraPointToAdj_HasAdjustedVec = true;
		r3dPoint3D DestCamPos = pl->GetPosition();
		r3dPoint3D offset;
		if(pl->hasScopeMode())
		{
			offset =  r3dPoint3D( 0, (pl->getPlayerHeightForCamera() +  TargetRig.ScopePosition.Y), 0 );
			offset += pl->GetvRight() * TargetRig.ScopePosition.X;
			offset += pl->m_vVision * (TargetRig.ScopePosition.Z);
		}
		else
		{
			offset =  r3dPoint3D( 0, (pl->getPlayerHeightForCamera() +  TargetRig.Position.Y), 0 );
			offset += pl->GetvRight() * TargetRig.Position.X * getCameraLeftSide();
			offset += pl->m_vVision * (TargetRig.Position.Z);
		}

		DestCamPos += offset;

        r3dPoint3D playerPosHead = pl->GetPosition(); playerPosHead.y += pl->getPlayerHeightForCamera();
        CheckCameraCollision(DestCamPos, playerPosHead, false);

		r3dPoint3D curViewVec = PointTo - CamPos;
		curViewVec.Normalize();

		r3dPoint3D destViewVec = PointTo - DestCamPos;
		destViewVec.Normalize();

		r3dPoint3D curLookAt = currentLookAt;
		if(!pl->hasScopeMode() &&  g_camera_mode->GetInt() == 1 ) // we only need this offset in offcenter mode.
		{
			float fHeight = currentLookAtDist * tan(R3D_DEG2RAD(TargetRig.FOV) * 0.5f);
			curLookAt.y -= fHeight * 0.35f;
		}
		r3dPoint3D destViewVec2 = curLookAt - DestCamPos;
		destViewVec2.Normalize();

       /* float d1 = pl->m_vVision.Dot(destViewVec);
        float d2 = pl->m_vVision.Dot(destViewVec2);
        if(!pl->hasScopeMode())
            if(d2 < 0.99f)
                destViewVec2 = destViewVec;*/

		//r3dOutToLog("Lerp=%.2f, pl_state=%d, aiming=%d\n", LerpValue, pl->PlayerState, pl->m_isAiming);

		static bool wasAiming = false;
		if(pl->m_isAiming)
		{
			if(!wasAiming)
			{
				wasAiming = true;
				if(currentLookAtDist < 5.0f && pl->hasScopeMode())
					g_CameraPointToAdj_nextAdjVec = r3dPoint3D(0,0.25f,0);
				else
					g_CameraPointToAdj_nextAdjVec = destViewVec2 - destViewVec;
			}
		}
		else
		{
			wasAiming = false;
			g_CameraPointToAdj_nextAdjVec = r3dPoint3D(0,0,0);
		}

        //r3dOutToLog("(%d): %.2f, %.2f\n", pl->m_isAiming, d1, d2);
		//r3dOutToLog("switching (%d): %.2f, %.2f, %.2f; %.2f\n", pl->m_isAiming, g_CameraPointToAdj_nextAdjVec.x, g_CameraPointToAdj_nextAdjVec.y, g_CameraPointToAdj_nextAdjVec.z, currentLookAtDist);
        //r3dOutToLog("vec: %.2f, %.2f, %.2f; %.2f, %.2f, %.2f\n", destViewVec.x, destViewVec.y, destViewVec.z, destViewVec2.x, destViewVec2.y, destViewVec2.z);
	}

	return R3D_LERP(g_CameraPointToAdj_adjVec, g_CameraPointToAdj_nextAdjVec, LerpValue);
}

extern float DepthOfField_NearStart;
extern float DepthOfField_NearEnd;
extern float DepthOfField_FarStart;
extern float DepthOfField_FarEnd;
extern int _FAR_DOF;
extern int _NEAR_DOF;
extern int LevelDOF;

// runs in actual game
int spectator_observingPlrIdx = 0;
r3dPoint3D spectator_cameraPos(0,0,0);
void TPSGameHUD :: SetCameraPure ( r3dCamera &Cam)
{
//#ifndef FINAL_BUILD
	if(d_video_spectator_mode->GetBool() || d_observer_mode->GetBool())
	{
		r3dPoint3D CamPos = FPS_Position;
		CamPos.Y += 1.8f;
		r3dPoint3D ViewPos = CamPos + FPS_vVision*10.0f;

		Cam.FOV = r_video_fov->GetFloat();
		Cam.SetPosition( CamPos );
		Cam.PointTo(ViewPos);

		LevelDOF = r_video_DOF_enable->GetBool();
		_NEAR_DOF = 1;
		_FAR_DOF = 1;
		DepthOfField_NearStart = r_video_nearDOF_start->GetFloat();
		DepthOfField_NearEnd = r_video_nearDOF_end->GetFloat();
		DepthOfField_FarStart = r_video_farDOF_start->GetFloat();
		DepthOfField_FarEnd = r_video_farDOF_end->GetFloat();
		
		return;
	}
//#endif

	const ClientGameLogic& CGL = gClientLogic();
	obj_Player* pl = CGL.localPlayer_;
	if(pl == 0)
	{
		return;
	}

	extern bool SetCameraPlayerVehicle(const obj_Player* pl, r3dCamera &Cam);
	if(SetCameraPlayerVehicle(pl, Cam))
	{
		FPS_Position = Cam;
		return;
	}


	// dead camera
	/*if(pl->bDead)
	{
		r3dPoint3D camPos, camPointTo;
		bool do_camera = false;
		bool check_cam_collision = true;
		{
			static r3dPoint3D oldPlayerPos(0,0,0);
			static r3dPoint3D camPosOffset(0,0,0);
			camPointTo = pl->GetPosition();

			// find a cam position
			if(!oldPlayerPos.AlmostEqual(pl->GetPosition())) // make sure to do that check only once
			{
				oldPlayerPos = pl->GetPosition();
				r3dPoint3D possible_cam_offset[4] = {r3dPoint3D(-3, 5, -3), r3dPoint3D(3, 5, -3), r3dPoint3D(-3, 5, 3), r3dPoint3D(3, 5, 3)};
				int found=-1;
				for(int i=0; i<4; ++i)
				{
					r3dPoint3D raydir = ((pl->GetPosition()+possible_cam_offset[i]) - camPointTo);
					float rayLen = raydir.Length();
					if(rayLen > 0)
					{
						raydir.Normalize();
						PxRaycastHit hit;
						PxSceneQueryFilterData filter(PxFilterData(COLLIDABLE_STATIC_MASK, 0, 0, 0), PxSceneQueryFilterFlag::eSTATIC);
						if(!g_pPhysicsWorld->raycastSingle(PxVec3(camPointTo.x, camPointTo.y, camPointTo.z), PxVec3(raydir.x, raydir.y, raydir.z), rayLen, PxSceneQueryFlag::eIMPACT, hit, filter))
						{
							found = i;
							break;
						}
					}
				}
				if(found!=-1)
				{
					camPosOffset = possible_cam_offset[found];
				}
				else
				{
					camPosOffset = r3dPoint3D(-0.1f, 5, -0.1f);
				}
			}

			camPos = pl->GetPosition() + camPosOffset; 
			do_camera = true;
			check_cam_collision = false;
		}*/
		if(pl->bDead)
	      {
	    //	r3dMouse::Show();
		    r3dVector CamPos = pl->GetPosition();
            CamPos += r3dPoint3D( 0, ( 5 ), 0 );

            int mMX=Mouse->m_MouseMoveX, mMY=Mouse->m_MouseMoveY;
            float  glb_MouseSensAdj = CurrentRig.MouseSensetivity * g_mouse_sensitivity->GetFloat();

            static float camangle = 0;
            static float camangle2 = 0;
            camangle += float(-mMX) * glb_MouseSensAdj;
            camangle2 += float(-mMY) * glb_MouseSensAdj;

            if(camangle > 360.0f ) camangle = camangle - 360.0f;
            if(camangle < 0.0f )   camangle = camangle + 360.0f;

            if(camangle2 > 30.0f ) camangle2 = 30.0f;
            if(camangle2 < -25.0f )   camangle2 = -25.0f;


            D3DXMATRIX mr;
            D3DXMatrixRotationYawPitchRoll(&mr, R3D_DEG2RAD(-camangle), R3D_DEG2RAD(-camangle2), 0);
            r3dVector vehicleForwardVector = r3dVector(mr ._31, mr ._32, mr ._33);

            CamPos += -vehicleForwardVector * 8 ;

            Cam.SetPosition(CamPos);
            Cam.PointTo( CamPos + vehicleForwardVector * 3 + r3dVector ( 0, -1, 0) );
            Cam.vUP = r3dPoint3D(0, 1, 0);
			//FPS_Position = Cam;
		}
/*
		if(do_camera)
		{
			extern int g_CCBlackWhite;
			extern float g_fCCBlackWhitePwr;
			g_CCBlackWhite = 1;
			g_fCCBlackWhitePwr = R3D_CLAMP((r3dGetTime() - pl->TimeOfDeath)/2.0f, 0.0f, 1.0f); // go to black and white while look at our dead body

			// check for collision
			if(check_cam_collision)
				CheckCameraCollision(camPos, camPointTo, false);

			Cam.FOV = 60;
			Cam.SetPosition( camPos );
			Cam.PointTo( camPointTo );
			FPS_Position = Cam;
			return;
		}
	}*/

	if(pl->bDead && hudAttm->isActive())
		hudAttm->Deactivate();

	if(hudPause->isActive())
		return;
	if(hudAttm->isActive())
		return;
	if(hudGeneralStore->isActive())
		return;
	if(hudVault->isActive())
		return;
	if(hudCraft->isActive()) //craft
	    return;

	int mMX=Mouse->m_MouseMoveX, mMY=Mouse->m_MouseMoveY;
	if(g_vertical_look->GetBool()) // invert mouse
		mMY = -mMY;

	GameFOV = CurrentRig.FOV;

	float CharacterHeight = pl->getPlayerHeightForCamera();
	r3dPoint3D CamPos = pl->GetPosition();
	CamPos.Y +=  (CharacterHeight+  CurrentRig.Position.Y);
	updateCameraLeftSide();
	CamPos += pl->GetvRight() * CurrentRig.Position.X * getCameraLeftSide();
	CamPos += pl->m_vVision * CurrentRig.Position.Z;

	r3dPoint3D playerPos = pl->GetPosition();
	r3dPoint3D playerPosHead = playerPos; playerPosHead.y += CharacterHeight;
	r3dPoint3D PointTo = playerPos;
	PointTo.Y += (CharacterHeight + TPSHudCameraTarget.Y);
	PointTo += pl->GetvRight() * TPSHudCameraTarget.X;

	// check for collision
	{
		r3dPoint3D savedCamPos = CamPos;
		if(CheckCameraCollision(CamPos, playerPosHead, true) && (pl->PlayerState == PLAYER_MOVE_CROUCH || pl->PlayerState == PLAYER_MOVE_CROUCH_AIM || pl->PlayerState == PLAYER_MOVE_PRONE || pl->PlayerState == PLAYER_PRONE_AIM || pl->PlayerState == PLAYER_PRONE_IDLE)) 
		{
			CamPos = savedCamPos;
			playerPosHead = playerPos;
			playerPosHead.y += CharacterHeight-0.8f;
			CheckCameraCollision(CamPos, playerPosHead, true);
		}
	}

	PointTo += (pl->m_vVision) * 50;//cameraRayLen;//CurrentRig.Target.Z;

	r3dPoint3D adjPointTo(0,0,0);
	adjPointTo = getAdjustedPointTo(pl, PointTo, CamPos);

	r3dPoint3D camBob, camUp;
	Get_Camera_Bob(camBob, camUp, pl);

	Cam.FOV = GameFOV;
	Cam.SetPosition( CamPos + camBob );
	Cam.PointTo(PointTo + camBob);
	Cam.vUP = camUp;

	Cam.vPointTo += adjPointTo;

#ifndef FINAL_BUILD
	if( g_pHUDCameraEffects )
	{
		g_pHUDCameraEffects->Update( &Cam, CamPos ) ;
	}
#endif

	FPS_Position = Cam;
}  

static void DrawMenus()
{
#ifndef FINAL_BUILD
	if(d_video_spectator_mode->GetBool() && !d_observer_mode->GetBool()) // no UI in spectator mode
		return;
	if(d_disable_game_hud->GetBool())
		return;
	if(d_disable_game_survive->GetBool())
		return;
#endif

#if 0
	typedef std::vector<std::string> stringlist_t;
	extern stringlist_t currentMovies ;

	typedef std::vector< float > floats ;
	extern floats movieDurations ;

	char buff[ 512 ] ;
	sprintf( buff, "%d - Num Drawcalls", r3dRenderer->Stats.NumDraws );

	currentMovies.push_back( buff );
	movieDurations.push_back( 0.1f );

	typedef std::vector< int > sorties ;
	static sorties ss ;

	ss.resize( movieDurations.size() );

	for( int i = 0, e = movieDurations.size(); i < e; i ++ )
	{
		ss[ i ] = i ;
	}

	for( int i = 0, e = movieDurations.size(); i < e; i ++ )
	{
		for( int j = 0, e = movieDurations.size() - 1 ; j < e; j ++ )
		{
			if( movieDurations[ ss[ j ] ] > movieDurations[ ss[ j + 1 ] ] )
			{
				std::swap( ss[ j ], ss[ j + 1 ] );
			}
		}
	}

	r3dSetFiltering( R3D_POINT );

	r3dRenderer->pd3ddev->SetRenderState( D3DRS_ALPHATESTENABLE, 	FALSE );
	r3dRenderer->pd3ddev->SetRenderState( D3DRS_ALPHAREF,        	1 );

	r3dRenderer->SetMaterial(NULL);
	r3dRenderer->SetRenderingMode(R3D_BLEND_ALPHA);

	for( int i = 0, e = (int)currentMovies.size(); i < e; i ++ )
	{
		Font_Label->PrintF(r3dRenderer->ScreenW - 330, r3dRenderer->ScreenH-e*22 - 220 + i*22,r3dColor(255,255,255), "%.1f - %s", movieDurations[ ss[ i ] ] * 1000.f, currentMovies[ ss[ i ] ].c_str() );
	}

	currentMovies.clear();
	movieDurations.clear();

	r3dRenderer->pd3ddev->SetRenderState( D3DRS_ALPHATESTENABLE, 	FALSE );
	r3dRenderer->pd3ddev->SetRenderState( D3DRS_ALPHAREF,        	1 );

	r3dRenderer->SetRenderingMode(R3D_BLEND_ALPHA | R3D_BLEND_NZ);
#endif

	if(!win::bSuspended && !hudMain->isChatInputActive() && !hudMain->isPlayersListVisible()) 
	{
		bool showHudPause = Keyboard->WasPressed(kbsEsc) || InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_SWITCH_MINIMAP) || InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_INVENTORY);
		if(showHudPause && !hudAttm->isActive() && !hudGeneralStore->isActive() && !hudVault->isActive())
		{
			if(!hudPause->isActive())
			{
				hudPause->Activate();
				if(InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_SWITCH_MINIMAP))
					hudPause->showMap();
				else if(InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_INVENTORY))
					hudPause->showInventory();
			}
			else
				hudPause->Deactivate();
		}
		
		//craft	
		bool showCraft = Keyboard->WasPressed(kbsY);
	    if(showCraft)
		 {
	       if(!hudCraft->isActive())
		    {
			 hudCraft->Activate();
			}
	     } 
		//end craft

		bool showAttachment = InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_SHOW_ATTACHMENTS);
		if(showAttachment)
		{
			if(!hudAttm->isActive())
			{
				hudAttm->Activate();
			}
			else
				hudAttm->Deactivate();
		}

		if(hudAttm->isActive() && Keyboard->WasPressed(kbsEsc))
			hudAttm->Deactivate();

		if(hudGeneralStore->isActive() && Keyboard->WasPressed(kbsEsc))
			hudGeneralStore->Deactivate();

		if(hudVault->isActive() && Keyboard->WasPressed(kbsEsc))
			hudVault->Deactivate();
		//craft
		if(hudCraft->isActive() && Keyboard->WasPressed(kbsEsc))
		    hudVault->Deactivate();
	}

	if(hudPause->isActive())
	{
		r3dMouse::Show(); // make sure that mouse is visible

		R3DPROFILE_START( "hudPause->" );

		hudPause->Update();
		hudPause->Draw();

		R3DPROFILE_END( "hudPause->" );

		return;
	}

	if(hudAttm->isActive())
	{
		r3dMouse::Show(); // make sure that mouse is visible

		R3DPROFILE_START( "hudAttm->" );

		hudAttm->Update();
		hudAttm->Draw();

		R3DPROFILE_END( "hudAttm->" );

		return;
	}

	if(hudGeneralStore->isActive())
	{
		r3dMouse::Show(); // make sure that mouse is visible

		R3DPROFILE_START( "hudGeneralStore->" );

		hudGeneralStore->Update();
		hudGeneralStore->Draw();

		R3DPROFILE_END( "hudGeneralStore->" );

		return;
	}

	if(hudVault->isActive())
	{
		r3dMouse::Show(); // make sure that mouse is visible

		R3DPROFILE_START( "hudVault->" );

		hudVault->Update();
		hudVault->Draw();

		R3DPROFILE_END( "hudVault->" );

		return;
	}
	//craft
	if(hudCraft->isActive())
	  {
	     r3dMouse::Show(); // make sure that mouse is visible
 
	     R3DPROFILE_START( "hudCraft->" );
 
		hudCraft->Update();
		hudCraft->Draw();
 
		R3DPROFILE_END( "hudCraft->" );
 
		return;
	  }
	//end craft

	if(hudActionUI->isActive())
	{
		R3DPROFILE_START( "hudActionUI->" );
		hudActionUI->Update();
		hudActionUI->Draw();
		R3DPROFILE_END( "hudActionUI->" );
	}


	bool ChatWindowSwitch = InputMappingMngr->wasReleased(r3dInputMappingMngr::KS_CHAT);

	const ClientGameLogic& CGL = gClientLogic();
	const obj_Player* pl = CGL.localPlayer_; // can be null
	if(pl == NULL) // no player, we need to show respawn menu and let player enter game
	{
	}
	else
	{
		// check for respawn screen
		if(pl->bDead) 
		{
		}
		else
		{
		}

		if(ChatWindowSwitch && hudMain && !hudMain->isChatInputActive())
		{
			hudMain->showChatInput();
		}

		if(hudMain)
		{
			if(InputMappingMngr->wasReleased(r3dInputMappingMngr::KS_CHAT_CHANNEL1))
				hudMain->setChatChannel(0);
			if(InputMappingMngr->wasReleased(r3dInputMappingMngr::KS_CHAT_CHANNEL2))
				hudMain->setChatChannel(1);
			if(InputMappingMngr->wasReleased(r3dInputMappingMngr::KS_CHAT_CHANNEL3))
				hudMain->setChatChannel(2);
			if(InputMappingMngr->wasReleased(r3dInputMappingMngr::KS_CHAT_CHANNEL4)) 
				hudMain->setChatChannel(3);
		}

		if(hudMain && !hudMain->isChatInputActive())
		{
			bool showPlayerList = InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_SHOW_PLAYERS);
			if(showPlayerList)
			{
				if (!hudMain->isPlayersListVisible())
				{
					hudMain->clearPlayersList();
					int index = 0;
					for(int i=0; i<R3D_ARRAYSIZE(CGL.playerNames); i++)
					{
						if(CGL.playerNames[i].Gamertag[0])
						{
							//hudMain->addPlayerToList(index++, CGL.playerNames[i].Gamertag, CGL.playerNames[i].plrRep, CGL.playerNames[i].isLegend, CGL.playerNames[i].isDev, false, false);
				   // - Survive hudMain->addPlayerToList(index++, CGL.playerNames[i].Gamertag, CGL.playerNames[i].plrRep, CGL.playerNames[i].isLegend, CGL.playerNames[i].isDev, CGL.playerNames[i].isPunisher, false, false);
							  hudMain->addPlayerToList(index++, CGL.playerNames[i].Gamertag, CGL.playerNames[i].plrRep, CGL.playerNames[i].isLegend, CGL.playerNames[i].isDev, CGL.playerNames[i].isPunisher, CGL.playerNames[i].isInvitePending,CGL.playerNames[i].isPremium);
						}
					}
					hudMain->showPlayersList(1);
					r3dMouse::Show();
				}
				else
				{
					hudMain->showPlayersList(0);
					r3dMouse::Hide();
				}
			}

			if(hudMain->isPlayersListVisible() && Keyboard->WasPressed(kbsEsc))
			{
					hudMain->showPlayersList(0);
					r3dMouse::Hide();
			}
		}

		// render flash UI for objects

		R3DPROFILE_START( "GameWorld().Draw(rsDrawFlashUI)" );
		GameWorld().Draw(rsDrawFlashUI);
		R3DPROFILE_END( "GameWorld().Draw(rsDrawFlashUI)" );

		{
			{
				R3DPROFILE_START( "hudMain->" );

				hudMain->Update();
				hudMain->Draw();

				R3DPROFILE_END( "hudMain->" );
			}

			// issue d3d cheat check on some frames (will stop issuing anti cheat if caught cheat)
			// wait 5 minute before doing check. after that, do check every other 2-5 minutes
			if(!pl->bDead && (r3dGetTime() - pl->TimeOfLastRespawn)>300.0f && !hudAttm->isActive() &&
				!hudPause->isActive() && !hudActionUI->isActive() && !hudGeneralStore->isActive() &&
				!hudVault->isActive())
			{
				static float nextCheck = r3dGetTime() + u_GetRandom(120.0f, 300.0f);
				if(r3dGetTime() > nextCheck)
				{
					issueD3DAntiCheatCodepath( ANTICHEAT_WALLHACK );
					nextCheck = r3dGetTime() + u_GetRandom(120.0f, 300.0f);
				}
// 				static float nextCheck2 = r3dGetTime() + u_GetRandom(300.0f, 600.0f);
// 				if(r3dGetTime() > nextCheck2)
// 				{
// 					issueD3DAntiCheatCodepath( ANTICHEAT_SCREEN_HELPERS2 );
// 					nextCheck2 = r3dGetTime() + u_GetRandom(300.0f, 600.0f);
// 				}
			}
		}

		if(hudMain && (hudMain->isChatInputActive() || hudMain->isPlayersListVisible())) // also checks for write note, so do not hide mouse
			return;

		// draw main hud with hidden mouse
		// this call is FREE if mouse was hidden already
		// [denis]: do not remove for now, this is minor hack for situation when app was started inactive. 
		// [pavel]: that fucks up controls, when big map is on screen, or scoreboard is, you shouldn't be able to move character, as in that mode you are actually using mouse
		//			if app was started inactive, just press M twice and that's it. 
		// [pavel]: ok, that should fix a problem. If non of modal windows are active, then hide mouse.
		if(!win::bSuspended && !g_cursor_mode->GetInt())
			r3dMouse::Hide();
	}
}

void TPSGameHUD :: Draw()
{
	if(!TPSGameHud_Inited) r3dError("!TPSGameHud_Inited");

	assert(bInited);
	if ( !bInited ) return;

	R3DPROFILE_D3DSTART( D3DPROFILE_SCALEFORM ) ;

	r3dSetFiltering( R3D_POINT );

	r3dRenderer->pd3ddev->SetRenderState( D3DRS_ALPHATESTENABLE, 	FALSE );
	r3dRenderer->pd3ddev->SetRenderState( D3DRS_ALPHAREF,        	1 );

	r3dRenderer->SetMaterial(NULL);
	r3dRenderer->SetRenderingMode(R3D_BLEND_ALPHA | R3D_BLEND_NZ);

	DrawMenus();

	R3DPROFILE_D3DEND( D3DPROFILE_SCALEFORM ) ;

	return;  
}

bool SetCameraPlayerVehicle(const obj_Player* pl, r3dCamera &Cam)
{
	static bool wasDrivenByPlayer = false;
#if VEHICLES_ENABLED
	if ( g_pPhysicsWorld && g_pPhysicsWorld->m_VehicleManager->GetDrivenCar() && d_drive_vehicles->GetBool() == true )
	{
		obj_Vehicle* vehicle = g_pPhysicsWorld->m_VehicleManager->getRealDrivenVehicle();
		if( vehicle ) 
		{
#if	VEHICLE_CINEMATIC_MODE
			r3dVector CamPos = vehicle->GetPosition();
			CamPos += r3dPoint3D( 0, ( 5 ), 0 );

			int mMX=Mouse->m_MouseMoveX, mMY=Mouse->m_MouseMoveY;
			float  glb_MouseSensAdj = CurrentRig.MouseSensetivity * g_mouse_sensitivity->GetFloat();	

			static float camangle = 0;
			camangle += float(-mMX) * glb_MouseSensAdj;

			if(camangle > 360.0f ) camangle = camangle - 360.0f;
			if(camangle < 0.0f )   camangle = camangle + 360.0f;

			D3DXMATRIX mr;
			D3DXMatrixRotationYawPitchRoll(&mr, R3D_DEG2RAD(-camangle), 0.0f, 0);
			r3dVector vehicleForwardVector = r3dVector(mr ._31, mr ._32, mr ._33);

			CamPos += -vehicleForwardVector * 8 ;

			Cam.SetPosition(CamPos);
			Cam.PointTo( CamPos + vehicleForwardVector * 3 + r3dVector ( 0, -1, 0) );
			Cam.vUP = r3dPoint3D(0, 1, 0);
#else 
			g_pPhysicsWorld->m_VehicleManager->ConfigureCamera(Cam);
#endif
			wasDrivenByPlayer = true;
		}
		else
		{
			wasDrivenByPlayer = false;
		}
	}
	else
	{
		wasDrivenByPlayer = false;
	}
#endif 
	return wasDrivenByPlayer;

}

static float g_lastAimAnimTime = -1.f;

void ProcessPlayerMovement(obj_Player* pl, bool editor_debug )
{
	r3d_assert(pl->NetworkLocal);

	// check fire weapon should be called all the time, as it will reset weapon fire in case if you are sitting on the menu, etc
	{
		R3DPROFILE_FUNCTION("update fire");
		pl->CheckFireWeapon();
	}
	
	if(InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_SWITCH_FPS_TPS) && !(hudAttm && hudAttm->isActive()) && !(hudMain && hudMain->isChatInputActive()) && !Mouse->GetMouseVisibility() && !pl->bSwim)
	{
		pl->switchFPS_TPS();
	}

	if (pl->bSwim && g_camera_mode->GetInt() == 2)
	{
		pl->switchFPS_TPS();
	}

	r3dPoint3D prevAccel = pl->InputAcceleration;
	pl->InputAcceleration.Assign(0, 0, 0);
	
	static int shiftWasPressed = 0;
	float movingSpeed = pl->plr_local_moving_speed * (1.0f/r3dGetFrameTime());

	// query mouse distance, so it will not be accumulated
	int mMX=Mouse->m_MouseMoveX, mMY=Mouse->m_MouseMoveY;
	if(g_vertical_look->GetBool()) // invert mouse
		mMY = -mMY;

	bool disablePlayerRotation = false;
	bool disablePlayerMovement = false;
	if(Mouse->GetMouseVisibility() || (hudMain && hudMain->isChatInputActive())) // do not update player if we are in menu control mode!
	{	
		disablePlayerMovement = true;
		disablePlayerRotation = true;
	}
	if(pl->bDead)
		return;

	const Weapon* wpn = pl->m_Weapons[pl->m_SelectedWeapon];

	if(!Mouse->GetMouseVisibility()
		&& wpn)
	{

		// vehicles
		if(InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_INTERACT) )
		{
#if VEHICLES_ENABLED
			obj_Vehicle* target_Vehicle = pl->canEnterVehicle();
		
			if( pl->isInVehicle() ) {
				pl->exitVehicle();
			}
			else if ( target_Vehicle  ) // now we're going to try to use vehicles (otherwise UAV characters can't use vehicles).
			{
				pl->enterVehicle( target_Vehicle );
			}
#endif
		}
	}

	  if(pl->m_isFinishedAiming && !pl->m_isInScope && gUserProfile.ProfileData.isDevAccount) //exchanging gun to developer
       {
          if(Keyboard->WasPressed(kbsLeftShift))
       {
          R3D_SWAP(g_CameraLeftSideSource, g_CameraLeftSideTarget);
          g_CameraLeftSideLerp = 0.0f;
       }
         } else if(Keyboard->WasPressed(kbsLeftAlt) && gUserProfile.ProfileData.isDevAccount == NULL)
	   { //exchanging gun player
         R3D_SWAP(g_CameraLeftSideSource, g_CameraLeftSideTarget);
         g_CameraLeftSideLerp = 0.0f;
       }

	bool  aiming      = pl->m_isAiming;
	int   playerState = aiming ? PLAYER_IDLEAIM : PLAYER_IDLE;

	if( g_lastAimAnimTime < 0 )
		g_lastAimAnimTime = r3dGetTime();

	float newAimTime = r3dGetTime();
	float deltaAimTime = newAimTime - g_lastAimAnimTime;
	g_lastAimAnimTime = newAimTime;

	const float AIM_LERP_SPEED = 8.0f;

	if( aiming )
	{
		r_grass_zoom_coef->SetFloat( R3D_LERP( r_grass_zoom_coef->GetFloat(), 2.0f, AIM_LERP_SPEED * deltaAimTime ) );
	}
	else
	{
		r_grass_zoom_coef->SetFloat( R3D_LERP( r_grass_zoom_coef->GetFloat(), 1.0f, AIM_LERP_SPEED * deltaAimTime ) );
	}

	if(!(g_camera_mode->GetInt()==2 && pl->NetworkLocal))
	{
		if(pl->IsJumpActive()) 
		{
			// in jump, keep current state  (so strafe will stay, for example) and disable movement
			playerState = pl->PlayerState;
		}
	}
	
	// not able to sprint with equipped RPG
	bool disableSprint = false;
	r3dAnimation::r3dAnimInfo* animInfo = pl->uberAnim_->anim.GetTrack(pl->uberAnim_->grenadeThrowTrackID);
	if(!(pl->uberAnim_->grenadePinPullTrackID==CUberAnim::INVALID_TRACK_ID && !(animInfo && (animInfo->GetStatus()&ANIMSTATUS_Playing))))
		disableSprint = true;

	if(pl->CurLoadout.Health < 10.0f)
		disableSprint = true;

	// check if player can straighten up, in case if there is something above his head he will not be able to stop crouching
	bool force_crouch = false;
	if(pl->bCrouch)
	{
		PxBoxGeometry bbox(0.2f, 0.9f, 0.2f);
		PxTransform pose(PxVec3(pl->GetPosition().x, pl->GetPosition().y+1.1f, pl->GetPosition().z), PxQuat(0,0,0,1));
		PxSceneQueryFilterData filter(PxFilterData(COLLIDABLE_STATIC_MASK, 0, 0, 0), PxSceneQueryFilterFlag::eSTATIC);
		PxShape* shape;
		force_crouch = g_pPhysicsWorld->PhysXScene->overlapAny(bbox, pose, shape, filter);
	}
	bool crouching = pl->bCrouch;
	if(pl->fHeightAboveGround < 0.5f)
	{
		if(g_toggle_crouch->GetBool())
		{
			if(InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_CROUCH) || Gamepad->WasReleased(gpB))
				crouching = !crouching;
		}
		else
			crouching = InputMappingMngr->isPressed(r3dInputMappingMngr::KS_CROUCH) || Gamepad->IsPressed(gpB);
	}
	else
		crouching = false;

	if(disablePlayerMovement)
		crouching = false;

	if(force_crouch)
		crouching = true;

	if(crouching) 
		playerState = aiming ? PLAYER_MOVE_CROUCH_AIM : PLAYER_MOVE_CROUCH;
	
	// check if player can straighten up, in case if there is something above his head he will not be able to stop proning
	bool force_prone = false;
	if(pl->bProne)
	{
		PxBoxGeometry bbox(0.2f, 0.9f, 0.2f);
		PxTransform pose(PxVec3(pl->GetPosition().x, pl->GetPosition().y+1.1f, pl->GetPosition().z), PxQuat(0,0,0,1));
		PxSceneQueryFilterData filter(PxFilterData(COLLIDABLE_STATIC_MASK, 0, 0, 0), PxSceneQueryFilterFlag::eSTATIC);
		PxShape* shape;
		force_prone = g_pPhysicsWorld->PhysXScene->overlapAny(bbox, pose, shape, filter);
	}
	bool wasProning = pl->bProne;
	bool proning = pl->bProne;
	if(pl->fHeightAboveGround < 0.5f)
	{
		if(InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_PRONE) && !disablePlayerMovement)
			proning = !proning;
	}
	else
		proning = false;

	if(force_prone)
		proning = true;

	extern float getWaterDepthAtPos(const r3dPoint3D& pos);
		float waterDepth = getWaterDepthAtPos(pl->GetPosition());

	{
		if(waterDepth > 1.4f)
		{
			proning = false;
			crouching = false;
		}
	}

	if(proning) 
	{
		if(!wasProning)
			playerState = PLAYER_PRONE_DOWN;
		else if(wasProning && pl->PlayerState == PLAYER_PRONE_DOWN) // check if we are still playing anim
		{
			bool stillPlayingAnim = false;
			std::vector<r3dAnimation::r3dAnimInfo>::iterator it;
			for(it=pl->uberAnim_->anim.AnimTracks.begin(); it!=pl->uberAnim_->anim.AnimTracks.end(); ++it) 
			{
				const r3dAnimation::r3dAnimInfo& ai = *it;
				if(ai.pAnim->iAnimId == pl->uberAnim_->data_->aid_.prone_down_weapon || ai.pAnim->iAnimId == pl->uberAnim_->data_->aid_.prone_down_noweapon)
				{
					if(!(ai.dwStatus & ANIMSTATUS_Finished))
						stillPlayingAnim = true;
					break;
				}
			}
			if(stillPlayingAnim)
				playerState = PLAYER_PRONE_DOWN;
			else
				playerState = aiming ? PLAYER_PRONE_AIM : PLAYER_PRONE_IDLE;
		}
		else
			playerState = aiming ? PLAYER_PRONE_AIM : PLAYER_PRONE_IDLE;
	}
	else
	{
		if(wasProning)
			playerState = PLAYER_PRONE_UP;
		else if(pl->PlayerState == PLAYER_PRONE_UP) // check if we are still playing anim
		{
			bool stillPlayingAnim = false;
			std::vector<r3dAnimation::r3dAnimInfo>::iterator it;
			for(it=pl->uberAnim_->anim.AnimTracks.begin(); it!=pl->uberAnim_->anim.AnimTracks.end(); ++it) 
			{
				const r3dAnimation::r3dAnimInfo& ai = *it;
				if(ai.pAnim->iAnimId == pl->uberAnim_->data_->aid_.prone_up_weapon || ai.pAnim->iAnimId == pl->uberAnim_->data_->aid_.prone_up_noweapon)
				{
					if(!(ai.dwStatus & ANIMSTATUS_Finished))
						stillPlayingAnim = true;
					break;
				}
			}
			if(stillPlayingAnim)
				playerState = PLAYER_PRONE_UP;
		}
	}

	if(playerState == PLAYER_PRONE_UP || playerState == PLAYER_PRONE_DOWN)
	{
		disablePlayerMovement = true;
		disablePlayerRotation = true;
	}

	if(proning && aiming)
		disablePlayerMovement = true;

	VMPROTECT_BeginMutation("ProcessPlayerMovement_Accel");	
	{
		r3dPoint3D accelaration(0,0,0);
		if(!disablePlayerMovement)
		{
			// if facing a wall and cannot sprint - stop sprint
			bool canSprint = (shiftWasPressed<3) || (shiftWasPressed>=3 && movingSpeed > 1.0f);
			if(InputMappingMngr->isPressed(r3dInputMappingMngr::KS_SPRINT) || Gamepad->IsPressed(gpLeftShoulder))
				shiftWasPressed++;
			else
				shiftWasPressed = 0;

			if(aiming || pl->m_isHoldingBreath) // cannot spring and aim. also, in default key binding spring and hold breath are on the same key
				shiftWasPressed = 0;

			// due to animation, firstly check left and right movement, so that if you move diagonally we will play moving forward animation
			float thumbX, thumbY;
			Gamepad->GetLeftThumb(thumbX, thumbY);
			if(InputMappingMngr->isPressed(r3dInputMappingMngr::KS_MOVE_LEFT)) 
			{
				accelaration += (aiming)?r3dPoint3D(-GPP->AI_WALK_SPEED*GPP->AI_BASE_MOD_SIDE,0,0):r3dPoint3D(-GPP->AI_RUN_SPEED*GPP->AI_BASE_MOD_SIDE,0,0);
			}
			else if(InputMappingMngr->isPressed(r3dInputMappingMngr::KS_MOVE_RIGHT)) 
			{
				accelaration += (aiming)?r3dPoint3D(GPP->AI_WALK_SPEED*GPP->AI_BASE_MOD_SIDE,0,0):r3dPoint3D(GPP->AI_RUN_SPEED*GPP->AI_BASE_MOD_SIDE,0,0);
			}
			else if(thumbX!=0.0f)
			{
				accelaration += (aiming)?r3dPoint3D(GPP->AI_WALK_SPEED*GPP->AI_BASE_MOD_SIDE*thumbX,0,0):r3dPoint3D(GPP->AI_RUN_SPEED*GPP->AI_BASE_MOD_SIDE*thumbX,0,0);
			}

			//r3dOutToLog("sprint: %d, canSprint: %d, speed: %.3f\n", (int)shiftWasPressed, (int)canSprint, movingSpeed);
			if(shiftWasPressed && canSprint /*&& pl->bOnGround*/ && !crouching && !proning && !disableSprint && (pl->m_Stamina>0.0f) && pl->m_StaminaPenaltyTime<=0 && !pl->bSwim && waterDepth < 1.2f) 
            {
                playerState = PLAYER_MOVE_SPRINT;
                accelaration *= 0.5f; // half side movement when sprinting
                accelaration += r3dPoint3D(0,0,GPP->AI_SPRINT_SPEED);
                accelaration  = accelaration.NormalizeTo() * GPP->AI_SPRINT_SPEED;
            }
			else
			{
				if(InputMappingMngr->isPressed(r3dInputMappingMngr::KS_MOVE_FORWARD) || shiftWasPressed) 
				{
					float spd = GPP->AI_BASE_MOD_FORWARD * (aiming ? GPP->AI_WALK_SPEED : GPP->AI_RUN_SPEED);
					accelaration += r3dPoint3D(0,0,spd);
					accelaration  = accelaration.NormalizeTo() * spd;
				}
				else if(InputMappingMngr->isPressed(r3dInputMappingMngr::KS_MOVE_BACKWARD))
				{
					float spd = GPP->AI_BASE_MOD_BACKWARD * (aiming ? GPP->AI_WALK_SPEED : GPP->AI_RUN_SPEED);
					accelaration += r3dPoint3D(0,0,-spd);
					accelaration  = accelaration.NormalizeTo() * spd;
				}
				else if(thumbY!=0.0f)
                {
                    if(thumbY>0)
                        accelaration += (aiming)?r3dPoint3D(0,0,GPP->AI_WALK_SPEED*GPP->AI_BASE_MOD_FORWARD*thumbY):r3dPoint3D(0,0,GPP->AI_RUN_SPEED*GPP->AI_BASE_MOD_FORWARD*thumbY);
                    else
                        accelaration += (aiming)?r3dPoint3D(0,0,GPP->AI_WALK_SPEED*GPP->AI_BASE_MOD_BACKWARD*thumbY):r3dPoint3D(0,0,GPP->AI_RUN_SPEED*GPP->AI_BASE_MOD_BACKWARD*thumbY);
                }


                if(waterDepth > 1.4f)
				{
					pl->bSwim = true;
						if(shiftWasPressed && canSprint && (pl->m_Stamina>0.0f) && pl->m_StaminaPenaltyTime<=0) 
				{
					pl->bSwimShift = true;
					accelaration *= 1.5f; // half side movement when sprinting
					playerState = PLAYER_SWIM_F;
				}
					else
					{
					pl->bSwimShift = false;
					}
				}
				else if (pl->bSwim && waterDepth < 1.2f)
					{
					pl->bSwim = false;
					}


                if (!pl->bSwim) // AomBE : Fix Bugs Stamina
					{
                    pl->bSwimShift = false;
					}
                    pl->SyncAnimation(true);
			}

				if (pl->bSwim && !pl->bSwimShift)
					{
					playerState = PLAYER_SWIM_M;
					}
				else if (!pl->bSwim)
					{
					// set walk/run state
				if(playerState != PLAYER_MOVE_SPRINT && !crouching && !proning && (accelaration.x || accelaration.z))
					playerState = aiming ? PLAYER_MOVE_WALK_AIM : PLAYER_MOVE_RUN;
					// set prone walk state
				if(playerState != PLAYER_MOVE_SPRINT && !crouching && proning && (accelaration.x || accelaration.z))
					playerState = aiming ? PLAYER_PRONE_AIM : PLAYER_MOVE_PRONE;
					}
        
                if((playerState == PLAYER_MOVE_RUN || playerState == PLAYER_MOVE_SPRINT) && (r3dGetTime() < pl->m_SpeedBoostTime))
					{
					accelaration *= pl->m_SpeedBoost;
					}
			
//#ifndef FINAL_BUILD
			if(gUserProfile.ProfileData.isDevAccount && Keyboard->IsPressed(kbsLeftAlt))
				accelaration *= 8.0f;
//#endif

			// 		STORE_CATEGORIES equippedItemCat = wpn ? wpn->getCategory() : storecat_INVALID;;
			// 		if(equippedItemCat == storecat_SUPPORT || equippedItemCat == storecat_MG)
			// 			accelaration *= 0.8f; // 20% slow down
		}

		if (pl->bSwim)
		{
			playerState = PLAYER_SWIM_M;
		}

		if(pl->CurLoadout.Health < GPP->c_fSpeedMultiplier_LowHealthLevel)
			accelaration *= GPP->c_fSpeedMultiplier_LowHealthValue;
		if(pl->CurLoadout.Thirst > GPP->c_fSpeedMultiplier_HighThirstLevel)
			accelaration *= GPP->c_fSpeedMultiplier_HighThirstValue;
		if(pl->CurLoadout.Hunger > GPP->c_fSpeedMultiplier_HighHungerLevel)
			accelaration *= GPP->c_fSpeedMultiplier_HighHungerValue;

		if(crouching)
			accelaration *= 0.4f;
		if(proning)
			accelaration *= 0.2f;

		/*if(pl->IsJumpActive()) // don't allow to change direction when jumping
		pl->InputAcceleration = prevAccel;
		else*/
		pl->InputAcceleration = accelaration;
		// process jump after assigning InputAcceleration, so that we can predict where player will jump
		if(!disablePlayerMovement)
		{
			if(pl->bOnGround && (InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_JUMP)||Gamepad->WasPressed(gpA)) 
				&& !crouching 
				&& !proning
				&& !pl->IsJumpActive()
				&& prevAccel.z >= 0 /* prevent jump backward*/
				)
			{
				pl->StartJump();
			}
		if(pl->bOnGround && (InputMappingMngr->wasPressed(r3dInputMappingMngr::KS_TAUNT)||Gamepad->WasPressed(gpA))
				&& !disablePlayerMovement
				&& !crouching 
				&& !proning
				)
			{
			pl->StartTaunt();
			//uberAnim_->StartTaunt();
			//int aid = 0;
			//aid = CUberData().AddAnimation("Taunt_t1_HandFlip");
			//uberAnim_->anim.StartAnimation(aid, ANIMFLAG_RemoveOtherFade | ANIMFLAG_Looped, 0.0f, 1.0f, 0.2f);
			}
		}
		if(!editor_debug)
			pl->PlayerState   = playerState;

		pl->PlayerMoveDir = CUberData::GetMoveDirFromAcceleration(pl->InputAcceleration);

	} VMPROTECT_End();	

	// adjust player physx controller size
	// TODO: we need to adjust size only when animation blending was finished! ask Denis how.
	if(crouching != pl->bCrouch || proning!=pl->bProne)
	{
		// GetPosition()/SetPosition() to keep player on the ground.
		// because capsule controller height offset will be changed in AdjustControllerSize()
		r3dPoint3D pos = pl->PhysicsObject->GetPosition();
		if(crouching || proning)
			pl->PhysicsObject->AdjustControllerSize(0.3f, 0.2f, 0.4f);
		else
			pl->PhysicsObject->AdjustControllerSize(0.3f, 1.1f, 0.85f);
		pl->PhysicsObject->SetPosition(pos + r3dPoint3D(0, 0.01f, 0));
	}
	
	pl->bCrouch = crouching;
	pl->bProne = proning;

	ActiveCameraRigID = (Playerstate_e)pl->PlayerState;
	ActiveCameraRig   = TPSHudCameras[g_camera_mode->GetInt()][ActiveCameraRigID];
	
	// use this to update the camera from the options. 
	static int currentCameraMode = g_camera_mode->GetInt();

	// if we arn't in the correct view mode currently.   And we are not doing a aim zoom, or the previous lerp is done. 
	if ( ( CurrentState != pl->PlayerState || currentCameraMode != g_camera_mode->GetInt()) && (LerpValue >= 1.0f || ( !pl->m_isAiming) ) )
	{
		currentCameraMode = g_camera_mode->GetInt();
		//set new target
		SourceRig = CurrentRig;
		TargetRig = ActiveCameraRig;

		if(SourceRig.Position.AlmostEqual(TargetRig.Position) && SourceRig.ScopePosition.AlmostEqual(TargetRig.ScopePosition))
		{
			// workaround for a quickscoping and firing at the same time and causing a camera to tilt up.
			if((TPSHudCameras[g_camera_mode->GetInt()][CurrentState].allowScope && !TargetRig.allowScope) || (!TPSHudCameras[g_camera_mode->GetInt()][CurrentState].allowScope && TargetRig.allowScope))
			{
				g_CameraPointToAdj_HasAdjustedVec = false;
			}
		}
		else
		{
			g_CameraPointToAdj_adjVec = R3D_LERP(g_CameraPointToAdj_adjVec, g_CameraPointToAdj_nextAdjVec, LerpValue);
			g_CameraPointToAdj_HasAdjustedVec = false;
		}

		LerpValue = 0;

		CurrentState = (Playerstate_e)pl->PlayerState;	
	}
	else
	{
		// just lerp
		if (LerpValue < 1.0f)
		{
			float lerpMOD = 1.0f;
			STORE_CATEGORIES equippedItemCat = wpn ? wpn->getCategory() : storecat_INVALID;;
			if(TargetRig.allowScope) // slow down aiming for those categories
				if(equippedItemCat == storecat_MG)
					lerpMOD = 0.5f;

			LerpValue += r3dGetFrameTime()*6.5f*lerpMOD;
			if (LerpValue >1.0f) LerpValue = 1.0f;

			CurrentRig.Lerp(pl, SourceRig, TargetRig, LerpValue);
		}
		else
			CurrentRig.Lerp(pl, SourceRig, TargetRig, 1.0f);
	}

	if(!disablePlayerRotation)
	{
		float  glb_MouseSensAdj = CurrentRig.MouseSensetivity * g_mouse_sensitivity->GetFloat();	
		//  Mouse controls are here

		float mmoveX = float(-mMX) * glb_MouseSensAdj;
		float mmoveY = float(-mMY) * glb_MouseSensAdj;

		// fight only vertical recoil, apply adjustment leftover to viewvector
		if(pl->RecoilViewModTarget.y > 0.01f && mmoveY < 0) {
			pl->RecoilViewModTarget.y += mmoveY;
			if(pl->RecoilViewModTarget.y < 0) {
				mmoveY = pl->RecoilViewModTarget.y;
				pl->RecoilViewModTarget.y = 0;
			} else {
				mmoveY = 0;
			}
		}

		pl->ViewAngle.x += mmoveX;
		pl->ViewAngle.y += mmoveY;

		if(Gamepad->IsConnected()) // overwrite mouse
		{
			float X, Y;
			Gamepad->GetRightThumb(X, Y);
			pl->ViewAngle.x += float(-X) * glb_MouseSensAdj * r_gamepad_view_sens->GetFloat();
			pl->ViewAngle.y += float(Y) * glb_MouseSensAdj * r_gamepad_view_sens->GetFloat() * (g_vertical_look->GetBool()?-1.0f:1.0f);
		}

		if(pl->ViewAngle.x > 360.0f ) pl->ViewAngle.x = pl->ViewAngle.x - 360.0f;
		if(pl->ViewAngle.x < 0.0f )   pl->ViewAngle.x = pl->ViewAngle.x + 360.0f;

		// Player can't look too high!
		if(pl->ViewAngle.y > CurrentRig.LookUpLimit )  pl->ViewAngle.y = CurrentRig.LookUpLimit;
		if(pl->ViewAngle.y < CurrentRig.LookDownLimit) pl->ViewAngle.y = CurrentRig.LookDownLimit;

		// set player rotation (except when planting mines)
		pl->m_fPlayerRotationTarget = -pl->ViewAngle.x;

		// calculate player vision
		r3dVector FinalViewAngle = pl->ViewAngle + pl->RecoilViewMod + pl->SniperViewMod;
		if(FinalViewAngle.x > 360.0f ) FinalViewAngle.x = FinalViewAngle.x - 360.0f;
		if(FinalViewAngle.x < 0.0f )   FinalViewAngle.x = FinalViewAngle.x + 360.0f;
		// Player can't look too high!
		if(FinalViewAngle.y > CurrentRig.LookUpLimit )  FinalViewAngle.y = CurrentRig.LookUpLimit;
		if(FinalViewAngle.y < CurrentRig.LookDownLimit) FinalViewAngle.y = CurrentRig.LookDownLimit;

		D3DXMATRIX mr;
		D3DXMatrixRotationYawPitchRoll(&mr, R3D_DEG2RAD(-FinalViewAngle.x), R3D_DEG2RAD(-FinalViewAngle.y), 0);
		pl->m_vVision  = r3dVector(mr._31, mr._32, mr._33);
	}

	if (TargetRig.FXFunc) TargetRig.FXFunc(LerpValue);

	pl->UpdateLocalPlayerMovement();
}

//----------------------------------------------------------------
void TPSGameHUD :: Process()
//----------------------------------------------------------------
{
	if( g_cursor_mode->GetInt() )
	{
		imgui_Update();
		imgui2_Update();
	}

	{
		r3dSetAsyncLoading( 1 ) ;
	}

	obj_Player* pl = gClientLogic().localPlayer_;
	if(!pl) return;

#ifdef FINAL_BUILD
if (gUserProfile.ProfileData.isDevAccount){
#endif//Spectator

	bool allow_specator_mode = true;
	if(Keyboard->WasPressed(kbsF8) && allow_specator_mode)
	{
		d_video_spectator_mode->SetBool(!d_video_spectator_mode->GetBool());
		static float DOF_NS=0, DOF_NE=0, DOF_FS=0, DOF_FE=0;
		static int DOF_N=0, DOF_F=0, DOF_ENABLE=0;
		if(d_video_spectator_mode->GetBool())
		{
			FPS_vViewOrig.Assign(pl->ViewAngle);
			// save
			DOF_NS=DepthOfField_NearStart;
			DOF_NE=DepthOfField_NearEnd;
			DOF_FS=DepthOfField_FarStart;
			DOF_FE=DepthOfField_FarEnd;
			DOF_N=_NEAR_DOF;
			DOF_F=_FAR_DOF;
			DOF_ENABLE=LevelDOF;
		}
		else
		{
			// restore
			DepthOfField_NearStart=DOF_NS;
			DepthOfField_NearEnd=DOF_NE;
			DepthOfField_FarStart=DOF_FS;
			DepthOfField_FarEnd=DOF_FE;
			_NEAR_DOF=DOF_N;
			_FAR_DOF=DOF_F;
			LevelDOF=DOF_ENABLE;
		}
	}

	bool allow_observer_mode = true;
	allow_observer_mode = false;

	if(Keyboard->WasPressed(kbsF9) && allow_observer_mode)
	{
		d_observer_mode->SetBool(!d_observer_mode->GetBool());
		if(d_observer_mode->GetBool())
		{
			FPS_vViewOrig.Assign(pl->ViewAngle);
		}
	}

	if(d_video_spectator_mode->GetBool() || d_observer_mode->GetBool())
	{
		FPS_Acceleration.Assign(0, 0, 0);

		float  glb_MouseSensAdj = g_mouse_sensitivity->GetFloat();	
		// camera view
		if(Gamepad->IsConnected())
		{
			float X, Y;
			Gamepad->GetRightThumb(X, Y);
			FPS_vViewOrig.x += float(-X) * r_gamepad_view_sens->GetFloat();
			FPS_vViewOrig.y += float(Y) * r_gamepad_view_sens->GetFloat() * (g_vertical_look->GetBool()?-1.0f:1.0f);
		}
		else // mouse fallback
		{
			int mMX=Mouse->m_MouseMoveX, mMY=Mouse->m_MouseMoveY;

			FPS_vViewOrig.x += float(-mMX) * glb_MouseSensAdj;
			FPS_vViewOrig.y += float(-mMY) * glb_MouseSensAdj * (g_vertical_look->GetBool()?-1.0f:1.0f);
		}

		if(FPS_vViewOrig.y > 85)  FPS_vViewOrig.y = 85;
		if(FPS_vViewOrig.y < -85) FPS_vViewOrig.y = -85;

		FPS_ViewAngle = FPS_vViewOrig;

		if(FPS_ViewAngle.y > 360 ) FPS_ViewAngle.y = FPS_ViewAngle.y - 360;
		if(FPS_ViewAngle.y < 0 )   FPS_ViewAngle.y = FPS_ViewAngle.y + 360;


		D3DXMATRIX mr;

		D3DXMatrixIdentity(&mr);
		D3DXMatrixRotationYawPitchRoll(&mr, R3D_DEG2RAD(-FPS_ViewAngle.x), R3D_DEG2RAD(-FPS_ViewAngle.y), 0);

		FPS_vVision  = r3dVector(mr._31, mr._32, mr._33);

		D3DXMatrixIdentity(&mr);
		D3DXMatrixRotationYawPitchRoll(&mr, R3D_DEG2RAD(-FPS_ViewAngle.x), 0, 0);
		FPS_vRight = r3dVector(mr._11, mr._12, mr._13);
		FPS_vUp    = r3dVector(0, 1, 0);
		FPS_vForw  = r3dVector(mr._31, mr._32, mr._33);

		FPS_vForw.Normalize();
		FPS_vRight.Normalize();
		FPS_vVision.Normalize();

	   // walk
	   #ifndef FINAL_BUILD
	      extern float __EditorWalkSpeed;
	   #endif
    
	   #ifdef FINAL_BUILD
	      float __EditorWalkSpeed = 8.0f; //Spectator
	   #endif



	      float fSpeed = __EditorWalkSpeed;

		float mult = 1;
		if(Keyboard->IsPressed(kbsLeftShift)) mult = d_spectator_fast_move_mul->GetFloat();
		if(Keyboard->IsPressed(kbsLeftControl)) mult = d_spectator_slow_move_mul->GetFloat();

		if(Keyboard->IsPressed(kbsW)) FPS_Acceleration.Z = fSpeed;
		if(Keyboard->IsPressed(kbsS)) FPS_Acceleration.Z = -fSpeed * 0.7f;
		if(Keyboard->IsPressed(kbsA)) FPS_Acceleration.X = -fSpeed * 0.7f;
		if(Keyboard->IsPressed(kbsD)) FPS_Acceleration.X = fSpeed * 0.7f;
		if(Keyboard->IsPressed(kbsQ)) FPS_Position.Y    += SRV_WORLD_SCALE(1.0f)* r3dGetFrameTime() * mult;
		if(Keyboard->IsPressed(kbsE)) FPS_Position.Y    -= SRV_WORLD_SCALE(1.0f)* r3dGetFrameTime() * mult;

		if(Gamepad->IsConnected())
		{
			float RX, RY, TL, TR;
			Gamepad->GetLeftThumb(RX, RY);
			Gamepad->GetTrigger(TL, TR);

			FPS_Acceleration.Z = -RY*r_gamepad_move_speed->GetFloat();
			FPS_Acceleration.Z = RY*r_gamepad_move_speed->GetFloat();
			FPS_Acceleration.X = -RX*r_gamepad_move_speed->GetFloat();
			FPS_Acceleration.X = RX*r_gamepad_move_speed->GetFloat();
			FPS_Position.Y    += r3dGetFrameTime() * TR * r_gamepad_move_speed->GetFloat();
			FPS_Position.Y    -= r3dGetFrameTime() * TL * r_gamepad_move_speed->GetFloat();
		}

		FPS_Position += FPS_vVision * FPS_Acceleration.Z * r3dGetFrameTime() * mult;
		FPS_Position += FPS_vRight * FPS_Acceleration.X * r3dGetFrameTime() *mult;

		return;
	}
#ifdef FINAL_BUILD
}
#endif
	ProcessPlayerMovement(pl, false);
}
 
Upvote 0
Experienced Elementalist
Joined
Sep 13, 2013
Messages
205
Reaction score
23
Thanks man your awesome



It didnt work I cant go first person


DNC ??



wait do I need to rebuild server?



Wait its just my game other people can but the buttons are messed up



First person work but when i look at key bindings they are all fucked up


DNC ok first person works but keybindings are all random also there is no gun in first person
 
Upvote 0
Joined
Oct 28, 2011
Messages
2,465
Reaction score
1,258
I did not adjust your key bindings.
You can manually adjust those. Look in your GameSettings.ini file and your Vars.h (src file)

I didn't do anything but add 8 freaking lines to that code.
I did not break it, I told you to back it up, anything else is you dude.

You are now reaching my last straw.
Be careful what you reply next.
 
Upvote 0
Back
Top