1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-10 06:39:49 +00:00
OpenMW/apps/openmw/mwworld/scene.hpp

105 lines
2.3 KiB
C++
Raw Normal View History

#ifndef GAME_MWWORLD_SCENE_H
#define GAME_MWWORLD_SCENE_H
2011-08-01 01:33:02 +00:00
#include <vector>
#include <map>
#include <boost/filesystem.hpp>
#include <components/esm_store/cell_store.hpp>
2011-08-01 01:33:02 +00:00
#include "../mwrender/mwscene.hpp"
2011-08-01 13:55:36 +00:00
#include "physicssystem.hpp"
2011-08-01 01:33:02 +00:00
#include "refdata.hpp"
#include "ptr.hpp"
#include "globals.hpp"
#include <openengine/bullet/physic.hpp>
namespace Ogre
{
class Vector3;
}
namespace ESM
{
struct Position;
}
namespace Files
{
class Collections;
}
namespace Render
{
class OgreRenderer;
}
namespace MWRender
{
class SkyManager;
class CellRender;
}
namespace MWWorld
{
2011-08-01 01:33:02 +00:00
class Environment;
class Player;
class Scene
{
2011-08-01 01:33:02 +00:00
public:
2011-08-01 01:33:02 +00:00
private:
2011-08-01 01:33:02 +00:00
typedef std::map<Ptr::CellStore *, MWRender::CellRender *> CellRenderCollection;
2011-08-01 01:33:02 +00:00
MWRender::MWScene mScene;
Ptr::CellStore *mCurrentCell; // the cell, the player is in
2011-08-01 01:33:02 +00:00
CellRenderCollection mActiveCells;
bool mCellChanged;
Environment& mEnvironment;
World *mWorld;
2011-08-01 13:55:36 +00:00
PhysicsSystem *mPhysics;
2011-08-01 01:33:02 +00:00
void playerCellChange (Ptr::CellStore *cell, const ESM::Position& position,
bool adjustPlayerPos = true);
public:
2011-08-01 13:55:36 +00:00
Scene (Environment& environment, World *world, MWRender::MWScene& scene, PhysicsSystem *physics);
2011-08-01 01:33:02 +00:00
~Scene();
void unloadCell (CellRenderCollection::iterator iter);
void loadCell (Ptr::CellStore *cell, MWRender::CellRender *render);
void changeCell (int X, int Y, const ESM::Position& position, bool adjustPlayerPos);
///< Move from exterior to interior or from interior cell to a different
/// interior cell.
Ptr::CellStore* getCurrentCell ();
CellRenderCollection getActiveCells ();
2011-08-01 01:33:02 +00:00
bool hasCellChanged() const;
///< Has the player moved to a different cell, since the last frame?
2011-08-01 02:30:21 +00:00
void changeToInteriorCell (const std::string& cellName, const ESM::Position& position);
2011-08-01 01:33:02 +00:00
///< Move to interior cell.
2011-08-01 02:30:21 +00:00
void changeToExteriorCell (const ESM::Position& position);
2011-08-01 01:33:02 +00:00
///< Move to exterior cell.
2011-08-01 02:30:21 +00:00
void markCellAsUnchanged();
2011-08-01 01:33:02 +00:00
std::string getFacedHandle();
};
}
#endif