mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-23 20:52:26 +00:00
- fixed: Decal things did not spawn their lower decals.
This commit is contained in:
parent
918e9e9b0d
commit
c9d9982b68
3 changed files with 13 additions and 30 deletions
|
@ -886,7 +886,7 @@ const FDecalTemplate *FDecalLib::GetDecalByName (const char *name) const
|
||||||
FDecalBase *base = ScanTreeForName (name, Root);
|
FDecalBase *base = ScanTreeForName (name, Root);
|
||||||
if (base != NULL)
|
if (base != NULL)
|
||||||
{
|
{
|
||||||
return static_cast<FDecalTemplate *>(base);
|
return base->GetDecal();
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -708,7 +708,7 @@ void DImpactDecal::Expired()
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
DImpactDecal *DImpactDecal::StaticCreate (FLevelLocals *Level, const char *name, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color, uint32_t bloodTranslation)
|
DBaseDecal* DImpactDecal::StaticCreate (FLevelLocals *Level, const char *name, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color, uint32_t bloodTranslation)
|
||||||
{
|
{
|
||||||
if (cl_maxdecals > 0)
|
if (cl_maxdecals > 0)
|
||||||
{
|
{
|
||||||
|
@ -719,7 +719,7 @@ DImpactDecal *DImpactDecal::StaticCreate (FLevelLocals *Level, const char *name,
|
||||||
return StaticCreate (Level, tpl, pos, wall, ffloor, color, bloodTranslation);
|
return StaticCreate (Level, tpl, pos, wall, ffloor, color, bloodTranslation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -728,10 +728,10 @@ DImpactDecal *DImpactDecal::StaticCreate (FLevelLocals *Level, const char *name,
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
DImpactDecal *DImpactDecal::StaticCreate (FLevelLocals *Level, const FDecalTemplate *tpl, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color, uint32_t bloodTranslation)
|
DBaseDecal* DImpactDecal::StaticCreate (FLevelLocals *Level, const FDecalTemplate *tpl, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color, uint32_t bloodTranslation, bool permanent)
|
||||||
{
|
{
|
||||||
DImpactDecal *decal = NULL;
|
DBaseDecal *decal = NULL;
|
||||||
if (tpl != NULL && cl_maxdecals > 0 && !(wall->Flags & WALLF_NOAUTODECALS))
|
if (tpl != NULL && ((cl_maxdecals > 0 && !(wall->Flags & WALLF_NOAUTODECALS)) || permanent))
|
||||||
{
|
{
|
||||||
if (tpl->LowerDecal)
|
if (tpl->LowerDecal)
|
||||||
{
|
{
|
||||||
|
@ -745,9 +745,10 @@ DImpactDecal *DImpactDecal::StaticCreate (FLevelLocals *Level, const FDecalTempl
|
||||||
|
|
||||||
uint32_t lowerTrans = (bloodTranslation != 0 ? bloodTranslation : 0);
|
uint32_t lowerTrans = (bloodTranslation != 0 ? bloodTranslation : 0);
|
||||||
|
|
||||||
StaticCreate (Level, tpl_low, pos, wall, ffloor, lowercolor, lowerTrans);
|
StaticCreate (Level, tpl_low, pos, wall, ffloor, lowercolor, lowerTrans, permanent);
|
||||||
}
|
}
|
||||||
decal = Level->CreateThinker<DImpactDecal>(pos.Z);
|
if (!permanent) decal = Level->CreateThinker<DImpactDecal>(pos.Z);
|
||||||
|
else decal = Level->CreateThinker<DBaseDecal>(pos.Z);
|
||||||
if (decal == NULL)
|
if (decal == NULL)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -758,7 +759,7 @@ DImpactDecal *DImpactDecal::StaticCreate (FLevelLocals *Level, const FDecalTempl
|
||||||
decal->Destroy();
|
decal->Destroy();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
decal->CheckMax();
|
if (!permanent) static_cast<DImpactDecal*>(decal)->CheckMax();
|
||||||
|
|
||||||
tpl->ApplyToDecal (decal, wall);
|
tpl->ApplyToDecal (decal, wall);
|
||||||
if (color != 0)
|
if (color != 0)
|
||||||
|
@ -885,30 +886,12 @@ DBaseDecal *ShootDecal(FLevelLocals *Level, const FDecalTemplate *tpl, sector_t
|
||||||
}
|
}
|
||||||
|
|
||||||
FTraceResults trace;
|
FTraceResults trace;
|
||||||
DBaseDecal *decal;
|
|
||||||
side_t *wall;
|
|
||||||
|
|
||||||
Trace(DVector3(x,y,z), sec, DVector3(angle.ToVector(), 0), tracedist, 0, 0, NULL, trace, TRACE_NoSky);
|
Trace(DVector3(x,y,z), sec, DVector3(angle.ToVector(), 0), tracedist, 0, 0, NULL, trace, TRACE_NoSky);
|
||||||
|
|
||||||
if (trace.HitType == TRACE_HitWall)
|
if (trace.HitType == TRACE_HitWall)
|
||||||
{
|
{
|
||||||
if (permanent)
|
return DImpactDecal::StaticCreate(Level, tpl, trace.HitPos, trace.Line->sidedef[trace.Side], NULL, 0, 0, permanent);
|
||||||
{
|
|
||||||
decal = Level->CreateThinker<DBaseDecal>(trace.HitPos.Z);
|
|
||||||
wall = trace.Line->sidedef[trace.Side];
|
|
||||||
decal->StickToWall(wall, trace.HitPos.X, trace.HitPos.Y, trace.ffloor);
|
|
||||||
tpl->ApplyToDecal(decal, wall);
|
|
||||||
// Spread decal to nearby walls if it does not all fit on this one
|
|
||||||
if (cl_spreaddecals)
|
|
||||||
{
|
|
||||||
decal->Spread(tpl, wall, trace.HitPos.X, trace.HitPos.Y, trace.HitPos.Z, trace.ffloor);
|
|
||||||
}
|
|
||||||
return decal;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return DImpactDecal::StaticCreate(Level, tpl, trace.HitPos, trace.Line->sidedef[trace.Side], NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,8 +69,8 @@ public:
|
||||||
}
|
}
|
||||||
void Construct(side_t *wall, const FDecalTemplate *templ);
|
void Construct(side_t *wall, const FDecalTemplate *templ);
|
||||||
|
|
||||||
static DImpactDecal *StaticCreate(FLevelLocals *Level, const char *name, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color = 0, uint32_t bloodTranslation = 0);
|
static DBaseDecal *StaticCreate(FLevelLocals *Level, const char *name, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color = 0, uint32_t bloodTranslation = 0);
|
||||||
static DImpactDecal *StaticCreate(FLevelLocals *Level, const FDecalTemplate *tpl, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color = 0, uint32_t bloodTranslation = 0);
|
static DBaseDecal *StaticCreate(FLevelLocals *Level, const FDecalTemplate *tpl, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color = 0, uint32_t bloodTranslation = 0, bool permanent = false);
|
||||||
|
|
||||||
void BeginPlay ();
|
void BeginPlay ();
|
||||||
void Expired() override;
|
void Expired() override;
|
||||||
|
|
Loading…
Reference in a new issue