mirror of
https://github.com/ZDoom/Raze.git
synced 2025-03-13 12:32:13 +00:00
- SW: almost the last wraps.
This commit is contained in:
parent
b49aed6620
commit
b74355fcee
2 changed files with 32 additions and 15 deletions
|
@ -6243,7 +6243,8 @@ Collision move_sprite(DSWActor* actor, int xchange, int ychange, int zchange, in
|
||||||
((xchange * numtics) << 11), ((ychange * numtics) << 11),
|
((xchange * numtics) << 11), ((ychange * numtics) << 11),
|
||||||
(((int) actor->spr.clipdist) << 2), ceildist, flordist, cliptype, retval, 1);
|
(((int) actor->spr.clipdist) << 2), ceildist, flordist, cliptype, retval, 1);
|
||||||
|
|
||||||
actor->spr.pos.vec2 = clippos.vec2;
|
|
||||||
|
actor->set_int_xy(clippos.X, clippos.Y);
|
||||||
|
|
||||||
if (dasect == nullptr)
|
if (dasect == nullptr)
|
||||||
{
|
{
|
||||||
|
@ -6297,21 +6298,25 @@ Collision move_sprite(DSWActor* actor, int xchange, int ychange, int zchange, in
|
||||||
|
|
||||||
// extra processing for Stacks and warping
|
// extra processing for Stacks and warping
|
||||||
if (FAF_ConnectArea(actor->sector()))
|
if (FAF_ConnectArea(actor->sector()))
|
||||||
SetActorZ(actor, &actor->spr.pos);
|
SetActorZ(actor, actor->spr.pos);
|
||||||
|
|
||||||
if ((actor->sector()->extra & SECTFX_WARP_SECTOR))
|
if ((actor->sector()->extra & SECTFX_WARP_SECTOR))
|
||||||
{
|
{
|
||||||
DSWActor* sp_warp;
|
DSWActor* sp_warp;
|
||||||
if ((sp_warp = WarpPlane(&actor->spr.pos.X, &actor->spr.pos.Y, &actor->spr.pos.Z, &dasect)))
|
pos = actor->spr.pos;
|
||||||
|
if ((sp_warp = WarpPlane(&pos.X, &pos.Y, &pos.Z, &dasect)))
|
||||||
{
|
{
|
||||||
|
actor->set_int_pos(pos);
|
||||||
ActorWarpUpdatePos(actor, dasect);
|
ActorWarpUpdatePos(actor, dasect);
|
||||||
ActorWarpType(actor, sp_warp);
|
ActorWarpType(actor, sp_warp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actor->sector() != lastsect)
|
if (actor->sector() != lastsect)
|
||||||
{
|
{
|
||||||
if ((sp_warp = Warp(&actor->spr.pos.X, &actor->spr.pos.Y, &actor->spr.pos.Z, &dasect)))
|
pos = actor->spr.pos;
|
||||||
|
if ((sp_warp = Warp(&pos.X, &pos.Y, &pos.Z, &dasect)))
|
||||||
{
|
{
|
||||||
|
actor->set_int_pos(pos);
|
||||||
ActorWarpUpdatePos(actor, dasect);
|
ActorWarpUpdatePos(actor, dasect);
|
||||||
ActorWarpType(actor, sp_warp);
|
ActorWarpType(actor, sp_warp);
|
||||||
}
|
}
|
||||||
|
@ -6430,7 +6435,7 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i
|
||||||
clipmove(clippos, &dasect,
|
clipmove(clippos, &dasect,
|
||||||
((xchange * numtics) << 11), ((ychange * numtics) << 11),
|
((xchange * numtics) << 11), ((ychange * numtics) << 11),
|
||||||
(((int) actor->spr.clipdist) << 2), ceildist, flordist, cliptype, retval, 1);
|
(((int) actor->spr.clipdist) << 2), ceildist, flordist, cliptype, retval, 1);
|
||||||
actor->spr.pos.vec2 = clippos.vec2;
|
actor->set_int_xy(clippos.X, clippos.Y);
|
||||||
|
|
||||||
if (dasect == nullptr)
|
if (dasect == nullptr)
|
||||||
{
|
{
|
||||||
|
@ -6483,22 +6488,26 @@ Collision move_missile(DSWActor* actor, int xchange, int ychange, int zchange, i
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAF_ConnectArea(actor->sector()))
|
if (FAF_ConnectArea(actor->sector()))
|
||||||
SetActorZ(actor, &actor->spr.pos);
|
SetActorZ(actor, actor->spr.pos);
|
||||||
|
|
||||||
if ((actor->sector()->extra & SECTFX_WARP_SECTOR))
|
if ((actor->sector()->extra & SECTFX_WARP_SECTOR))
|
||||||
{
|
{
|
||||||
DSWActor* sp_warp;
|
DSWActor* sp_warp;
|
||||||
|
|
||||||
if ((sp_warp = WarpPlane(&actor->spr.pos.X, &actor->spr.pos.Y, &actor->spr.pos.Z, &dasect)))
|
auto pos = actor->spr.pos;
|
||||||
|
if ((sp_warp = WarpPlane(&pos.X, &pos.Y, &pos.Z, &dasect)))
|
||||||
{
|
{
|
||||||
|
actor->set_int_pos(pos);
|
||||||
MissileWarpUpdatePos(actor, dasect);
|
MissileWarpUpdatePos(actor, dasect);
|
||||||
MissileWarpType(actor, sp_warp);
|
MissileWarpType(actor, sp_warp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actor->sector() != lastsect)
|
if (actor->sector() != lastsect)
|
||||||
{
|
{
|
||||||
if ((sp_warp = Warp(&actor->spr.pos.X, &actor->spr.pos.Y, &actor->spr.pos.Z, &dasect)))
|
pos = actor->spr.pos;
|
||||||
|
if ((sp_warp = Warp(&pos.X, &pos.Y, &pos.Z, &dasect)))
|
||||||
{
|
{
|
||||||
|
actor->set_int_pos(pos);
|
||||||
MissileWarpUpdatePos(actor, dasect);
|
MissileWarpUpdatePos(actor, dasect);
|
||||||
MissileWarpType(actor, sp_warp);
|
MissileWarpType(actor, sp_warp);
|
||||||
}
|
}
|
||||||
|
@ -6575,7 +6584,7 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei
|
||||||
clipmove(opos, &dasect,
|
clipmove(opos, &dasect,
|
||||||
((xchange * numtics) << 11), ((ychange * numtics) << 11),
|
((xchange * numtics) << 11), ((ychange * numtics) << 11),
|
||||||
(((int) actor->spr.clipdist) << 2), ceildist, flordist, cliptype, retval, 1);
|
(((int) actor->spr.clipdist) << 2), ceildist, flordist, cliptype, retval, 1);
|
||||||
actor->spr.pos.vec2 = opos.vec2;
|
actor->set_int_xy(opos.X, opos.Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dasect == nullptr)
|
if (dasect == nullptr)
|
||||||
|
@ -6619,16 +6628,20 @@ Collision move_ground_missile(DSWActor* actor, int xchange, int ychange, int cei
|
||||||
{
|
{
|
||||||
DSWActor* sp_warp;
|
DSWActor* sp_warp;
|
||||||
|
|
||||||
if ((sp_warp = WarpPlane(&actor->spr.pos.X, &actor->spr.pos.Y, &actor->spr.pos.Z, &dasect)))
|
auto pos = actor->spr.pos;
|
||||||
|
if ((sp_warp = WarpPlane(&pos.X, &pos.Y, &pos.Z, &dasect)))
|
||||||
{
|
{
|
||||||
|
actor->set_int_pos(pos);
|
||||||
MissileWarpUpdatePos(actor, dasect);
|
MissileWarpUpdatePos(actor, dasect);
|
||||||
MissileWarpType(actor, sp_warp);
|
MissileWarpType(actor, sp_warp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actor->sector() != lastsect)
|
if (actor->sector() != lastsect)
|
||||||
{
|
{
|
||||||
if ((sp_warp = Warp(&actor->spr.pos.X, &actor->spr.pos.Y, &actor->spr.pos.Z, &dasect)))
|
pos = actor->spr.pos;
|
||||||
|
if ((sp_warp = Warp(&pos.X, &pos.Y, &pos.Z, &dasect)))
|
||||||
{
|
{
|
||||||
|
actor->set_int_pos(pos);
|
||||||
MissileWarpUpdatePos(actor, dasect);
|
MissileWarpUpdatePos(actor, dasect);
|
||||||
MissileWarpType(actor, sp_warp);
|
MissileWarpType(actor, sp_warp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1729,16 +1729,18 @@ PlayerPart:
|
||||||
if ((actor->sector()->firstWall()->extra & WALLFX_LOOP_DONT_SPIN))
|
if ((actor->sector()->firstWall()->extra & WALLFX_LOOP_DONT_SPIN))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
auto pos = actor->spr.pos;
|
||||||
if ((actor->sector()->firstWall()->extra & WALLFX_LOOP_REVERSE_SPIN))
|
if ((actor->sector()->firstWall()->extra & WALLFX_LOOP_REVERSE_SPIN))
|
||||||
{
|
{
|
||||||
rotatepoint(sop->pmid.vec2, actor->spr.pos.vec2, -delta_ang, &actor->spr.pos.vec2);
|
rotatepoint(sop->pmid.vec2, actor->spr.pos.vec2, -delta_ang, &pos.vec2);
|
||||||
actor->spr.ang = NORM_ANGLE(actor->spr.ang - delta_ang);
|
actor->spr.ang = NORM_ANGLE(actor->spr.ang - delta_ang);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rotatepoint(sop->pmid.vec2, actor->spr.pos.vec2, delta_ang, &actor->spr.pos.vec2);
|
rotatepoint(sop->pmid.vec2, actor->spr.pos.vec2, delta_ang, &pos.vec2);
|
||||||
actor->spr.ang = NORM_ANGLE(actor->spr.ang + delta_ang);
|
actor->spr.ang = NORM_ANGLE(actor->spr.ang + delta_ang);
|
||||||
}
|
}
|
||||||
|
actor->set_int_pos(pos);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1746,14 +1748,16 @@ PlayerPart:
|
||||||
if (!(sop->flags & SOBJ_DONT_ROTATE))
|
if (!(sop->flags & SOBJ_DONT_ROTATE))
|
||||||
{
|
{
|
||||||
// NOT part of a sector - independant of any sector
|
// NOT part of a sector - independant of any sector
|
||||||
rotatepoint(sop->pmid.vec2, actor->spr.pos.vec2, delta_ang, &actor->spr.pos.vec2);
|
auto pos = actor->spr.pos;
|
||||||
|
rotatepoint(sop->pmid.vec2, actor->spr.pos.vec2, delta_ang, &pos.vec2);
|
||||||
actor->spr.ang = NORM_ANGLE(actor->spr.ang + delta_ang);
|
actor->spr.ang = NORM_ANGLE(actor->spr.ang + delta_ang);
|
||||||
|
actor->set_int_pos(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Does not necessarily move with the sector so must accout for
|
// Does not necessarily move with the sector so must accout for
|
||||||
// moving across sectors
|
// moving across sectors
|
||||||
if (sop->pmid.X < MAXSO) // special case for operating SO's
|
if (sop->pmid.X < MAXSO) // special case for operating SO's
|
||||||
SetActorZ(sop->so_actors[i], &actor->spr.pos);
|
SetActorZ(sop->so_actors[i], actor->spr.pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
actor->user.oangdiff += getincangle(oldang, actor->spr.ang);
|
actor->user.oangdiff += getincangle(oldang, actor->spr.ang);
|
||||||
|
|
Loading…
Reference in a new issue