mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-01-30 21:20:54 +00:00
Initial polyobj fade skeleton
This commit is contained in:
parent
ffde71c656
commit
0b365d0d08
4 changed files with 138 additions and 0 deletions
|
@ -2853,6 +2853,71 @@ INT32 EV_DoPolyObjFlag(line_t *pfdata)
|
|||
return 1;
|
||||
}
|
||||
|
||||
void T_PolyObjFade(polyfade_t *th)
|
||||
{
|
||||
polyobj_t *po = Polyobj_GetForNum(th->polyObjNum);
|
||||
size_t i;
|
||||
|
||||
if (!po)
|
||||
#ifdef RANGECHECK
|
||||
I_Error("T_PolyObjFade: thinker has invalid id %d\n", th->polyObjNum);
|
||||
#else
|
||||
{
|
||||
CONS_Debug(DBG_POLYOBJ, "T_PolyObjFade: thinker with invalid id %d removed.\n", th->polyObjNum);
|
||||
P_RemoveThinkerDelayed(&th->thinker);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
// check for displacement due to override and reattach when possible
|
||||
if (po->thinker == NULL)
|
||||
po->thinker = &th->thinker;
|
||||
|
||||
// \todo logic
|
||||
}
|
||||
|
||||
INT32 EV_DoPolyObjFade(polyfadedata_t *pfdata)
|
||||
{
|
||||
polyobj_t *po;
|
||||
polyobj_t *oldpo;
|
||||
polyfade_t *th;
|
||||
INT32 start;
|
||||
|
||||
if (!(po = Polyobj_GetForNum(prdata->polyObjNum)))
|
||||
{
|
||||
CONS_Debug(DBG_POLYOBJ, "EV_DoPolyObjRotate: bad polyobj %d\n", prdata->polyObjNum);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// don't allow line actions to affect bad polyobjects
|
||||
if (po->isBad)
|
||||
return 0;
|
||||
|
||||
// create a new thinker
|
||||
th = Z_Malloc(sizeof(polyfade_t), PU_LEVSPEC, NULL);
|
||||
th->thinker.function.acp1 = (actionf_p1)T_PolyObjFade;
|
||||
PolyObj_AddThinker(&th->thinker);
|
||||
po->thinker = &th->thinker;
|
||||
|
||||
// set fields
|
||||
th->polyObjNum = pfdata->tag;
|
||||
|
||||
// \todo polyfade fields
|
||||
|
||||
oldpo = po;
|
||||
|
||||
// apply action to mirroring polyobjects as well
|
||||
start = 0;
|
||||
while ((po = Polyobj_GetChild(oldpo, &start)))
|
||||
{
|
||||
pfdata->tag = po->id;
|
||||
EV_DoPolyObjFade(pfdata);
|
||||
}
|
||||
|
||||
// action was successful
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif // ifdef POLYOBJECTS
|
||||
|
||||
// EOF
|
||||
|
|
|
@ -207,6 +207,15 @@ typedef struct polydisplace_s
|
|||
fixed_t oldHeights;
|
||||
} polydisplace_t;
|
||||
|
||||
typedef struct polyfade_s
|
||||
{
|
||||
thinker_t thinker; // must be first
|
||||
|
||||
INT32 polyObjNum;
|
||||
|
||||
// \todo polyfade fields
|
||||
} polyfade_t;
|
||||
|
||||
//
|
||||
// Line Activation Data Structures
|
||||
//
|
||||
|
@ -266,6 +275,12 @@ typedef struct polydisplacedata_s
|
|||
fixed_t dy;
|
||||
} polydisplacedata_t;
|
||||
|
||||
typedef struct polyfadedata_s
|
||||
{
|
||||
INT32 polyObjNum;
|
||||
// \todo polyfadedata fields
|
||||
} polyfadedata_t;
|
||||
|
||||
//
|
||||
// Functions
|
||||
//
|
||||
|
@ -287,6 +302,7 @@ void T_PolyDoorSlide(polyslidedoor_t *);
|
|||
void T_PolyDoorSwing(polyswingdoor_t *);
|
||||
void T_PolyObjDisplace (polydisplace_t *);
|
||||
void T_PolyObjFlag (polymove_t *);
|
||||
void T_PolyObjFade (polyfade_t *);
|
||||
|
||||
INT32 EV_DoPolyDoor(polydoordata_t *);
|
||||
INT32 EV_DoPolyObjMove(polymovedata_t *);
|
||||
|
@ -294,6 +310,7 @@ INT32 EV_DoPolyObjWaypoint(polywaypointdata_t *);
|
|||
INT32 EV_DoPolyObjRotate(polyrotdata_t *);
|
||||
INT32 EV_DoPolyObjDisplace(polydisplacedata_t *);
|
||||
INT32 EV_DoPolyObjFlag(struct line_s *);
|
||||
INT32 EV_DoPolyObjFade(polyfadedata_t *);
|
||||
|
||||
|
||||
//
|
||||
|
|
|
@ -1019,6 +1019,7 @@ typedef enum
|
|||
tc_polyswingdoor,
|
||||
tc_polyflag,
|
||||
tc_polydisplace,
|
||||
tc_polyfade,
|
||||
#endif
|
||||
tc_end
|
||||
} specials_e;
|
||||
|
@ -1918,6 +1919,11 @@ static void P_NetArchiveThinkers(void)
|
|||
SavePolydisplaceThinker(th, tc_polydisplace);
|
||||
continue;
|
||||
}
|
||||
else if (th->function.acp1 == (actionf_p1)T_PolyObjFade)
|
||||
{
|
||||
SavePolyfadeThinker(th, tc_polyfade);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
#ifdef PARANOIA
|
||||
else if (th->function.acv != P_RemoveThinkerDelayed) // wait garbage collection
|
||||
|
@ -2689,6 +2695,20 @@ static inline void LoadPolydisplaceThinker(actionf_p1 thinker)
|
|||
ht->oldHeights = READFIXED(save_p);
|
||||
P_AddThinker(&ht->thinker);
|
||||
}
|
||||
|
||||
//
|
||||
// LoadPolyfadeThinker
|
||||
//
|
||||
// Loads a polyfadet_t thinker
|
||||
//
|
||||
static void LoadPolyfadeThinker(actionf_p1 thinker)
|
||||
{
|
||||
polyfade_t *ht = Z_Malloc(sizeof (*ht), PU_LEVSPEC, NULL);
|
||||
ht->thinker.function.acp1 = thinker;
|
||||
ht->polyObjNum = READINT32(save_p);
|
||||
// \todo polyfade thinker fields
|
||||
P_AddThinker(&ht->thinker);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -2886,6 +2906,10 @@ static void P_NetUnArchiveThinkers(void)
|
|||
case tc_polydisplace:
|
||||
LoadPolydisplaceThinker((actionf_p1)T_PolyObjDisplace);
|
||||
break;
|
||||
|
||||
case tc_polyfade:
|
||||
LoadPolyfadeThinker((actionf_p1)T_PolyObjFade);
|
||||
break;
|
||||
#endif
|
||||
case tc_scroll:
|
||||
LoadScrollThinker((actionf_p1)T_Scroll);
|
||||
|
|
32
src/p_spec.c
32
src/p_spec.c
|
@ -1245,6 +1245,35 @@ static void PolyTranslucency(line_t *line)
|
|||
po->translucency = (line->frontsector->floorheight >> FRACBITS) / 100;
|
||||
}
|
||||
|
||||
//
|
||||
// PolyFade
|
||||
//
|
||||
// Makes a polyobject translucency fade and applies tangibility
|
||||
//
|
||||
static void PolyFade(line_t *line)
|
||||
{
|
||||
INT32 polyObjNum = line->tag;
|
||||
polyobj_t *po;
|
||||
|
||||
if (!(po = Polyobj_GetForNum(polyObjNum)))
|
||||
{
|
||||
CONS_Debug(DBG_POLYOBJ, "EV_DoPolyObjWaypoint: bad polyobj %d\n", polyObjNum);
|
||||
return;
|
||||
}
|
||||
|
||||
// don't allow line actions to affect bad polyobjects
|
||||
if (po->isBad)
|
||||
return;
|
||||
|
||||
polyfadedata_t pfd;
|
||||
|
||||
pfd.polyObjNum = line->tag;
|
||||
|
||||
// \todo polyfadedata fields
|
||||
|
||||
return EV_DoPolyObjFade(&pfd);
|
||||
}
|
||||
|
||||
//
|
||||
// PolyWaypoint
|
||||
//
|
||||
|
@ -3337,6 +3366,9 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
|||
case 491:
|
||||
PolyTranslucency(line);
|
||||
break;
|
||||
case 492:
|
||||
PolyFade(line);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue