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:
Simon 2023-02-10 22:42:19 +00:00
parent 9eb86eaa40
commit 578f7cfbcd
7 changed files with 41 additions and 3 deletions

View file

@ -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
{

View file

@ -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

View file

@ -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)

View file

@ -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(), &sectpnew);
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(), &sectp);
double vel = 1024, zvel = 0;
setFreeAimVelocity(vel, zvel, p->Angles.getPitchWithView() - DAngle::fromDeg(pitch), 16.);

View file

@ -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(), &sectpnew);
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(), &sectp);
double vel = 1024, zvel = 0;
setFreeAimVelocity(vel, zvel, p->Angles.getPitchWithView() - DAngle::fromDeg(pitch), 16.);

View file

@ -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);
}
}

View file

@ -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);