mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-15 09:11:48 +00:00
Separate thinker structs for dynamic line and vertex slopes
This commit is contained in:
parent
49c1645b5f
commit
1e1ea22e51
3 changed files with 55 additions and 41 deletions
|
@ -2281,16 +2281,23 @@ static void SavePlaneDisplaceThinker(const thinker_t *th, const UINT8 type)
|
|||
WRITEUINT8(save_p, ht->type);
|
||||
}
|
||||
|
||||
static inline void SaveDynamicSlopeThinker(const thinker_t *th, const UINT8 type)
|
||||
static inline void SaveDynamicLineSlopeThinker(const thinker_t *th, const UINT8 type)
|
||||
{
|
||||
const dynplanethink_t* ht = (const void*)th;
|
||||
const dynlineplanethink_t* ht = (const void*)th;
|
||||
|
||||
WRITEUINT8(save_p, type);
|
||||
WRITEUINT8(save_p, ht->type);
|
||||
WRITEUINT32(save_p, SaveSlope(ht->slope));
|
||||
WRITEUINT32(save_p, SaveLine(ht->sourceline));
|
||||
WRITEFIXED(save_p, ht->extent);
|
||||
}
|
||||
|
||||
static inline void SaveDynamicVertexSlopeThinker(const thinker_t *th, const UINT8 type)
|
||||
{
|
||||
const dynvertexplanethink_t* ht = (const void*)th;
|
||||
|
||||
WRITEUINT8(save_p, type);
|
||||
WRITEUINT32(save_p, SaveSlope(ht->slope));
|
||||
WRITEMEM(save_p, ht->tags, sizeof(ht->tags));
|
||||
WRITEMEM(save_p, ht->vex, sizeof(ht->vex));
|
||||
}
|
||||
|
@ -2617,12 +2624,12 @@ static void P_NetArchiveThinkers(void)
|
|||
}
|
||||
else if (th->function.acp1 == (actionf_p1)T_DynamicSlopeLine)
|
||||
{
|
||||
SaveDynamicSlopeThinker(th, tc_dynslopeline);
|
||||
SaveDynamicLineSlopeThinker(th, tc_dynslopeline);
|
||||
continue;
|
||||
}
|
||||
else if (th->function.acp1 == (actionf_p1)T_DynamicSlopeVert)
|
||||
{
|
||||
SaveDynamicSlopeThinker(th, tc_dynslopevert);
|
||||
SaveDynamicVertexSlopeThinker(th, tc_dynslopevert);
|
||||
continue;
|
||||
}
|
||||
#ifdef PARANOIA
|
||||
|
@ -3447,15 +3454,24 @@ static inline thinker_t* LoadPlaneDisplaceThinker(actionf_p1 thinker)
|
|||
return &ht->thinker;
|
||||
}
|
||||
|
||||
static inline thinker_t* LoadDynamicSlopeThinker(actionf_p1 thinker)
|
||||
static inline thinker_t* LoadDynamicLineSlopeThinker(actionf_p1 thinker)
|
||||
{
|
||||
dynplanethink_t* ht = Z_Malloc(sizeof(*ht), PU_LEVSPEC, NULL);
|
||||
dynlineplanethink_t* ht = Z_Malloc(sizeof(*ht), PU_LEVSPEC, NULL);
|
||||
ht->thinker.function.acp1 = thinker;
|
||||
|
||||
ht->type = READUINT8(save_p);
|
||||
ht->slope = LoadSlope(READUINT32(save_p));
|
||||
ht->sourceline = LoadLine(READUINT32(save_p));
|
||||
ht->extent = READFIXED(save_p);
|
||||
return &ht->thinker;
|
||||
}
|
||||
|
||||
static inline thinker_t* LoadDynamicVertexSlopeThinker(actionf_p1 thinker)
|
||||
{
|
||||
dynvertexplanethink_t* ht = Z_Malloc(sizeof(*ht), PU_LEVSPEC, NULL);
|
||||
ht->thinker.function.acp1 = thinker;
|
||||
|
||||
ht->slope = LoadSlope(READUINT32(save_p));
|
||||
READMEM(save_p, ht->tags, sizeof(ht->tags));
|
||||
READMEM(save_p, ht->vex, sizeof(ht->vex));
|
||||
return &ht->thinker;
|
||||
|
@ -3770,11 +3786,11 @@ static void P_NetUnArchiveThinkers(void)
|
|||
break;
|
||||
|
||||
case tc_dynslopeline:
|
||||
th = LoadDynamicSlopeThinker((actionf_p1)T_DynamicSlopeLine);
|
||||
th = LoadDynamicLineSlopeThinker((actionf_p1)T_DynamicSlopeLine);
|
||||
break;
|
||||
|
||||
case tc_dynslopevert:
|
||||
th = LoadDynamicSlopeThinker((actionf_p1)T_DynamicSlopeVert);
|
||||
th = LoadDynamicVertexSlopeThinker((actionf_p1)T_DynamicSlopeVert);
|
||||
break;
|
||||
|
||||
case tc_scroll:
|
||||
|
|
|
@ -121,7 +121,7 @@ static void ReconfigureViaConstants (pslope_t *slope, const fixed_t a, const fix
|
|||
}
|
||||
|
||||
/// Recalculate dynamic slopes.
|
||||
void T_DynamicSlopeLine (dynplanethink_t* th)
|
||||
void T_DynamicSlopeLine (dynlineplanethink_t* th)
|
||||
{
|
||||
pslope_t* slope = th->slope;
|
||||
line_t* srcline = th->sourceline;
|
||||
|
@ -161,7 +161,7 @@ void T_DynamicSlopeLine (dynplanethink_t* th)
|
|||
}
|
||||
|
||||
/// Mapthing-defined
|
||||
void T_DynamicSlopeVert (dynplanethink_t* th)
|
||||
void T_DynamicSlopeVert (dynvertexplanethink_t* th)
|
||||
{
|
||||
pslope_t* slope = th->slope;
|
||||
|
||||
|
@ -180,28 +180,26 @@ void T_DynamicSlopeVert (dynplanethink_t* th)
|
|||
ReconfigureViaVertexes(slope, th->vex[0], th->vex[1], th->vex[2]);
|
||||
}
|
||||
|
||||
static inline void P_AddDynSlopeThinker (pslope_t* slope, dynplanetype_t type, line_t* sourceline, fixed_t extent, const INT16 tags[3], const vector3_t vx[3])
|
||||
static inline void P_AddDynLineSlopeThinker (pslope_t* slope, dynplanetype_t type, line_t* sourceline, fixed_t extent)
|
||||
{
|
||||
dynplanethink_t* th = Z_Calloc(sizeof (*th), PU_LEVSPEC, NULL);
|
||||
switch (type)
|
||||
{
|
||||
case DP_VERTEX:
|
||||
th->thinker.function.acp1 = (actionf_p1)T_DynamicSlopeVert;
|
||||
memcpy(th->tags, tags, sizeof(th->tags));
|
||||
memcpy(th->vex, vx, sizeof(th->vex));
|
||||
break;
|
||||
default:
|
||||
th->thinker.function.acp1 = (actionf_p1)T_DynamicSlopeLine;
|
||||
th->sourceline = sourceline;
|
||||
th->extent = extent;
|
||||
}
|
||||
|
||||
dynlineplanethink_t* th = Z_Calloc(sizeof (*th), PU_LEVSPEC, NULL);
|
||||
th->thinker.function.acp1 = (actionf_p1)T_DynamicSlopeLine;
|
||||
th->slope = slope;
|
||||
th->type = type;
|
||||
|
||||
th->sourceline = sourceline;
|
||||
th->extent = extent;
|
||||
P_AddThinker(THINK_DYNSLOPE, &th->thinker);
|
||||
}
|
||||
|
||||
static inline void P_AddDynVertexSlopeThinker (pslope_t* slope, const INT16 tags[3], const vector3_t vx[3])
|
||||
{
|
||||
dynvertexplanethink_t* th = Z_Calloc(sizeof (*th), PU_LEVSPEC, NULL);
|
||||
th->thinker.function.acp1 = (actionf_p1)T_DynamicSlopeVert;
|
||||
th->slope = slope;
|
||||
memcpy(th->tags, tags, sizeof(th->tags));
|
||||
memcpy(th->vex, vx, sizeof(th->vex));
|
||||
P_AddThinker(THINK_DYNSLOPE, &th->thinker);
|
||||
}
|
||||
|
||||
/// Create a new slope and add it to the slope list.
|
||||
static inline pslope_t* Slope_Add (const UINT8 flags)
|
||||
|
@ -358,7 +356,7 @@ static void line_SpawnViaLine(const int linenum, const boolean spawnthinker)
|
|||
P_CalculateSlopeNormal(fslope);
|
||||
|
||||
if (spawnthinker && (flags & SL_DYNAMIC))
|
||||
P_AddDynSlopeThinker(fslope, DP_FRONTFLOOR, line, extent, NULL, NULL);
|
||||
P_AddDynLineSlopeThinker(fslope, DP_FRONTFLOOR, line, extent);
|
||||
}
|
||||
if(frontceil)
|
||||
{
|
||||
|
@ -375,7 +373,7 @@ static void line_SpawnViaLine(const int linenum, const boolean spawnthinker)
|
|||
P_CalculateSlopeNormal(cslope);
|
||||
|
||||
if (spawnthinker && (flags & SL_DYNAMIC))
|
||||
P_AddDynSlopeThinker(cslope, DP_FRONTCEIL, line, extent, NULL, NULL);
|
||||
P_AddDynLineSlopeThinker(cslope, DP_FRONTCEIL, line, extent);
|
||||
}
|
||||
}
|
||||
if(backfloor || backceil)
|
||||
|
@ -415,7 +413,7 @@ static void line_SpawnViaLine(const int linenum, const boolean spawnthinker)
|
|||
P_CalculateSlopeNormal(fslope);
|
||||
|
||||
if (spawnthinker && (flags & SL_DYNAMIC))
|
||||
P_AddDynSlopeThinker(fslope, DP_BACKFLOOR, line, extent, NULL, NULL);
|
||||
P_AddDynLineSlopeThinker(fslope, DP_BACKFLOOR, line, extent);
|
||||
}
|
||||
if(backceil)
|
||||
{
|
||||
|
@ -432,7 +430,7 @@ static void line_SpawnViaLine(const int linenum, const boolean spawnthinker)
|
|||
P_CalculateSlopeNormal(cslope);
|
||||
|
||||
if (spawnthinker && (flags & SL_DYNAMIC))
|
||||
P_AddDynSlopeThinker(cslope, DP_BACKCEIL, line, extent, NULL, NULL);
|
||||
P_AddDynLineSlopeThinker(cslope, DP_BACKCEIL, line, extent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -476,7 +474,7 @@ static pslope_t *MakeViaMapthings(INT16 tag1, INT16 tag2, INT16 tag3, UINT8 flag
|
|||
ReconfigureViaVertexes(ret, vx[0], vx[1], vx[2]);
|
||||
|
||||
if (spawnthinker && (flags & SL_DYNAMIC))
|
||||
P_AddDynSlopeThinker(ret, DP_VERTEX, NULL, 0, tags, vx);
|
||||
P_AddDynVertexSlopeThinker(ret, tags, vx);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -95,26 +95,26 @@ typedef enum {
|
|||
DP_FRONTCEIL,
|
||||
DP_BACKFLOOR,
|
||||
DP_BACKCEIL,
|
||||
DP_VERTEX
|
||||
} dynplanetype_t;
|
||||
|
||||
/// Permit slopes to be dynamically altered through a thinker.
|
||||
typedef struct
|
||||
{
|
||||
thinker_t thinker;
|
||||
|
||||
pslope_t* slope;
|
||||
pslope_t *slope;
|
||||
dynplanetype_t type;
|
||||
|
||||
// Used by line slopes.
|
||||
line_t* sourceline;
|
||||
line_t *sourceline;
|
||||
fixed_t extent;
|
||||
} dynlineplanethink_t;
|
||||
|
||||
// Used by mapthing vertex slopes.
|
||||
typedef struct
|
||||
{
|
||||
thinker_t thinker;
|
||||
pslope_t *slope;
|
||||
INT16 tags[3];
|
||||
vector3_t vex[3];
|
||||
} dynplanethink_t;
|
||||
} dynvertexplanethink_t;
|
||||
|
||||
void T_DynamicSlopeLine (dynplanethink_t* th);
|
||||
void T_DynamicSlopeVert (dynplanethink_t* th);
|
||||
void T_DynamicSlopeLine (dynlineplanethink_t* th);
|
||||
void T_DynamicSlopeVert (dynvertexplanethink_t* th);
|
||||
#endif // #ifndef P_SLOPES_H__
|
||||
|
|
Loading…
Reference in a new issue