mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-25 06:35:30 +00:00
Update scene assets
This commit is contained in:
parent
742bd00ec6
commit
5950b26912
@ -1247,6 +1247,8 @@ void CSMWorld::Data::assetsChanged()
|
||||
|
||||
// Get rid of potentially old cached assets
|
||||
mResourceSystem->clearCache();
|
||||
|
||||
emit assetTablesChanged();
|
||||
}
|
||||
|
||||
void CSMWorld::Data::dataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
||||
|
@ -304,6 +304,8 @@ namespace CSMWorld
|
||||
|
||||
void idListChanged();
|
||||
|
||||
void assetTablesChanged();
|
||||
|
||||
private slots:
|
||||
|
||||
void assetsChanged();
|
||||
|
@ -283,6 +283,15 @@ void CSVRender::Cell::pathgridRemoved()
|
||||
mPathgrid->removeGeometry();
|
||||
}
|
||||
|
||||
void CSVRender::Cell::reloadAssets()
|
||||
{
|
||||
for (std::map<std::string, Object *>::const_iterator iter (mObjects.begin());
|
||||
iter != mObjects.end(); ++iter)
|
||||
{
|
||||
iter->second->reloadAssets();
|
||||
}
|
||||
}
|
||||
|
||||
void CSVRender::Cell::setSelection (int elementMask, Selection mode)
|
||||
{
|
||||
if (elementMask & Mask_Reference)
|
||||
|
@ -118,6 +118,8 @@ namespace CSVRender
|
||||
|
||||
void pathgridRemoved();
|
||||
|
||||
void reloadAssets();
|
||||
|
||||
void setSelection (int elementMask, Selection mode);
|
||||
|
||||
// Select everything that references the same ID as at least one of the elements
|
||||
|
@ -532,6 +532,12 @@ bool CSVRender::Object::referenceDataChanged (const QModelIndex& topLeft,
|
||||
return false;
|
||||
}
|
||||
|
||||
void CSVRender::Object::reloadAssets()
|
||||
{
|
||||
update();
|
||||
updateMarker();
|
||||
}
|
||||
|
||||
std::string CSVRender::Object::getReferenceId() const
|
||||
{
|
||||
return mReferenceId;
|
||||
|
@ -151,6 +151,9 @@ namespace CSVRender
|
||||
/// this object?
|
||||
bool referenceDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight);
|
||||
|
||||
/// Reloads the underlying asset
|
||||
void reloadAssets();
|
||||
|
||||
/// Returns an empty string if this is a refereceable-type object.
|
||||
std::string getReferenceId() const;
|
||||
|
||||
|
@ -472,6 +472,9 @@ CSVRender::PagedWorldspaceWidget::PagedWorldspaceWidget (QWidget* parent, CSMDoc
|
||||
connect (cells, SIGNAL (rowsInserted (const QModelIndex&, int, int)),
|
||||
this, SLOT (cellAdded (const QModelIndex&, int, int)));
|
||||
|
||||
connect (&document.getData(), SIGNAL (assetTablesChanged ()),
|
||||
this, SLOT (assetTablesChanged ()));
|
||||
|
||||
// Shortcuts
|
||||
CSMPrefs::Shortcut* loadCameraCellShortcut = new CSMPrefs::Shortcut("scene-load-cam-cell", this);
|
||||
connect(loadCameraCellShortcut, SIGNAL(activated()), this, SLOT(loadCameraCell()));
|
||||
@ -520,7 +523,7 @@ void CSVRender::PagedWorldspaceWidget::useViewHint (const std::string& hint)
|
||||
// Loop through all the coordinates to add them to selection
|
||||
while (stream >> ignore1 >> ignore2 >> x >> y)
|
||||
selection.add (CSMWorld::CellCoordinates (x, y));
|
||||
|
||||
|
||||
// Mark that camera needs setup
|
||||
mCamPositionSet=false;
|
||||
}
|
||||
@ -763,6 +766,15 @@ void CSVRender::PagedWorldspaceWidget::cellAdded (const QModelIndex& index, int
|
||||
flagAsModified();
|
||||
}
|
||||
|
||||
void CSVRender::PagedWorldspaceWidget::assetTablesChanged()
|
||||
{
|
||||
std::map<CSMWorld::CellCoordinates, Cell *>::iterator iter = mCells.begin();
|
||||
for ( ; iter != mCells.end(); ++iter)
|
||||
{
|
||||
iter->second->reloadAssets();
|
||||
}
|
||||
}
|
||||
|
||||
void CSVRender::PagedWorldspaceWidget::loadCameraCell()
|
||||
{
|
||||
addCellToSceneFromCamera(0, 0);
|
||||
|
@ -84,7 +84,7 @@ namespace CSVRender
|
||||
/// hint system.
|
||||
|
||||
virtual ~PagedWorldspaceWidget();
|
||||
|
||||
|
||||
/// Decodes the the hint string to set of cell that are rendered.
|
||||
void useViewHint (const std::string& hint);
|
||||
|
||||
@ -155,6 +155,8 @@ namespace CSVRender
|
||||
|
||||
virtual void cellAdded (const QModelIndex& index, int start, int end);
|
||||
|
||||
void assetTablesChanged ();
|
||||
|
||||
void loadCameraCell();
|
||||
|
||||
void loadEastCell();
|
||||
|
@ -17,6 +17,9 @@ CSVRender::PreviewWidget::PreviewWidget (CSMWorld::Data& data,
|
||||
connect (referenceables, SIGNAL (rowsAboutToBeRemoved (const QModelIndex&, int, int)),
|
||||
this, SLOT (referenceableAboutToBeRemoved (const QModelIndex&, int, int)));
|
||||
|
||||
connect (&mData, SIGNAL (assetTablesChanged ()),
|
||||
this, SLOT (assetTablesChanged ()));
|
||||
|
||||
if (!referenceable)
|
||||
{
|
||||
QAbstractItemModel *references =
|
||||
@ -119,3 +122,8 @@ void CSVRender::PreviewWidget::referenceAboutToBeRemoved (const QModelIndex& par
|
||||
if (index.row()>=start && index.row()<=end)
|
||||
emit closeRequest();
|
||||
}
|
||||
|
||||
void CSVRender::PreviewWidget::assetTablesChanged ()
|
||||
{
|
||||
mObject.reloadAssets();
|
||||
}
|
||||
|
@ -47,6 +47,8 @@ namespace CSVRender
|
||||
void referenceDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight);
|
||||
|
||||
void referenceAboutToBeRemoved (const QModelIndex& parent, int start, int end);
|
||||
|
||||
void assetTablesChanged ();
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -47,6 +47,9 @@ CSVRender::UnpagedWorldspaceWidget::UnpagedWorldspaceWidget (const std::string&
|
||||
connect (mCellsModel, SIGNAL (rowsAboutToBeRemoved (const QModelIndex&, int, int)),
|
||||
this, SLOT (cellRowsAboutToBeRemoved (const QModelIndex&, int, int)));
|
||||
|
||||
connect (&document.getData(), SIGNAL (assetTablesChanged ()),
|
||||
this, SLOT (assetTablesChanged ()));
|
||||
|
||||
update();
|
||||
|
||||
mCell.reset (new Cell (document.getData(), mRootNode, mCellId));
|
||||
@ -82,6 +85,12 @@ void CSVRender::UnpagedWorldspaceWidget::cellRowsAboutToBeRemoved (const QModelI
|
||||
emit closeRequest();
|
||||
}
|
||||
|
||||
void CSVRender::UnpagedWorldspaceWidget::assetTablesChanged()
|
||||
{
|
||||
if (mCell)
|
||||
mCell->reloadAssets();
|
||||
}
|
||||
|
||||
bool CSVRender::UnpagedWorldspaceWidget::handleDrop (const std::vector<CSMWorld::UniversalId>& universalIdData, DropType type)
|
||||
{
|
||||
if (WorldspaceWidget::handleDrop (universalIdData, type))
|
||||
|
@ -108,6 +108,8 @@ namespace CSVRender
|
||||
|
||||
void cellRowsAboutToBeRemoved (const QModelIndex& parent, int start, int end);
|
||||
|
||||
void assetTablesChanged ();
|
||||
|
||||
signals:
|
||||
|
||||
void cellChanged(const CSMWorld::UniversalId& id);
|
||||
|
@ -74,8 +74,6 @@ namespace Resource
|
||||
{
|
||||
for (std::vector<ResourceManager*>::iterator it = mResourceManagers.begin(); it != mResourceManagers.end(); ++it)
|
||||
(*it)->clearCache();
|
||||
|
||||
osgDB::Registry::instance()->clearObjectCache();
|
||||
}
|
||||
|
||||
void ResourceSystem::addResourceManager(ResourceManager *resourceMgr)
|
||||
|
Loading…
x
Reference in New Issue
Block a user