Skip to content

Commit

Permalink
- turn the SO's Animator and PostMoveAnimator into non-functions as w…
Browse files Browse the repository at this point in the history
…ell.

What little is here can be done just as easily by more traditional means which are easier to serialize.
  • Loading branch information
coelckers committed May 28, 2023
1 parent 5e64d6c commit 8d57281
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 64 deletions.
11 changes: 9 additions & 2 deletions source/games/sw/src/game.h
Expand Up @@ -1209,11 +1209,18 @@ enum

extern TRACK Track[MAX_TRACKS];

enum
{
SOType_None = 0,
SOType_Floor = 1,
SOType_Tornado = 2,
SOType_AutoTurret = 3
};

struct SECTOR_OBJECT
{
bool PreMoveScale;
soANIMATORp PostMoveAnimator;
soANIMATORp Animator;
uint8_t AnimType;
TObjPtr<DSWActor*> controller;

TObjPtr<DSWActor*> sp_child; // child sprite that holds info for the sector object
Expand Down
17 changes: 0 additions & 17 deletions source/games/sw/src/morph.cpp
Expand Up @@ -533,21 +533,4 @@ void SpikeFloor(SECTOR_OBJECT* sop)
//
//---------------------------------------------------------------------------

#include "saveable.h"

static saveable_code saveable_morph_code[] =
{
SAVE_CODE(MorphTornado),
SAVE_CODE(MorphFloor),
};

saveable_module saveable_morph =
{
// code
saveable_morph_code,
SIZ(saveable_morph_code),

// data
nullptr,0
};
END_SW_NS
5 changes: 1 addition & 4 deletions source/games/sw/src/save.cpp
Expand Up @@ -693,10 +693,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, SECTOR_OBJECT& w,
("limit_ang_center", w.limit_ang_center, def->limit_ang_center)
("limit_ang_delta", w.limit_ang_delta, def->limit_ang_delta)
("premovescale", w.PreMoveScale, def->PreMoveScale);


SerializeCodePtr(arc, "postanimator", (void**)&w.PostMoveAnimator);
SerializeCodePtr(arc, "animator", (void**)&w.Animator);
("animtype", w.AnimType, def->AnimType);

arc.EndObject();
}
Expand Down
2 changes: 0 additions & 2 deletions source/games/sw/src/saveable.cpp
Expand Up @@ -50,7 +50,6 @@ void Saveable_Init(void)
MODULE(jweapon)
MODULE(lava)
MODULE(miscactr)
MODULE(morph)
MODULE(ninja)
MODULE(panel)
MODULE(player)
Expand All @@ -61,7 +60,6 @@ void Saveable_Init(void)
MODULE(skull)
MODULE(sprite)
MODULE(sumo)
MODULE(track)
MODULE(weapon)
MODULE(zilla)
MODULE(zombie)
Expand Down
16 changes: 11 additions & 5 deletions source/games/sw/src/sector.cpp
Expand Up @@ -74,6 +74,9 @@ void DoRotatorMatch(PLAYER* pp, short match, bool);
void DoSlidorOperate(PLAYER*, sectortype*);
void DoSlidorMatch(PLAYER* pp, short match, bool);

void DoTornadoObject(SECTOR_OBJECT* sop);
void DoAutoTurretObject(SECTOR_OBJECT* sop);

void KillMatchingCrackSprites(short match);
int DoTrapReset(short match);
int DoTrapMatch(short match);
Expand Down Expand Up @@ -392,8 +395,7 @@ void SectorSetup(void)
memset(&SectorObject[ndx].so_actors, 0, sizeof(SectorObject[0].so_actors));
SectorObject[ndx].match_event_actor = nullptr;
SectorObject[ndx].PreMoveScale = false;
SectorObject[ndx].PostMoveAnimator = nullptr;
SectorObject[ndx].Animator = nullptr;
SectorObject[ndx].AnimType = SOType_None;
SectorObject[ndx].controller = nullptr;
SectorObject[ndx].sp_child = nullptr;
SectorObject[ndx].mid_sector = nullptr;
Expand Down Expand Up @@ -2933,10 +2935,14 @@ void DoSector(void)
}
}

if (sop->Animator)
switch (sop->AnimType)
{
(*sop->Animator)(sop);
continue;
case SOType_AutoTurret:
DoAutoTurretObject(sop);
break;
case SOType_Tornado:
DoTornadoObject(sop);
break;
}

// force sync SOs to be updated regularly
Expand Down
49 changes: 16 additions & 33 deletions source/games/sw/src/track.cpp
Expand Up @@ -42,8 +42,6 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
BEGIN_SW_NS

DVector2 DoTrack(SECTOR_OBJECT* sop, short locktics);
void DoAutoTurretObject(SECTOR_OBJECT* sop);
void DoTornadoObject(SECTOR_OBJECT* sop);
int PickJumpSpeed(DSWActor*, int pix_height);
DSWActor* FindNearSprite(DSWActor, short);

Expand Down Expand Up @@ -929,11 +927,6 @@ void SetupSectorObject(sectortype* sectp, short tag)
// initialize stuff first time through
if (sop->num_sectors == -1)
{
void DoTornadoObject(SECTOR_OBJECT* sop);
void MorphTornado(SECTOR_OBJECT* sop);
void MorphFloor(SECTOR_OBJECT* sop);
void DoAutoTurretObject(SECTOR_OBJECT* sop);

memset(sop->sectp, 0, sizeof(sop->sectp));
memset(sop->so_actors, 0, sizeof(sop->so_actors));
sop->morph_wall_point = nullptr;
Expand Down Expand Up @@ -987,8 +980,7 @@ void SetupSectorObject(sectortype* sectp, short tag)
sop->morph_off = { 0,0 };

sop->PreMoveScale = false;
sop->PostMoveAnimator = nullptr;
sop->Animator = nullptr;
sop->AnimType = SOType_None;
}

switch (tag % 5)
Expand Down Expand Up @@ -1074,7 +1066,7 @@ void SetupSectorObject(sectortype* sectp, short tag)
break;

case SO_AUTO_TURRET:
sop->Animator = DoAutoTurretObject;
sop->AnimType = SOType_AutoTurret;
KillActor(actor);
break;

Expand All @@ -1087,9 +1079,8 @@ void SetupSectorObject(sectortype* sectp, short tag)
sop->spin_speed = DAngle22_5 * (1. / 16);
sop->last_ang = sop->ang;
// animators
sop->Animator = DoTornadoObject;
sop->PreMoveScale = true;
sop->PostMoveAnimator = MorphTornado;
sop->AnimType = SOType_Tornado;
// clip
sop->clipdist = 156.25;
// morph point
Expand All @@ -1106,7 +1097,7 @@ void SetupSectorObject(sectortype* sectp, short tag)
sop->scale_type = SO_SCALE_NONE;
sop->morph_speed = 7.5;
sop->morph_z_speed = 7;
sop->PostMoveAnimator = MorphFloor;
sop->AnimType = SOType_Floor;
sop->morph_dist_max = 250;
sop->morph_rand_freq = 8;
KillActor(actor);
Expand Down Expand Up @@ -1841,8 +1832,18 @@ void RefreshPoints(SECTOR_OBJECT* sop, const DVector2& move, bool dynamic)
MovePoints(sop, delta_ang_from_orig, move);

// do morphing - angle independent
if (dynamic && sop->PostMoveAnimator)
(*sop->PostMoveAnimator)(sop);
if (dynamic)
{
switch (sop->AnimType)
{
case SOType_Floor:
MorphFloor(sop);
break;
case SOType_Tornado:
MorphTornado(sop);
break;
}
}
}

void KillSectorObjectSprites(SECTOR_OBJECT* sop)
Expand Down Expand Up @@ -3465,22 +3466,4 @@ int ActorFollowTrack(DSWActor* actor, short locktics)
}


#include "saveable.h"

static saveable_code saveable_track_code[] =
{
SAVE_CODE(DoTornadoObject),
SAVE_CODE(DoAutoTurretObject),
};

saveable_module saveable_track =
{
// code
saveable_track_code,
SIZ(saveable_track_code),

// data
nullptr,0
};

END_SW_NS
2 changes: 1 addition & 1 deletion source/games/sw/src/weapon.cpp
Expand Up @@ -16107,7 +16107,7 @@ int InitTurretMgun(SECTOR_OBJECT* sop)
double daz = npos.Z;

// if its not operated by a player
if (sop->Animator)
if (sop->AnimType == SOType_AutoTurret)
{
// only auto aim for Z
daang = DAngle90;
Expand Down

0 comments on commit 8d57281

Please sign in to comment.