- WeaponAutoAimHitscan

# Conflicts:
#	source/games/sw/src/weapon.cpp
This commit is contained in:
Christoph Oelckers 2021-11-04 00:34:17 +01:00
parent 9d0056f8c7
commit 2c0a597f06

View file

@ -14030,11 +14030,10 @@ AimHitscanToTarget(SPRITEp sp, int *z, short *ang, int z_ratio)
return hit_sprite; return hit_sprite;
} }
int DSWActor* WeaponAutoAimHitscan(DSWActor* actor, int *z, short *ang, bool test)
WeaponAutoAimHitscan(SPRITEp sp, int *z, short *ang, bool test)
{ {
auto actor = &swActors[sp - sprite];
USERp u = actor->u(); USERp u = actor->u();
auto sp = &actor->s();
int dist; int dist;
int zh; int zh;
int xvect; int xvect;
@ -14044,7 +14043,7 @@ WeaponAutoAimHitscan(SPRITEp sp, int *z, short *ang, bool test)
{ {
if (!Autoaim(u->PlayerP->pnum)) if (!Autoaim(u->PlayerP->pnum))
{ {
return -1; return nullptr;
} }
} }
@ -14080,7 +14079,7 @@ WeaponAutoAimHitscan(SPRITEp sp, int *z, short *ang, bool test)
} }
} }
return hitActor == nullptr? -1 : hitActor->GetSpriteIndex(); return hitActor;
} }
void void
@ -14495,7 +14494,7 @@ InitShotgun(PLAYERp pp)
sp = pp->SpriteP; sp = pp->SpriteP;
daang = 64; daang = 64;
if (WeaponAutoAimHitscan(sp, &daz, &daang, false) != -1) if (WeaponAutoAimHitscan(pp->Actor(), &daz, &daang, false) != nullptr)
{ {
} }
else else
@ -17344,7 +17343,7 @@ InitUzi(PLAYERp pp)
nz = pp->posz + pp->bob_z; nz = pp->posz + pp->bob_z;
daz = pp->posz + pp->bob_z; daz = pp->posz + pp->bob_z;
daang = 32; daang = 32;
if (WeaponAutoAimHitscan(pp->SpriteP, &daz, &daang, false) != -1) if (WeaponAutoAimHitscan(pp->Actor(), &daz, &daang, false) != nullptr)
{ {
daang += RandomRange(24) - 12; daang += RandomRange(24) - 12;
daang = NORM_ANGLE(daang); daang = NORM_ANGLE(daang);
@ -17535,7 +17534,7 @@ InitEMP(PLAYERp pp)
daz = nz = pp->posz + pp->bob_z; daz = nz = pp->posz + pp->bob_z;
daang = 64; daang = 64;
if (WeaponAutoAimHitscan(pp->SpriteP, &daz, &daang, false) != -1) if (WeaponAutoAimHitscan(pp->Actor(), &daz, &daang, false) != nullptr)
{ {
} }
else else
@ -18044,6 +18043,7 @@ InitTurretLaser(short SpriteNum, PLAYERp pp)
int int
InitSobjMachineGun(short SpriteNum, PLAYERp pp) InitSobjMachineGun(short SpriteNum, PLAYERp pp)
{ {
DSWActor* actor = &swActors[SpriteNum];
USERp u = User[SpriteNum].Data(); USERp u = User[SpriteNum].Data();
SPRITEp sp = u->SpriteP; SPRITEp sp = u->SpriteP;
short daang; short daang;
@ -18068,7 +18068,7 @@ InitSobjMachineGun(short SpriteNum, PLAYERp pp)
InitTracerTurret(short(sp - sprite), pp->PlayerSprite, pp->horizon.horiz.asq16()); InitTracerTurret(short(sp - sprite), pp->PlayerSprite, pp->horizon.horiz.asq16());
daang = 64; daang = 64;
if (WeaponAutoAimHitscan(sp, &daz, &daang, false) != -1) if (WeaponAutoAimHitscan(actor, &daz, &daang, false) != nullptr)
{ {
daz += RandomRange(Z(30)) - Z(15); daz += RandomRange(Z(30)) - Z(15);
//daz += 0; //daz += 0;
@ -18449,9 +18449,9 @@ int InitTurretMgun(SECTOR_OBJECTp sop)
{ {
// only auto aim for Z // only auto aim for Z
daang = 512; daang = 512;
auto hit = WeaponAutoAimHitscan(sp, &daz, &daang, false); auto hit = WeaponAutoAimHitscan(actor, &daz, &daang, false);
hitinfo.hitactor = hit == -1 ? nullptr : &swActors[hit]; hitinfo.hitactor = hit;
if (hitinfo.hitactor != nullptr) if (hit != nullptr)
{ {
delta = short(abs(getincangle(sp->ang, daang))); delta = short(abs(getincangle(sp->ang, daang)));
if (delta > 128) if (delta > 128)
@ -18463,7 +18463,7 @@ int InitTurretMgun(SECTOR_OBJECTp sop)
{ {
// always shoot the ground when tracking // always shoot the ground when tracking
// and not close // and not close
WeaponHitscanShootFeet(sp, &hitinfo.hitactor->s(), &daz); WeaponHitscanShootFeet(sp, &hit->s(), &daz);
daang = sp->ang; daang = sp->ang;
daang = NORM_ANGLE(daang + RANDOM_P2(32) - 16); daang = NORM_ANGLE(daang + RANDOM_P2(32) - 16);
@ -18481,7 +18481,7 @@ int InitTurretMgun(SECTOR_OBJECTp sop)
else else
{ {
daang = 64; daang = 64;
if (WeaponAutoAimHitscan(sp, &daz, &daang, false) != -1) if (WeaponAutoAimHitscan(actor, &daz, &daang, false) != nullptr)
{ {
daz += RandomRange(Z(30)) - Z(15); daz += RandomRange(Z(30)) - Z(15);
} }