This commit is contained in:
Christoph Oelckers 2016-04-12 19:44:34 +02:00
commit a1a022581d
6 changed files with 49 additions and 7 deletions

View file

@ -804,6 +804,12 @@ public:
return bloodcls; return bloodcls;
} }
double Distance2DSquared(AActor *other, bool absolute = false)
{
DVector2 otherpos = absolute ? other->Pos() : other->PosRelative(this);
return (Pos().XY() - otherpos).LengthSquared();
}
double Distance2D(AActor *other, bool absolute = false) double Distance2D(AActor *other, bool absolute = false)
{ {
DVector2 otherpos = absolute ? other->Pos() : other->PosRelative(this); DVector2 otherpos = absolute ? other->Pos() : other->PosRelative(this);

View file

@ -1629,7 +1629,7 @@ void APowerDamage::ModifyDamage(int damage, FName damageType, int &newdamage, bo
DmgFactors *df = GetClass()->DamageFactors; DmgFactors *df = GetClass()->DamageFactors;
if (df != NULL && df->CountUsed() != 0) if (df != NULL && df->CountUsed() != 0)
{ {
newdam = MIN(1, df->Apply(damageType, damage));// don't allow zero damage as result of an underflow newdam = MAX(1, df->Apply(damageType, damage));// don't allow zero damage as result of an underflow
} }
else else
{ {

View file

@ -53,6 +53,7 @@ struct Baggage;
class FScanner; class FScanner;
struct FActorInfo; struct FActorInfo;
class FArchive; class FArchive;
class FIntCVar;
// Sprites that are fixed in position because they can have special meanings. // Sprites that are fixed in position because they can have special meanings.
enum enum
@ -259,6 +260,7 @@ public:
DDropItem *DropItems; DDropItem *DropItems;
FString SourceLumpName; FString SourceLumpName;
FIntCVar *distancecheck;
// Old Decorate compatibility stuff // Old Decorate compatibility stuff
bool DontHurtShooter; bool DontHurtShooter;

View file

@ -8900,10 +8900,11 @@ scriptwait:
break; break;
case PCD_ENDTRANSLATION: case PCD_ENDTRANSLATION:
// This might be useful for hardware rendering, but if (translation != NULL)
// for software it is superfluous. {
translation->UpdateNative(); translation->UpdateNative();
translation = NULL; translation = NULL;
}
break; break;
case PCD_SIN: case PCD_SIN:

View file

@ -1246,9 +1246,20 @@ void R_AddSprites (sector_t *sec, int lightlevel, int fakeside)
// Handle all things in sector. // Handle all things in sector.
for (thing = sec->thinglist; thing; thing = thing->snext) for (thing = sec->thinglist; thing; thing = thing->snext)
{ {
FIntCVar *cvar = thing->GetClass()->distancecheck;
if (cvar != NULL && *cvar >= 0)
{
double dist = thing->Distance2DSquared(camera);
double check = (double)**cvar;
if (dist >= check * check)
{
continue;
}
}
// find fake level // find fake level
for(int i = 0; i < (int)frontsector->e->XFloor.ffloors.Size(); i++) { for(auto rover : frontsector->e->XFloor.ffloors)
rover = frontsector->e->XFloor.ffloors[i]; {
if(!(rover->flags & FF_EXISTS) || !(rover->flags & FF_RENDERPLANES)) continue; if(!(rover->flags & FF_EXISTS) || !(rover->flags & FF_RENDERPLANES)) continue;
if(!(rover->flags & FF_SOLID) || rover->alpha != 255) continue; if(!(rover->flags & FF_SOLID) || rover->alpha != 255) continue;
if(!fakefloor) if(!fakefloor)

View file

@ -1523,6 +1523,28 @@ DEFINE_PROPERTY(riplevelmax, I, Actor)
defaults->RipLevelMax = id; defaults->RipLevelMax = id;
} }
//==========================================================================
//
//==========================================================================
DEFINE_PROPERTY(distancecheck, S, Actor)
{
PROP_STRING_PARM(cvar, 0);
FBaseCVar *scratch;
FBaseCVar *cv = FindCVar(cvar, &scratch);
if (cv == NULL)
{
I_Error("CVar %s not defined", cvar);
}
else if (cv->GetRealType() == CVAR_Int)
{
static_cast<PClassActor*>(info)->distancecheck = static_cast<FIntCVar *>(cv);
}
else
{
I_Error("CVar %s must of type Int", cvar);
}
}
//========================================================================== //==========================================================================
// //
// Special inventory properties // Special inventory properties