mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-03 21:09:41 +00:00
added getPtr function that works via Ogre handle
This commit is contained in:
parent
69cc88bcaf
commit
d1c000313f
2 changed files with 223 additions and 131 deletions
|
@ -37,6 +37,14 @@ namespace
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
ESMS::LiveCellRef<T, MWWorld::RefData> *searchViaHandle (const std::string& handle,
|
||||||
|
ESMS::CellRefList<T, MWWorld::RefData>& refList)
|
||||||
|
{
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace MWWorld
|
namespace MWWorld
|
||||||
|
@ -127,6 +135,69 @@ namespace MWWorld
|
||||||
return Ptr();
|
return Ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ptr World::getPtrViaHandle (const std::string& handle, Ptr::CellStore& cell)
|
||||||
|
{
|
||||||
|
if (ESMS::LiveCellRef<ESM::Activator, RefData> *ref =
|
||||||
|
searchViaHandle (handle, cell.activators))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Potion, RefData> *ref = searchViaHandle (handle, cell.potions))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Apparatus, RefData> *ref = searchViaHandle (handle, cell.appas))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Armor, RefData> *ref = searchViaHandle (handle, cell.armors))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Book, RefData> *ref = searchViaHandle (handle, cell.books))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Clothing, RefData> *ref = searchViaHandle (handle, cell.clothes))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Container, RefData> *ref =
|
||||||
|
searchViaHandle (handle, cell.containers))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Creature, RefData> *ref =
|
||||||
|
searchViaHandle (handle, cell.creatures))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Door, RefData> *ref = searchViaHandle (handle, cell.doors))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Ingredient, RefData> *ref =
|
||||||
|
searchViaHandle (handle, cell.ingreds))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Light, RefData> *ref = searchViaHandle (handle, cell.lights))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Tool, RefData> *ref = searchViaHandle (handle, cell.lockpicks))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Misc, RefData> *ref = searchViaHandle (handle, cell.miscItems))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::NPC, RefData> *ref = searchViaHandle (handle, cell.npcs))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Tool, RefData> *ref = searchViaHandle (handle, cell.probes))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Tool, RefData> *ref = searchViaHandle (handle, cell.repairs))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Static, RefData> *ref = searchViaHandle (handle, cell.statics))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
if (ESMS::LiveCellRef<ESM::Weapon, RefData> *ref = searchViaHandle (handle, cell.weapons))
|
||||||
|
return Ptr (ref, &cell);
|
||||||
|
|
||||||
|
return Ptr();
|
||||||
|
}
|
||||||
|
|
||||||
MWRender::CellRender *World::searchRender (Ptr::CellStore *store)
|
MWRender::CellRender *World::searchRender (Ptr::CellStore *store)
|
||||||
{
|
{
|
||||||
CellRenderCollection::iterator iter = mActiveCells.find (store);
|
CellRenderCollection::iterator iter = mActiveCells.find (store);
|
||||||
|
@ -266,6 +337,22 @@ namespace MWWorld
|
||||||
throw std::runtime_error ("unknown ID: " + name);
|
throw std::runtime_error ("unknown ID: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ptr World::getPtrViaHandle (const std::string& handle)
|
||||||
|
{
|
||||||
|
// TODO player
|
||||||
|
|
||||||
|
for (CellRenderCollection::iterator iter (mActiveCells.begin());
|
||||||
|
iter!=mActiveCells.end(); ++iter)
|
||||||
|
{
|
||||||
|
Ptr ptr = getPtrViaHandle (handle, *iter->first);
|
||||||
|
|
||||||
|
if (!ptr.isEmpty())
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw std::runtime_error ("unknown Ogre handle: " + handle);
|
||||||
|
}
|
||||||
|
|
||||||
void World::enable (Ptr reference)
|
void World::enable (Ptr reference)
|
||||||
{
|
{
|
||||||
if (!reference.getRefData().isEnabled())
|
if (!reference.getRefData().isEnabled())
|
||||||
|
|
|
@ -70,6 +70,8 @@ namespace MWWorld
|
||||||
|
|
||||||
Ptr getPtr (const std::string& name, Ptr::CellStore& cellStore);
|
Ptr getPtr (const std::string& name, Ptr::CellStore& cellStore);
|
||||||
|
|
||||||
|
Ptr getPtrViaHandle (const std::string& handle, Ptr::CellStore& cellStore);
|
||||||
|
|
||||||
MWRender::CellRender *searchRender (Ptr::CellStore *store);
|
MWRender::CellRender *searchRender (Ptr::CellStore *store);
|
||||||
|
|
||||||
int getDaysPerMonth (int month) const;
|
int getDaysPerMonth (int month) const;
|
||||||
|
@ -100,6 +102,9 @@ namespace MWWorld
|
||||||
///< Return a pointer to a liveCellRef with the given name.
|
///< Return a pointer to a liveCellRef with the given name.
|
||||||
/// \param activeOnly do non search inactive cells.
|
/// \param activeOnly do non search inactive cells.
|
||||||
|
|
||||||
|
Ptr getPtrViaHandle (const std::string& handle);
|
||||||
|
///< Return a pointer to a liveCellRef with the given Ogre handle.
|
||||||
|
|
||||||
void enable (Ptr reference);
|
void enable (Ptr reference);
|
||||||
|
|
||||||
void disable (Ptr reference);
|
void disable (Ptr reference);
|
||||||
|
|
Loading…
Reference in a new issue