コード例 #1
0
void V_RenderView (void)
{
	int i;
	translation_info_t translations[MAX_CLIENTS];

//	if (cl.simangles[ROLL])
//		Sys_Error ("cl.simangles[ROLL]");	// DEBUG
cl.simangles[ROLL] = 0;	// FIXME @@@ 

	if (cls.state != ca_active)
		return;

	if (cl.validsequence)
		view_message = cl.frames[cl.validsequence & UPDATE_MASK].playerstate[Cam_PlayerNum()];

	DropPunchAngle ();
	if (cl.intermission)
	{
		// intermission / finale rendering
		V_CalcIntermissionRefdef ();	
	}
	else
	{
		V_CalcRefdef ();
	}
	
	r_refdef2.time = cl.time;
//	r_refdef2.allowCheats = false;
	r_refdef2.viewplayernum = Cam_PlayerNum();
	r_refdef2.watervis = (atoi(Info_ValueForKey(cl.serverinfo, "watervis")) != 0);

	r_refdef2.lightstyles = cl_lightstyle;

	r_refdef2.numDlights = cl_numvisdlights;
	r_refdef2.dlights = cl_visdlights;

	r_refdef2.numParticles = 0; //cl_numvisparticles;
	r_refdef2.particles = NULL;//cl_visparticles;

	for (i = 0; i < MAX_CLIENTS; i++) {
		translations[i].topcolor = cl.players[i].topcolor;
		translations[i].bottomcolor = cl.players[i].bottomcolor;
		strlcpy (translations[i].skinname, cl.players[i].skin, sizeof(translations[0].skinname));
	}
	r_refdef2.translations = translations;
	strlcpy (r_refdef2.baseskin, baseskin.string, sizeof(r_refdef2.baseskin));

	R_RenderView ();
}
コード例 #2
0
/*
=================
CL_UpdateBeams
=================
*/
void CL_UpdateBeams (void)
{
    int			i;
    beam_t		*b;
    vec3_t		dist, org;
    float		d, dec;
    entity_t	ent;
    vec3_t		angles;

    dec = 30;
    memset (&ent, 0, sizeof(entity_t));
    ent.colormap = 0;

// update lightning
    for (i = 0, b = cl_beams; i < MAX_BEAMS; i++, b++)
    {
        if (!b->model || b->endtime < cl.time)
            continue;

        // if coming from the player, update the start position
        if (b->entity == Cam_PlayerNum() + 1 && !cl.intermission)
        {
            VectorCopy (cl.simorg, b->start);
            b->start[2] += cl.crouch;
            if (cl_fakeshaft.value && cl.allow_fakeshaft)
            {
                vec3_t	forward;
                vec3_t	v, org;
                vec3_t	ang;
                float	f, delta;
                trace_t	trace;

                f = max(0, min(1, cl_fakeshaft.value));

                VectorSubtract (playerbeam_end, cl.simorg, v);
                v[2] -= 22;		// adjust for view height
                vectoangles (v, ang);

                // lerp pitch
                ang[0] = -ang[0];
                if (ang[0] < -180)
                    ang[0] += 360;
                ang[0] += (cl.simangles[0] - ang[0]) * f;

                // lerp yaw
                delta = cl.simangles[1] - ang[1];
                if (delta > 180)
                    delta -= 360;
                if (delta < -180)
                    delta += 360;
                ang[1] += delta*f;
                ang[2] = 0;

                AngleVectors (ang, forward, NULL, NULL);
                VectorScale (forward, 600, forward);
                VectorCopy (cl.simorg, org);
                org[2] += 16;
                VectorAdd (org, forward, b->end);

                trace = PM_TraceLine (&cl.pmove, org, b->end);
                if (trace.fraction < 1)
                    VectorCopy (trace.endpos, b->end);
            }
        }

        // calculate pitch and yaw
        VectorSubtract (b->end, b->start, dist);
        vectoangles (dist, angles);

        // add new entities for the lightning
        VectorCopy (b->start, org);
        d = VectorNormalize (dist);
        VectorScale (dist, dec, dist);

        while (d > 0)
        {
            VectorCopy (org, ent.origin);
            ent.model = b->model;
            ent.angles[PITCH] = angles[PITCH];
            ent.angles[YAW] = angles[YAW];
            ent.angles[ROLL] = rand() % 360;
            if (b->model == cl_bolt2_mod)
                ent.alpha = r_shaftalpha.value;

            V_AddEntity (&ent);

            d -= dec;
            VectorAdd (org, dist, org);
        }
    }
}
コード例 #3
0
/*
=================
CL_ParseBeam
=================
*/
void CL_ParseBeam (int type)
{
    int		ent;
    vec3_t	start, end;
    beam_t	*b;
    struct model_s *m;
    int		i;

    ent = MSG_ReadShort ();

    start[0] = MSG_ReadCoord ();
    start[1] = MSG_ReadCoord ();
    start[2] = MSG_ReadCoord ();

    end[0] = MSG_ReadCoord ();
    end[1] = MSG_ReadCoord ();
    end[2] = MSG_ReadCoord ();

    // ZQuake protocol extension:
    // TE_LIGHTNING1 with entity num in -1288..-265 range is TE_BEAM
    if (type == 1 && (ent >= -1288 && ent <= -265) /* 1024 slots */) {
        if (!cl_beam_mod)
            cl_beam_mod = Mod_ForName ("progs/beam.mdl", true);
        m = cl_beam_mod;
        ent -= -1288;
        goto do_beam;
    }

    switch (type) {
    case 1:
        if (!cl_bolt1_mod)
            cl_bolt1_mod = Mod_ForName ("progs/bolt.mdl", true);
        m = cl_bolt1_mod;
        break;
    case 2:
        if (!cl_bolt2_mod)
            cl_bolt2_mod = Mod_ForName ("progs/bolt2.mdl", true);
        m = cl_bolt2_mod;
        break;
    case 3:
        if (!cl_bolt3_mod)
            cl_bolt3_mod = Mod_ForName ("progs/bolt3.mdl", true);
        m = cl_bolt3_mod;
        break;
    case 4:
    default:
        if (!cl_beam_mod)
            cl_beam_mod = Mod_ForName ("progs/beam.mdl", true);
        m = cl_beam_mod;
        break;
    }

do_beam:
    if (ent == Cam_PlayerNum() + 1)
        VectorCopy (end, playerbeam_end);	// for cl_fakeshaft

// override any beam with the same entity
    for (i = 0, b = cl_beams; i < MAX_BEAMS; i++, b++)
    {
        if (b->entity == ent)
        {
            b->model = m;
            b->endtime = cl.time + 0.2;
            VectorCopy (start, b->start);
            VectorCopy (end, b->end);
            return;
        }
    }

// find a free beam
    for (i = 0, b = cl_beams; i < MAX_BEAMS; i++, b++)
    {
        if (!b->model || b->endtime < cl.time)
        {
            b->entity = ent;
            b->model = m;
            b->endtime = cl.time + 0.2;
            VectorCopy (start, b->start);
            VectorCopy (end, b->end);
            return;
        }
    }

    Com_DPrintf ("beam list overflow!\n");
}