bool EV_SlidingDoor (line_t *line, AActor *actor, int tag, int speed, int delay) { sector_t *sec; int secnum; bool rtn; secnum = -1; rtn = false; if (tag == 0) { // Manual sliding door sec = line->backsector; // Make sure door isn't already being animated if (sec->ceilingdata != NULL) { if (actor->player == NULL) return false; if (sec->ceilingdata->IsA (RUNTIME_CLASS(DAnimatedDoor))) { DAnimatedDoor *door = barrier_cast<DAnimatedDoor *>(sec->ceilingdata); if (door->m_Status == DAnimatedDoor::Waiting) { return door->StartClosing(); } } return false; } FDoorAnimation *anim = TexMan.FindAnimatedDoor (line->sidedef[0]->GetTexture(side_t::top)); if (anim != NULL) { new DAnimatedDoor (sec, line, speed, delay, anim); return true; } return false; } while ((secnum = P_FindSectorFromTag (tag, secnum)) >= 0) { sec = §ors[secnum]; if (sec->ceilingdata != NULL) { continue; } for (int i = 0; tag != 0 && i < sec->linecount; ++i) { line = sec->lines[i]; if (line->backsector == NULL) { continue; } FDoorAnimation *anim = TexMan.FindAnimatedDoor (line->sidedef[0]->GetTexture(side_t::top)); if (anim != NULL) { rtn = true; new DAnimatedDoor (sec, line, speed, delay, anim); break; } } } return rtn; }
bool EV_SlidingDoor (line_t *line, AActor *actor, int tag, int speed, int delay, DAnimatedDoor::EADType type) { sector_t *sec; int secnum; bool rtn; secnum = -1; rtn = false; if (tag == 0) { // Manual sliding door sec = line->backsector; // Make sure door isn't already being animated if (sec->ceilingdata != NULL ) { if (actor->player == NULL) return false; if (sec->ceilingdata->IsA (RUNTIME_CLASS(DAnimatedDoor))) { DAnimatedDoor *door = barrier_cast<DAnimatedDoor *>(sec->ceilingdata); if (door->m_Status == DAnimatedDoor::Waiting) { return door->StartClosing(); } } return false; } FDoorAnimation *anim = TexMan.FindAnimatedDoor (line->sidedef[0]->GetTexture(side_t::top)); if (anim != NULL) { Create<DAnimatedDoor>(sec, line, speed, delay, anim, type); return true; } return false; } FSectorTagIterator it(tag); while ((secnum = it.Next()) >= 0) { sec = &level.sectors[secnum]; if (sec->ceilingdata != NULL) { continue; } for (auto line : sec->Lines) { if (line->backsector == NULL) { continue; } FDoorAnimation *anim = TexMan.FindAnimatedDoor (line->sidedef[0]->GetTexture(side_t::top)); if (anim != NULL) { rtn = true; Create<DAnimatedDoor>(sec, line, speed, delay, anim, type); break; } } } return rtn; }