Merge pull request #181 from OpenMW/master

Add OpenMW commits up to 4 Mar 2017
0.6.1
David Cernat 8 years ago committed by GitHub
commit df051a777a

@ -10,6 +10,7 @@ branches:
- master
- coverity_scan
- /openmw-.*$/
- test-release-build-on-travis
env:
global:
- macos_qt_formula=qt@5.5

@ -137,7 +137,7 @@ namespace ESSImport
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("png");
if (!readerwriter)
{
std::cerr << "can't write global map image, no png readerwriter found" << std::endl;
std::cerr << "Error: can't write global map image, no png readerwriter found" << std::endl;
return;
}
@ -146,7 +146,7 @@ namespace ESSImport
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*image2, ostream);
if (!result.success())
{
std::cerr << "can't write global map image: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: can't write global map image: " << result.message() << " code " << result.status() << std::endl;
return;
}

@ -38,7 +38,7 @@ namespace
{
if (fileHeader.mSCRS.size() != 128*128*4)
{
std::cerr << "unexpected screenshot size " << std::endl;
std::cerr << "Error: unexpected screenshot size " << std::endl;
return;
}
@ -66,14 +66,14 @@ namespace
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("jpg");
if (!readerwriter)
{
std::cerr << "can't write screenshot: no jpg readerwriter found" << std::endl;
std::cerr << "Error: can't write screenshot: no jpg readerwriter found" << std::endl;
return;
}
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*image, ostream);
if (!result.success())
{
std::cerr << "can't write screenshot: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: can't write screenshot: " << result.message() << " code " << result.status() << std::endl;
return;
}
@ -333,7 +333,7 @@ namespace ESSImport
if (unknownRecords.insert(n.intval).second)
{
std::ios::fmtflags f(std::cerr.flags());
std::cerr << "unknown record " << n.toString() << " (0x" << std::hex << esm.getFileOffset() << ")" << std::endl;
std::cerr << "Error: unknown record " << n.toString() << " (0x" << std::hex << esm.getFileOffset() << ")" << std::endl;
std::cerr.flags(f);
}

@ -452,16 +452,16 @@ void OMW::Engine::setWindowIcon()
std::string windowIcon = (mResDir / "mygui" / "openmw.png").string();
windowIconStream.open(windowIcon, std::ios_base::in | std::ios_base::binary);
if (windowIconStream.fail())
std::cerr << "Failed to open " << windowIcon << std::endl;
std::cerr << "Error: Failed to open " << windowIcon << std::endl;
osgDB::ReaderWriter* reader = osgDB::Registry::instance()->getReaderWriterForExtension("png");
if (!reader)
{
std::cerr << "Failed to read window icon, no png readerwriter found" << std::endl;
std::cerr << "Error: Failed to read window icon, no png readerwriter found" << std::endl;
return;
}
osgDB::ReaderWriter::ReadResult result = reader->readImage(windowIconStream);
if (!result.success())
std::cerr << "Failed to read " << windowIcon << ": " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: Failed to read " << windowIcon << ": " << result.message() << " code " << result.status() << std::endl;
else
{
osg::ref_ptr<osg::Image> image = result.getImage();
@ -636,14 +636,14 @@ public:
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension(mScreenshotFormat);
if (!readerwriter)
{
std::cerr << "Can't write screenshot, no '" << mScreenshotFormat << "' readerwriter found" << std::endl;
std::cerr << "Error: Can't write screenshot, no '" << mScreenshotFormat << "' readerwriter found" << std::endl;
return;
}
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(image, outStream);
if (!result.success())
{
std::cerr << "Can't write screenshot: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: Can't write screenshot: " << result.message() << " code " << result.status() << std::endl;
}
}

@ -147,7 +147,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat
("fallback", bpo::value<FallbackMap>()->default_value(FallbackMap(), "")
->multitoken()->composing(), "fallback values")
("no-grab", "Don't grab mouse cursor")
("no-grab", bpo::value<bool>()->implicit_value(true)->default_value(false), "Don't grab mouse cursor")
("export-fonts", bpo::value<bool>()->implicit_value(true)
->default_value(false), "Export Morrowind .fnt fonts to PNG image and XML file in current directory")
@ -185,7 +185,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat
Version::Version v = Version::getOpenmwVersion(variables["resources"].as<Files::EscapeHashString>().toStdString());
std::cout << v.describe() << std::endl;
engine.setGrabMouse(!variables.count("no-grab"));
engine.setGrabMouse(!variables["no-grab"].as<bool>());
// Font encoding settings
std::string encoding(variables["encoding"].as<Files::EscapeHashString>().toStdString());
@ -234,7 +234,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat
engine.setCell(variables["start"].as<Files::EscapeHashString>().toStdString());
engine.setSkipMenu (variables["skip-menu"].as<bool>(), variables["new-game"].as<bool>());
if (!variables["skip-menu"].as<bool>() && variables["new-game"].as<bool>())
std::cerr << "new-game used without skip-menu -> ignoring it" << std::endl;
std::cerr << "Warning: new-game used without skip-menu -> ignoring it" << std::endl;
// scripts
engine.setCompileAll(variables["script-all"].as<bool>());

@ -238,7 +238,7 @@ namespace MWDialogue
if (!success)
{
std::cerr
<< "compiling failed (dialogue script)" << std::endl
<< "Warning: compiling failed (dialogue script)" << std::endl
<< cmd
<< std::endl << std::endl;
}

@ -274,7 +274,7 @@ namespace MWGui
}
catch (std::exception& e)
{
std::cerr << "Failed to create chargen window: " << e.what() << std::endl;
std::cerr << "Error: Failed to create chargen window: " << e.what() << std::endl;
}
}
@ -592,7 +592,7 @@ namespace MWGui
mGenerateClass = "Mage";
else
{
std::cerr << "Failed to deduce class from chosen answers in generate class dialog" << std::endl;
std::cout << "Failed to deduce class from chosen answers in generate class dialog" << std::endl;
mGenerateClass = "Thief";
}
}

@ -405,14 +405,14 @@ namespace MWGui
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("jpg");
if (!readerwriter)
{
std::cerr << "Can't open savegame screenshot, no jpg readerwriter found" << std::endl;
std::cerr << "Error: Can't open savegame screenshot, no jpg readerwriter found" << std::endl;
return;
}
osgDB::ReaderWriter::ReadResult result = readerwriter->readImage(instream);
if (!result.success())
{
std::cerr << "Failed to read savegame screenshot: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: Failed to read savegame screenshot: " << result.message() << " code " << result.status() << std::endl;
return;
}

@ -33,7 +33,7 @@ namespace
if (val == "linear") return "Trilinear";
if (val == "nearest") return "Bilinear";
if (val != "none")
std::cerr<< "Invalid texture mipmap option: "<<val <<std::endl;
std::cerr<< "Warning: Invalid texture mipmap option: "<<val <<std::endl;
return "Other";
}

@ -162,7 +162,7 @@ namespace MWGui
const ESM::Enchantment* ench = MWBase::Environment::get().getWorld()->getStore().get<ESM::Enchantment>().search(enchId);
if (!ench)
{
std::cerr << "Can't find enchantment '" << enchId << "' on item " << base.getCellRef().getRefId() << std::endl;
std::cerr << "Warning: Can't find enchantment '" << enchId << "' on item " << base.getCellRef().getRefId() << std::endl;
return false;
}

@ -84,7 +84,7 @@ namespace MWGui
const ESM::Enchantment* enchant = esmStore.get<ESM::Enchantment>().search(enchantId);
if (!enchant)
{
std::cerr << "Can't find enchantment '" << enchantId << "' on item " << item.getCellRef().getRefId() << std::endl;
std::cerr << "Warning: Can't find enchantment '" << enchantId << "' on item " << item.getCellRef().getRefId() << std::endl;
continue;
}

@ -1162,7 +1162,7 @@ namespace MWGui
{
if (!mStore)
{
std::cerr << "WindowManager::onRetrieveTag: no Store set up yet, can not replace '" << tag << "'" << std::endl;
std::cerr << "Error: WindowManager::onRetrieveTag: no Store set up yet, can not replace '" << tag << "'" << std::endl;
return;
}
const ESM::GameSetting *setting = mStore->get<ESM::GameSetting>().find(tag);

@ -389,47 +389,49 @@ namespace MWInput
updateCursorMode();
if(mJoystickLastUsed)
if (mGuiCursorEnabled)
{
if (mGuiCursorEnabled)
float xAxis = mInputBinder->getChannel(A_MoveLeftRight)->getValue()*2.0f-1.0f;
float yAxis = mInputBinder->getChannel(A_MoveForwardBackward)->getValue()*2.0f-1.0f;
float zAxis = mInputBinder->getChannel(A_LookUpDown)->getValue()*2.0f-1.0f;
const MyGUI::IntSize& viewSize = MyGUI::RenderManager::getInstance().getViewSize();
xAxis *= (1.5f - mInputBinder->getChannel(A_Use)->getValue());
yAxis *= (1.5f - mInputBinder->getChannel(A_Use)->getValue());
// We keep track of our own mouse position, so that moving the mouse while in
// game mode does not move the position of the GUI cursor
float xmove = xAxis * dt * 1500.0f * mInvUiScalingFactor;
float ymove = yAxis * dt * 1500.0f * mInvUiScalingFactor;
if (xmove != 0|| ymove != 0)
{
float xAxis = mInputBinder->getChannel(A_MoveLeftRight)->getValue()*2.0f-1.0f;
float yAxis = mInputBinder->getChannel(A_MoveForwardBackward)->getValue()*2.0f-1.0f;
float zAxis = mInputBinder->getChannel(A_LookUpDown)->getValue()*2.0f-1.0f;
const MyGUI::IntSize& viewSize = MyGUI::RenderManager::getInstance().getViewSize();
xAxis *= (1.5f - mInputBinder->getChannel(A_Use)->getValue());
yAxis *= (1.5f - mInputBinder->getChannel(A_Use)->getValue());
// We keep track of our own mouse position, so that moving the mouse while in
// game mode does not move the position of the GUI cursor
mGuiCursorX += xAxis * dt * 1500.0f * mInvUiScalingFactor;
mGuiCursorY += yAxis * dt * 1500.0f * mInvUiScalingFactor;
mGuiCursorX += xmove;
mGuiCursorY += ymove;
mMouseWheel -= static_cast<int>(zAxis * dt * 1500.0f);
mGuiCursorX = std::max(0.f, std::min(mGuiCursorX, float(viewSize.width)));
mGuiCursorY = std::max(0.f, std::min(mGuiCursorY, float(viewSize.height)));
mGuiCursorX = std::max(0.f, std::min(mGuiCursorX, float(viewSize.width-1)));
mGuiCursorY = std::max(0.f, std::min(mGuiCursorY, float(viewSize.height-1)));
MyGUI::InputManager::getInstance().injectMouseMove(static_cast<int>(mGuiCursorX), static_cast<int>(mGuiCursorY), mMouseWheel);
mInputManager->warpMouse(static_cast<int>(mGuiCursorX/mInvUiScalingFactor), static_cast<int>(mGuiCursorY/mInvUiScalingFactor));
}
if (mMouseLookEnabled)
{
float xAxis = mInputBinder->getChannel(A_LookLeftRight)->getValue()*2.0f-1.0f;
float yAxis = mInputBinder->getChannel(A_LookUpDown)->getValue()*2.0f-1.0f;
resetIdleTime();
}
if (mMouseLookEnabled)
{
float xAxis = mInputBinder->getChannel(A_LookLeftRight)->getValue()*2.0f-1.0f;
float yAxis = mInputBinder->getChannel(A_LookUpDown)->getValue()*2.0f-1.0f;
resetIdleTime();
float rot[3];
rot[0] = yAxis * (dt * 100.0f) * 10.0f * mCameraSensitivity * (1.0f/256.f) * (mInvertY ? -1 : 1) * mCameraYMultiplier;
rot[1] = 0.0f;
rot[2] = xAxis * (dt * 100.0f) * 10.0f * mCameraSensitivity * (1.0f/256.f);
float rot[3];
rot[0] = yAxis * (dt * 100.0f) * 10.0f * mCameraSensitivity * (1.0f/256.f) * (mInvertY ? -1 : 1) * mCameraYMultiplier;
rot[1] = 0.0f;
rot[2] = xAxis * (dt * 100.0f) * 10.0f * mCameraSensitivity * (1.0f/256.f);
// Only actually turn player when we're not in vanity mode
if(!MWBase::Environment::get().getWorld()->vanityRotateCamera(rot))
{
mPlayer->yaw(rot[2]);
mPlayer->pitch(rot[0]);
}
// Only actually turn player when we're not in vanity mode
if(!MWBase::Environment::get().getWorld()->vanityRotateCamera(rot))
{
mPlayer->yaw(rot[2]);
mPlayer->pitch(rot[0]);
}
}
@ -443,73 +445,73 @@ namespace MWInput
{
bool triedToMove = false;
bool isRunning = false;
if(mJoystickLastUsed)
// joystick movement
float xAxis = mInputBinder->getChannel(A_MoveLeftRight)->getValue();
float yAxis = mInputBinder->getChannel(A_MoveForwardBackward)->getValue();
if (xAxis < .5)
{
float xAxis = mInputBinder->getChannel(A_MoveLeftRight)->getValue();
float yAxis = mInputBinder->getChannel(A_MoveForwardBackward)->getValue();
if (xAxis < .5)
{
triedToMove = true;
mPlayer->setLeftRight (-1);
}
else if (xAxis > .5)
{
triedToMove = true;
mPlayer->setLeftRight (1);
}
triedToMove = true;
mPlayer->setLeftRight (-1);
}
else if (xAxis > .5)
{
triedToMove = true;
mPlayer->setLeftRight (1);
}
if (yAxis < .5)
{
triedToMove = true;
mPlayer->setAutoMove (false);
mPlayer->setForwardBackward (1);
}
else if (yAxis > .5)
{
triedToMove = true;
mPlayer->setAutoMove (false);
mPlayer->setForwardBackward (-1);
}
if (yAxis < .5)
{
triedToMove = true;
mPlayer->setAutoMove (false);
mPlayer->setForwardBackward (1);
}
else if (yAxis > .5)
{
triedToMove = true;
mPlayer->setAutoMove (false);
mPlayer->setForwardBackward (-1);
}
else if(mPlayer->getAutoMove())
{
triedToMove = true;
mPlayer->setForwardBackward (1);
}
if (triedToMove)
mJoystickLastUsed = true;
else if(mPlayer->getAutoMove())
{
triedToMove = true;
mPlayer->setForwardBackward (1);
}
isRunning = xAxis > .75 || xAxis < .25 || yAxis > .75 || yAxis < .25;
if(triedToMove) resetIdleTime();
// keyboard movement
isRunning = xAxis > .75 || xAxis < .25 || yAxis > .75 || yAxis < .25;
if(triedToMove) resetIdleTime();
if (actionIsActive(A_MoveLeft))
{
triedToMove = true;
mPlayer->setLeftRight (-1);
}
else
else if (actionIsActive(A_MoveRight))
{
if (actionIsActive(A_MoveLeft))
{
triedToMove = true;
mPlayer->setLeftRight (-1);
}
else if (actionIsActive(A_MoveRight))
{
triedToMove = true;
mPlayer->setLeftRight (1);
}
triedToMove = true;
mPlayer->setLeftRight (1);
}
if (actionIsActive(A_MoveForward))
{
triedToMove = true;
mPlayer->setAutoMove (false);
mPlayer->setForwardBackward (1);
}
else if (actionIsActive(A_MoveBackward))
{
triedToMove = true;
mPlayer->setAutoMove (false);
mPlayer->setForwardBackward (-1);
}
if (actionIsActive(A_MoveForward))
{
triedToMove = true;
mPlayer->setAutoMove (false);
mPlayer->setForwardBackward (1);
}
else if (actionIsActive(A_MoveBackward))
{
triedToMove = true;
mPlayer->setAutoMove (false);
mPlayer->setForwardBackward (-1);
}
else if(mPlayer->getAutoMove())
{
triedToMove = true;
mPlayer->setForwardBackward (1);
}
else if(mPlayer->getAutoMove())
{
triedToMove = true;
mPlayer->setForwardBackward (1);
}
if (!mSneakToggles)
@ -855,7 +857,6 @@ namespace MWInput
void InputManager::axisMoved(int deviceID, const SDL_ControllerAxisEvent &arg )
{
mJoystickLastUsed = true;
if (!mControlsDisabled)
mInputBinder->axisMoved(deviceID, arg);
}

@ -1507,7 +1507,7 @@ namespace MWMechanics
}
else
{
std::cerr<< "Error in Actors::playAnimationGroup: Unable to find " << ptr.getCellRef().getRefId() << std::endl;
std::cerr<< "Warning: Actors::playAnimationGroup: Unable to find " << ptr.getCellRef().getRefId() << std::endl;
return false;
}
}

@ -725,7 +725,7 @@ namespace MWMechanics
}
else
{
std::cerr<< "Attempted to play out of range idle animation \""<<idleSelect<<"\" for " << actor.getCellRef().getRefId() << std::endl;
std::cerr<< "Error: Attempted to play out of range idle animation \""<<idleSelect<<"\" for " << actor.getCellRef().getRefId() << std::endl;
return false;
}
}

@ -88,7 +88,7 @@ bool Objects::playAnimationGroup(const MWWorld::Ptr& ptr, const std::string& gro
}
else
{
std::cerr<< "Error in Objects::playAnimationGroup: Unable to find " << ptr.getCellRef().getRefId() << std::endl;
std::cerr<< "Warning: Objects::playAnimationGroup: Unable to find " << ptr.getCellRef().getRefId() << std::endl;
return false;
}
}

@ -652,7 +652,7 @@ namespace MWPhysics
mPtr.getRefData().getBaseNode()->accept(visitor);
if (!visitor.mFound)
{
std::cerr << "animateCollisionShapes: Can't find node " << recIndex << " for " << mPtr.getCellRef().getRefId() << std::endl;
std::cerr << "Error: animateCollisionShapes can't find node " << recIndex << " for " << mPtr.getCellRef().getRefId() << std::endl;
return;
}
osg::NodePath nodePath = visitor.mFoundPath;

@ -562,7 +562,7 @@ namespace MWRender
NodeMap::const_iterator found = nodeMap.find(bonename);
if (found == nodeMap.end())
{
std::cerr << "addAnimSource: can't find bone '" + bonename << "' in " << model << " (referenced by " << kfname << ")" << std::endl;
std::cerr << "Warning: addAnimSource: can't find bone '" + bonename << "' in " << model << " (referenced by " << kfname << ")" << std::endl;
continue;
}
@ -1697,12 +1697,12 @@ namespace MWRender
PartHolder::~PartHolder()
{
if (mNode.get() && !mNode->getNumParents())
std::cerr << "Warning: part has no parents " << std::endl;
std::cerr << "Error: part has no parents " << std::endl;
if (mNode.get() && mNode->getNumParents())
{
if (mNode->getNumParents() > 1)
std::cerr << "Warning: part has multiple parents " << mNode->getNumParents() << " " << mNode.get() << std::endl;
std::cerr << "Error: part has multiple parents " << mNode->getNumParents() << " " << mNode.get() << std::endl;
mNode->getParent(0)->removeChild(mNode);
}
}

@ -155,7 +155,7 @@ void CreatureWeaponAnimation::updatePart(PartHolderPtr& scene, int slot)
}
catch (std::exception& e)
{
std::cerr << "Error adding creature part: " << e.what() << std::endl;
std::cerr << "Can not add creature part: " << e.what() << std::endl;
}
}

@ -408,14 +408,14 @@ namespace MWRender
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("png");
if (!readerwriter)
{
std::cerr << "Can't write map overlay: no png readerwriter found" << std::endl;
std::cerr << "Error: Can't write map overlay: no png readerwriter found" << std::endl;
return;
}
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*mOverlayImage, ostream);
if (!result.success())
{
std::cerr << "Can't write map overlay: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: Can't write map overlay: " << result.message() << " code " << result.status() << std::endl;
return;
}
@ -460,14 +460,14 @@ namespace MWRender
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("png");
if (!readerwriter)
{
std::cerr << "Can't read map overlay: no png readerwriter found" << std::endl;
std::cerr << "Error: Can't read map overlay: no png readerwriter found" << std::endl;
return;
}
osgDB::ReaderWriter::ReadResult result = readerwriter->readImage(istream);
if (!result.success())
{
std::cerr << "Can't read map overlay: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: Can't read map overlay: " << result.message() << " code " << result.status() << std::endl;
return;
}
@ -569,7 +569,7 @@ namespace MWRender
CameraVector::iterator found = std::find(mActiveCameras.begin(), mActiveCameras.end(), camera);
if (found == mActiveCameras.end())
{
std::cerr << "GlobalMap trying to remove an inactive camera" << std::endl;
std::cerr << "Error: GlobalMap trying to remove an inactive camera" << std::endl;
return;
}
mActiveCameras.erase(found);

@ -320,7 +320,7 @@ void LocalMap::markForRemoval(osg::Camera *cam)
CameraVector::iterator found = std::find(mActiveCameras.begin(), mActiveCameras.end(), cam);
if (found == mActiveCameras.end())
{
std::cerr << "trying to remove an inactive camera" << std::endl;
std::cerr << "Error: trying to remove an inactive camera" << std::endl;
return;
}
mActiveCameras.erase(found);
@ -487,7 +487,7 @@ void LocalMap::requestInteriorMap(const MWWorld::CellStore* cell)
// We are using the same bounds and angle as we were using when the textures were originally made. Segments should come out the same.
if (i >= int(fog->mFogTextures.size()))
{
std::cout << "Warning: fog texture count mismatch" << std::endl;
std::cout << "Error: fog texture count mismatch" << std::endl;
break;
}
@ -679,7 +679,7 @@ void LocalMap::MapSegment::loadFogOfWar(const ESM::FogTexture &esm)
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("tga");
if (!readerwriter)
{
std::cerr << "Unable to load fog, can't find a tga ReaderWriter" << std::endl;
std::cerr << "Error: Unable to load fog, can't find a tga ReaderWriter" << std::endl;
return;
}
@ -688,7 +688,7 @@ void LocalMap::MapSegment::loadFogOfWar(const ESM::FogTexture &esm)
osgDB::ReaderWriter::ReadResult result = readerwriter->readImage(in);
if (!result.success())
{
std::cerr << "Failed to read fog: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: Failed to read fog: " << result.message() << " code " << result.status() << std::endl;
return;
}
@ -711,7 +711,7 @@ void LocalMap::MapSegment::saveFogOfWar(ESM::FogTexture &fog) const
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("tga");
if (!readerwriter)
{
std::cerr << "Unable to write fog, can't find a tga ReaderWriter" << std::endl;
std::cerr << "Error: Unable to write fog, can't find a tga ReaderWriter" << std::endl;
return;
}
@ -720,7 +720,7 @@ void LocalMap::MapSegment::saveFogOfWar(ESM::FogTexture &fog) const
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*mFogOfWarImage, ostream);
if (!result.success())
{
std::cerr << "Unable to write fog: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: Unable to write fog: " << result.message() << " code " << result.status() << std::endl;
return;
}
mFogOfWarImage->flipVertical();

@ -435,7 +435,7 @@ void NpcAnimation::updateNpcBase()
if (bp)
mHeadModel = "meshes\\" + bp->mModel;
else
std::cerr << "Failed to load body part '" << mNpc->mHead << "'" << std::endl;
std::cerr << "Warning: Failed to load body part '" << mNpc->mHead << "'" << std::endl;
}
mHairModel = "";
@ -445,7 +445,7 @@ void NpcAnimation::updateNpcBase()
if (bp)
mHairModel = "meshes\\" + bp->mModel;
else
std::cerr << "Failed to load body part '" << mNpc->mHair << "'" << std::endl;
std::cerr << "Warning: Failed to load body part '" << mNpc->mHair << "'" << std::endl;
}
}
@ -625,7 +625,8 @@ void NpcAnimation::updateParts()
const ESM::Light *light = part.get<ESM::Light>()->mBase;
addOrReplaceIndividualPart(ESM::PRT_Shield, MWWorld::InventoryStore::Slot_CarriedLeft,
1, "meshes\\"+light->mModel);
addExtraLight(mObjectParts[ESM::PRT_Shield]->getNode()->asGroup(), light);
if (mObjectParts[ESM::PRT_Shield])
addExtraLight(mObjectParts[ESM::PRT_Shield]->getNode()->asGroup(), light);
}
}
@ -828,7 +829,7 @@ void NpcAnimation::addPartGroup(int group, int priority, const std::vector<ESM::
bodypart = NULL;
}
else if (!bodypart)
std::cerr << "Failed to find body part '" << part->mFemale << "'" << std::endl;
std::cerr << "Warning: Failed to find body part '" << part->mFemale << "'" << std::endl;
}
if(!bodypart && !part->mMale.empty())
{
@ -843,7 +844,7 @@ void NpcAnimation::addPartGroup(int group, int priority, const std::vector<ESM::
bodypart = NULL;
}
else if (!bodypart)
std::cerr << "Failed to find body part '" << part->mMale << "'" << std::endl;
std::cerr << "Warning: Failed to find body part '" << part->mMale << "'" << std::endl;
}
if(bodypart)
@ -920,7 +921,7 @@ void NpcAnimation::showCarriedLeft(bool show)
if (addOrReplaceIndividualPart(ESM::PRT_Shield, MWWorld::InventoryStore::Slot_CarriedLeft, 1,
mesh, !iter->getClass().getEnchantment(*iter).empty(), &glowColor))
{
if (iter->getTypeName() == typeid(ESM::Light).name())
if (iter->getTypeName() == typeid(ESM::Light).name() && mObjectParts[ESM::PRT_Shield])
addExtraLight(mObjectParts[ESM::PRT_Shield]->getNode()->asGroup(), iter->get<ESM::Light>()->mBase);
}
}

@ -197,16 +197,16 @@ osg::ref_ptr<osg::Image> readPngImage (const std::string& file)
boost::filesystem::ifstream inStream;
inStream.open(file, std::ios_base::in | std::ios_base::binary);
if (inStream.fail())
std::cerr << "Failed to open " << file << std::endl;
std::cerr << "Error: Failed to open " << file << std::endl;
osgDB::ReaderWriter* reader = osgDB::Registry::instance()->getReaderWriterForExtension("png");
if (!reader)
{
std::cerr << "Failed to read " << file << ", no png readerwriter found" << std::endl;
std::cerr << "Error: Failed to read " << file << ", no png readerwriter found" << std::endl;
return osg::ref_ptr<osg::Image>();
}
osgDB::ReaderWriter::ReadResult result = reader->readImage(inStream);
if (!result.success())
std::cerr << "Failed to read " << file << ": " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: Failed to read " << file << ": " << result.message() << " code " << result.status() << std::endl;
return result.getImage();
}

@ -65,14 +65,14 @@ namespace MWScript
}
catch (const std::exception& error)
{
std::cerr << "An exception has been thrown: " << error.what() << std::endl;
std::cerr << "Error: An exception has been thrown: " << error.what() << std::endl;
Success = false;
}
if (!Success)
{
std::cerr
<< "compiling failed: " << name << std::endl;
<< "Warning: compiling failed: " << name << std::endl;
}
if (Success)

@ -238,7 +238,7 @@ namespace MWScript
if (R()(runtime, false, true).isEmpty())
{
std::cerr
<< "Compensating for broken script in Morrowind.esm by "
<< "Warning: Compensating for broken script in Morrowind.esm by "
<< "ignoring remote access to dagoth_ur_1" << std::endl;
return;
}

@ -332,7 +332,7 @@ namespace MWScript
store = MWBase::Environment::get().getWorld()->getExterior(cx,cy);
if(!cell)
{
std::string error = "PositionCell: unknown interior cell (" + cellID + "), moving to exterior instead";
std::string error = "Warning: PositionCell: unknown interior cell (" + cellID + "), moving to exterior instead";
runtime.getContext().report (error);
std::cerr << error << std::endl;
}

@ -471,7 +471,7 @@ void MWState::StateManager::loadGame (const Character *character, const std::str
default:
// ignore invalid records
std::cerr << "Ignoring unknown record: " << n.toString() << std::endl;
std::cerr << "Warning: Ignoring unknown record: " << n.toString() << std::endl;
reader.skipRecord();
}
int progressPercent = static_cast<int>(float(reader.getFileOffset())/total*100);
@ -613,7 +613,7 @@ bool MWState::StateManager::verifyProfile(const ESM::SavedGame& profile) const
if (std::find(selectedContentFiles.begin(), selectedContentFiles.end(), *it)
== selectedContentFiles.end())
{
std::cerr << "Savegame dependency " << *it << " is missing." << std::endl;
std::cerr << "Warning: Savegame dependency " << *it << " is missing." << std::endl;
notFound = true;
}
}
@ -641,7 +641,7 @@ void MWState::StateManager::writeScreenshot(std::vector<char> &imageData) const
osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("jpg");
if (!readerwriter)
{
std::cerr << "Unable to write screenshot, can't find a jpg ReaderWriter" << std::endl;
std::cerr << "Error: Unable to write screenshot, can't find a jpg ReaderWriter" << std::endl;
return;
}
@ -649,7 +649,7 @@ void MWState::StateManager::writeScreenshot(std::vector<char> &imageData) const
osgDB::ReaderWriter::WriteResult result = readerwriter->writeImage(*screenshot, ostream);
if (!result.success())
{
std::cerr << "Unable to write screenshot: " << result.message() << " code " << result.status() << std::endl;
std::cerr << "Error: Unable to write screenshot: " << result.message() << " code " << result.status() << std::endl;
return;
}

@ -209,12 +209,12 @@ namespace MWWorld
{
if (!mWorkQueue)
{
std::cerr << "can't preload, no work queue set " << std::endl;
std::cerr << "Error: can't preload, no work queue set " << std::endl;
return;
}
if (cell->getState() == CellStore::State_Unloaded)
{
std::cerr << "can't preload objects for unloaded cell" << std::endl;
std::cerr << "Error: can't preload objects for unloaded cell" << std::endl;
return;
}

@ -349,7 +349,7 @@ bool MWWorld::Cells::readRecord (ESM::ESMReader& reader, uint32_t type,
catch (...)
{
// silently drop cells that don't exist anymore
std::cerr << "Dropping state for cell " << state.mId.mWorldspace << " (cell no longer exists)" << std::endl;
std::cerr << "Warning: Dropping state for cell " << state.mId.mWorldspace << " (cell no longer exists)" << std::endl;
reader.skipRecord();
return true;
}

@ -140,7 +140,7 @@ namespace
return;
}
std::cerr << "Dropping reference to " << state.mRef.mRefID << " (invalid content file link)" << std::endl;
std::cerr << "Warning: Dropping reference to " << state.mRef.mRefID << " (invalid content file link)" << std::endl;
return;
}
@ -199,7 +199,7 @@ namespace MWWorld
else
{
std::cerr
<< "Error: could not resolve cell reference '" << ref.mRefID << "'"
<< "Warning: could not resolve cell reference '" << ref.mRefID << "'"
<< " (dropping reference)" << std::endl;
}
}
@ -750,7 +750,7 @@ namespace MWWorld
default:
std::cerr
<< "WARNING: Ignoring reference '" << ref.mRefID << "' of unhandled type\n";
<< "Error: Ignoring reference '" << ref.mRefID << "' of unhandled type\n";
return;
}
@ -981,7 +981,7 @@ namespace MWWorld
if (!visitor.mFound)
{
std::cerr << "Dropping moved ref tag for " << refnum.mIndex << " (moved object no longer exists)" << std::endl;
std::cerr << "Warning: Dropping moved ref tag for " << refnum.mIndex << " (moved object no longer exists)" << std::endl;
continue;
}
@ -991,7 +991,7 @@ namespace MWWorld
if (otherCell == NULL)
{
std::cerr << "Dropping moved ref tag for " << movedRef->mRef.getRefId()
std::cerr << "Warning: Dropping moved ref tag for " << movedRef->mRef.getRefId()
<< " (target cell " << movedTo.mWorldspace << " no longer exists). Reference moved back to its original location." << std::endl;
// Note by dropping tag the object will automatically re-appear in its original cell, though potentially at inapproriate coordinates.
// Restore original coordinates:

@ -496,7 +496,7 @@ void MWWorld::ContainerStore::addInitialItem (const std::string& id, const std::
}
catch (const std::exception& e)
{
std::cerr << "Error in MWWorld::ContainerStore::addInitialItem: " << e.what() << std::endl;
std::cerr << "Warning: MWWorld::ContainerStore::addInitialItem: " << e.what() << std::endl;
}
}
@ -796,10 +796,10 @@ void MWWorld::ContainerStore::readState (const ESM::InventoryState& inventory)
case ESM::REC_WEAP: readEquipmentState (getState (weapons, state), thisIndex, inventory); break;
case ESM::REC_LIGH: readEquipmentState (getState (lights, state), thisIndex, inventory); break;
case 0:
std::cerr << "Dropping reference to '" << state.mRef.mRefID << "' (object no longer exists)" << std::endl;
std::cerr << "Warning: Dropping reference to '" << state.mRef.mRefID << "' (object no longer exists)" << std::endl;
break;
default:
std::cerr << "Invalid item type in inventory state, refid " << state.mRef.mRefID << std::endl;
std::cerr << "Warning: Invalid item type in inventory state, refid " << state.mRef.mRefID << std::endl;
break;
}
}

@ -857,7 +857,7 @@ void MWWorld::InventoryStore::updateRechargingItems()
enchantmentId);
if (!enchantment)
{
std::cerr << "Can't find enchantment '" << enchantmentId << "' on item " << it->getCellRef().getRefId() << std::endl;
std::cerr << "Warning: Can't find enchantment '" << enchantmentId << "' on item " << it->getCellRef().getRefId() << std::endl;
continue;
}

@ -40,7 +40,7 @@ void MWWorld::LiveCellRefBase::loadImp (const ESM::ObjectState& state)
catch (const std::exception& exception)
{
std::cerr
<< "failed to load state for local script " << scriptId
<< "Error: failed to load state for local script " << scriptId
<< " because an exception has been thrown: " << exception.what()
<< std::endl;
}

@ -93,7 +93,7 @@ void MWWorld::LocalScripts::add (const std::string& scriptName, const Ptr& ptr)
for (std::list<std::pair<std::string, Ptr> >::iterator iter = mScripts.begin(); iter!=mScripts.end(); ++iter)
if (iter->second==ptr)
{
std::cerr << "warning, tried to add local script twice for " << ptr.getCellRef().getRefId() << std::endl;
std::cerr << "Error: tried to add local script twice for " << ptr.getCellRef().getRefId() << std::endl;
remove(ptr);
break;
}

@ -330,7 +330,7 @@ namespace MWWorld
if (!player.mObject.mEnabled)
{
std::cerr << "Savegame attempted to disable the player." << std::endl;
std::cerr << "Warning: Savegame attempted to disable the player." << std::endl;
player.mObject.mEnabled = true;
}
@ -357,7 +357,7 @@ namespace MWWorld
}
catch (...)
{
std::cerr << "Player cell '" << player.mCellId.mWorldspace << "' no longer exists" << std::endl;
std::cerr << "Warning: Player cell '" << player.mCellId.mWorldspace << "' no longer exists" << std::endl;
// Cell no longer exists. The loader will have to choose a default cell.
mCellStore = NULL;
}

@ -152,7 +152,7 @@ namespace
}
catch (const std::exception& e)
{
std::string error ("error during rendering '" + ptr.getCellRef().getRefId() + "': ");
std::string error ("failed to render '" + ptr.getCellRef().getRefId() + "': ");
std::cerr << error + e.what() << std::endl;
}
}
@ -682,7 +682,7 @@ namespace MWWorld
}
catch (std::exception& e)
{
std::cerr << "error during rendering '" << ptr.getCellRef().getRefId() << "': " << e.what() << std::endl;
std::cerr << "failed to render '" << ptr.getCellRef().getRefId() << "': " << e.what() << std::endl;
}
}

@ -687,7 +687,7 @@ namespace MWWorld
if (it_lease != wipecell->mLeasedRefs.end())
wipecell->mLeasedRefs.erase(it_lease);
else
std::cerr << "can't find " << it->mRefNum.mIndex << " " << it->mRefNum.mContentFile << " in leasedRefs " << std::endl;
std::cerr << "Error: can't find " << it->mRefNum.mIndex << " " << it->mRefNum.mContentFile << " in leasedRefs " << std::endl;
}
*itold = *it;
}

@ -128,7 +128,7 @@ namespace ESM
return;
}
std::cerr << "Failed to insert info " << info.mId << std::endl;
std::cerr << "Warning: Failed to insert info " << info.mId << std::endl;
}
void Dialogue::clearDeletedInfos()

@ -319,7 +319,7 @@ namespace ESMTerrain
const ESM::LandTexture* ltex = getLandTexture(id.first-1, id.second);
if (!ltex)
{
std::cerr << "Unable to find land texture index " << id.first-1 << " in plugin " << id.second << ", using default texture instead" << std::endl;
std::cerr << "Warning: Unable to find land texture index " << id.first-1 << " in plugin " << id.second << ", using default texture instead" << std::endl;
return defaultTexture;
}

@ -191,7 +191,7 @@ namespace Interpreter{
}
catch (std::exception& e)
{
std::cerr << "Failed to replace escape character, with the following error: " << e.what() << std::endl;
std::cerr << "Error: Failed to replace escape character, with the following error: " << e.what() << std::endl;
std::cerr << "Full text below: " << std::endl << text << std::endl;
}

@ -1364,7 +1364,7 @@ namespace NifOsg
size_t mipSize = mip.height * mip.width * pixelData->bpp / 8;
if (mipSize + mip.dataOffset > pixelData->data.size())
{
std::cerr << "Internal texture's mipmap data out of bounds" << std::endl;
std::cerr << "Warning: Internal texture's mipmap data out of bounds, ignoring texture" << std::endl;
return NULL;
}
@ -1379,7 +1379,7 @@ namespace NifOsg
if (width <= 0 || height <= 0)
{
std::cerr << "Width and height must be non zero " << std::endl;
std::cerr << "Warning: Internal Texture Width and height must be non zero, ignoring texture" << std::endl;
return NULL;
}
@ -1421,7 +1421,7 @@ namespace NifOsg
{
// Not used by the vanilla engine. MCP (Morrowind Code Patch) adds an option to use Gloss maps:
// "- Gloss map fix. Morrowind removed gloss map entries from model files after loading them. This stops Morrowind from removing them."
std::cerr << "NiTexturingProperty::GlossTexture in " << mFilename << " not currently used." << std::endl;
//std::cerr << "NiTexturingProperty::GlossTexture in " << mFilename << " not currently used." << std::endl;
continue;
}
default:

@ -284,7 +284,7 @@ void Emitter::emitParticles(double dt)
if (!visitor.mFound)
{
std::cerr << "Emitter: Can't find emitter node" << randomRecIndex << std::endl;
std::cerr << "Error: Can't find emitter node" << randomRecIndex << std::endl;
return;
}

@ -1,6 +1,8 @@
#include "scenemanager.hpp"
#include <iostream>
#include <cstdlib>
#include <osg/Node>
#include <osg/UserDataContainer>
@ -434,6 +436,29 @@ namespace Resource
return true;
}
unsigned int getOptimizationOptions()
{
using namespace SceneUtil;
const char* env = getenv("OPENMW_OPTIMIZE");
unsigned int options = Optimizer::FLATTEN_STATIC_TRANSFORMS|Optimizer::REMOVE_REDUNDANT_NODES|Optimizer::MERGE_GEOMETRY;
if (env)
{
std::string str(env);
if(str.find("OFF")!=std::string::npos) options = 0;
if(str.find("~FLATTEN_STATIC_TRANSFORMS")!=std::string::npos) options ^= Optimizer::FLATTEN_STATIC_TRANSFORMS;
else if(str.find("FLATTEN_STATIC_TRANSFORMS")!=std::string::npos) options |= Optimizer::FLATTEN_STATIC_TRANSFORMS;
if(str.find("~REMOVE_REDUNDANT_NODES")!=std::string::npos) options ^= Optimizer::REMOVE_REDUNDANT_NODES;
else if(str.find("REMOVE_REDUNDANT_NODES")!=std::string::npos) options |= Optimizer::REMOVE_REDUNDANT_NODES;
if(str.find("~MERGE_GEOMETRY")!=std::string::npos) options ^= Optimizer::MERGE_GEOMETRY;
else if(str.find("MERGE_GEOMETRY")!=std::string::npos) options |= Optimizer::MERGE_GEOMETRY;
}
return options;
}
osg::ref_ptr<const osg::Node> SceneManager::getTemplate(const std::string &name)
{
std::string normalized = name;
@ -500,7 +525,9 @@ namespace Resource
SceneUtil::Optimizer optimizer;
optimizer.setIsOperationPermissibleForObjectCallback(new CanOptimizeCallback);
optimizer.optimize(loaded, SceneUtil::Optimizer::FLATTEN_STATIC_TRANSFORMS|SceneUtil::Optimizer::REMOVE_REDUNDANT_NODES|SceneUtil::Optimizer::MERGE_GEOMETRY);
static const unsigned int options = getOptimizationOptions();
optimizer.optimize(loaded, options);
}
if (mIncrementalCompileOperation)
@ -613,12 +640,12 @@ namespace Resource
if(magfilter == "nearest")
mag = osg::Texture::NEAREST;
else if(magfilter != "linear")
std::cerr<< "Invalid texture mag filter: "<<magfilter <<std::endl;
std::cerr<< "Warning: Invalid texture mag filter: "<<magfilter <<std::endl;
if(minfilter == "nearest")
min = osg::Texture::NEAREST;
else if(minfilter != "linear")
std::cerr<< "Invalid texture min filter: "<<minfilter <<std::endl;
std::cerr<< "Warning: Invalid texture min filter: "<<minfilter <<std::endl;
if(mipmap == "nearest")
{
@ -630,7 +657,7 @@ namespace Resource
else if(mipmap != "none")
{
if(mipmap != "linear")
std::cerr<< "Invalid texture mipmap: "<<mipmap <<std::endl;
std::cerr<< "Warning: Invalid texture mipmap: "<<mipmap <<std::endl;
if(min == osg::Texture::NEAREST)
min = osg::Texture::NEAREST_MIPMAP_LINEAR;
else if(min == osg::Texture::LINEAR)

@ -63,7 +63,7 @@ namespace SceneUtil
{
osg::ref_ptr<osg::Node> node = *it;
if (node->getNumParents() > 1)
std::cerr << "CopyRigVisitor warning: node has multiple parents" << std::endl;
std::cerr << "Error CopyRigVisitor: node has multiple parents" << std::endl;
while (node->getNumParents())
node->getParent(0)->removeChild(node);

@ -281,11 +281,11 @@ class CollectLowestTransformsVisitor : public BaseOptimizerVisitor
ObjectStruct():_canBeApplied(true),_moreThanOneMatrixRequired(false) {}
void add(osg::Transform* transform)
void add(osg::Transform* transform, bool canOptimize)
{
if (transform)
{
if (transform->getDataVariance()!=osg::Transform::STATIC) _moreThanOneMatrixRequired=true;
if (!canOptimize) _moreThanOneMatrixRequired=true;
else if (transform->getReferenceFrame()!=osg::Transform::RELATIVE_RF) _moreThanOneMatrixRequired=true;
else
{
@ -322,7 +322,7 @@ class CollectLowestTransformsVisitor : public BaseOptimizerVisitor
itr!=_currentObjectList.end();
++itr)
{
_objectMap[*itr].add(transform);
_objectMap[*itr].add(transform, transform && isOperationPermissibleForObject(transform));
}
}
@ -802,8 +802,7 @@ bool Optimizer::RemoveRedundantNodesVisitor::isOperationPermissible(osg::Node& n
void Optimizer::RemoveRedundantNodesVisitor::apply(osg::Group& group)
{
if (group.getNumChildren()==1 &&
typeid(group)==typeid(osg::Group) &&
if (typeid(group)==typeid(osg::Group) &&
isOperationPermissible(group))
{
_redundantNodeList.insert(&group);

@ -162,13 +162,13 @@ bool RigGeometry::initFromParentSkeleton(osg::NodeVisitor* nv)
if (!mSkeleton)
{
std::cerr << "A RigGeometry did not find its parent skeleton" << std::endl;
std::cerr << "Error: A RigGeometry did not find its parent skeleton" << std::endl;
return false;
}
if (!mInfluenceMap)
{
std::cerr << "No InfluenceMap set on RigGeometry" << std::endl;
std::cerr << "Error: No InfluenceMap set on RigGeometry" << std::endl;
return false;
}
@ -179,7 +179,7 @@ bool RigGeometry::initFromParentSkeleton(osg::NodeVisitor* nv)
Bone* bone = mSkeleton->getBone(it->first);
if (!bone)
{
std::cerr << "RigGeometry did not find bone " << it->first << std::endl;
std::cerr << "Error: RigGeometry did not find bone " << it->first << std::endl;
continue;
}
@ -232,7 +232,7 @@ void RigGeometry::update(osg::NodeVisitor* nv)
{
if (!mSkeleton)
{
std::cerr << "RigGeometry rendering with no skeleton, should have been initialized by UpdateVisitor" << std::endl;
std::cerr << "Error: RigGeometry rendering with no skeleton, should have been initialized by UpdateVisitor" << std::endl;
// try to recover anyway, though rendering is likely to be incorrect.
if (!initFromParentSkeleton(nv))
return;

@ -128,7 +128,7 @@ void Skeleton::updateBoneMatrices(unsigned int traversalNumber)
mRootBone->mChildren[i]->update(NULL);
}
else
std::cerr << "no root bone" << std::endl;
std::cerr << "Error: no root bone" << std::endl;
mNeedToUpdateBoneMatrices = false;
}
@ -188,7 +188,7 @@ void Bone::update(const osg::Matrixf* parentMatrixInSkeletonSpace)
{
if (!mNode)
{
std::cerr << "Bone without node " << std::endl;
std::cerr << "Error: Bone without node " << std::endl;
return;
}
if (parentMatrixInSkeletonSpace)

@ -71,7 +71,7 @@ void WorkQueue::addWorkItem(osg::ref_ptr<WorkItem> item, bool front)
{
if (item->isDone())
{
std::cerr << "warning, trying to add a work item that is already completed" << std::endl;
std::cerr << "Error: trying to add a work item that is already completed" << std::endl;
return;
}

Loading…
Cancel
Save