0
0
Fork 0
mirror of https://github.com/DrBeef/Raze.git synced 2025-03-06 17:31:22 +00:00

- floatified TRACK_ACTOR_CLIMB_LADDER case in ActorTrackDecide

This commit is contained in:
Christoph Oelckers 2022-08-29 19:34:34 +02:00
parent ad648676b1
commit 5bb9a16d34
4 changed files with 22 additions and 11 deletions

View file

@ -198,6 +198,16 @@ inline int MOVEy(int vel, int ang)
return (MulScale(vel, bsin(ang), 14)); return (MulScale(vel, bsin(ang), 14));
} }
inline double MOVEx(int vel, DAngle ang)
{
return vel * ang.Cos() * inttoworld;
}
inline double MOVEy(int vel, DAngle ang)
{
return vel * ang.Sin() * inttoworld;
}
inline int SQ(int val) inline int SQ(int val)
{ {
return val * val; return val * val;

View file

@ -2592,9 +2592,10 @@ void DoPlayerMoveVehicle(PLAYER* pp)
if (vel > 13000) if (vel > 13000)
{ {
vec3_t hit_pos = { (x[0] + x[1]) >> 1, (y[0] + y[1]) >> 1, pp->cursector->int_floorz() - Z(10) }; vec3_t hit_pos = { (x[0] + x[1]) >> 1, (y[0] + y[1]) >> 1, pp->cursector->int_floorz() - Z(10) };
DVector3 hitpos(hit_pos.X * inttoworld, hit_pos.Y * inttoworld, pp->cursector->floorz - 10);
hitscan(hit_pos, pp->cursector, hitscan(hitpos, pp->cursector,
{ MOVEx(256, pp->angle.ang.Buildang()), MOVEy(256, pp->angle.ang.Buildang()), 0 }, DVector3(MOVEx(256, pp->angle.ang), MOVEy(256, pp->angle.ang), 0),
hit, CLIPMASK_PLAYER); hit, CLIPMASK_PLAYER);
if (FindDistance2D(hit.int_hitpos().vec2 - hit_pos.vec2) < 800) if (FindDistance2D(hit.int_hitpos().vec2 - hit_pos.vec2) < 800)

View file

@ -2491,7 +2491,7 @@ void SpriteSetup(void)
actorNew->set_int_ang(NORM_ANGLE(actor->int_ang() + 1024)); actorNew->set_int_ang(NORM_ANGLE(actor->int_ang() + 1024));
actorNew->spr.picnum = actor->spr.picnum; actorNew->spr.picnum = actor->spr.picnum;
actorNew->add_int_pos({ MOVEx(256 + 128, actor->int_ang()), MOVEy(256 + 128, actor->int_ang()), 0 }); actorNew->spr.pos += DVector2(MOVEx(256 + 128, actor->spr.angle), MOVEy(256 + 128, actor->spr.angle));
break; break;
} }

View file

@ -491,7 +491,7 @@ void QuickLadderSetup(short stat, short lotag, short type)
// add start point // add start point
start_sprite->spr.lotag = TRACK_START; start_sprite->spr.lotag = TRACK_START;
start_sprite->spr.hitag = 0; start_sprite->spr.hitag = 0;
start_sprite->add_int_pos({ MOVEx(256,start_sprite->int_ang() + 1024), MOVEy(256,start_sprite->int_ang() + 1024), 0 }); start_sprite->spr.pos += DVector2(MOVEx(256,start_sprite->spr.angle + DAngle180), MOVEy(256,start_sprite->spr.angle + DAngle180));
TrackAddPoint(t, tp, start_sprite); TrackAddPoint(t, tp, start_sprite);
// add climb point // add climb point
@ -499,7 +499,7 @@ void QuickLadderSetup(short stat, short lotag, short type)
TrackAddPoint(t, tp, actor); TrackAddPoint(t, tp, actor);
// add end point // add end point
end_sprite->add_int_pos({ MOVEx(512,end_sprite->int_ang()), MOVEy(512,end_sprite->int_ang()), 0 }); end_sprite->spr.pos += DVector2(MOVEx(512,end_sprite->spr.angle), MOVEy(512,end_sprite->spr.angle));
end_sprite->spr.lotag = TRACK_END; end_sprite->spr.lotag = TRACK_END;
end_sprite->spr.hitag = 0; end_sprite->spr.hitag = 0;
TrackAddPoint(t, tp, end_sprite); TrackAddPoint(t, tp, end_sprite);
@ -3263,7 +3263,6 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor)
if (actor->user.ActorActionSet->Jump) if (actor->user.ActorActionSet->Jump)
{ {
int nx,ny;
HitInfo near; HitInfo near;
// //
@ -3279,18 +3278,19 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor)
// determine where the player is supposed to be in relation to the ladder // determine where the player is supposed to be in relation to the ladder
// move out in front of the ladder // move out in front of the ladder
nx = MOVEx(100, lActor->int_ang()); double vx = MOVEx(100, lActor->spr.angle);
ny = MOVEy(100, lActor->int_ang()); double vy = MOVEy(100, lActor->spr.angle);
actor->set_int_xy(lActor->int_pos().X + nx, lActor->int_pos().Y + ny); actor->spr.pos.XY() = lActor->spr.pos.XY() + DVector2(vx, vy);
actor->set_int_ang(NORM_ANGLE(lActor->int_ang() + 1024)); actor->spr.angle += DAngle180;
// //
// Get the z height to climb // Get the z height to climb
// //
neartag({ actor->int_pos().X, actor->int_pos().Y, int_ActorZOfTop(actor) - (int_ActorSizeZ(actor) >> 1) }, actor->sector(), actor->int_ang(), near, 600, NTAG_SEARCH_LO_HI); double z = ActorZOfTop(actor) - (ActorSizeZ(actor) * 0.5);
neartag(DVector3(actor->spr.pos.XY(), z), actor->sector(), actor->spr.angle, near, 600, NTAG_SEARCH_LO_HI);
if (near.hitWall == nullptr) if (near.hitWall == nullptr)
{ {