- call ScaleSectorObject directly.

It's the only PreMoveAnimator so a bool can be used as easily as the full pointer.
This commit is contained in:
Christoph Oelckers 2023-05-28 10:47:17 +02:00
parent 20b39c6a0d
commit 5e64d6c7aa
5 changed files with 11 additions and 15 deletions

View file

@ -1211,7 +1211,7 @@ extern TRACK Track[MAX_TRACKS];
struct SECTOR_OBJECT
{
soANIMATORp PreMoveAnimator;
bool PreMoveScale;
soANIMATORp PostMoveAnimator;
soANIMATORp Animator;
TObjPtr<DSWActor*> controller;

View file

@ -37,8 +37,6 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
BEGIN_SW_NS
void ScaleSectorObject(SECTOR_OBJECT*);
//---------------------------------------------------------------------------
//
//
@ -57,7 +55,7 @@ short DoSectorObjectSetScale(short match)
if (sop->match_event == match)
{
sop->flags |= (SOBJ_DYNAMIC);
sop->PreMoveAnimator = ScaleSectorObject;
sop->PreMoveScale = true;
switch (sop->scale_active_type)
{
@ -539,10 +537,8 @@ void SpikeFloor(SECTOR_OBJECT* sop)
static saveable_code saveable_morph_code[] =
{
SAVE_CODE(ScaleSectorObject),
SAVE_CODE(MorphTornado),
SAVE_CODE(MorphFloor),
SAVE_CODE(SpikeFloor),
};
saveable_module saveable_morph =

View file

@ -691,9 +691,10 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, SECTOR_OBJECT& w,
("morph_z_speed", w.morph_z_speed, def->morph_z_speed)
("morph_off", w.morph_off, def->morph_off)
("limit_ang_center", w.limit_ang_center, def->limit_ang_center)
("limit_ang_delta", w.limit_ang_delta, def->limit_ang_delta);
("limit_ang_delta", w.limit_ang_delta, def->limit_ang_delta)
("premovescale", w.PreMoveScale, def->PreMoveScale);
SerializeCodePtr(arc, "preanimator", (void**)&w.PreMoveAnimator);
SerializeCodePtr(arc, "postanimator", (void**)&w.PostMoveAnimator);
SerializeCodePtr(arc, "animator", (void**)&w.Animator);

View file

@ -391,7 +391,7 @@ void SectorSetup(void)
memset(&SectorObject[ndx].sectp, 0, sizeof(SectorObject[0].sectp));
memset(&SectorObject[ndx].so_actors, 0, sizeof(SectorObject[0].so_actors));
SectorObject[ndx].match_event_actor = nullptr;
SectorObject[ndx].PreMoveAnimator = nullptr;
SectorObject[ndx].PreMoveScale = false;
SectorObject[ndx].PostMoveAnimator = nullptr;
SectorObject[ndx].Animator = nullptr;
SectorObject[ndx].controller = nullptr;

View file

@ -932,7 +932,6 @@ void SetupSectorObject(sectortype* sectp, short tag)
void DoTornadoObject(SECTOR_OBJECT* sop);
void MorphTornado(SECTOR_OBJECT* sop);
void MorphFloor(SECTOR_OBJECT* sop);
void ScaleSectorObject(SECTOR_OBJECT* sop);
void DoAutoTurretObject(SECTOR_OBJECT* sop);
memset(sop->sectp, 0, sizeof(sop->sectp));
@ -987,7 +986,7 @@ void SetupSectorObject(sectortype* sectp, short tag)
sop->morph_dist = 0;
sop->morph_off = { 0,0 };
sop->PreMoveAnimator = nullptr;
sop->PreMoveScale = false;
sop->PostMoveAnimator = nullptr;
sop->Animator = nullptr;
}
@ -1089,7 +1088,7 @@ void SetupSectorObject(sectortype* sectp, short tag)
sop->last_ang = sop->ang;
// animators
sop->Animator = DoTornadoObject;
sop->PreMoveAnimator = ScaleSectorObject;
sop->PreMoveScale = true;
sop->PostMoveAnimator = MorphTornado;
// clip
sop->clipdist = 156.25;
@ -1117,7 +1116,7 @@ void SetupSectorObject(sectortype* sectp, short tag)
sop->flags |= (SOBJ_DYNAMIC);
//sop->scale_type = SO_SCALE_CYCLE;
sop->scale_type = SO_SCALE_RANDOM_POINT;
sop->PreMoveAnimator = ScaleSectorObject;
sop->PreMoveScale = true;
memset(sop->scale_point_dist,0,sizeof(sop->scale_point_dist));;
sop->scale_point_base_speed = 0.25 + RandomRangeF(0.5);
@ -1769,8 +1768,8 @@ void RefreshPoints(SECTOR_OBJECT* sop, const DVector2& move, bool dynamic)
DAngle delta_ang_from_orig;
// do scaling
if (dynamic && sop->PreMoveAnimator)
(*sop->PreMoveAnimator)(sop);
if (dynamic && sop->PreMoveScale)
ScaleSectorObject(sop);
sectortype** sectp;
int j;