mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-06 12:45:36 +00:00
Show mesh origin
This commit is contained in:
parent
cdf0bc1d8d
commit
3bf641d3ce
13 changed files with 97 additions and 1 deletions
|
@ -116,6 +116,7 @@
|
||||||
Feature #5672: Make stretch menu background configuration more accessible
|
Feature #5672: Make stretch menu background configuration more accessible
|
||||||
Feature #5692: Improve spell/magic item search to factor in magic effect names
|
Feature #5692: Improve spell/magic item search to factor in magic effect names
|
||||||
Feature #5730: Add graphic herbalism option to the launcher and documents
|
Feature #5730: Add graphic herbalism option to the launcher and documents
|
||||||
|
Feature #5771: ori command should report where a mesh is loaded from and whether the x version is used.
|
||||||
Task #5480: Drop Qt4 support
|
Task #5480: Drop Qt4 support
|
||||||
Task #5520: Improve cell name autocompleter implementation
|
Task #5520: Improve cell name autocompleter implementation
|
||||||
|
|
||||||
|
|
|
@ -749,6 +749,7 @@ void OMW::Engine::prepareEngine (Settings::Manager & settings)
|
||||||
// Create dialog system
|
// Create dialog system
|
||||||
mEnvironment.setJournal (new MWDialogue::Journal);
|
mEnvironment.setJournal (new MWDialogue::Journal);
|
||||||
mEnvironment.setDialogueManager (new MWDialogue::DialogueManager (mExtensions, mTranslationDataStorage));
|
mEnvironment.setDialogueManager (new MWDialogue::DialogueManager (mExtensions, mTranslationDataStorage));
|
||||||
|
mEnvironment.setResourceSystem(mResourceSystem.get());
|
||||||
|
|
||||||
// scripts
|
// scripts
|
||||||
if (mCompileAll)
|
if (mCompileAll)
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
|
#include <components/resource/resourcesystem.hpp>
|
||||||
|
|
||||||
#include "world.hpp"
|
#include "world.hpp"
|
||||||
#include "scriptmanager.hpp"
|
#include "scriptmanager.hpp"
|
||||||
#include "dialoguemanager.hpp"
|
#include "dialoguemanager.hpp"
|
||||||
|
@ -76,6 +78,11 @@ void MWBase::Environment::setStateManager (StateManager *stateManager)
|
||||||
mStateManager = stateManager;
|
mStateManager = stateManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MWBase::Environment::setResourceSystem (Resource::ResourceSystem *resourceSystem)
|
||||||
|
{
|
||||||
|
mResourceSystem = resourceSystem;
|
||||||
|
}
|
||||||
|
|
||||||
void MWBase::Environment::setFrameDuration (float duration)
|
void MWBase::Environment::setFrameDuration (float duration)
|
||||||
{
|
{
|
||||||
mFrameDuration = duration;
|
mFrameDuration = duration;
|
||||||
|
@ -158,6 +165,11 @@ MWBase::StateManager *MWBase::Environment::getStateManager() const
|
||||||
return mStateManager;
|
return mStateManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Resource::ResourceSystem *MWBase::Environment::getResourceSystem() const
|
||||||
|
{
|
||||||
|
return mResourceSystem;
|
||||||
|
}
|
||||||
|
|
||||||
float MWBase::Environment::getFrameDuration() const
|
float MWBase::Environment::getFrameDuration() const
|
||||||
{
|
{
|
||||||
return mFrameDuration;
|
return mFrameDuration;
|
||||||
|
|
|
@ -6,6 +6,11 @@ namespace osg
|
||||||
class Stats;
|
class Stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace Resource
|
||||||
|
{
|
||||||
|
class ResourceSystem;
|
||||||
|
}
|
||||||
|
|
||||||
namespace MWBase
|
namespace MWBase
|
||||||
{
|
{
|
||||||
class World;
|
class World;
|
||||||
|
@ -37,6 +42,7 @@ namespace MWBase
|
||||||
Journal *mJournal;
|
Journal *mJournal;
|
||||||
InputManager *mInputManager;
|
InputManager *mInputManager;
|
||||||
StateManager *mStateManager;
|
StateManager *mStateManager;
|
||||||
|
Resource::ResourceSystem *mResourceSystem;
|
||||||
float mFrameDuration;
|
float mFrameDuration;
|
||||||
float mFrameRateLimit;
|
float mFrameRateLimit;
|
||||||
|
|
||||||
|
@ -70,6 +76,8 @@ namespace MWBase
|
||||||
|
|
||||||
void setStateManager (StateManager *stateManager);
|
void setStateManager (StateManager *stateManager);
|
||||||
|
|
||||||
|
void setResourceSystem (Resource::ResourceSystem *resourceSystem);
|
||||||
|
|
||||||
void setFrameDuration (float duration);
|
void setFrameDuration (float duration);
|
||||||
///< Set length of current frame in seconds.
|
///< Set length of current frame in seconds.
|
||||||
|
|
||||||
|
@ -95,6 +103,8 @@ namespace MWBase
|
||||||
|
|
||||||
StateManager *getStateManager() const;
|
StateManager *getStateManager() const;
|
||||||
|
|
||||||
|
Resource::ResourceSystem *getResourceSystem() const;
|
||||||
|
|
||||||
float getFrameDuration() const;
|
float getFrameDuration() const;
|
||||||
|
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
|
|
@ -13,10 +13,15 @@
|
||||||
#include <components/interpreter/opcodes.hpp>
|
#include <components/interpreter/opcodes.hpp>
|
||||||
|
|
||||||
#include <components/misc/rng.hpp>
|
#include <components/misc/rng.hpp>
|
||||||
|
#include <components/misc/resourcehelpers.hpp>
|
||||||
|
|
||||||
|
#include <components/resource/resourcesystem.hpp>
|
||||||
|
|
||||||
#include <components/esm/loadmgef.hpp>
|
#include <components/esm/loadmgef.hpp>
|
||||||
#include <components/esm/loadcrea.hpp>
|
#include <components/esm/loadcrea.hpp>
|
||||||
|
|
||||||
|
#include <components/vfs/manager.hpp>
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/windowmanager.hpp"
|
#include "../mwbase/windowmanager.hpp"
|
||||||
#include "../mwbase/scriptmanager.hpp"
|
#include "../mwbase/scriptmanager.hpp"
|
||||||
|
@ -1377,7 +1382,15 @@ namespace MWScript
|
||||||
msg << "Grid: " << cell->getCell()->getGridX() << " " << cell->getCell()->getGridY() << std::endl;
|
msg << "Grid: " << cell->getCell()->getGridX() << " " << cell->getCell()->getGridY() << std::endl;
|
||||||
osg::Vec3f pos (ptr.getRefData().getPosition().asVec3());
|
osg::Vec3f pos (ptr.getRefData().getPosition().asVec3());
|
||||||
msg << "Coordinates: " << pos.x() << " " << pos.y() << " " << pos.z() << std::endl;
|
msg << "Coordinates: " << pos.x() << " " << pos.y() << " " << pos.z() << std::endl;
|
||||||
msg << "Model: " << ptr.getClass().getModel(ptr) << std::endl;
|
auto vfs = MWBase::Environment::get().getResourceSystem()->getVFS();
|
||||||
|
std::string model = ::Misc::ResourceHelpers::correctActorModelPath(ptr.getClass().getModel(ptr), vfs);
|
||||||
|
msg << "Model: " << model << std::endl;
|
||||||
|
if(!model.empty())
|
||||||
|
{
|
||||||
|
const std::string archive = vfs->getArchive(model);
|
||||||
|
if(!archive.empty())
|
||||||
|
msg << "(" << archive << ")" << std::endl;
|
||||||
|
}
|
||||||
if (!ptr.getClass().getScript(ptr).empty())
|
if (!ptr.getClass().getScript(ptr).empty())
|
||||||
msg << "Script: " << ptr.getClass().getScript(ptr) << std::endl;
|
msg << "Script: " << ptr.getClass().getScript(ptr) << std::endl;
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,6 +135,11 @@ public:
|
||||||
/// @note Thread safe.
|
/// @note Thread safe.
|
||||||
const FileList &getList() const
|
const FileList &getList() const
|
||||||
{ return mFiles; }
|
{ return mFiles; }
|
||||||
|
|
||||||
|
const std::string& getFilename() const
|
||||||
|
{
|
||||||
|
return mFilename;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,11 @@ namespace VFS
|
||||||
|
|
||||||
/// List all resources contained in this archive, and run the resource names through the given normalize function.
|
/// List all resources contained in this archive, and run the resource names through the given normalize function.
|
||||||
virtual void listResources(std::map<std::string, File*>& out, char (*normalize_function) (char)) = 0;
|
virtual void listResources(std::map<std::string, File*>& out, char (*normalize_function) (char)) = 0;
|
||||||
|
|
||||||
|
/// True if this archive contains the provided normalized file.
|
||||||
|
virtual bool contains(const std::string& file, char (*normalize_function) (char)) const = 0;
|
||||||
|
|
||||||
|
virtual std::string getDescription() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,23 @@ void BsaArchive::listResources(std::map<std::string, File *> &out, char (*normal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool BsaArchive::contains(const std::string& file, char (*normalize_function)(char)) const
|
||||||
|
{
|
||||||
|
for (const auto& it : mResources)
|
||||||
|
{
|
||||||
|
std::string ent = it.mInfo->name;
|
||||||
|
std::transform(ent.begin(), ent.end(), ent.begin(), normalize_function);
|
||||||
|
if(file == ent)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string BsaArchive::getDescription() const
|
||||||
|
{
|
||||||
|
return std::string{"BSA: "} + mFile->getFilename();
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
|
|
||||||
BsaArchiveFile::BsaArchiveFile(const Bsa::BSAFile::FileStruct *info, Bsa::BSAFile* bsa)
|
BsaArchiveFile::BsaArchiveFile(const Bsa::BSAFile::FileStruct *info, Bsa::BSAFile* bsa)
|
||||||
|
|
|
@ -24,6 +24,8 @@ namespace VFS
|
||||||
BsaArchive(const std::string& filename);
|
BsaArchive(const std::string& filename);
|
||||||
virtual ~BsaArchive();
|
virtual ~BsaArchive();
|
||||||
void listResources(std::map<std::string, File*>& out, char (*normalize_function) (char)) override;
|
void listResources(std::map<std::string, File*>& out, char (*normalize_function) (char)) override;
|
||||||
|
bool contains(const std::string& file, char (*normalize_function) (char)) const override;
|
||||||
|
std::string getDescription() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<Bsa::BSAFile> mFile;
|
std::unique_ptr<Bsa::BSAFile> mFile;
|
||||||
|
|
|
@ -53,6 +53,21 @@ namespace VFS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FileSystemArchive::contains(const std::string& file, char (*normalize_function)(char)) const
|
||||||
|
{
|
||||||
|
for (const auto& it : mIndex)
|
||||||
|
{
|
||||||
|
if(it.first == file)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string FileSystemArchive::getDescription() const
|
||||||
|
{
|
||||||
|
return std::string{"DIR: "} + mPath;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
|
|
||||||
FileSystemArchiveFile::FileSystemArchiveFile(const std::string &path)
|
FileSystemArchiveFile::FileSystemArchiveFile(const std::string &path)
|
||||||
|
|
|
@ -25,6 +25,9 @@ namespace VFS
|
||||||
|
|
||||||
void listResources(std::map<std::string, File*>& out, char (*normalize_function) (char)) override;
|
void listResources(std::map<std::string, File*>& out, char (*normalize_function) (char)) override;
|
||||||
|
|
||||||
|
bool contains(const std::string& file, char (*normalize_function) (char)) const override;
|
||||||
|
|
||||||
|
std::string getDescription() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef std::map <std::string, FileSystemArchiveFile> index;
|
typedef std::map <std::string, FileSystemArchiveFile> index;
|
||||||
|
|
|
@ -96,4 +96,15 @@ namespace VFS
|
||||||
normalize_path(name, mStrict);
|
normalize_path(name, mStrict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string Manager::getArchive(const std::string& name) const
|
||||||
|
{
|
||||||
|
std::string normalized = name;
|
||||||
|
normalize_path(normalized, mStrict);
|
||||||
|
for(const auto archive : mArchives)
|
||||||
|
{
|
||||||
|
if(archive->contains(normalized, mStrict ? &strict_normalize_char : &nonstrict_normalize_char))
|
||||||
|
return archive->getDescription();
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,7 @@ namespace VFS
|
||||||
/// @note May be called from any thread once the index has been built.
|
/// @note May be called from any thread once the index has been built.
|
||||||
Files::IStreamPtr getNormalized(const std::string& normalizedName) const;
|
Files::IStreamPtr getNormalized(const std::string& normalizedName) const;
|
||||||
|
|
||||||
|
std::string getArchive(const std::string& name) const;
|
||||||
private:
|
private:
|
||||||
bool mStrict;
|
bool mStrict;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue