mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-30 15:15:31 +00:00
reimplemented class-dependend rendering code in MWClass
This commit is contained in:
parent
4649d7fa41
commit
967f85875d
37 changed files with 426 additions and 57 deletions
|
@ -7,8 +7,26 @@
|
|||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Activator::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Activator, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Activator>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Activator::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Activator, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Apparatus::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Apparatus, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Apparatus>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Apparatus::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Apparatus, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Armor::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Armor, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Armor>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Armor::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Armor, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Book::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Book, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Book>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Book::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Book, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Clothing::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Clothing, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Clothing>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Clothing::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Clothing, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -7,8 +7,26 @@
|
|||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Container::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Container, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Container>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Container::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Container, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,8 +8,26 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontalk.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Creature::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Creature, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Creature>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Creature::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Creature, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -13,8 +13,26 @@
|
|||
#include "../mwworld/environment.hpp"
|
||||
#include "../mwworld/world.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Door::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Door, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Door>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Door::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Door, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Ingredient::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Ingredient, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Ingredient>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Ingredient::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Ingredient, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -9,10 +9,38 @@
|
|||
#include "../mwworld/actiontake.hpp"
|
||||
#include "../mwworld/nullaction.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Light::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Light, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Light>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
|
||||
// Extract the color and convert to floating point
|
||||
const int color = ref->base->data.color;
|
||||
const float r = ((color >> 0) & 0xFF) / 255.0f;
|
||||
const float g = ((color >> 8) & 0xFF) / 255.0f;
|
||||
const float b = ((color >> 16) & 0xFF) / 255.0f;
|
||||
const float radius = float (ref->base->data.radius);
|
||||
cellRender.insertLight (r, g, b, radius);
|
||||
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Light::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Light, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Lockpick::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Tool, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Tool>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Lockpick::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Tool, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Misc::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Misc, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Misc>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Misc::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Misc, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -7,9 +7,42 @@
|
|||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontalk.hpp"
|
||||
#include "../mwworld/environment.hpp"
|
||||
#include "../mwworld/world.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Npc::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::NPC>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
|
||||
std::string headID = ref->base->head;
|
||||
|
||||
//get the part of the bodypart id which describes the race and the gender
|
||||
std::string bodyRaceID = headID.substr(0, headID.find_last_of("head_") - 4);
|
||||
std::string headModel = "meshes\\" +
|
||||
environment.mWorld->getStore().bodyParts.find(headID)->model;
|
||||
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh (headModel);
|
||||
|
||||
//TODO: define consts for each bodypart e.g. chest, foot, wrist... and put the parts in the
|
||||
// right place
|
||||
const ESM::BodyPart *bodyPart =
|
||||
environment.mWorld->getStore().bodyParts.search (bodyRaceID + "chest");
|
||||
|
||||
if (bodyPart)
|
||||
cellRender.insertMesh("meshes\\" + bodyPart->model);
|
||||
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
|
||||
std::string Npc::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> *ref =
|
||||
|
@ -49,7 +82,7 @@ namespace MWClass
|
|||
const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const
|
||||
{
|
||||
return boost::shared_ptr<MWWorld::Action> (new MWWorld::ActionTalk (ptr));
|
||||
}
|
||||
}
|
||||
|
||||
MWWorld::ContainerStore<MWWorld::RefData>& Npc::getContainerStore (const MWWorld::Ptr& ptr)
|
||||
const
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Potion::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Potion, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Potion>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Potion::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Potion, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Probe::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Probe, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Probe>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Probe::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Probe, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Repair::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Repair, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Repair>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Repair::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Repair, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -3,8 +3,28 @@
|
|||
|
||||
#include <components/esm/loadstat.hpp>
|
||||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Static::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Static, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Static>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Static::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
return "";
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -8,10 +8,28 @@
|
|||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/actiontake.hpp"
|
||||
|
||||
#include "../mwrender/cellimp.hpp"
|
||||
|
||||
#include "containerutil.hpp"
|
||||
|
||||
namespace MWClass
|
||||
{
|
||||
void Weapon::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Weapon, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Weapon>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
if (!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (ref->ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
ref->mData.setHandle (cellRender.insertEnd (ref->mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string Weapon::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Weapon, MWWorld::RefData> *ref =
|
||||
|
|
|
@ -9,6 +9,10 @@ namespace MWClass
|
|||
{
|
||||
public:
|
||||
|
||||
virtual void insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const;
|
||||
///< Add reference into a cell for rendering
|
||||
|
||||
virtual std::string getName (const MWWorld::Ptr& ptr) const;
|
||||
///< \return name (the one that is to be presented to the user; not the internal one);
|
||||
/// can return an empty string.
|
||||
|
|
|
@ -7,60 +7,6 @@
|
|||
|
||||
using namespace MWRender;
|
||||
|
||||
template<typename T>
|
||||
void insertObj(CellRenderImp& cellRender, T& liveRef, const ESMS::ESMStore& store)
|
||||
{
|
||||
assert (liveRef.base != NULL);
|
||||
const std::string &model = liveRef.base->model;
|
||||
if(!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (liveRef.ref);
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
liveRef.mData.setHandle (cellRender.insertEnd (liveRef.mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
template<>
|
||||
void insertObj(CellRenderImp& cellRender, ESMS::LiveCellRef<ESM::Light, MWWorld::RefData>& liveRef, const ESMS::ESMStore& store)
|
||||
{
|
||||
assert (liveRef.base != NULL);
|
||||
const std::string &model = liveRef.base->model;
|
||||
if(!model.empty())
|
||||
{
|
||||
cellRender.insertBegin (liveRef.ref);
|
||||
|
||||
cellRender.insertMesh ("meshes\\" + model);
|
||||
|
||||
// Extract the color and convert to floating point
|
||||
const int color = liveRef.base->data.color;
|
||||
const float r = ((color >> 0) & 0xFF) / 255.0f;
|
||||
const float g = ((color >> 8) & 0xFF) / 255.0f;
|
||||
const float b = ((color >> 16) & 0xFF) / 255.0f;
|
||||
const float radius = float(liveRef.base->data.radius);
|
||||
cellRender.insertLight(r, g, b, radius);
|
||||
|
||||
liveRef.mData.setHandle (cellRender.insertEnd (liveRef.mData.isEnabled()));
|
||||
}
|
||||
}
|
||||
|
||||
template<>
|
||||
void insertObj(CellRenderImp& cellRender, ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData>& liveRef, const ESMS::ESMStore& store)
|
||||
{
|
||||
std::string headID = liveRef.base->head;
|
||||
|
||||
//get the part of the bodypart id which describes the race and the gender
|
||||
std::string bodyRaceID = headID.substr(0, headID.find_last_of("head_") - 4);
|
||||
std::string headModel = "meshes\\" + store.bodyParts.find(headID)->model;
|
||||
|
||||
cellRender.insertBegin(liveRef.ref);
|
||||
cellRender.insertMesh(headModel);
|
||||
|
||||
//TODO: define consts for each bodypart e.g. chest, foot, wrist... and put the parts in the right place
|
||||
cellRender.insertMesh("meshes\\" + store.bodyParts.find(bodyRaceID + "chest")->model);
|
||||
|
||||
liveRef.mData.setHandle (cellRender.insertEnd (liveRef.mData.isEnabled()));
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void insertCellRefList (CellRenderImp& cellRender, MWWorld::Environment& environment,
|
||||
T& cellRefList, ESMS::CellStore<MWWorld::RefData> &cell)
|
||||
|
@ -93,8 +39,8 @@ void CellRenderImp::insertCell(ESMS::CellStore<MWWorld::RefData> &cell,
|
|||
insertCellRefList (*this, environment, cell.creatures, cell);
|
||||
insertCellRefList (*this, environment, cell.doors, cell);
|
||||
insertCellRefList (*this, environment, cell.ingreds, cell);
|
||||
// insertCellRefList (*this, environment, cell.creatureLists, cell);
|
||||
// insertCellRefList (*this, environment, cell.itemLists, cell);
|
||||
insertCellRefList (*this, environment, cell.creatureLists, cell);
|
||||
insertCellRefList (*this, environment, cell.itemLists, cell);
|
||||
insertCellRefList (*this, environment, cell.lights, cell);
|
||||
insertCellRefList (*this, environment, cell.lockpicks, cell);
|
||||
insertCellRefList (*this, environment, cell.miscItems, cell);
|
||||
|
|
Loading…
Reference in a new issue