From 3c18079c149e44581979d7b01305988163b4307e Mon Sep 17 00:00:00 2001 From: Capostrophic Date: Thu, 2 May 2019 20:49:40 +0300 Subject: [PATCH] Handle invalid instruction axis more gracefully --- .../mwscript/transformationextensions.cpp | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/apps/openmw/mwscript/transformationextensions.cpp b/apps/openmw/mwscript/transformationextensions.cpp index 93645d5fba..33a71a94af 100644 --- a/apps/openmw/mwscript/transformationextensions.cpp +++ b/apps/openmw/mwscript/transformationextensions.cpp @@ -108,8 +108,6 @@ namespace MWScript MWBase::Environment::get().getWorld()->rotateObject(ptr,ax,angle,az); else if (axis == "z") MWBase::Environment::get().getWorld()->rotateObject(ptr,ax,ay,angle); - else - throw std::runtime_error ("invalid rotation axis: " + axis); } }; @@ -137,8 +135,6 @@ namespace MWScript { runtime.push(osg::RadiansToDegrees(ptr.getCellRef().getPosition().rot[2])); } - else - throw std::runtime_error ("invalid rotation axis: " + axis); } }; @@ -195,8 +191,6 @@ namespace MWScript { runtime.push(ptr.getRefData().getPosition().pos[2]); } - else - throw std::runtime_error ("invalid axis: " + axis); } }; @@ -248,7 +242,9 @@ namespace MWScript updated = MWBase::Environment::get().getWorld()->moveObject(ptr,ax,ay,pos,true); } else - throw std::runtime_error ("invalid axis: " + axis); + { + return; + } dynamic_cast(runtime.getContext()).updatePtr(ptr,updated); } @@ -278,8 +274,6 @@ namespace MWScript { runtime.push(ptr.getCellRef().getPosition().pos[2]); } - else - throw std::runtime_error ("invalid axis: " + axis); } }; @@ -570,8 +564,6 @@ namespace MWScript MWBase::Environment::get().getWorld()->rotateObject(ptr,ax,ay+rotation,az); else if (axis == "z") MWBase::Environment::get().getWorld()->rotateObject(ptr,ax,ay,az+rotation); - else - throw std::runtime_error ("invalid rotation axis: " + axis); } }; @@ -604,7 +596,7 @@ namespace MWScript else if (axis == "z") rot = osg::Quat(rotation, -osg::Z_AXIS); else - throw std::runtime_error ("invalid rotation axis: " + axis); + return; osg::Quat attitude = ptr.getRefData().getBaseNode()->getAttitude(); MWBase::Environment::get().getWorld()->rotateWorldObject(ptr, attitude * rot); @@ -667,7 +659,7 @@ namespace MWScript posChange=osg::Vec3f(0, 0, movement); } else - throw std::runtime_error ("invalid movement axis: " + axis); + return; // is it correct that disabled objects can't be Move-d? if (!ptr.getRefData().getBaseNode()) @@ -711,7 +703,7 @@ namespace MWScript else if (axis == "z") diff.z() += movement; else - throw std::runtime_error ("invalid movement axis: " + axis); + return; // We should move actors, standing on moving object, too. // This approach can be used to create elevators.