From 69ce9f32bc6dd90d9df026ac0691d87761571fc1 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 14 Jan 2017 00:10:43 +0100 Subject: [PATCH] Activate/OnActivate fix (Bug #3712) --- apps/openmw/mwworld/refdata.cpp | 41 +++++++++++++++------------------ 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/apps/openmw/mwworld/refdata.cpp b/apps/openmw/mwworld/refdata.cpp index de26d1292..ae36db1c3 100644 --- a/apps/openmw/mwworld/refdata.cpp +++ b/apps/openmw/mwworld/refdata.cpp @@ -13,7 +13,8 @@ namespace enum RefDataFlags { Flag_SuppressActivate = 1, // If set, activation will be suppressed and redirected to the OnActivate flag, which can then be handled by a script. - Flag_OnActivate = 2 + Flag_OnActivate = 2, + Flag_ActivationBuffered = 4 }; } @@ -241,38 +242,32 @@ namespace MWWorld return mChanged || !mAnimationState.empty(); } + bool RefData::activateByScript() + { + bool ret = (mFlags & Flag_ActivationBuffered); + mFlags &= ~(Flag_SuppressActivate|Flag_OnActivate); + return ret; + } + bool RefData::activate() { - if (!(mFlags & Flag_SuppressActivate)) - return true; + if (mFlags & Flag_SuppressActivate) + { + mFlags |= Flag_OnActivate|Flag_ActivationBuffered; + return false; + } else { - mFlags |= Flag_OnActivate; - return false; + return true; } } bool RefData::onActivate() { + bool ret = mFlags & Flag_OnActivate; mFlags |= Flag_SuppressActivate; - - if (mFlags & Flag_OnActivate) - { - mFlags &= (~Flag_OnActivate); - return true; - } - return false; - } - - bool RefData::activateByScript() - { - if (mFlags & Flag_SuppressActivate) - { - mFlags &= (~Flag_SuppressActivate); - return true; - } - else - return false; + mFlags &= (~Flag_OnActivate); + return ret; } const ESM::AnimationState& RefData::getAnimationState() const