mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2024-11-10 14:52:00 +00:00
Greatly improved performance of railgun core "high" setting
also, make sure only the HUD is decoupled, keep other things coupled to view angles (like intermission scoreboard)
This commit is contained in:
parent
90059c4bbc
commit
cbd1850cd6
2 changed files with 40 additions and 26 deletions
|
@ -2909,22 +2909,32 @@ void CG_DrawActive( void ) {
|
||||||
float dist = (trap_Cvar_VariableValue("vr_hudDepth")+2) * 6 * scale;
|
float dist = (trap_Cvar_VariableValue("vr_hudDepth")+2) * 6 * scale;
|
||||||
float radius = dist / 3.0f;
|
float radius = dist / 3.0f;
|
||||||
|
|
||||||
float viewYaw = SHORT2ANGLE(cg.predictedPlayerState.delta_angles[YAW]) + (vr->clientviewangles[YAW] - vr->hmdorientation[YAW]);
|
if (cg.snap->ps.stats[STAT_HEALTH] > 0 &&
|
||||||
|
cg.snap->ps.pm_type != PM_INTERMISSION)
|
||||||
static float hmd_yaw_x = 0.0f;
|
|
||||||
static float hmd_yaw_y = 1.0f;
|
|
||||||
{
|
{
|
||||||
hmd_yaw_x = 0.95f * hmd_yaw_x + 0.05f * cosf(DEG2RAD(vr->hmdorientation[YAW]));
|
float viewYaw = SHORT2ANGLE(cg.predictedPlayerState.delta_angles[YAW]) +
|
||||||
hmd_yaw_y = 0.95f * hmd_yaw_y + 0.05f * sinf(DEG2RAD(vr->hmdorientation[YAW]));
|
(vr->clientviewangles[YAW] - vr->hmdorientation[YAW]);
|
||||||
|
|
||||||
|
static float hmd_yaw_x = 0.0f;
|
||||||
|
static float hmd_yaw_y = 1.0f;
|
||||||
|
{
|
||||||
|
hmd_yaw_x = 0.97f * hmd_yaw_x + 0.03f * cosf(DEG2RAD(vr->hmdorientation[YAW]));
|
||||||
|
hmd_yaw_y = 0.97f * hmd_yaw_y + 0.03f * sinf(DEG2RAD(vr->hmdorientation[YAW]));
|
||||||
|
}
|
||||||
|
|
||||||
|
angles[YAW] = viewYaw + RAD2DEG(atan2(hmd_yaw_y, hmd_yaw_x));
|
||||||
|
angles[PITCH] = 0;
|
||||||
|
angles[ROLL] = 0;
|
||||||
|
AngleVectors(angles, forward, right, up);
|
||||||
|
|
||||||
|
VectorMA(cg.refdef.vieworg, dist, forward, endpos);
|
||||||
|
VectorMA(endpos, trap_Cvar_VariableValue("vr_hudYOffset") / 20, up, endpos);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Lock to face
|
||||||
|
VectorMA(cg.refdef.vieworg, dist, cg.refdef.viewaxis[0], endpos);
|
||||||
}
|
}
|
||||||
|
|
||||||
angles[YAW] = viewYaw + RAD2DEG(atan2(hmd_yaw_y, hmd_yaw_x));
|
|
||||||
angles[PITCH] = 0;
|
|
||||||
angles[ROLL] = 0;
|
|
||||||
AngleVectors(angles, forward, right, up);
|
|
||||||
|
|
||||||
VectorMA(cg.refdef.vieworg, dist, forward, endpos);
|
|
||||||
VectorMA(endpos, trap_Cvar_VariableValue("vr_hudYOffset") / 20, up, endpos);
|
|
||||||
|
|
||||||
memset(&ent, 0, sizeof(ent));
|
memset(&ent, 0, sizeof(ent));
|
||||||
ent.reType = RT_SPRITE;
|
ent.reType = RT_SPRITE;
|
||||||
|
|
|
@ -534,7 +534,9 @@ CG_RailTrail
|
||||||
==========================
|
==========================
|
||||||
*/
|
*/
|
||||||
void CG_RailTrail (clientInfo_t *ci, vec3_t start, vec3_t end) {
|
void CG_RailTrail (clientInfo_t *ci, vec3_t start, vec3_t end) {
|
||||||
vec3_t axis[36], move, move2, vec, temp;
|
|
||||||
|
#define NUM_PARTICLE_PER_ROTATION 18
|
||||||
|
vec3_t axis[NUM_PARTICLE_PER_ROTATION], move, move2, vec, vec2, temp;
|
||||||
float len;
|
float len;
|
||||||
int i, j, skip;
|
int i, j, skip;
|
||||||
|
|
||||||
|
@ -586,33 +588,35 @@ void CG_RailTrail (clientInfo_t *ci, vec3_t start, vec3_t end) {
|
||||||
VectorSubtract (end, start, vec);
|
VectorSubtract (end, start, vec);
|
||||||
len = VectorNormalize (vec);
|
len = VectorNormalize (vec);
|
||||||
PerpendicularVector(temp, vec);
|
PerpendicularVector(temp, vec);
|
||||||
for (i = 0 ; i < 36; i++)
|
for (i = 0 ; i < NUM_PARTICLE_PER_ROTATION; i++)
|
||||||
{
|
{
|
||||||
RotatePointAroundVector(axis[i], vec, temp, i * 10);//banshee 2.4 was 10
|
RotatePointAroundVector(axis[i], vec, temp, i * (360.0f / NUM_PARTICLE_PER_ROTATION));//banshee 2.4 was 10
|
||||||
}
|
}
|
||||||
|
|
||||||
VectorMA(move, 20, vec, move);
|
VectorMA(move, (360.0f / NUM_PARTICLE_PER_ROTATION), vec, move);
|
||||||
VectorScale (vec, SPACING, vec);
|
VectorScale (vec, SPACING, vec2);
|
||||||
|
|
||||||
skip = -1;
|
skip = -1;
|
||||||
|
|
||||||
j = 18;
|
j = 0;
|
||||||
for (i = 0; i < len; i += SPACING)
|
int spacing = SPACING;
|
||||||
|
for (i = 0; i < len; i += spacing, spacing++)
|
||||||
{
|
{
|
||||||
if (i != skip)
|
if (i != skip)
|
||||||
{
|
{
|
||||||
skip = i + SPACING;
|
VectorScale (vec, spacing, vec2);
|
||||||
|
skip = i + spacing;
|
||||||
le = CG_AllocLocalEntity();
|
le = CG_AllocLocalEntity();
|
||||||
re = &le->refEntity;
|
re = &le->refEntity;
|
||||||
le->leFlags = LEF_PUFF_DONT_SCALE;
|
le->leFlags = LEF_PUFF_DONT_SCALE;
|
||||||
le->leType = LE_MOVE_SCALE_FADE;
|
le->leType = LE_MOVE_SCALE_FADE;
|
||||||
le->startTime = cg.time;
|
le->startTime = cg.time;
|
||||||
le->endTime = cg.time + (i>>1) + 600;
|
le->endTime = cg.time + (i>>1) + 500;
|
||||||
le->lifeRate = 1.0 / (le->endTime - le->startTime);
|
le->lifeRate = 1.0 / (le->endTime - le->startTime);
|
||||||
|
|
||||||
re->shaderTime = cg.time / 1000.0f;
|
re->shaderTime = cg.time / 1000.0f;
|
||||||
re->reType = RT_SPRITE;
|
re->reType = RT_SPRITE;
|
||||||
re->radius = 1.1f;
|
re->radius = 1.2f;
|
||||||
re->customShader = cgs.media.railRingsShader;
|
re->customShader = cgs.media.railRingsShader;
|
||||||
|
|
||||||
re->shaderRGBA[0] = ci->color2[0] * 255;
|
re->shaderRGBA[0] = ci->color2[0] * 255;
|
||||||
|
@ -637,9 +641,9 @@ void CG_RailTrail (clientInfo_t *ci, vec3_t start, vec3_t end) {
|
||||||
le->pos.trDelta[2] = axis[j][2]*6;
|
le->pos.trDelta[2] = axis[j][2]*6;
|
||||||
}
|
}
|
||||||
|
|
||||||
VectorAdd (move, vec, move);
|
VectorAdd (move, vec2, move);
|
||||||
|
|
||||||
j = (j + ROTATION) % 36;
|
j = (j + ROTATION) % NUM_PARTICLE_PER_ROTATION;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue