mirror of
https://github.com/ZDoom/Raze.git
synced 2025-01-31 12:30:40 +00:00
- floatified large parts of SO movement code.
This commit is contained in:
parent
212be963d9
commit
0b642dc631
7 changed files with 53 additions and 77 deletions
|
@ -1487,9 +1487,8 @@ struct SECTOR_OBJECT
|
||||||
morph_z_min, // morphing point z min
|
morph_z_min, // morphing point z min
|
||||||
morph_z_max;
|
morph_z_max;
|
||||||
|
|
||||||
int16_t xorig[MAX_SO_POINTS], // save the original x & y location of each wall so it can be
|
DVector2 orig[MAX_SO_POINTS]; // save the original x & y location of each wall so it can be
|
||||||
yorig[MAX_SO_POINTS], // refreshed
|
int16_t max_damage, // max damage
|
||||||
max_damage, // max damage
|
|
||||||
ram_damage, // damage taken by ramming
|
ram_damage, // damage taken by ramming
|
||||||
wait_tics, //
|
wait_tics, //
|
||||||
num_sectors, // number of sectors
|
num_sectors, // number of sectors
|
||||||
|
|
|
@ -154,7 +154,7 @@ short MultiClipTurn(PLAYER* pp, short new_ang, int z, int floor_dist)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int testquadinsect(int *point_num, vec2_t const * q, sectortype* sect)
|
int testquadinsect(int *point_num, DVector2 const * qp, sectortype* sect)
|
||||||
{
|
{
|
||||||
int i,next_i;
|
int i,next_i;
|
||||||
|
|
||||||
|
@ -162,7 +162,7 @@ int testquadinsect(int *point_num, vec2_t const * q, sectortype* sect)
|
||||||
|
|
||||||
for (i=0; i < 4; i++)
|
for (i=0; i < 4; i++)
|
||||||
{
|
{
|
||||||
if (!inside(q[i].X, q[i].Y, sect))
|
if (!inside(qp[i].X, qp[i].Y, sect))
|
||||||
{
|
{
|
||||||
*point_num = i;
|
*point_num = i;
|
||||||
|
|
||||||
|
@ -173,8 +173,7 @@ int testquadinsect(int *point_num, vec2_t const * q, sectortype* sect)
|
||||||
for (i=0; i<4; i++)
|
for (i=0; i<4; i++)
|
||||||
{
|
{
|
||||||
next_i = (i+1) & 3;
|
next_i = (i+1) & 3;
|
||||||
if (!cansee(q[i].X, q[i].Y,0x3fffffff, sect,
|
if (!cansee(DVector3(qp[i], 0x3fffff), sect, DVector3(qp[next_i], 0x3fffff), sect))
|
||||||
q[next_i].X, q[next_i].Y,0x3fffffff, sect))
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -185,22 +184,22 @@ int testquadinsect(int *point_num, vec2_t const * q, sectortype* sect)
|
||||||
|
|
||||||
|
|
||||||
//Ken gives the tank clippin' a try...
|
//Ken gives the tank clippin' a try...
|
||||||
int RectClipMove(PLAYER* pp, int *qx, int *qy)
|
int RectClipMove(PLAYER* pp, DVector2* qpos)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
vec2_t xy[4];
|
DVector2 xy[4];
|
||||||
int point_num;
|
int point_num;
|
||||||
|
DVector2 pvect((pp->vect.X >> 14) * inttoworld, (pp->vect.Y >> 14) * inttoworld);
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
xy[i].X = qx[i] + (pp->vect.X>>14);
|
xy[i] = qpos[i] + pvect;
|
||||||
xy[i].Y = qy[i] + (pp->vect.Y>>14);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Given the 4 points: x[4], y[4]
|
//Given the 4 points: x[4], y[4]
|
||||||
if (testquadinsect(&point_num, xy, pp->cursector))
|
if (testquadinsect(&point_num, xy, pp->cursector))
|
||||||
{
|
{
|
||||||
pp->add_int_ppos_XY({ (pp->vect.X >> 14), (pp->vect.Y >> 14) });
|
pp->pos += pvect;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,12 +210,12 @@ int RectClipMove(PLAYER* pp, int *qx, int *qy)
|
||||||
{
|
{
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
xy[i].X = qx[i] - (pp->vect.Y>>15);
|
xy[i].X = qpos[i].X - pvect.Y * 0.5;
|
||||||
xy[i].Y = qy[i] + (pp->vect.X>>15);
|
xy[i].Y = qpos[i].Y + pvect.X * 0.5;
|
||||||
}
|
}
|
||||||
if (testquadinsect(&point_num, xy, pp->cursector))
|
if (testquadinsect(&point_num, xy, pp->cursector))
|
||||||
{
|
{
|
||||||
pp->add_int_ppos_XY({ -(pp->vect.Y >> 15), (pp->vect.X >> 15) });
|
pp->pos.XY() += { -pvect.X * 0.5, pvect.X * 0.5 };
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -226,12 +225,12 @@ int RectClipMove(PLAYER* pp, int *qx, int *qy)
|
||||||
{
|
{
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
xy[i].X = qx[i] + (pp->vect.Y>>15);
|
xy[i].X = qpos[i].X + pvect.Y * 0.5;
|
||||||
xy[i].Y = qy[i] - (pp->vect.X>>15);
|
xy[i].Y = qpos[i].Y - pvect.X * 0.5;
|
||||||
}
|
}
|
||||||
if (testquadinsect(&point_num, xy, pp->cursector))
|
if (testquadinsect(&point_num, xy, pp->cursector))
|
||||||
{
|
{
|
||||||
pp->add_int_ppos_XY({ (pp->vect.Y >> 15), -(pp->vect.X >> 15) });
|
pp->pos.XY() += { pvect.X * 0.5, -pvect.X * 0.5 };
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -240,42 +239,29 @@ int RectClipMove(PLAYER* pp, int *qx, int *qy)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int testpointinquad(int x, int y, int *qx, int *qy)
|
int testpointinquad(const DVector2& pt, const DVector2* quad)
|
||||||
{
|
{
|
||||||
int i, cnt, x1, y1, x2, y2;
|
for (int i = 0; i < 4; i++)
|
||||||
|
|
||||||
cnt = 0;
|
|
||||||
for (i=0; i<4; i++)
|
|
||||||
{
|
{
|
||||||
y1 = qy[i]-y;
|
double dist = PointOnLineSide(pt.X, pt.Y, quad[i].X, quad[i].Y, quad[(i + 1) & 3].X - quad[i].X, quad[(i + 1) & 3].Y - quad[i].Y);
|
||||||
y2 = qy[(i+1)&3]-y;
|
if (dist > 0) return false;
|
||||||
if ((y1^y2) >= 0) continue;
|
|
||||||
|
|
||||||
x1 = qx[i]-x;
|
|
||||||
x2 = qx[(i+1)&3]-x;
|
|
||||||
if ((x1^x2) >= 0)
|
|
||||||
cnt ^= x1;
|
|
||||||
else
|
|
||||||
cnt ^= (x1*y2-x2*y1)^y2;
|
|
||||||
}
|
}
|
||||||
return cnt>>31;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
short RectClipTurn(PLAYER* pp, short new_ang, int *qx, int *qy, int *ox, int *oy)
|
short RectClipTurn(PLAYER* pp, DAngle new_angl, DVector2* qpos, DVector2* opos)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
vec2_t xy[4];
|
DVector2 xy[4];
|
||||||
SECTOR_OBJECT* sop = pp->sop;
|
SECTOR_OBJECT* sop = pp->sop;
|
||||||
short rot_ang;
|
DAngle rot_angl;
|
||||||
int point_num;
|
int point_num;
|
||||||
|
|
||||||
rot_ang = NORM_ANGLE(new_ang + sop->spin_ang - sop->ang_orig);
|
rot_angl = new_angl + DAngle::fromBuild(sop->spin_ang - sop->ang_orig);
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
vec2_t const p = { ox[i], oy[i] };
|
xy[i] = rotatepoint(pp->pos.XY(), opos[i], rot_angl);
|
||||||
rotatepoint(pp->int_ppos().vec2, p, rot_ang, &xy[i]);
|
|
||||||
// cannot use sop->xmid and ymid because the SO is off the map at this point
|
// cannot use sop->xmid and ymid because the SO is off the map at this point
|
||||||
//rotatepoint(&sop->xmid, p, rot_ang, &xy[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Given the 4 points: x[4], y[4]
|
//Given the 4 points: x[4], y[4]
|
||||||
|
@ -284,8 +270,7 @@ short RectClipTurn(PLAYER* pp, short new_ang, int *qx, int *qy, int *ox, int *oy
|
||||||
// move to new pos
|
// move to new pos
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
qx[i] = xy[i].X;
|
qpos[i] = xy[i];
|
||||||
qy[i] = xy[i].Y;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,8 @@ BEGIN_SW_NS
|
||||||
|
|
||||||
Collision MultiClipMove(PLAYER* pp, int z, int floor_dist);
|
Collision MultiClipMove(PLAYER* pp, int z, int floor_dist);
|
||||||
short MultiClipTurn(PLAYER* pp, short new_ang, int z, int floor_dist);
|
short MultiClipTurn(PLAYER* pp, short new_ang, int z, int floor_dist);
|
||||||
int RectClipMove(PLAYER* pp, int *qx, int *qy);
|
int RectClipMove(PLAYER* pp, DVector2* qpos);
|
||||||
int testpointinquad(int x, int y, int *qx, int *qy);
|
int testpointinquad(const DVector2& pt, const DVector2* quad);
|
||||||
//short RectClipTurn(PLAYER* pp, short new_ang, int z, int floor_dist, int *qx, int *qy);
|
//short RectClipTurn(PLAYER* pp, short new_ang, int z, int floor_dist, int *qx, int *qy);
|
||||||
short RectClipTurn(PLAYER* pp, short new_ang, int *qx, int *qy, int *ox, int *oy);
|
short RectClipTurn(PLAYER* pp, short new_ang, int *qx, int *qy, int *ox, int *oy);
|
||||||
END_SW_NS
|
END_SW_NS
|
||||||
|
|
|
@ -1477,7 +1477,7 @@ void DoPlayerTurnVehicle(PLAYER* pp, float avel, int z, int floor_dist)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoPlayerTurnVehicleRect(PLAYER* pp, int *x, int *y, int *ox, int *oy)
|
void DoPlayerTurnVehicleRect(PLAYER* pp, DVector2* pos, DVector2* opos)
|
||||||
{
|
{
|
||||||
float avel;
|
float avel;
|
||||||
SECTOR_OBJECT* sop = pp->sop;
|
SECTOR_OBJECT* sop = pp->sop;
|
||||||
|
@ -1497,10 +1497,10 @@ void DoPlayerTurnVehicleRect(PLAYER* pp, int *x, int *y, int *ox, int *oy)
|
||||||
if (avel != 0)
|
if (avel != 0)
|
||||||
{
|
{
|
||||||
auto sum = pp->angle.ang + DAngle::fromDeg(avel);
|
auto sum = pp->angle.ang + DAngle::fromDeg(avel);
|
||||||
if (RectClipTurn(pp, NORM_ANGLE(sum.Buildang()), x, y, ox, oy))
|
if (RectClipTurn(pp, sum, pos, opos))
|
||||||
{
|
{
|
||||||
pp->angle.ang = sum;
|
pp->angle.ang = sum;
|
||||||
pp->actor->set_int_ang(pp->angle.ang.Buildang());
|
pp->actor->spr.angle = pp->angle.ang;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2301,10 +2301,8 @@ void SetupDriveCrush(PLAYER* pp, int *x, int *y)
|
||||||
y[3] = pp->int_ppos().Y + radius;
|
y[3] = pp->int_ppos().Y + radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DriveCrush(PLAYER* pp, int *x, int *y)
|
void DriveCrush(PLAYER* pp, DVector2* quad)
|
||||||
{
|
{
|
||||||
int testpointinquad(int x, int y, int *qx, int *qy);
|
|
||||||
|
|
||||||
SECTOR_OBJECT* sop = pp->sop_control;
|
SECTOR_OBJECT* sop = pp->sop_control;
|
||||||
short stat;
|
short stat;
|
||||||
sectortype* *sectp;
|
sectortype* *sectp;
|
||||||
|
@ -2320,7 +2318,7 @@ void DriveCrush(PLAYER* pp, int *x, int *y)
|
||||||
SWSectIterator it(sop->op_main_sector);
|
SWSectIterator it(sop->op_main_sector);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
if (testpointinquad(actor->int_pos().X, actor->int_pos().Y, x, y))
|
if (testpointinquad(actor->spr.pos, quad))
|
||||||
{
|
{
|
||||||
if ((actor->spr.extra & SPRX_BREAKABLE) && HitBreakSprite(actor, 0))
|
if ((actor->spr.extra & SPRX_BREAKABLE) && HitBreakSprite(actor, 0))
|
||||||
continue;
|
continue;
|
||||||
|
@ -2355,7 +2353,7 @@ void DriveCrush(PLAYER* pp, int *x, int *y)
|
||||||
SWStatIterator it2(STAT_ENEMY);
|
SWStatIterator it2(STAT_ENEMY);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
if (testpointinquad(actor->int_pos().X, actor->int_pos().Y, x, y))
|
if (testpointinquad(actor->spr.pos, quad))
|
||||||
{
|
{
|
||||||
//if (actor->spr.z < pp->posz)
|
//if (actor->spr.z < pp->posz)
|
||||||
if (actor->int_pos().Z < sop->crush_z)
|
if (actor->int_pos().Z < sop->crush_z)
|
||||||
|
@ -2382,7 +2380,7 @@ void DriveCrush(PLAYER* pp, int *x, int *y)
|
||||||
it2.Reset(STAT_DEAD_ACTOR);
|
it2.Reset(STAT_DEAD_ACTOR);
|
||||||
while (auto actor = it.Next())
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
if (testpointinquad(actor->int_pos().X, actor->int_pos().Y, x, y))
|
if (testpointinquad(actor->spr.pos, quad))
|
||||||
{
|
{
|
||||||
if (actor->int_pos().Z < sop->crush_z)
|
if (actor->int_pos().Z < sop->crush_z)
|
||||||
continue;
|
continue;
|
||||||
|
@ -2404,7 +2402,7 @@ void DriveCrush(PLAYER* pp, int *x, int *y)
|
||||||
if (actor->user.PlayerP == pp)
|
if (actor->user.PlayerP == pp)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (testpointinquad(actor->int_pos().X, actor->int_pos().Y, x, y))
|
if (testpointinquad(actor->spr.pos, quad))
|
||||||
{
|
{
|
||||||
int damage;
|
int damage;
|
||||||
|
|
||||||
|
@ -2451,7 +2449,6 @@ void DoPlayerMoveVehicle(PLAYER* pp)
|
||||||
DSWActor* actor = pp->sop->sp_child;
|
DSWActor* actor = pp->sop->sp_child;
|
||||||
if (!actor) return;
|
if (!actor) return;
|
||||||
DSWActor* plActor = pp->actor;
|
DSWActor* plActor = pp->actor;
|
||||||
int x[4], y[4], ox[4], oy[4];
|
|
||||||
int wallcount;
|
int wallcount;
|
||||||
int count=0;
|
int count=0;
|
||||||
|
|
||||||
|
@ -2512,6 +2509,8 @@ void DoPlayerMoveVehicle(PLAYER* pp)
|
||||||
pp->lastcursector = pp->cursector;
|
pp->lastcursector = pp->cursector;
|
||||||
z = pp->int_ppos().Z + Z(10);
|
z = pp->int_ppos().Z + Z(10);
|
||||||
|
|
||||||
|
DVector2 pos[4], opos[4];
|
||||||
|
|
||||||
if (RectClip)
|
if (RectClip)
|
||||||
{
|
{
|
||||||
for (sectp = sop->sectp, wallcount = 0, j = 0; *sectp; sectp++, j++)
|
for (sectp = sop->sectp, wallcount = 0, j = 0; *sectp; sectp++, j++)
|
||||||
|
@ -2520,12 +2519,8 @@ void DoPlayerMoveVehicle(PLAYER* pp)
|
||||||
{
|
{
|
||||||
if (wal.extra && (wal.extra & (WALLFX_LOOP_OUTER|WALLFX_LOOP_OUTER_SECONDARY)) == WALLFX_LOOP_OUTER)
|
if (wal.extra && (wal.extra & (WALLFX_LOOP_OUTER|WALLFX_LOOP_OUTER_SECONDARY)) == WALLFX_LOOP_OUTER)
|
||||||
{
|
{
|
||||||
x[count] = wal.wall_int_pos().X;
|
pos[count] = wal.pos;
|
||||||
y[count] = wal.wall_int_pos().Y;
|
opos[count] = sop->pmid - sop->orig[wallcount];
|
||||||
|
|
||||||
ox[count] = sop->int_pmid().X - sop->xorig[wallcount];
|
|
||||||
oy[count] = sop->int_pmid().Y - sop->yorig[wallcount];
|
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2551,10 +2546,10 @@ void DoPlayerMoveVehicle(PLAYER* pp)
|
||||||
|
|
||||||
auto save_cstat = plActor->spr.cstat;
|
auto save_cstat = plActor->spr.cstat;
|
||||||
plActor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK);
|
plActor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK);
|
||||||
DoPlayerTurnVehicleRect(pp, x, y, ox, oy);
|
DoPlayerTurnVehicleRect(pp, pos, opos);
|
||||||
|
|
||||||
ret = RectClipMove(pp, x, y);
|
ret = RectClipMove(pp, pos);
|
||||||
DriveCrush(pp, x, y);
|
DriveCrush(pp, pos);
|
||||||
plActor->spr.cstat = save_cstat;
|
plActor->spr.cstat = save_cstat;
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
@ -2563,14 +2558,13 @@ 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) };
|
DVector3 hitpos((pos[0] + pos[1]) * 0.5, pp->cursector->floorz - 10);
|
||||||
DVector3 hitpos(hit_pos.X * inttoworld, hit_pos.Y * inttoworld, pp->cursector->floorz - 10);
|
|
||||||
|
|
||||||
hitscan(hitpos, pp->cursector,
|
hitscan(hitpos, pp->cursector,
|
||||||
DVector3(MOVEx(256, pp->angle.ang), MOVEy(256, pp->angle.ang), 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 ((hit.hitpos.XY() - hitpos.XY()).LengthSquared() < 50 * 50)
|
||||||
{
|
{
|
||||||
if (hit.hitWall)
|
if (hit.hitWall)
|
||||||
actor->user.coll.setWall(wallnum(hit.hitWall));
|
actor->user.coll.setWall(wallnum(hit.hitWall));
|
||||||
|
|
|
@ -624,8 +624,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, SECTOR_OBJECT& w,
|
||||||
.Array("sectp", w.sectp, def->sectp, w.num_sectors)
|
.Array("sectp", w.sectp, def->sectp, w.num_sectors)
|
||||||
.Array("zorig_floor", w.zorig_floor, def->zorig_floor, w.num_sectors)
|
.Array("zorig_floor", w.zorig_floor, def->zorig_floor, w.num_sectors)
|
||||||
.Array("sp_num", w.so_actors, def->so_actors, countof(w.so_actors))
|
.Array("sp_num", w.so_actors, def->so_actors, countof(w.so_actors))
|
||||||
.Array("xorig", w.xorig, def->xorig, w.num_walls)
|
.Array("orig", w.orig, def->orig, w.num_walls)
|
||||||
.Array("yorig", w.yorig, def->yorig, w.num_walls)
|
|
||||||
("controller", w.controller, def->controller)
|
("controller", w.controller, def->controller)
|
||||||
("child", w.sp_child, def->sp_child)
|
("child", w.sp_child, def->sp_child)
|
||||||
("xmid", w.pmid.X, def->pmid.X)
|
("xmid", w.pmid.X, def->pmid.X)
|
||||||
|
|
|
@ -1348,13 +1348,12 @@ void PlaceSectorObjectsOnTracks(void)
|
||||||
// move all walls in sectors
|
// move all walls in sectors
|
||||||
for (auto& wal : wallsofsector(sop->sectp[j]))
|
for (auto& wal : wallsofsector(sop->sectp[j]))
|
||||||
{
|
{
|
||||||
sop->xorig[sop->num_walls] = sop->int_pmid().X - wal.wall_int_pos().X;
|
sop->orig[sop->num_walls] = sop->pmid - wal.pos;
|
||||||
sop->yorig[sop->num_walls] = sop->int_pmid().Y - wal.wall_int_pos().Y;
|
|
||||||
sop->num_walls++;
|
sop->num_walls++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT((uint16_t)sop->num_walls < SIZ(sop->xorig));
|
ASSERT((uint16_t)sop->num_walls < SIZ(sop->orig));
|
||||||
|
|
||||||
if (sop->track <= -1)
|
if (sop->track <= -1)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1782,8 +1781,8 @@ void RefreshPoints(SECTOR_OBJECT* sop, int nx, int ny, bool dynamic)
|
||||||
{
|
{
|
||||||
if (!(wal.extra && (wal.extra & WALLFX_DONT_MOVE)))
|
if (!(wal.extra && (wal.extra & WALLFX_DONT_MOVE)))
|
||||||
{
|
{
|
||||||
dx = x = sop->int_pmid().X - sop->xorig[wallcount];
|
dx = x = sop->int_pmid().X - sop->orig[wallcount].X * worldtoint;
|
||||||
dy = y = sop->int_pmid().Y - sop->yorig[wallcount];
|
dy = y = sop->int_pmid().Y - sop->orig[wallcount].Y * worldtoint;
|
||||||
|
|
||||||
if (dynamic && sop->scale_type)
|
if (dynamic && sop->scale_type)
|
||||||
{
|
{
|
||||||
|
|
|
@ -64,8 +64,8 @@ void SOwallmove(SECTOR_OBJECT* sop, DSWActor* actor, walltype* find_wallp, int d
|
||||||
*nx = dist * ang.Cos();
|
*nx = dist * ang.Cos();
|
||||||
*ny = dist * ang.Sin();
|
*ny = dist * ang.Sin();
|
||||||
|
|
||||||
sop->xorig[wallcount] -= *nx;
|
sop->orig[wallcount].X -= *nx * inttoworld;
|
||||||
sop->yorig[wallcount] -= *ny;
|
sop->orig[wallcount].Y -= *ny * inttoworld;
|
||||||
|
|
||||||
sop->flags |= (SOBJ_UPDATE_ONCE);
|
sop->flags |= (SOBJ_UPDATE_ONCE);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue