mirror of
https://github.com/DrBeef/Raze.git
synced 2025-03-03 07:51:45 +00:00
Fix issue where crosshair would disappear or get stuck
Was the fact that the controller was actually in a different sector to the player actor.
This commit is contained in:
parent
9eb86eaa40
commit
578f7cfbcd
7 changed files with 41 additions and 3 deletions
|
@ -336,11 +336,11 @@ VSMatrix VREyeInfo::GetPlayerSpriteProjection(int width, int height) const
|
|||
new_projection.rotate(weaponangles[PITCH], 1, 0, 0);
|
||||
|
||||
|
||||
float weapon_scale = 0.5f;
|
||||
float weapon_scale = 0.6f;
|
||||
new_projection.scale(-weapon_scale, weapon_scale, -weapon_scale);
|
||||
|
||||
// ndc coordinates from pixel coordinates
|
||||
new_projection.translate(-1.5, 1.5, -0.1);
|
||||
new_projection.translate(-1.5, 1.5, 0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -44,7 +44,7 @@ const char *GetVersionString();
|
|||
|
||||
#define VERSIONSTR "1.7pre"
|
||||
|
||||
#define RAZEXR_VERSIONSTR "RazeXR 0.1.4"
|
||||
#define RAZEXR_VERSIONSTR "RazeXR 0.1.5"
|
||||
|
||||
// The version as seen in the Windows resource
|
||||
#define RC_FILEVERSION 1,6,9999,0
|
||||
|
|
|
@ -1546,6 +1546,7 @@ void ProcessInput(PLAYER* pPlayer)
|
|||
float px, py, pz1, pz2, pitch, yaw;
|
||||
|
||||
DVector2 posXY;
|
||||
sectortype* sect;
|
||||
if (vr_6dof_weapons)
|
||||
{
|
||||
get_weapon_pos_and_angle(px, py, pz1, pz2, pitch, yaw);
|
||||
|
@ -1557,6 +1558,11 @@ void ProcessInput(PLAYER* pPlayer)
|
|||
actor->spr.Angles.Yaw += DAngle::fromDeg(yaw);
|
||||
actor->spr.Angles.Pitch -= DAngle::fromDeg(pitch);
|
||||
|
||||
sect = actor->sector();
|
||||
sectortype* newsect = actor->sector();
|
||||
updatesector(actor->spr.pos.XY(), &newsect);
|
||||
actor->setsector(newsect);
|
||||
|
||||
if (vr_6dof_crosshair)
|
||||
{
|
||||
HitInfo hit{};
|
||||
|
@ -1606,6 +1612,7 @@ void ProcessInput(PLAYER* pPlayer)
|
|||
actor->spr.pos.Z += (pz2 * vr_hunits_per_meter()) - actor->viewzoffset;
|
||||
actor->spr.Angles.Yaw -= DAngle::fromDeg(yaw);
|
||||
actor->spr.Angles.Pitch += DAngle::fromDeg(pitch);
|
||||
actor->setsector(sect);
|
||||
}
|
||||
|
||||
if (actor->xspr.health == 0)
|
||||
|
|
|
@ -952,6 +952,7 @@ void shoot_d_override(DDukeActor* actor, int atwith, PClass *cls)
|
|||
float px, py, pz1, pz2, pitch, yaw;
|
||||
|
||||
DVector2 posXY;
|
||||
sectortype* sectp;
|
||||
if (actor->isPlayer() && vr_6dof_weapons)
|
||||
{
|
||||
get_weapon_pos_and_angle(px, py, pz1, pz2, pitch, yaw);
|
||||
|
@ -962,6 +963,11 @@ void shoot_d_override(DDukeActor* actor, int atwith, PClass *cls)
|
|||
actor->spr.pos.Z -= (pz1 * vr_hunits_per_meter()) + actor->viewzoffset;
|
||||
actor->spr.Angles.Yaw += DAngle::fromDeg(yaw);
|
||||
actor->spr.Angles.Pitch -= DAngle::fromDeg(pitch);
|
||||
|
||||
sectp = actor->sector();
|
||||
sectortype* sectpnew;
|
||||
updatesector(actor->spr.pos.XY(), §pnew);
|
||||
actor->setsector(sectpnew);
|
||||
}
|
||||
|
||||
shoot_d(actor, atwith, cls);
|
||||
|
@ -973,6 +979,7 @@ void shoot_d_override(DDukeActor* actor, int atwith, PClass *cls)
|
|||
actor->spr.pos.Z += (pz1 * vr_hunits_per_meter()) + actor->viewzoffset;
|
||||
actor->spr.Angles.Yaw -= DAngle::fromDeg(yaw);
|
||||
actor->spr.Angles.Pitch += DAngle::fromDeg(pitch);
|
||||
actor->setsector(sectp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2573,6 +2580,8 @@ static void processweapon(int snum, ESyncBits actions)
|
|||
HitInfo hit{};
|
||||
|
||||
auto sectp = pact->sector();
|
||||
updatesector(spos.XY(), §p);
|
||||
|
||||
double vel = 1024, zvel = 0;
|
||||
setFreeAimVelocity(vel, zvel, p->Angles.getPitchWithView() - DAngle::fromDeg(pitch), 16.);
|
||||
|
||||
|
|
|
@ -776,6 +776,7 @@ void shoot_r_override(DDukeActor* actor, int atwith, PClass *cls)
|
|||
float px, py, pz1, pz2, pitch, yaw;
|
||||
|
||||
DVector2 posXY;
|
||||
sectortype* sectp;
|
||||
if (actor->isPlayer() && vr_6dof_weapons)
|
||||
{
|
||||
get_weapon_pos_and_angle(px, py, pz1, pz2, pitch, yaw);
|
||||
|
@ -786,6 +787,11 @@ void shoot_r_override(DDukeActor* actor, int atwith, PClass *cls)
|
|||
actor->spr.pos.Z -= (pz1 * vr_hunits_per_meter()) + actor->viewzoffset;
|
||||
actor->spr.Angles.Yaw += DAngle::fromDeg(yaw);
|
||||
actor->spr.Angles.Pitch -= DAngle::fromDeg(pitch);
|
||||
|
||||
sectp = actor->sector();
|
||||
sectortype* sectpnew;
|
||||
updatesector(actor->spr.pos.XY(), §pnew);
|
||||
actor->setsector(sectpnew);
|
||||
}
|
||||
|
||||
shoot_r(actor, atwith, cls);
|
||||
|
@ -797,6 +803,7 @@ void shoot_r_override(DDukeActor* actor, int atwith, PClass *cls)
|
|||
actor->spr.pos.Z += (pz1 * vr_hunits_per_meter()) + actor->viewzoffset;
|
||||
actor->spr.Angles.Yaw -= DAngle::fromDeg(yaw);
|
||||
actor->spr.Angles.Pitch += DAngle::fromDeg(pitch);
|
||||
actor->setsector(sectp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3187,6 +3194,7 @@ static void processweapon(int snum, ESyncBits actions, sectortype* psectp)
|
|||
HitInfo hit{};
|
||||
|
||||
auto sectp = pact->sector();
|
||||
updatesector(spos.XY(), §p);
|
||||
double vel = 1024, zvel = 0;
|
||||
setFreeAimVelocity(vel, zvel, p->Angles.getPitchWithView() - DAngle::fromDeg(pitch), 16.);
|
||||
|
||||
|
|
|
@ -2663,6 +2663,7 @@ sectdone:
|
|||
float px, py, pz1, pz2, pitch, yaw;
|
||||
|
||||
DVector2 posXY;
|
||||
sectortype* sect;
|
||||
if (vr_6dof_weapons && nPlayer == 0)
|
||||
{
|
||||
get_weapon_pos_and_angle(px, py, pz1, pz2, pitch, yaw);
|
||||
|
@ -2674,6 +2675,11 @@ sectdone:
|
|||
pPlayerActor->spr.Angles.Yaw += DAngle::fromDeg(yaw);
|
||||
pPlayerActor->spr.Angles.Pitch -= DAngle::fromDeg(pitch);
|
||||
|
||||
sect = pPlayerActor->sector();
|
||||
sectortype* newsect = pPlayerActor->sector();
|
||||
updatesector(pPlayerActor->spr.pos.XY(), &newsect);
|
||||
pPlayerActor->setsector(newsect);
|
||||
|
||||
if (vr_6dof_crosshair)
|
||||
{
|
||||
HitInfo hit{};
|
||||
|
@ -2727,6 +2733,7 @@ sectdone:
|
|||
pPlayerActor->spr.pos.Z += (pz2 * vr_hunits_per_meter());
|
||||
pPlayerActor->spr.Angles.Yaw -= DAngle::fromDeg(yaw);
|
||||
pPlayerActor->spr.Angles.Pitch += DAngle::fromDeg(pitch);
|
||||
pPlayerActor->setsector(sect);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7035,6 +7035,7 @@ void domovethings(void)
|
|||
float px, py, pz1, pz2, pitch, yaw;
|
||||
|
||||
DVector2 posXY;
|
||||
sectortype* sect;
|
||||
if (vr_6dof_weapons)
|
||||
{
|
||||
get_weapon_pos_and_angle(px, py, pz1, pz2, pitch, yaw);
|
||||
|
@ -7046,6 +7047,11 @@ void domovethings(void)
|
|||
pp->actor->spr.Angles.Yaw += DAngle::fromDeg(yaw);
|
||||
pp->actor->spr.Angles.Pitch -= DAngle::fromDeg(pitch);
|
||||
|
||||
sect = pp->actor->sector();
|
||||
sectortype* newsect = pp->actor->sector();
|
||||
updatesector(pp->actor->spr.pos.XY(), &newsect);
|
||||
pp->actor->setsector(newsect);
|
||||
|
||||
if (vr_6dof_crosshair)
|
||||
{
|
||||
HitInfo hit{};
|
||||
|
@ -7096,6 +7102,7 @@ void domovethings(void)
|
|||
pp->actor->spr.pos.Z += (pz1 * vr_hunits_per_meter()) + pp->actor->viewzoffset;
|
||||
pp->actor->spr.Angles.Yaw -= DAngle::fromDeg(yaw);
|
||||
pp->actor->spr.Angles.Pitch += DAngle::fromDeg(pitch);
|
||||
pp->actor->setsector(sect);
|
||||
}
|
||||
|
||||
PlayerStateControl(pp->actor);
|
||||
|
|
Loading…
Reference in a new issue