Example #1
0
/*
================
CL_TestEntities

if cl_testentities is set, create 32 player models
================
*/
void CL_TestEntities( void )
{
	int	i, j;
	float	f, r;
	edict_t	ent, *pl;

	if( !cl_testentities->integer )
		return;

	pl = CL_GetLocalPlayer();
	Mem_Set( &ent, 0, sizeof( edict_t ));
	V_ClearScene();

	for( i = 0; i < 32; i++ )
	{
		r = 64 * ((i%4) - 1.5 );
		f = 64 * (i/4) + 128;

		for( j = 0; j < 3; j++ )
			ent.v.origin[j] = cl.refdef.vieworg[j]+cl.refdef.forward[j] * f + cl.refdef.right[j] * r;

		ent.v.scale = 1.0f;
		ent.serialnumber = pl->serialnumber;
		ent.v.controller[0] = ent.v.controller[1] = 90.0f;
		ent.v.controller[2] = ent.v.controller[3] = 180.0f;
		ent.v.modelindex = pl->v.modelindex;
		re->AddRefEntity( &ent, ED_NORMAL, -1 );
	}
}
Example #2
0
void V_NewMap (void)
{
	v_iyaw_cycle = 2;
	v_iroll_cycle = 0.5;
	v_ipitch_cycle = 1;
	v_iyaw_level = 0.3;
	v_iroll_level = 0.1;
	v_ipitch_level = 0.3;
	v_idlescale = 0;

	v_dmg_time = 0;
	v_dmg_roll = 0;
	v_dmg_pitch = 0;

	V_ClearScene();
}
Example #3
0
bool V_RenderView()
{
	guard(V_RenderView);

	if (cls.state != ca_active)
		return false;
	if (!cl.rendererReady)
		return false;			// still loading
	if (!bspfile.clientLoaded)
		return false;			// map already unloaded (by server), but client is still active (ca_active)

	if (timedemo->integer)
	{
		static unsigned lastTime = 0;

		unsigned time = appMilliseconds();
		if (!cl.timedemoStart)
		{
			cl.timedemoStart        = time;
//			cl.timedemoLongestFrame = 0;	-- cleared anyway within a new server map
//			cl.timedemoFrames       = 0;
		}
		else
		{
			unsigned timeDelta = time - lastTime;
			if (timeDelta > cl.timedemoLongestFrame) //?? && !fileFromPak)
				cl.timedemoLongestFrame = timeDelta;
		}
		lastTime = time;
		cl.timedemoFrames++;
	}

#if PROFILE_VIEW
	unsigned beforePrep = 0, beforeDebug = 0, beforeEffects = 0, afterEffects = 0, beforeRender, afterRender;
#endif

	// an invalid frame will just use the exact previous refdef
	// we can't use the old frame if the video mode has changed, though...
	if (cl.frame.valid && (cl.forceViewFrame || !cl_paused->integer))
	{
		PRF(beforePrep = appCycles());
		cl.forceViewFrame = false;

		CalcVrect();
		TileClear();
		V_ClearScene();

		cl.refdef.rdflags = cl.frame.playerstate.rdflags;

		// build a renderer entity list and calc cl.sim*
		// this also calls CL_CalcViewValues which loads
		// v_forward, etc.
		CL_AddEntities();
		PRF(beforeEffects = appCycles());
		CL_AddEffects();
		PRF(afterEffects = appCycles());
		CL_AddTEnts();

#if !NO_DEBUG
		if (cl_testentities->integer)	TestEntities();
		if (cl_testlights->integer)		TestLights();
		if (cl_testblend->integer)
		{
			r_blend[0] = 1;
			r_blend[1] = 0.5;
			r_blend[2] = 0.25;
			r_blend[3] = 0.5;
		}

		// debug output
		// free debug memory from previous frame
		if (debugMem)
		{
			delete debugMem;
			debugMem = NULL;
		}
		PRF(beforeDebug = appCycles());
		if (r_playerpos->integer)	DrawOriginInfo();
		if (r_surfinfo->integer)	DrawSurfInfo();
		DrawBrush();
#endif // NO_DEBUG

#if 0
		// never let it sit exactly on a node line, because a water plane can
		// dissapear when viewed with the eye exactly on it.
		// the server protocol only specifies to 1/8 pixel, so add 1/16 in each axis
		cl.refdef.vieworg[0] += 1.0f/16;	//??
		cl.refdef.vieworg[1] += 1.0f/16;
		cl.refdef.vieworg[2] += 1.0f/16;
#endif

		cl.refdef.x      = scr_vrect.x;
		cl.refdef.y      = scr_vrect.y;
		cl.refdef.width  = scr_vrect.width;
		cl.refdef.height = scr_vrect.height;
		cl.refdef.fov_y  = CalcFov(cl.refdef.fov_x, cl.refdef.width, cl.refdef.height);
		cl.refdef.time   = cl.ftime;

		cl.refdef.zonebits = cl.frame.zonebits;

		if (!cl_add_entities->integer)	r_numentities = 0;
		if (!cl_add_lights->integer)	r_numdlights = 0;
		if (!cl_add_blend->integer || cl.refdef.rdflags & RDF_THIRD_PERSON)
			r_blend[3] = 0;

		cl.refdef.num_entities = r_numentities;
		cl.refdef.entities     = r_entities;
		cl.refdef.particles    = cl_add_particles->integer ? active_particles : NULL;
		cl.refdef.beams        = active_beams;
		cl.refdef.num_dlights  = r_numdlights;
		cl.refdef.dlights      = r_dlights;
		cl.refdef.lightstyles  = cl_lightstyles;

		// underwater fov warp (taken from Q3 game source)
		if (cl.refdef.rdflags & RDF_UNDERWATER)
		{
			float v = sin(cl.ftime * 0.4f * M_PI * 2);
			cl.refdef.fov_x += v;
			cl.refdef.fov_y -= v;
		}
		FixWaterVis();
	}
	PRF(beforeRender = appCycles());
	// render scene
	RE_RenderFrame(&cl.refdef);
	PRF(afterRender = appCycles());
	// add full-screen blend
	if (r_blend[3])
		RE_Fill(cl.refdef.x, cl.refdef.y, cl.refdef.width, cl.refdef.height,
			RGBAS(r_blend[0], r_blend[1], r_blend[2], r_blend[3]));

#if PROFILE_VIEW
	RE_DrawTextLeft(va("V: prep1: %5.2f fx: %5.2f prep2: %5.2f dbg: %5.2f render: %5.2f",
		appCyclesToMsecf(beforeEffects - beforePrep),
		appCyclesToMsecf(afterEffects - beforeEffects),
		appCyclesToMsecf(beforeDebug - afterEffects),
		appCyclesToMsecf(beforeRender - beforeDebug),
		appCyclesToMsecf(afterRender - beforeRender)),
		RGB(0.2,1,0.2));
#endif

	// stats
	if (r_drawfps->integer)
		DrawFpsInfo();

	return true;
	unguard;
}