From 29c6782aa1c3ea8ee5d6681f1ca0a56c7b892ee9 Mon Sep 17 00:00:00 2001 From: XxMiltenXx Date: Sun, 12 May 2019 13:38:54 +0200 Subject: [PATCH] Fixes for Door_AnimatedClose (#838) * Fixes for Door_AnimatedClose - Fixing that Door_AnimatedClose would be activated on an already closed door (playing the sound and the 1st frame of the animation) - There was no check if the Door is already Animated when a tag was used with Door_AnimatedClose * Removed doubled "door->StartClosing();". --- src/g_shared/a_doors.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/g_shared/a_doors.cpp b/src/g_shared/a_doors.cpp index c3c8b92e8..664b0096e 100644 --- a/src/g_shared/a_doors.cpp +++ b/src/g_shared/a_doors.cpp @@ -777,6 +777,9 @@ bool FLevelLocals::EV_SlidingDoor (line_t *line, AActor *actor, int tag, int spe } return false; } + // Do not attempt to close the door if it already is + else if (type == DAnimatedDoor::adClose) + return false; FDoorAnimation *anim = TexMan.FindAnimatedDoor (line->sidedef[0]->GetTexture(side_t::top)); if (anim != NULL) { @@ -792,8 +795,20 @@ bool FLevelLocals::EV_SlidingDoor (line_t *line, AActor *actor, int tag, int spe sec = §ors[secnum]; if (sec->ceilingdata != NULL) { + // Check if the animated door is already open and waiting, if so, close it. + if (sec->ceilingdata->IsA (RUNTIME_CLASS(DAnimatedDoor))) + { + DAnimatedDoor *door = barrier_cast(sec->ceilingdata); + if (door->m_Status == DAnimatedDoor::Waiting) + { + door->StartClosing(); + } + } continue; } + // Do not attempt to close the door if it already is + else if (type == DAnimatedDoor::adClose) + continue; for (auto line : sec->Lines) {