/* V_RenderView The player's clipping box goes from (-16 -16 -24) to (16 16 32) from the entity origin, so any view position inside that will be valid */ void V_RenderView (void) { if (cls.state != ca_active) return; view_frame = &cl.frames[cls.netchan.incoming_sequence & UPDATE_MASK]; view_message = &view_frame->playerstate[cl.playernum]; if (view_message->pls.flags & PF_GIB) cl.viewheight = 8; // gib view height else if (view_message->pls.flags & PF_DEAD) cl.viewheight = -16; // corpse view height else { cl.viewheight = DEFAULT_VIEWHEIGHT; // view height if (cl.stdver) cl.viewheight = cl.stats[STAT_VIEWHEIGHT]; } DropPunchAngle (); if (cl.intermission) { // intermission / finale rendering V_CalcIntermissionRefdef (); } else { V_CalcRefdef (); } r_funcs->R_RenderView (); }
/* =================== SV_ClientThink the move fields specify an intended velocity in pix/sec the angle fields specify an exact angular motion in degrees =================== */ void SV_ClientThink (void) { vec3_t v_angle; if (sv_player->v.movetype == MOVETYPE_NONE) return; onground = (int)sv_player->v.flags & FL_ONGROUND; origin = sv_player->v.origin; velocity = sv_player->v.velocity; DropPunchAngle (); // // if dead, behave differently // if (sv_player->v.health <= 0) return; // // angles // show 1/3 the pitch angle and all the roll angle cmd = host_client->cmd; angles = sv_player->v.angles; VectorAdd (sv_player->v.v_angle, sv_player->v.punchangle, v_angle); angles[ROLL] = V_CalcRoll (sv_player->v.angles, sv_player->v.velocity)*4; if (!sv_player->v.fixangle) { angles[PITCH] = -v_angle[PITCH]/3; angles[YAW] = v_angle[YAW]; } if ( (int)sv_player->v.flags & FL_WATERJUMP ) { SV_WaterJump (); return; } // // walk // if ( (sv_player->v.waterlevel >= 2) && (sv_player->v.movetype != MOVETYPE_NOCLIP) ) { SV_WaterMove (); return; } SV_AirMove (); }
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 (); }
void V_RenderView (void) { char *p; cl.simangles[ROLL] = 0; // FIXME @@@ if (cls.state != ca_active) { V_CalcBlend (); return; } view_frame = &cl.frames[cl.validsequence & UPDATE_MASK]; if (!cls.nqdemoplayback) view_message = view_frame->playerstate[cl.viewplayernum]; DropPunchAngle (); if (cl.intermission) // intermission / finale rendering V_CalcIntermissionRefdef (); else V_CalcRefdef (); R_PushDlights (); r_refdef2.time = cl.time; // restrictions r_refdef2.allow_cheats = (Info_ValueForKey(cl.serverinfo, "*cheats")[0] && com_serveractive) || cls.demoplayback; if (cls.demoplayback || cl.spectator) { r_refdef2.allow_lumas = true; r_refdef2.max_fbskins = 1; r_refdef2.max_watervis = 1; } else { r_refdef2.allow_lumas = !strcmp(Info_ValueForKey(cl.serverinfo, "24bit_fbs"), "0") ? false : true; r_refdef2.max_fbskins = *(p = Info_ValueForKey(cl.serverinfo, "fbskins")) ? bound(0, Q_atof(p), 1) : cl.teamfortress ? 0 : 1; r_refdef2.max_watervis = *(p = Info_ValueForKey(cl.serverinfo, "watervis")) ? bound(0, Q_atof(p), 1) : 0; } // r_refdef2.viewplayernum = Cam_PlayerNum(); // r_refdef2.lightstyles = cl_lightstyle; R_RenderView (); }
/* =================== SV_ClientThink the move fields specify an intended velocity in pix/sec the angle fields specify an exact angular motion in degrees =================== */ static void SV_ClientThink(client_t *client) { edict_t *player = client->edict; vec3_t v_angle; if (player->v.movetype == MOVETYPE_NONE) return; DropPunchAngle(player->v.punchangle); /* if dead, behave differently */ if (player->v.health <= 0) return; /* angles - show 1/3 the pitch angle and all the roll angle */ VectorAdd(player->v.v_angle, player->v.punchangle, v_angle); player->v.angles[ROLL] = V_CalcRoll(player->v.angles, player->v.velocity) * 4; if (!player->v.fixangle) { player->v.angles[PITCH] = -v_angle[PITCH] / 3; player->v.angles[YAW] = v_angle[YAW]; } if ((int)player->v.flags & FL_WATERJUMP) { SV_WaterJump(player); return; } /* walk */ if (player->v.waterlevel >= 2 && player->v.movetype != MOVETYPE_NOCLIP) { SV_WaterMove(&client->cmd, player); return; } SV_AirMove(&client->cmd, player); }
void SV_ClientThink (void) { vec3_t v_angle; int yeahdead; if (sv_player->v.movetype == MOVETYPE_NONE) return; if (cl.stats[STAT_HEALTH] <= 0) { yeahdead = 1; if (!deathcam_yesiamdead){ deathcam_angles[PITCH] = 50; // deathcam_angles[YAW] = 20; deathcam_angles[ROLL] = 0; deathcam_whenidied = sv.time; //Con_Printf("I died at %f. sob.\n", deathcam_whenidied); } if (cl_diecam->value) deathcam_yesiamdead = cl_diecam->value; } else { yeahdead = 0; deathcam_yesiamdead = 0; } onground = (int)sv_player->v.flags & FL_ONGROUND; origin = sv_player->v.origin; velocity = sv_player->v.velocity; DropPunchAngle (); // // if dead, behave differently // // leilei - standstill hack if (sv_standstill->value) { float sample1, sample2, sample3, sample4, sample5; float divided; if (sv_maxspeed->value) divided = 1 / sv_maxspeed->value * sv_standstill->value; else divided = 1; // avoiding a div0...... sample1 = cmd.forwardmove * divided; sample2 = cmd.sidemove * divided; sample3 = cmd.upmove * divided; sample4 = amouse_x * divided; sample5 = amouse_y * divided; if (sample1 < 0) sample1 *= -1; if (sample2 < 0) sample2 *= -1; if (sample3 < 0) sample3 *= -1; if (sample4 < 0) sample4 *= -1; if (sample5 < 0) sample5 *= -1; thestandstill = sample1 + sample2 + sample3 + sample4 + sample5 * 0.5; if (thestandstill > 1) thestandstill = 1; Cvar_SetValue (host_timescale,thestandstill); // slow it down! } if (sv_player->v.health <= 0) return; // // angles // show 1/3 the pitch angle and all the roll angle cmd = host_client->cmd; angles = sv_player->v.angles; // leilei - aim lock if (aimlock){ if ((lockedangle[YAW] + aimlockangle) > 360){ // Con_Printf("goddamnit.\n"); if (cl.viewangles[YAW] > (lockedangle[YAW] + aimlockangle > 360)) sv_player->v.angles[YAW] -= 360; if (cl.viewangles[YAW] > lockedangle[YAW] + aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] + aimlockangle; } else if (cl.viewangles[YAW] > lockedangle[YAW] + aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] + aimlockangle; if ((lockedangle[YAW] - aimlockangle) < 0){ if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle + 360; if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle; // Con_Printf("mother\n"); } else if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle; // TODO: wrap angle, wrapangle if (cl.viewangles[PITCH] < lockedangle[PITCH] - aimlockangle) cl.viewangles[PITCH] = lockedangle[PITCH] - aimlockangle; if (cl.viewangles[PITCH] > lockedangle[PITCH] + aimlockangle) cl.viewangles[PITCH] = lockedangle[PITCH] + aimlockangle; // if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle; // if (cl.viewangles[YAW] > lockedangle[YAW] + aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] + aimlockangle; } VectorAdd (sv_player->v.v_angle, sv_player->v.punchangle, v_angle); angles[ROLL] = V_CalcRoll (sv_player->v.angles, sv_player->v.velocity)*4; if (!sv_player->v.fixangle) { angles[PITCH] = -v_angle[PITCH]/3; angles[YAW] = v_angle[YAW]; } if ( (int)sv_player->v.flags & FL_WATERJUMP ) { SV_WaterJump (); return; } // // walk // if ( (sv_player->v.waterlevel >= 2) && (sv_player->v.movetype != MOVETYPE_NOCLIP) ) { SV_WaterMove (); return; } SV_AirMove (); }