Error reporting for animations / conditions
Don’t report errors for each condition parse failure, but do aggregate them at the animation level in ReaderWriterXML Sentry-Id: FLIGHTGEAR-DD
This commit is contained in:
parent
069483e6d0
commit
b50d8e38e6
@ -537,7 +537,8 @@ readComparison( SGPropertyNode *prop_root,
|
|||||||
// REVIEW: Memory Leak - 2,880 bytes in 40 blocks are indirectly lost
|
// REVIEW: Memory Leak - 2,880 bytes in 40 blocks are indirectly lost
|
||||||
SGComparisonCondition * condition = new SGComparisonCondition(type, reverse);
|
SGComparisonCondition * condition = new SGComparisonCondition(type, reverse);
|
||||||
if (node->nChildren() < 2 || node->nChildren() > 3 ) {
|
if (node->nChildren() < 2 || node->nChildren() > 3 ) {
|
||||||
throw sg_exception("condition: comparison without two or three children");
|
throw sg_exception("condition: comparison without two or three children",
|
||||||
|
{}, {}, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
const SGPropertyNode* left = node->getChild(0),
|
const SGPropertyNode* left = node->getChild(0),
|
||||||
@ -553,7 +554,8 @@ readComparison( SGPropertyNode *prop_root,
|
|||||||
SGExpressiond* exp = SGReadDoubleExpression(prop_root, left->getChild(0));
|
SGExpressiond* exp = SGReadDoubleExpression(prop_root, left->getChild(0));
|
||||||
condition->setLeftDExpression(exp);
|
condition->setLeftDExpression(exp);
|
||||||
} else {
|
} else {
|
||||||
throw sg_exception("Unknown condition comparison left child:" + leftName);
|
throw sg_exception("Unknown condition comparison left child:" + leftName,
|
||||||
|
{}, {}, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,7 +569,8 @@ readComparison( SGPropertyNode *prop_root,
|
|||||||
SGExpressiond* exp = SGReadDoubleExpression(prop_root, right->getChild(0));
|
SGExpressiond* exp = SGReadDoubleExpression(prop_root, right->getChild(0));
|
||||||
condition->setRightDExpression(exp);
|
condition->setRightDExpression(exp);
|
||||||
} else {
|
} else {
|
||||||
throw sg_exception("Unknown condition comparison right child:" + rightName);
|
throw sg_exception("Unknown condition comparison right child:" + rightName,
|
||||||
|
{}, {}, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -582,7 +585,8 @@ readComparison( SGPropertyNode *prop_root,
|
|||||||
SGExpressiond* exp = SGReadDoubleExpression(prop_root, n->getChild(0));
|
SGExpressiond* exp = SGReadDoubleExpression(prop_root, n->getChild(0));
|
||||||
condition->setPrecisionDExpression(exp);
|
condition->setPrecisionDExpression(exp);
|
||||||
} else {
|
} else {
|
||||||
throw sg_exception("Unknown condition comparison precision child:" + name );
|
throw sg_exception("Unknown condition comparison precision child:" + name,
|
||||||
|
{}, {}, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -815,13 +815,22 @@ sgLoad3DModel_internal(const SGPath& path,
|
|||||||
} // of object-names in the animation
|
} // of object-names in the animation
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* Setup the model data for the node currently being animated.
|
try {
|
||||||
*/
|
/*
|
||||||
modelData.LoadAnimationValuesForElement(animation_nodes[i], i);
|
* Setup the model data for the node currently being animated.
|
||||||
|
*/
|
||||||
|
modelData.LoadAnimationValuesForElement(animation_nodes[i], i);
|
||||||
|
|
||||||
/// OSGFIXME: duh, why not only model?????
|
/// OSGFIXME: duh, why not only model?????
|
||||||
SGAnimation::animate(modelData);
|
SGAnimation::animate(modelData);
|
||||||
|
} catch (sg_exception& e) {
|
||||||
|
simgear::reportFailure(simgear::LoadFailure::NotFound, simgear::ErrorCode::XMLModelLoad,
|
||||||
|
"Couldn't load animation " + animation_nodes[i]->getNameString()
|
||||||
|
+ ":" + e.getFormattedMessage(),
|
||||||
|
modelpath);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
animationcount += animation_nodes.size();
|
animationcount += animation_nodes.size();
|
||||||
|
Loading…
Reference in New Issue
Block a user