Fix MSVS compile bug and add offset parameter for SprayDecal

This commit is contained in:
Mekboss 2020-04-07 23:11:49 +03:00 committed by Christoph Oelckers
parent 0e9ca3c850
commit 4807f4240b
4 changed files with 30 additions and 16 deletions

View file

@ -830,25 +830,36 @@ DBaseDecal *DImpactDecal::CloneSelf (const FDecalTemplate *tpl, double ix, doubl
// //
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void SprayDecal(AActor *shooter, const char *name, double distance, DVector3 Dir) void SprayDecal(AActor *shooter, const char *name, double distance, DVector3 offset, DVector3 direction)
{ {
//just in case
if (!shooter)
return;
FTraceResults trace; FTraceResults trace;
DVector3 vec; DVector3 off(0, 0, 0), dir(0, 0, 0);
//use new behavior only if directional vector not equal to zero vector
if (!Dir.isZero() ) //use vanilla offset only if "custom" equal to zero
{ if (offset.isZero() )
vec = Dir; off = shooter->PosPlusZ(shooter->Height / 2);
}
else else
off = shooter->Pos() + offset;
//same for direction
if (direction.isZero() )
{ {
DAngle ang = shooter->Angles.Yaw; DAngle ang = shooter->Angles.Yaw;
DAngle pitch = shooter->Angles.Pitch; DAngle pitch = shooter->Angles.Pitch;
double c = pitch.Cos(); double c = pitch.Cos();
vec = DVector3(c * ang.Cos(), c * ang.Sin(), -pitch.Sin()); dir = DVector3(c * ang.Cos(), c * ang.Sin(), -pitch.Sin());
} }
else
dir = direction;
if (Trace(shooter->PosPlusZ(shooter->Height / 2), shooter->Sector, vec, distance, 0, ML_BLOCKEVERYTHING, shooter, trace, TRACE_NoSky))
if (Trace(off, shooter->Sector, dir, distance, 0, ML_BLOCKEVERYTHING, shooter, trace, TRACE_NoSky))
{ {
if (trace.HitType == TRACE_HitWall) if (trace.HitType == TRACE_HitWall)
{ {

View file

@ -12,7 +12,7 @@ class DBaseDecal;
struct SpreadInfo; struct SpreadInfo;
DBaseDecal *ShootDecal(FLevelLocals *Level, const FDecalTemplate *tpl, sector_t *sec, double x, double y, double z, DAngle angle, double tracedist, bool permanent); DBaseDecal *ShootDecal(FLevelLocals *Level, const FDecalTemplate *tpl, sector_t *sec, double x, double y, double z, DAngle angle, double tracedist, bool permanent);
void SprayDecal(AActor *shooter, const char *name,double distance = 172., DVector3 Dir = (0, 0, 0) ); void SprayDecal(AActor *shooter, const char *name,double distance = 172., DVector3 offset = DVector3(0., 0., 0.), DVector3 direction = DVector3(0., 0., 0.) );
class DBaseDecal : public DThinker class DBaseDecal : public DThinker
{ {

View file

@ -4917,10 +4917,13 @@ DEFINE_ACTION_FUNCTION(AActor, A_SprayDecal)
PARAM_SELF_PROLOGUE(AActor); PARAM_SELF_PROLOGUE(AActor);
PARAM_STRING(name); PARAM_STRING(name);
PARAM_FLOAT(dist); PARAM_FLOAT(dist);
PARAM_FLOAT(DirX); PARAM_FLOAT(offset_x);
PARAM_FLOAT(DirY); PARAM_FLOAT(offset_y);
PARAM_FLOAT(DirZ); PARAM_FLOAT(offset_z);
SprayDecal(self, name, dist, DVector3(DirX, DirY, DirZ) ); PARAM_FLOAT(direction_x);
PARAM_FLOAT(direction_y);
PARAM_FLOAT(direction_z);
SprayDecal(self, name, dist, DVector3(offset_x, offset_y, offset_z), DVector3(direction_x, direction_y, direction_z) );
return 0; return 0;
} }

View file

@ -1157,7 +1157,7 @@ class Actor : Thinker native
native bool A_SetVisibleRotation(double anglestart = 0, double angleend = 0, double pitchstart = 0, double pitchend = 0, int flags = 0, int ptr = AAPTR_DEFAULT); native bool A_SetVisibleRotation(double anglestart = 0, double angleend = 0, double pitchstart = 0, double pitchend = 0, int flags = 0, int ptr = AAPTR_DEFAULT);
native void A_SetTranslation(name transname); native void A_SetTranslation(name transname);
native bool A_SetSize(double newradius = -1, double newheight = -1, bool testpos = false); native bool A_SetSize(double newradius = -1, double newheight = -1, bool testpos = false);
native void A_SprayDecal(String name, double dist = 172, vector3 Dir = (0, 0, 0) ); native void A_SprayDecal(String name, double dist = 172, vector3 offset = (0, 0, 0), vector3 direction = (0, 0, 0) );
native void A_SetMugshotState(String name); native void A_SetMugshotState(String name);
native void CopyBloodColor(Actor other); native void CopyBloodColor(Actor other);