X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=view.c;h=7b1ca6ddb1acb46da513add316c8d54e2e46ca72;hb=e3659f7d732ee4b564af752529bc6f0c3b489e8d;hp=060464ac7d2f72dfdba61068782e2566379f628b;hpb=435b52972823fa8e8ceb9b67797ca3f886f6208a;p=xonotic%2Fdarkplaces.git diff --git a/view.c b/view.c index 060464ac..7b1ca6dd 100644 --- a/view.c +++ b/view.c @@ -248,7 +248,7 @@ void V_ParseDamage (void) } // calculate view angle kicks - if (cl.viewentity >= 0 && cl.viewentity < MAX_EDICTS && cl_entities[cl.viewentity].state_current.active) + if (cl_entities[cl.viewentity].state_current.active) { ent = &cl_entities[cl.viewentity]; Matrix4x4_Transform(&ent->render.inversematrix, from, localfrom); @@ -308,12 +308,12 @@ V_CalcRefdef ================== */ -extern float timerefreshangle; void V_CalcRefdef (void) { static float oldz; entity_t *ent; float vieworg[3], viewangles[3]; + trace_t trace; Matrix4x4_CreateIdentity(&viewmodelmatrix); Matrix4x4_CreateIdentity(&r_refdef.viewentitymatrix); if (cls.state == ca_connected && cls.signon == SIGNONS) @@ -325,6 +325,8 @@ void V_CalcRefdef (void) // entity is a fixed camera, just copy the matrix Matrix4x4_Copy(&r_refdef.viewentitymatrix, &ent->render.matrix); Matrix4x4_Copy(&viewmodelmatrix, &ent->render.matrix); + r_refdef.viewentitymatrix.m[2][3] += cl.stats[STAT_VIEWHEIGHT]; + viewmodelmatrix.m[2][3] += cl.stats[STAT_VIEWHEIGHT]; } else { @@ -351,7 +353,7 @@ void V_CalcRefdef (void) if (chase_active.value) { // observing entity from third person - vec_t camback, camup, dist, forward[3], stop[3], chase_dest[3], normal[3]; + vec_t camback, camup, dist, forward[3], chase_dest[3]; camback = bound(0, chase_back.value, 128); if (chase_back.value != camback) @@ -376,10 +378,8 @@ void V_CalcRefdef (void) chase_dest[0] = vieworg[0] + forward[0] * dist; chase_dest[1] = vieworg[1] + forward[1] * dist; chase_dest[2] = vieworg[2] + forward[2] * dist + camup; - CL_TraceLine(vieworg, chase_dest, stop, normal, true, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_SKY); - vieworg[0] = stop[0] + forward[0] * 8 + normal[0] * 4; - vieworg[1] = stop[1] + forward[1] * 8 + normal[1] * 4; - vieworg[2] = stop[2] + forward[2] * 8 + normal[2] * 4; + trace = CL_TraceBox(vieworg, vec3_origin, vec3_origin, chase_dest, true, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_SKY, false); + VectorMAMAM(1, trace.endpos, 8, forward, 4, trace.plane.normal, vieworg); } else { @@ -388,7 +388,7 @@ void V_CalcRefdef (void) if (cl.stats[STAT_HEALTH] <= 0 && gamemode != GAME_FNIGGIUM) viewangles[ROLL] = 80; // dead view angle VectorAdd(viewangles, cl.punchangle, viewangles); - viewangles[ROLL] += V_CalcRoll(cl.viewangles, cl.velocity); + viewangles[ROLL] += V_CalcRoll(cl.viewangles, cl.movement_velocity); if (v_dmg_time > 0) { viewangles[ROLL] += v_dmg_time/v_kicktime.value*v_dmg_roll; @@ -397,7 +397,7 @@ void V_CalcRefdef (void) } // origin VectorAdd(vieworg, cl.punchvector, vieworg); - vieworg[2] += cl.viewheight; + vieworg[2] += cl.stats[STAT_VIEWHEIGHT]; if (cl.stats[STAT_HEALTH] > 0 && cl_bob.value && cl_bobcycle.value) { double bob, cycle; @@ -413,7 +413,7 @@ void V_CalcRefdef (void) cycle = sin(M_PI + M_PI * (cycle-cl_bobup.value)/(1.0 - cl_bobup.value)); // bob is proportional to velocity in the xy plane // (don't count Z, or jumping messes it up) - bob = sqrt(cl.velocity[0]*cl.velocity[0] + cl.velocity[1]*cl.velocity[1]) * cl_bob.value; + bob = sqrt(cl.movement_velocity[0]*cl.movement_velocity[0] + cl.movement_velocity[1]*cl.movement_velocity[1]) * cl_bob.value; bob = bob*0.3 + bob*0.7*cycle; vieworg[2] += bound(-7, bob, 4); } @@ -449,61 +449,71 @@ void V_CalcViewBlend(void) r_refdef.viewblend[1] = 0; r_refdef.viewblend[2] = 0; r_refdef.viewblend[3] = 0; + r_refdef.fovscale_x = cl.viewzoom; + r_refdef.fovscale_y = cl.viewzoom; if (cls.state == ca_connected && cls.signon == SIGNONS && gl_polyblend.value > 0) { // set contents color - switch (CL_PointQ1Contents(r_vieworigin)) + int supercontents; + vec3_t vieworigin; + Matrix4x4_OriginFromMatrix(&r_refdef.viewentitymatrix, vieworigin); + supercontents = CL_PointSuperContents(vieworigin); + if (supercontents & SUPERCONTENTS_LIQUIDSMASK) + { + r_refdef.fovscale_x *= 1 - (((sin(cl.time * 4.7) + 1) * 0.015) * r_waterwarp.value); + r_refdef.fovscale_y *= 1 - (((sin(cl.time * 3.0) + 1) * 0.015) * r_waterwarp.value); + if (supercontents & SUPERCONTENTS_LAVA) + { + cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 255; + cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 80; + cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 0; + } + else if (supercontents & SUPERCONTENTS_SLIME) + { + cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 0; + cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 25; + cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 5; + } + else + { + cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 130; + cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 80; + cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 50; + } + cl.cshifts[CSHIFT_CONTENTS].percent = 150 >> 1; + } + else { - case CONTENTS_EMPTY: - case CONTENTS_SOLID: cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 0; cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 0; cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 0; cl.cshifts[CSHIFT_CONTENTS].percent = 0; - break; - case CONTENTS_LAVA: - cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 255; - cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 80; - cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 0; - cl.cshifts[CSHIFT_CONTENTS].percent = 150 >> 1; - break; - case CONTENTS_SLIME: - cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 0; - cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 25; - cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 5; - cl.cshifts[CSHIFT_CONTENTS].percent = 150 >> 1; - break; - default: - cl.cshifts[CSHIFT_CONTENTS].destcolor[0] = 130; - cl.cshifts[CSHIFT_CONTENTS].destcolor[1] = 80; - cl.cshifts[CSHIFT_CONTENTS].destcolor[2] = 50; - cl.cshifts[CSHIFT_CONTENTS].percent = 128 >> 1; } if (gamemode != GAME_TRANSFUSION) { - if (cl.items & IT_QUAD) + if (cl.stats[STAT_ITEMS] & IT_QUAD) { cl.cshifts[CSHIFT_POWERUP].destcolor[0] = 0; cl.cshifts[CSHIFT_POWERUP].destcolor[1] = 0; cl.cshifts[CSHIFT_POWERUP].destcolor[2] = 255; cl.cshifts[CSHIFT_POWERUP].percent = 30; } - else if (cl.items & IT_SUIT) + else if (cl.stats[STAT_ITEMS] & IT_SUIT) { cl.cshifts[CSHIFT_POWERUP].destcolor[0] = 0; cl.cshifts[CSHIFT_POWERUP].destcolor[1] = 255; cl.cshifts[CSHIFT_POWERUP].destcolor[2] = 0; cl.cshifts[CSHIFT_POWERUP].percent = 20; } - else if (cl.items & IT_INVISIBILITY) + else if (cl.stats[STAT_ITEMS] & IT_INVISIBILITY) { cl.cshifts[CSHIFT_POWERUP].destcolor[0] = 100; cl.cshifts[CSHIFT_POWERUP].destcolor[1] = 100; cl.cshifts[CSHIFT_POWERUP].destcolor[2] = 100; cl.cshifts[CSHIFT_POWERUP].percent = 100; } - else if (cl.items & IT_INVULNERABILITY) + else if (cl.stats[STAT_ITEMS] & IT_INVULNERABILITY) { cl.cshifts[CSHIFT_POWERUP].destcolor[0] = 255; cl.cshifts[CSHIFT_POWERUP].destcolor[1] = 255;