mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-11 07:11:54 +00:00
Merge branch 'master' of https://github.com/rheit/zdoom
This commit is contained in:
commit
a1a022581d
6 changed files with 49 additions and 7 deletions
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue