mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-20 06:23:52 +00:00
Avoid working with empty controller data (bug #5229)
This commit is contained in:
parent
abe7d25844
commit
909c8ef0ea
2 changed files with 16 additions and 3 deletions
|
@ -183,6 +183,7 @@
|
||||||
Bug #5220: GetLOS crashes when actor isn't loaded
|
Bug #5220: GetLOS crashes when actor isn't loaded
|
||||||
Bug #5222: Empty cell name subrecords are not saved
|
Bug #5222: Empty cell name subrecords are not saved
|
||||||
Bug #5226: Reputation should be capped
|
Bug #5226: Reputation should be capped
|
||||||
|
Bug #5229: Crash if mesh controller node has no data node
|
||||||
Feature #1774: Handle AvoidNode
|
Feature #1774: Handle AvoidNode
|
||||||
Feature #2229: Improve pathfinding AI
|
Feature #2229: Improve pathfinding AI
|
||||||
Feature #3025: Analogue gamepad movement controls
|
Feature #3025: Analogue gamepad movement controls
|
||||||
|
|
|
@ -661,6 +661,8 @@ namespace NifOsg
|
||||||
if (ctrl->recType == Nif::RC_NiUVController)
|
if (ctrl->recType == Nif::RC_NiUVController)
|
||||||
{
|
{
|
||||||
const Nif::NiUVController *niuvctrl = static_cast<const Nif::NiUVController*>(ctrl.getPtr());
|
const Nif::NiUVController *niuvctrl = static_cast<const Nif::NiUVController*>(ctrl.getPtr());
|
||||||
|
if (niuvctrl->data.empty())
|
||||||
|
continue;
|
||||||
const unsigned int uvSet = niuvctrl->uvSet;
|
const unsigned int uvSet = niuvctrl->uvSet;
|
||||||
std::set<int> texUnits;
|
std::set<int> texUnits;
|
||||||
// UVController should work only for textures which use a given UV Set, usually 0.
|
// UVController should work only for textures which use a given UV Set, usually 0.
|
||||||
|
@ -728,6 +730,8 @@ namespace NifOsg
|
||||||
|
|
||||||
void handleVisController(const Nif::NiVisController* visctrl, osg::Node* node, int animflags)
|
void handleVisController(const Nif::NiVisController* visctrl, osg::Node* node, int animflags)
|
||||||
{
|
{
|
||||||
|
if (visctrl->data.empty())
|
||||||
|
return;
|
||||||
osg::ref_ptr<VisController> callback(new VisController(visctrl->data.getPtr()));
|
osg::ref_ptr<VisController> callback(new VisController(visctrl->data.getPtr()));
|
||||||
setupController(visctrl, callback, animflags);
|
setupController(visctrl, callback, animflags);
|
||||||
node->addUpdateCallback(callback);
|
node->addUpdateCallback(callback);
|
||||||
|
@ -735,6 +739,8 @@ namespace NifOsg
|
||||||
|
|
||||||
void handleRollController(const Nif::NiRollController* rollctrl, osg::Node* node, int animflags)
|
void handleRollController(const Nif::NiRollController* rollctrl, osg::Node* node, int animflags)
|
||||||
{
|
{
|
||||||
|
if (rollctrl->data.empty())
|
||||||
|
return;
|
||||||
osg::ref_ptr<RollController> callback(new RollController(rollctrl->data.getPtr()));
|
osg::ref_ptr<RollController> callback(new RollController(rollctrl->data.getPtr()));
|
||||||
setupController(rollctrl, callback, animflags);
|
setupController(rollctrl, callback, animflags);
|
||||||
node->addUpdateCallback(callback);
|
node->addUpdateCallback(callback);
|
||||||
|
@ -749,6 +755,8 @@ namespace NifOsg
|
||||||
if (ctrl->recType == Nif::RC_NiAlphaController)
|
if (ctrl->recType == Nif::RC_NiAlphaController)
|
||||||
{
|
{
|
||||||
const Nif::NiAlphaController* alphactrl = static_cast<const Nif::NiAlphaController*>(ctrl.getPtr());
|
const Nif::NiAlphaController* alphactrl = static_cast<const Nif::NiAlphaController*>(ctrl.getPtr());
|
||||||
|
if (alphactrl->data.empty())
|
||||||
|
continue;
|
||||||
osg::ref_ptr<AlphaController> osgctrl(new AlphaController(alphactrl->data.getPtr()));
|
osg::ref_ptr<AlphaController> osgctrl(new AlphaController(alphactrl->data.getPtr()));
|
||||||
setupController(alphactrl, osgctrl, animflags);
|
setupController(alphactrl, osgctrl, animflags);
|
||||||
composite->addController(osgctrl);
|
composite->addController(osgctrl);
|
||||||
|
@ -756,6 +764,8 @@ namespace NifOsg
|
||||||
else if (ctrl->recType == Nif::RC_NiMaterialColorController)
|
else if (ctrl->recType == Nif::RC_NiMaterialColorController)
|
||||||
{
|
{
|
||||||
const Nif::NiMaterialColorController* matctrl = static_cast<const Nif::NiMaterialColorController*>(ctrl.getPtr());
|
const Nif::NiMaterialColorController* matctrl = static_cast<const Nif::NiMaterialColorController*>(ctrl.getPtr());
|
||||||
|
if (matctrl->data.empty())
|
||||||
|
continue;
|
||||||
// Two bits that correspond to the controlled material color.
|
// Two bits that correspond to the controlled material color.
|
||||||
// 00: Ambient
|
// 00: Ambient
|
||||||
// 01: Diffuse
|
// 01: Diffuse
|
||||||
|
@ -1142,10 +1152,12 @@ namespace NifOsg
|
||||||
continue;
|
continue;
|
||||||
if(ctrl->recType == Nif::RC_NiGeomMorpherController)
|
if(ctrl->recType == Nif::RC_NiGeomMorpherController)
|
||||||
{
|
{
|
||||||
drawable = handleMorphGeometry(static_cast<const Nif::NiGeomMorpherController*>(ctrl.getPtr()), geom, parentNode, composite, boundTextures, animflags);
|
const Nif::NiGeomMorpherController* nimorphctrl = static_cast<const Nif::NiGeomMorpherController*>(ctrl.getPtr());
|
||||||
|
if (nimorphctrl->data.empty())
|
||||||
|
continue;
|
||||||
|
drawable = handleMorphGeometry(nimorphctrl, geom, parentNode, composite, boundTextures, animflags);
|
||||||
|
|
||||||
osg::ref_ptr<GeomMorpherController> morphctrl = new GeomMorpherController(
|
osg::ref_ptr<GeomMorpherController> morphctrl = new GeomMorpherController(nimorphctrl->data.getPtr());
|
||||||
static_cast<const Nif::NiGeomMorpherController*>(ctrl.getPtr())->data.getPtr());
|
|
||||||
setupController(ctrl.getPtr(), morphctrl, animflags);
|
setupController(ctrl.getPtr(), morphctrl, animflags);
|
||||||
drawable->setUpdateCallback(morphctrl);
|
drawable->setUpdateCallback(morphctrl);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue