void T_BuildPillar(pillar_t *pillar) { DENG2_ASSERT(pillar); // First, raise the floor result_e res1 = T_MovePlane(pillar->sector, pillar->floorSpeed, pillar->floorDest, pillar->crush, 0, pillar->direction); // floorOrCeiling, direction // Then, lower the ceiling result_e res2 = T_MovePlane(pillar->sector, pillar->ceilingSpeed, pillar->ceilingDest, pillar->crush, 1, -pillar->direction); if(res1 == pastdest && res2 == pastdest) { P_ToXSector(pillar->sector)->specialData = 0; SN_StopSequenceInSec(pillar->sector); P_NotifySectorFinished(P_ToXSector(pillar->sector)->tag); Thinker_Remove(&pillar->thinker); } }
void T_PlatRaise(void *platThinkerPtr) { plat_t *plat = (plat_t *)platThinkerPtr; result_e res; switch(plat->state) { case PS_UP: res = T_MovePlane(plat->sector, plat->speed, plat->high, plat->crush, 0, 1); // Play a "while-moving" sound? #if __JHERETIC__ if(!(mapTime & 31)) S_PlaneSound((Plane *)P_GetPtrp(plat->sector, DMU_FLOOR_PLANE), SFX_PLATFORMMOVE); #endif #if __JDOOM__ || __JDOOM64__ if(plat->type == PT_RAISEANDCHANGE || plat->type == PT_RAISETONEARESTANDCHANGE) { if(!(mapTime & 7)) S_PlaneSound((Plane *)P_GetPtrp(plat->sector, DMU_FLOOR_PLANE), SFX_PLATFORMMOVE); } #endif if(res == crushed && (!plat->crush)) { plat->count = plat->wait; plat->state = PS_DOWN; #if __JHEXEN__ SN_StartSequenceInSec(plat->sector, SEQ_PLATFORM); #else # if __JDOOM64__ if(plat->type != PT_DOWNWAITUPDOOR) // jd64 added test # endif S_PlaneSound((Plane *)P_GetPtrp(plat->sector, DMU_FLOOR_PLANE), SFX_PLATFORMSTART); #endif } else { if(res == pastdest) { plat->count = plat->wait; plat->state = PS_WAIT; #if __JHEXEN__ SN_StopSequenceInSec(plat->sector); #else S_PlaneSound((Plane *)P_GetPtrp(plat->sector, DMU_FLOOR_PLANE), SFX_PLATFORMSTOP); #endif switch(plat->type) { case PT_DOWNWAITUPSTAY: #if __JHEXEN__ case PT_DOWNBYVALUEWAITUPSTAY: #else # if !__JHERETIC__ case PT_DOWNWAITUPSTAYBLAZE: case PT_RAISETONEARESTANDCHANGE: # endif # if __JDOOM64__ case PT_DOWNWAITUPPLUS16STAYBLAZE: // jd64 case PT_DOWNWAITUPDOOR: // jd64 # endif case PT_RAISEANDCHANGE: #endif stopPlat(plat); break; default: break; } } } break; case PS_DOWN: res = T_MovePlane(plat->sector, plat->speed, plat->low, false, 0, -1); if(res == pastdest) { plat->count = plat->wait; plat->state = PS_WAIT; #if __JHEXEN__ || __JDOOM64__ switch(plat->type) { # if __JHEXEN__ case PT_UPBYVALUEWAITDOWNSTAY: # endif case PT_UPWAITDOWNSTAY: stopPlat(plat); break; default: break; } #endif #if __JHEXEN__ SN_StopSequenceInSec(plat->sector); #else S_PlaneSound((Plane *)P_GetPtrp(plat->sector, DMU_FLOOR_PLANE), SFX_PLATFORMSTOP); #endif } else { // Play a "while-moving" sound? #if __JHERETIC__ if(!(mapTime & 31)) S_PlaneSound((Plane *)P_GetPtrp(plat->sector, DMU_FLOOR_PLANE), SFX_PLATFORMMOVE); #endif } break; case PS_WAIT: if(!--plat->count) { if(FEQUAL(P_GetDoublep(plat->sector, DMU_FLOOR_HEIGHT), plat->low)) plat->state = PS_UP; else plat->state = PS_DOWN; #if __JHEXEN__ SN_StartSequenceInSec(plat->sector, SEQ_PLATFORM); #else S_PlaneSound((Plane *)P_GetPtrp(plat->sector, DMU_FLOOR_PLANE), SFX_PLATFORMSTART); #endif } break; default: break; } }