mirror of
https://github.com/DrBeef/Raze.git
synced 2025-02-21 03:01:36 +00:00
- floatified handle_se05
This commit is contained in:
parent
49125ffed5
commit
845287a7ba
2 changed files with 27 additions and 20 deletions
|
@ -3153,7 +3153,7 @@ void handle_se02(DDukeActor* actor)
|
|||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// lights off
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
@ -3200,7 +3200,7 @@ void handle_se03(DDukeActor *actor)
|
|||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// lights
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
@ -3265,17 +3265,18 @@ void handle_se04(DDukeActor *actor)
|
|||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// boss
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void handle_se05(DDukeActor* actor, int FIRELASER)
|
||||
{
|
||||
auto sc = actor->sector();
|
||||
int j, l, m;
|
||||
int j;
|
||||
|
||||
int x, p = findplayer(actor, &x);
|
||||
if (x < 8192)
|
||||
double x;
|
||||
int p = findplayer(actor, &x);
|
||||
if (x < 512)
|
||||
{
|
||||
auto ang = actor->spr.angle;
|
||||
actor->spr.angle = VecToAngle(actor->spr.pos.XY() - ps[p].pos);
|
||||
|
@ -3287,18 +3288,18 @@ void handle_se05(DDukeActor* actor, int FIRELASER)
|
|||
if (Owner == nullptr) //Start search
|
||||
{
|
||||
actor->temp_data[4] = 0;
|
||||
l = 0x7fffffff;
|
||||
double maxdist = 0x7fffffff;
|
||||
while (1) //Find the shortest dist
|
||||
{
|
||||
auto NewOwner = LocateTheLocator(actor->temp_data[4], nullptr);
|
||||
if (NewOwner == nullptr) break;
|
||||
|
||||
m = ldist(ps[p].GetActor(), NewOwner);
|
||||
double dist = (ps[p].GetActor()->spr.pos.XY() - NewOwner->spr.pos.XY()).LengthSquared();
|
||||
|
||||
if (l > m)
|
||||
if (maxdist > dist)
|
||||
{
|
||||
Owner = NewOwner;
|
||||
l = m;
|
||||
maxdist = dist;
|
||||
}
|
||||
|
||||
actor->temp_data[4]++;
|
||||
|
@ -3306,10 +3307,10 @@ void handle_se05(DDukeActor* actor, int FIRELASER)
|
|||
|
||||
actor->SetOwner(Owner);
|
||||
if (!Owner) return; // Undefined case - was not checked.
|
||||
actor->set_int_zvel(Sgn(Owner->spr.pos.Z - actor->spr.pos.Z) << 4);
|
||||
actor->vel.Z = (Sgn(Owner->spr.pos.Z - actor->spr.pos.Z) / 16);
|
||||
}
|
||||
|
||||
if (ldist(Owner, actor) < 1024)
|
||||
if ((Owner->spr.pos.XY() - actor->spr.pos.XY()).LengthSquared() < 64 * 64)
|
||||
{
|
||||
// Huh?
|
||||
//auto ta = actor->spr.angle;
|
||||
|
@ -3319,21 +3320,21 @@ void handle_se05(DDukeActor* actor, int FIRELASER)
|
|||
return;
|
||||
|
||||
}
|
||||
else actor->set_int_xvel(256);
|
||||
else actor->vel.X = 16;
|
||||
|
||||
x = getangle(Owner->spr.pos.XY() - actor->spr.pos.XY());
|
||||
int q = getincangle(actor->int_ang(), x) >> 3;
|
||||
actor->add_int_ang(q);
|
||||
auto ang = VecToAngle(Owner->spr.pos.XY() - actor->spr.pos.XY());
|
||||
auto angdiff = deltaangle(actor->spr.angle, ang) / 8;
|
||||
actor->spr.angle += angdiff;
|
||||
|
||||
if (rnd(32))
|
||||
{
|
||||
actor->temp_data[2] += q;
|
||||
actor->temp_angle += angdiff;
|
||||
sc->ceilingshade = 127;
|
||||
}
|
||||
else
|
||||
{
|
||||
actor->temp_data[2] +=
|
||||
getincangle(actor->temp_data[2] + 512, getangle(ps[p].pos.XY() - actor->spr.pos.XY())) >> 2;
|
||||
actor->temp_angle +=
|
||||
deltaangle(actor->temp_angle + DAngle90, VecToAngle(ps[p].pos.XY() - actor->spr.pos.XY())) * 0.25;
|
||||
sc->ceilingshade = 0;
|
||||
}
|
||||
j = fi.ifhitbyweapon(actor);
|
||||
|
@ -3350,7 +3351,7 @@ void handle_se05(DDukeActor* actor, int FIRELASER)
|
|||
actor->spr.pos.Z += actor->vel.Z;
|
||||
sc->setceilingz(actor->vel.Z);
|
||||
sector[actor->temp_data[0]].setceilingz(actor->vel.Z);
|
||||
movesector(actor, actor->temp_data[1], DAngle::fromBuild(actor->temp_data[2]));
|
||||
movesector(actor, actor->temp_data[1], actor->temp_angle);
|
||||
//SetActor(actor, actor->spr.pos);
|
||||
}
|
||||
|
||||
|
|
|
@ -140,6 +140,12 @@ void breakwall(int newpn, DDukeActor* spr, walltype* dawallnum);
|
|||
int callsound(sectortype* sectnum,DDukeActor* snum, bool endstate = false);
|
||||
int hitasprite(DDukeActor* snum,DDukeActor **hitSprite);
|
||||
int findplayer(const DDukeActor* s, int* dist);
|
||||
inline int findplayer(const DDukeActor* s, double* dist)
|
||||
{
|
||||
int dd, p = findplayer(s, &dd);
|
||||
*dist = dd * inttoworld;
|
||||
return p;
|
||||
}
|
||||
void operatejaildoors(int hitag);
|
||||
void allignwarpelevators(void);
|
||||
bool isablockdoor(int tileNum);
|
||||
|
|
Loading…
Reference in a new issue