forked from teamnwah/openmw-tes3coop
Merge branch 'playerpos' into script
This commit is contained in:
commit
0a832f2d23
23 changed files with 325 additions and 516 deletions
|
@ -14,16 +14,18 @@ set(GAMEREND
|
||||||
mwrender/cellimp.cpp
|
mwrender/cellimp.cpp
|
||||||
mwrender/interior.cpp
|
mwrender/interior.cpp
|
||||||
mwrender/exterior.cpp
|
mwrender/exterior.cpp
|
||||||
mwrender/playerpos.cpp
|
mwrender/sky.cpp
|
||||||
mwrender/sky.cpp)
|
mwrender/player.cpp
|
||||||
|
)
|
||||||
set(GAMEREND_HEADER
|
set(GAMEREND_HEADER
|
||||||
mwrender/cell.hpp
|
mwrender/cell.hpp
|
||||||
mwrender/cellimp.hpp
|
mwrender/cellimp.hpp
|
||||||
mwrender/mwscene.hpp
|
mwrender/mwscene.hpp
|
||||||
mwrender/interior.hpp
|
mwrender/interior.hpp
|
||||||
mwrender/exterior.hpp
|
mwrender/exterior.hpp
|
||||||
mwrender/playerpos.hpp
|
mwrender/sky.hpp
|
||||||
mwrender/sky.hpp)
|
mwrender/player.hpp
|
||||||
|
)
|
||||||
source_group(apps\\openmw\\mwrender FILES ${GAMEREND} ${GAMEREND_HEADER})
|
source_group(apps\\openmw\\mwrender FILES ${GAMEREND} ${GAMEREND_HEADER})
|
||||||
|
|
||||||
set(GAMEINPUT
|
set(GAMEINPUT
|
||||||
|
@ -121,6 +123,7 @@ set(GAMEWORLD
|
||||||
mwworld/actiontalk.cpp
|
mwworld/actiontalk.cpp
|
||||||
mwworld/actiontake.cpp
|
mwworld/actiontake.cpp
|
||||||
mwworld/containerutil.cpp
|
mwworld/containerutil.cpp
|
||||||
|
mwworld/player.cpp
|
||||||
)
|
)
|
||||||
set(GAMEWORLD_HEADER
|
set(GAMEWORLD_HEADER
|
||||||
mwworld/refdata.hpp
|
mwworld/refdata.hpp
|
||||||
|
@ -138,6 +141,7 @@ set(GAMEWORLD_HEADER
|
||||||
mwworld/containerstore.hpp
|
mwworld/containerstore.hpp
|
||||||
mwworld/manualref.hpp
|
mwworld/manualref.hpp
|
||||||
mwworld/containerutil.hpp
|
mwworld/containerutil.hpp
|
||||||
|
mwworld/player.hpp
|
||||||
)
|
)
|
||||||
source_group(apps\\openmw\\mwworld FILES ${GAMEWORLD} ${GAMEWORLD_HEADER})
|
source_group(apps\\openmw\\mwworld FILES ${GAMEWORLD} ${GAMEWORLD_HEADER})
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "mwworld/ptr.hpp"
|
#include "mwworld/ptr.hpp"
|
||||||
#include "mwworld/environment.hpp"
|
#include "mwworld/environment.hpp"
|
||||||
#include "mwworld/class.hpp"
|
#include "mwworld/class.hpp"
|
||||||
|
#include "mwworld/player.hpp"
|
||||||
|
|
||||||
#include "mwclass/classes.hpp"
|
#include "mwclass/classes.hpp"
|
||||||
|
|
||||||
|
@ -77,7 +78,7 @@ bool OMW::Engine::frameStarted(const Ogre::FrameEvent& evt)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MWWorld::Ptr::CellStore *current = mEnvironment.mWorld->getPlayerPos().getPlayer().getCell();
|
MWWorld::Ptr::CellStore *current = mEnvironment.mWorld->getPlayer().getPlayer().getCell();
|
||||||
//If the region has changed
|
//If the region has changed
|
||||||
if(!(current->cell->data.flags & current->cell->Interior) && timer.elapsed() >= 10){
|
if(!(current->cell->data.flags & current->cell->Interior) && timer.elapsed() >= 10){
|
||||||
timer.restart();
|
timer.restart();
|
||||||
|
@ -377,7 +378,7 @@ void OMW::Engine::go()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets up the input system
|
// Sets up the input system
|
||||||
MWInput::MWInputManager input(mOgre, mEnvironment.mWorld->getPlayerPos(),
|
MWInput::MWInputManager input(mOgre, mEnvironment.mWorld->getPlayer(),
|
||||||
*mEnvironment.mWindowManager, mDebug, *this);
|
*mEnvironment.mWindowManager, mDebug, *this);
|
||||||
mEnvironment.mInputManager = &input;
|
mEnvironment.mInputManager = &input;
|
||||||
|
|
||||||
|
@ -439,7 +440,7 @@ void OMW::Engine::activate()
|
||||||
&ptr.getRefData().getLocals(), ptr);
|
&ptr.getRefData().getLocals(), ptr);
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> action =
|
boost::shared_ptr<MWWorld::Action> action =
|
||||||
MWWorld::Class::get (ptr).activate (ptr, mEnvironment.mWorld->getPlayerPos().getPlayer(),
|
MWWorld::Class::get (ptr).activate (ptr, mEnvironment.mWorld->getPlayer().getPlayer(),
|
||||||
mEnvironment);
|
mEnvironment);
|
||||||
|
|
||||||
interpreterContext.activate (ptr, action);
|
interpreterContext.activate (ptr, action);
|
||||||
|
|
|
@ -5,8 +5,7 @@
|
||||||
|
|
||||||
#include <components/esm_store/cell_store.hpp>
|
#include <components/esm_store/cell_store.hpp>
|
||||||
|
|
||||||
#include "../mwrender/playerpos.hpp"
|
#include "../mwworld/player.hpp"
|
||||||
|
|
||||||
#include "../mwworld/ptr.hpp"
|
#include "../mwworld/ptr.hpp"
|
||||||
#include "../mwworld/nullaction.hpp"
|
#include "../mwworld/nullaction.hpp"
|
||||||
#include "../mwworld/actionteleport.hpp"
|
#include "../mwworld/actionteleport.hpp"
|
||||||
|
@ -65,7 +64,7 @@ namespace MWClass
|
||||||
if (ref->ref.teleport)
|
if (ref->ref.teleport)
|
||||||
{
|
{
|
||||||
// teleport door
|
// teleport door
|
||||||
if (environment.mWorld->getPlayerPos().getPlayer()==actor)
|
if (environment.mWorld->getPlayer().getPlayer()==actor)
|
||||||
{
|
{
|
||||||
// the player is using the door
|
// the player is using the door
|
||||||
return boost::shared_ptr<MWWorld::Action> (
|
return boost::shared_ptr<MWWorld::Action> (
|
||||||
|
|
|
@ -41,7 +41,7 @@ namespace MWClass
|
||||||
std::string hairID = ref->base->hair;
|
std::string hairID = ref->base->hair;
|
||||||
std::string headID = ref->base->head;
|
std::string headID = ref->base->head;
|
||||||
std::string npcName = ref->base->name;
|
std::string npcName = ref->base->name;
|
||||||
std::cout << "NPC: " << npcName << "\n";
|
//std::cout << "NPC: " << npcName << "\n";
|
||||||
|
|
||||||
//get the part of the bodypart id which describes the race and the gender
|
//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 bodyRaceID = headID.substr(0, headID.find_last_of("head_") - 4);
|
||||||
|
@ -101,7 +101,7 @@ namespace MWClass
|
||||||
const ESM::BodyPart *hands = environment.mWorld->getStore().bodyParts.search (bodyRaceID + "hands.1st");
|
const ESM::BodyPart *hands = environment.mWorld->getStore().bodyParts.search (bodyRaceID + "hands.1st");
|
||||||
|
|
||||||
|
|
||||||
std::cout << "RACE" << bodyRaceID << "\n";
|
//std::cout << "RACE" << bodyRaceID << "\n";
|
||||||
|
|
||||||
Ogre::Vector3 pos2 = Ogre::Vector3( 0, .5, 75);
|
Ogre::Vector3 pos2 = Ogre::Vector3( 0, .5, 75);
|
||||||
std::string upperarmpath[2] = {npcName + "chest", npcName + "upper arm"};
|
std::string upperarmpath[2] = {npcName + "chest", npcName + "upper arm"};
|
||||||
|
@ -118,25 +118,25 @@ namespace MWClass
|
||||||
|
|
||||||
//addresses[1] = npcName + "groin";
|
//addresses[1] = npcName + "groin";
|
||||||
if(upperleg){
|
if(upperleg){
|
||||||
cellRender.insertMesh ("meshes\\" + upperleg->model, Ogre::Vector3( 6, 0, -14), axis, Ogre::Radian(3.14), npcName + "upper leg", addresses, numbers); //-18
|
cellRender.insertMesh ("meshes\\" + upperleg->model, Ogre::Vector3( 6, 0, -16), axis, Ogre::Radian(3.14), npcName + "upper leg", addresses, numbers); //-18
|
||||||
cellRender.insertMesh ("meshes\\" + upperleg->model, Ogre::Vector3( -6, 0, -14), axis, Ogre::Radian(0), npcName + "upper leg2", addresses2, numbers);
|
cellRender.insertMesh ("meshes\\" + upperleg->model, Ogre::Vector3( -6, 0, -16), axis, Ogre::Radian(0), npcName + "upper leg2", addresses2, numbers);
|
||||||
addresses2[numbers] = npcName + "upper leg2";
|
addresses2[numbers] = npcName + "upper leg2";
|
||||||
addresses[numbers++] = npcName + "upper leg";
|
addresses[numbers++] = npcName + "upper leg";
|
||||||
cellRender.scaleMesh(Ogre::Vector3(1, -1, 1), addresses, numbers);
|
cellRender.scaleMesh(Ogre::Vector3(1, -1, 1), addresses, numbers);
|
||||||
}
|
}
|
||||||
if(knee)
|
if(knee)
|
||||||
{
|
{
|
||||||
cellRender.insertMesh ("meshes\\" + knee->model, Ogre::Vector3( 0, -2, -18), axis, Ogre::Radian(0), npcName + "knee", addresses, numbers);
|
cellRender.insertMesh ("meshes\\" + knee->model, Ogre::Vector3( 0, -1, -23), axis, Ogre::Radian(0), npcName + "knee", addresses, numbers);
|
||||||
//cellRender.rotateMesh(Ogre::Vector3(0, 1, 0), Ogre::Radian (1), npcName + "upper arm");
|
//cellRender.rotateMesh(Ogre::Vector3(0, 1, 0), Ogre::Radian (1), npcName + "upper arm");
|
||||||
cellRender.insertMesh ("meshes\\" + knee->model, Ogre::Vector3( 0, -2, -18), axis, Ogre::Radian(0), npcName + "knee2", addresses2, numbers);
|
cellRender.insertMesh ("meshes\\" + knee->model, Ogre::Vector3( 0, -1, -23), axis, Ogre::Radian(0), npcName + "knee2", addresses2, numbers);
|
||||||
|
|
||||||
addresses2[numbers] = npcName + "knee2";
|
addresses2[numbers] = npcName + "knee2";
|
||||||
addresses[numbers++] = npcName + "knee";
|
addresses[numbers++] = npcName + "knee";
|
||||||
}
|
}
|
||||||
if(ankle){
|
if(ankle){
|
||||||
|
|
||||||
cellRender.insertMesh ("meshes\\" + ankle->model, Ogre::Vector3( 0, -1, -18), axis, Ogre::Radian(0), npcName + "ankle", addresses, numbers); //-1
|
cellRender.insertMesh ("meshes\\" + ankle->model, Ogre::Vector3( 0, 0, -20), axis, Ogre::Radian(0), npcName + "ankle", addresses, numbers); //-1
|
||||||
cellRender.insertMesh ("meshes\\" + ankle->model, Ogre::Vector3( 0, -1, -18), axis, Ogre::Radian(0), npcName + "ankle2", addresses2, numbers); //-1
|
cellRender.insertMesh ("meshes\\" + ankle->model, Ogre::Vector3( 0,0, -20), axis, Ogre::Radian(0), npcName + "ankle2", addresses2, numbers); //-1
|
||||||
|
|
||||||
addresses2[numbers] = npcName + "ankle2";
|
addresses2[numbers] = npcName + "ankle2";
|
||||||
addresses[numbers++] = npcName + "ankle";
|
addresses[numbers++] = npcName + "ankle";
|
||||||
|
|
|
@ -5,8 +5,6 @@
|
||||||
|
|
||||||
namespace MWClass
|
namespace MWClass
|
||||||
{
|
{
|
||||||
static bool isChest;
|
|
||||||
//static ;bool isChest = false;
|
|
||||||
class Npc : public MWWorld::Class
|
class Npc : public MWWorld::Class
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "../mwworld/environment.hpp"
|
#include "../mwworld/environment.hpp"
|
||||||
#include "../mwworld/world.hpp"
|
#include "../mwworld/world.hpp"
|
||||||
#include "../mwworld/refdata.hpp"
|
#include "../mwworld/refdata.hpp"
|
||||||
|
#include "../mwworld/player.hpp"
|
||||||
|
|
||||||
#include "../mwinput/inputmanager.hpp"
|
#include "../mwinput/inputmanager.hpp"
|
||||||
|
|
||||||
|
@ -225,7 +226,7 @@ namespace MWDialogue
|
||||||
|
|
||||||
// check cell
|
// check cell
|
||||||
if (!info.cell.empty())
|
if (!info.cell.empty())
|
||||||
if (mEnvironment.mWorld->getPlayerPos().getPlayer().getCell()->cell->name != info.cell)
|
if (mEnvironment.mWorld->getPlayer().getPlayer().getCell()->cell->name != info.cell)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// TODO check DATAstruct
|
// TODO check DATAstruct
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "../mwmechanics/mechanicsmanager.hpp"
|
#include "../mwmechanics/mechanicsmanager.hpp"
|
||||||
#include "../mwgui/window_manager.hpp"
|
#include "../mwgui/window_manager.hpp"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
#include <boost/algorithm/string.hpp>
|
#include <boost/algorithm/string.hpp>
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
using namespace MWGui;
|
using namespace MWGui;
|
||||||
using namespace Widgets;
|
using namespace Widgets;
|
||||||
|
|
||||||
|
|
|
@ -15,10 +15,13 @@
|
||||||
#include <mangle/input/filters/eventlist.hpp>
|
#include <mangle/input/filters/eventlist.hpp>
|
||||||
|
|
||||||
#include <libs/platform/strings.h>
|
#include <libs/platform/strings.h>
|
||||||
#include "../mwrender/playerpos.hpp"
|
|
||||||
|
|
||||||
#include "../engine.hpp"
|
#include "../engine.hpp"
|
||||||
|
|
||||||
|
#include "../mwworld/player.hpp"
|
||||||
|
|
||||||
|
#include "../mwrender/player.hpp"
|
||||||
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
#include <OgreRoot.h>
|
#include <OgreRoot.h>
|
||||||
|
@ -58,7 +61,7 @@ namespace MWInput
|
||||||
OEngine::Input::Poller poller;
|
OEngine::Input::Poller poller;
|
||||||
OEngine::Render::MouseLookEventPtr mouse;
|
OEngine::Render::MouseLookEventPtr mouse;
|
||||||
OEngine::GUI::EventInjectorPtr guiEvents;
|
OEngine::GUI::EventInjectorPtr guiEvents;
|
||||||
MWRender::PlayerPos &player;
|
MWWorld::Player &player;
|
||||||
MWGui::WindowManager &windows;
|
MWGui::WindowManager &windows;
|
||||||
OMW::Engine& mEngine;
|
OMW::Engine& mEngine;
|
||||||
|
|
||||||
|
@ -124,7 +127,7 @@ namespace MWInput
|
||||||
|
|
||||||
public:
|
public:
|
||||||
InputImpl(OEngine::Render::OgreRenderer &_ogre,
|
InputImpl(OEngine::Render::OgreRenderer &_ogre,
|
||||||
MWRender::PlayerPos &_player,
|
MWWorld::Player &_player,
|
||||||
MWGui::WindowManager &_windows,
|
MWGui::WindowManager &_windows,
|
||||||
bool debug,
|
bool debug,
|
||||||
OMW::Engine& engine)
|
OMW::Engine& engine)
|
||||||
|
@ -164,7 +167,7 @@ namespace MWInput
|
||||||
ogre.getRoot()->addFrameListener(this);
|
ogre.getRoot()->addFrameListener(this);
|
||||||
|
|
||||||
// Set up the mouse handler and tell it about the player camera
|
// Set up the mouse handler and tell it about the player camera
|
||||||
mouse = MouseLookEventPtr(new MouseLookEvent(player.getCamera()));
|
mouse = MouseLookEventPtr(new MouseLookEvent(player.getRenderer()->getCamera()));
|
||||||
|
|
||||||
// This event handler pumps events into MyGUI
|
// This event handler pumps events into MyGUI
|
||||||
guiEvents = EventInjectorPtr(new EventInjector(windows.getGui()));
|
guiEvents = EventInjectorPtr(new EventInjector(windows.getGui()));
|
||||||
|
@ -277,7 +280,7 @@ namespace MWInput
|
||||||
{
|
{
|
||||||
// Start mouse-looking again. TODO: This should also allow
|
// Start mouse-looking again. TODO: This should also allow
|
||||||
// for other ways to disable mouselook, like paralyzation.
|
// for other ways to disable mouselook, like paralyzation.
|
||||||
mouse->setCamera(player.getCamera());
|
mouse->setCamera(player.getRenderer()->getCamera());
|
||||||
|
|
||||||
// Disable GUI events
|
// Disable GUI events
|
||||||
guiEvents->enabled = false;
|
guiEvents->enabled = false;
|
||||||
|
@ -286,7 +289,7 @@ namespace MWInput
|
||||||
};
|
};
|
||||||
|
|
||||||
MWInputManager::MWInputManager(OEngine::Render::OgreRenderer &ogre,
|
MWInputManager::MWInputManager(OEngine::Render::OgreRenderer &ogre,
|
||||||
MWRender::PlayerPos &player,
|
MWWorld::Player &player,
|
||||||
MWGui::WindowManager &windows,
|
MWGui::WindowManager &windows,
|
||||||
bool debug,
|
bool debug,
|
||||||
OMW::Engine& engine)
|
OMW::Engine& engine)
|
||||||
|
|
|
@ -11,9 +11,9 @@ namespace OEngine
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace MWRender
|
namespace MWWorld
|
||||||
{
|
{
|
||||||
class PlayerPos;
|
class Player;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace MWGui
|
namespace MWGui
|
||||||
|
@ -42,7 +42,7 @@ namespace MWInput
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MWInputManager(OEngine::Render::OgreRenderer &_ogre,
|
MWInputManager(OEngine::Render::OgreRenderer &_ogre,
|
||||||
MWRender::PlayerPos &_player,
|
MWWorld::Player&_player,
|
||||||
MWGui::WindowManager &_windows,
|
MWGui::WindowManager &_windows,
|
||||||
bool debug,
|
bool debug,
|
||||||
OMW::Engine& engine);
|
OMW::Engine& engine);
|
||||||
|
|
|
@ -8,12 +8,13 @@
|
||||||
#include "../mwworld/class.hpp"
|
#include "../mwworld/class.hpp"
|
||||||
#include "../mwworld/environment.hpp"
|
#include "../mwworld/environment.hpp"
|
||||||
#include "../mwworld/world.hpp"
|
#include "../mwworld/world.hpp"
|
||||||
|
#include "../mwworld/player.hpp"
|
||||||
|
|
||||||
namespace MWMechanics
|
namespace MWMechanics
|
||||||
{
|
{
|
||||||
void MechanicsManager::buildPlayer()
|
void MechanicsManager::buildPlayer()
|
||||||
{
|
{
|
||||||
MWWorld::Ptr ptr = mEnvironment.mWorld->getPlayerPos().getPlayer();
|
MWWorld::Ptr ptr = mEnvironment.mWorld->getPlayer().getPlayer();
|
||||||
|
|
||||||
MWMechanics::CreatureStats& creatureStats = MWWorld::Class::get (ptr).getCreatureStats (ptr);
|
MWMechanics::CreatureStats& creatureStats = MWWorld::Class::get (ptr).getCreatureStats (ptr);
|
||||||
MWMechanics::NpcStats& npcStats = MWWorld::Class::get (ptr).getNpcStats (ptr);
|
MWMechanics::NpcStats& npcStats = MWWorld::Class::get (ptr).getNpcStats (ptr);
|
||||||
|
@ -33,9 +34,9 @@ namespace MWMechanics
|
||||||
{
|
{
|
||||||
const ESM::Race *race =
|
const ESM::Race *race =
|
||||||
mEnvironment.mWorld->getStore().races.find (
|
mEnvironment.mWorld->getStore().races.find (
|
||||||
mEnvironment.mWorld->getPlayerPos().getRace());
|
mEnvironment.mWorld->getPlayer().getRace());
|
||||||
|
|
||||||
bool male = mEnvironment.mWorld->getPlayerPos().isMale();
|
bool male = mEnvironment.mWorld->getPlayer().isMale();
|
||||||
|
|
||||||
for (int i=0; i<8; ++i)
|
for (int i=0; i<8; ++i)
|
||||||
{
|
{
|
||||||
|
@ -75,11 +76,11 @@ namespace MWMechanics
|
||||||
}
|
}
|
||||||
|
|
||||||
// birthsign
|
// birthsign
|
||||||
if (!mEnvironment.mWorld->getPlayerPos().getBirthsign().empty())
|
if (!mEnvironment.mWorld->getPlayer().getBirthsign().empty())
|
||||||
{
|
{
|
||||||
const ESM::BirthSign *sign =
|
const ESM::BirthSign *sign =
|
||||||
mEnvironment.mWorld->getStore().birthSigns.find (
|
mEnvironment.mWorld->getStore().birthSigns.find (
|
||||||
mEnvironment.mWorld->getPlayerPos().getBirthsign());
|
mEnvironment.mWorld->getPlayer().getBirthsign());
|
||||||
|
|
||||||
for (std::vector<std::string>::const_iterator iter (sign->powers.list.begin());
|
for (std::vector<std::string>::const_iterator iter (sign->powers.list.begin());
|
||||||
iter!=sign->powers.list.end(); ++iter)
|
iter!=sign->powers.list.end(); ++iter)
|
||||||
|
@ -91,7 +92,7 @@ namespace MWMechanics
|
||||||
// class
|
// class
|
||||||
if (mClassSelected)
|
if (mClassSelected)
|
||||||
{
|
{
|
||||||
const ESM::Class& class_ = mEnvironment.mWorld->getPlayerPos().getClass();
|
const ESM::Class& class_ = mEnvironment.mWorld->getPlayer().getClass();
|
||||||
|
|
||||||
for (int i=0; i<2; ++i)
|
for (int i=0; i<2; ++i)
|
||||||
{
|
{
|
||||||
|
@ -330,12 +331,12 @@ namespace MWMechanics
|
||||||
if (mUpdatePlayer)
|
if (mUpdatePlayer)
|
||||||
{
|
{
|
||||||
// basic player profile; should not change anymore after the creation phase is finished.
|
// basic player profile; should not change anymore after the creation phase is finished.
|
||||||
mEnvironment.mWindowManager->setValue ("name", mEnvironment.mWorld->getPlayerPos().getName());
|
mEnvironment.mWindowManager->setValue ("name", mEnvironment.mWorld->getPlayer().getName());
|
||||||
mEnvironment.mWindowManager->setValue ("race",
|
mEnvironment.mWindowManager->setValue ("race",
|
||||||
mEnvironment.mWorld->getStore().races.find (mEnvironment.mWorld->getPlayerPos().
|
mEnvironment.mWorld->getStore().races.find (mEnvironment.mWorld->getPlayer().
|
||||||
getRace())->name);
|
getRace())->name);
|
||||||
mEnvironment.mWindowManager->setValue ("class",
|
mEnvironment.mWindowManager->setValue ("class",
|
||||||
mEnvironment.mWorld->getPlayerPos().getClass().name);
|
mEnvironment.mWorld->getPlayer().getClass().name);
|
||||||
mUpdatePlayer = false;
|
mUpdatePlayer = false;
|
||||||
|
|
||||||
MWGui::WindowManager::SkillList majorSkills (5);
|
MWGui::WindowManager::SkillList majorSkills (5);
|
||||||
|
@ -343,8 +344,8 @@ namespace MWMechanics
|
||||||
|
|
||||||
for (int i=0; i<5; ++i)
|
for (int i=0; i<5; ++i)
|
||||||
{
|
{
|
||||||
minorSkills[i] = mEnvironment.mWorld->getPlayerPos().getClass().data.skills[i][0];
|
minorSkills[i] = mEnvironment.mWorld->getPlayer().getClass().data.skills[i][0];
|
||||||
majorSkills[i] = mEnvironment.mWorld->getPlayerPos().getClass().data.skills[i][1];
|
majorSkills[i] = mEnvironment.mWorld->getPlayer().getClass().data.skills[i][1];
|
||||||
}
|
}
|
||||||
|
|
||||||
mEnvironment.mWindowManager->configureSkills (majorSkills, minorSkills);
|
mEnvironment.mWindowManager->configureSkills (majorSkills, minorSkills);
|
||||||
|
@ -353,14 +354,14 @@ namespace MWMechanics
|
||||||
|
|
||||||
void MechanicsManager::setPlayerName (const std::string& name)
|
void MechanicsManager::setPlayerName (const std::string& name)
|
||||||
{
|
{
|
||||||
mEnvironment.mWorld->getPlayerPos().setName (name);
|
mEnvironment.mWorld->getPlayer().setName (name);
|
||||||
mUpdatePlayer = true;
|
mUpdatePlayer = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MechanicsManager::setPlayerRace (const std::string& race, bool male)
|
void MechanicsManager::setPlayerRace (const std::string& race, bool male)
|
||||||
{
|
{
|
||||||
mEnvironment.mWorld->getPlayerPos().setGender (male);
|
mEnvironment.mWorld->getPlayer().setGender (male);
|
||||||
mEnvironment.mWorld->getPlayerPos().setRace (race);
|
mEnvironment.mWorld->getPlayer().setRace (race);
|
||||||
mRaceSelected = true;
|
mRaceSelected = true;
|
||||||
buildPlayer();
|
buildPlayer();
|
||||||
mUpdatePlayer = true;
|
mUpdatePlayer = true;
|
||||||
|
@ -368,14 +369,14 @@ namespace MWMechanics
|
||||||
|
|
||||||
void MechanicsManager::setPlayerBirthsign (const std::string& id)
|
void MechanicsManager::setPlayerBirthsign (const std::string& id)
|
||||||
{
|
{
|
||||||
mEnvironment.mWorld->getPlayerPos().setBirthsign (id);
|
mEnvironment.mWorld->getPlayer().setBirthsign (id);
|
||||||
buildPlayer();
|
buildPlayer();
|
||||||
mUpdatePlayer = true;
|
mUpdatePlayer = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MechanicsManager::setPlayerClass (const std::string& id)
|
void MechanicsManager::setPlayerClass (const std::string& id)
|
||||||
{
|
{
|
||||||
mEnvironment.mWorld->getPlayerPos().setClass (*mEnvironment.mWorld->getStore().classes.find (id));
|
mEnvironment.mWorld->getPlayer().setClass (*mEnvironment.mWorld->getStore().classes.find (id));
|
||||||
mClassSelected = true;
|
mClassSelected = true;
|
||||||
buildPlayer();
|
buildPlayer();
|
||||||
mUpdatePlayer = true;
|
mUpdatePlayer = true;
|
||||||
|
@ -383,7 +384,7 @@ namespace MWMechanics
|
||||||
|
|
||||||
void MechanicsManager::setPlayerClass (const ESM::Class& class_)
|
void MechanicsManager::setPlayerClass (const ESM::Class& class_)
|
||||||
{
|
{
|
||||||
mEnvironment.mWorld->getPlayerPos().setClass (class_);
|
mEnvironment.mWorld->getPlayer().setClass (class_);
|
||||||
mClassSelected = true;
|
mClassSelected = true;
|
||||||
buildPlayer();
|
buildPlayer();
|
||||||
mUpdatePlayer = true;
|
mUpdatePlayer = true;
|
||||||
|
|
|
@ -115,8 +115,15 @@ void ExteriorCellRender::insertMesh(const std::string &mesh, Ogre::Vector3 vec,
|
||||||
MovableObject *ent = scene.getMgr()->createEntity(mesh);
|
MovableObject *ent = scene.getMgr()->createEntity(mesh);
|
||||||
|
|
||||||
|
|
||||||
|
if(translateFirst){
|
||||||
npcPart->translate(vec);
|
npcPart->translate(vec);
|
||||||
npcPart->rotate(axis, angle);
|
npcPart->rotate(axis, angle);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
|
||||||
|
npcPart->rotate(axis, angle);
|
||||||
|
npcPart->translate(vec);
|
||||||
|
}
|
||||||
npcPart->attachObject(ent);
|
npcPart->attachObject(ent);
|
||||||
|
|
||||||
Ogre::MeshManager *m = MeshManager::getSingletonPtr();
|
Ogre::MeshManager *m = MeshManager::getSingletonPtr();
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
#include "../mwworld/ptr.hpp"
|
#include "../mwworld/ptr.hpp"
|
||||||
#include <components/esm/loadstat.hpp>
|
#include <components/esm/loadstat.hpp>
|
||||||
|
|
||||||
|
#include "player.hpp"
|
||||||
|
|
||||||
using namespace MWRender;
|
using namespace MWRender;
|
||||||
using namespace Ogre;
|
using namespace Ogre;
|
||||||
|
|
||||||
|
@ -38,6 +40,13 @@ MWScene::MWScene(OEngine::Render::OgreRenderer &_rend)
|
||||||
|
|
||||||
//used to obtain ingame information of ogre objects (which are faced or selected)
|
//used to obtain ingame information of ogre objects (which are faced or selected)
|
||||||
mRaySceneQuery = rend.getScene()->createRayQuery(Ray());
|
mRaySceneQuery = rend.getScene()->createRayQuery(Ray());
|
||||||
|
|
||||||
|
mPlayer = new MWRender::Player (getCamera());
|
||||||
|
}
|
||||||
|
|
||||||
|
MWScene::~MWScene()
|
||||||
|
{
|
||||||
|
delete mPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<std::string, float> MWScene::getFacedHandle (MWWorld::World& world)
|
std::pair<std::string, float> MWScene::getFacedHandle (MWWorld::World& world)
|
||||||
|
|
|
@ -20,34 +20,39 @@ namespace MWWorld
|
||||||
|
|
||||||
namespace MWRender
|
namespace MWRender
|
||||||
{
|
{
|
||||||
/** Class responsible for Morrowind-specific interfaces to OGRE.
|
class Player;
|
||||||
|
|
||||||
|
/// \brief 3D-scene (rendering and physics)
|
||||||
|
|
||||||
This might be refactored partially into a non-mw specific
|
|
||||||
counterpart in ogre/ at some point.
|
|
||||||
*/
|
|
||||||
class MWScene
|
class MWScene
|
||||||
{
|
{
|
||||||
OEngine::Render::OgreRenderer &rend;
|
OEngine::Render::OgreRenderer &rend;
|
||||||
|
|
||||||
// Root node for all objects added to the scene. This is rotated so
|
/// Root node for all objects added to the scene. This is rotated so
|
||||||
// that the OGRE coordinate system matches that used internally in
|
/// that the OGRE coordinate system matches that used internally in
|
||||||
// Morrowind.
|
/// Morrowind.
|
||||||
Ogre::SceneNode *mwRoot;
|
Ogre::SceneNode *mwRoot;
|
||||||
Ogre::RaySceneQuery *mRaySceneQuery;
|
Ogre::RaySceneQuery *mRaySceneQuery;
|
||||||
|
|
||||||
|
MWRender::Player *mPlayer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MWScene(OEngine::Render::OgreRenderer &_rend);
|
|
||||||
|
MWScene (OEngine::Render::OgreRenderer &_rend);
|
||||||
|
|
||||||
|
~MWScene();
|
||||||
|
|
||||||
Ogre::Camera *getCamera() { return rend.getCamera(); }
|
Ogre::Camera *getCamera() { return rend.getCamera(); }
|
||||||
Ogre::SceneNode *getRoot() { return mwRoot; }
|
Ogre::SceneNode *getRoot() { return mwRoot; }
|
||||||
Ogre::SceneManager *getMgr() { return rend.getScene(); }
|
Ogre::SceneManager *getMgr() { return rend.getScene(); }
|
||||||
Ogre::Viewport *getViewport() { return rend.getViewport(); }
|
Ogre::Viewport *getViewport() { return rend.getViewport(); }
|
||||||
Ogre::RaySceneQuery *getRaySceneQuery() { return mRaySceneQuery; }
|
Ogre::RaySceneQuery *getRaySceneQuery() { return mRaySceneQuery; }
|
||||||
|
MWRender::Player *getPlayer() { return mPlayer; }
|
||||||
|
|
||||||
//gets the handle of the object the player is looking at
|
/// Gets the handle of the object the player is looking at
|
||||||
//pair<name, distance>
|
/// pair<name, distance>
|
||||||
//name is empty and distance = -1 if there is no object which
|
/// name is empty and distance = -1 if there is no object which
|
||||||
//can be faced
|
/// can be faced
|
||||||
std::pair<std::string, float> getFacedHandle (MWWorld::World& world);
|
std::pair<std::string, float> getFacedHandle (MWWorld::World& world);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
8
apps/openmw/mwrender/player.cpp
Normal file
8
apps/openmw/mwrender/player.cpp
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
#include "player.hpp"
|
||||||
|
|
||||||
|
namespace MWRender
|
||||||
|
{
|
||||||
|
Player::Player (Ogre::Camera *camera) : mCamera (camera)
|
||||||
|
{}
|
||||||
|
}
|
24
apps/openmw/mwrender/player.hpp
Normal file
24
apps/openmw/mwrender/player.hpp
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#ifndef GAME_MWRENDER_PLAYER_H
|
||||||
|
#define GAME_MWRENDER_PLAYER_H
|
||||||
|
|
||||||
|
namespace Ogre
|
||||||
|
{
|
||||||
|
class Camera;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWRender
|
||||||
|
{
|
||||||
|
/// \brief Player character rendering and camera control
|
||||||
|
class Player
|
||||||
|
{
|
||||||
|
Ogre::Camera *mCamera;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Player (Ogre::Camera *camera);
|
||||||
|
|
||||||
|
Ogre::Camera *getCamera() { return mCamera; }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -1,41 +0,0 @@
|
||||||
|
|
||||||
#include "playerpos.hpp"
|
|
||||||
|
|
||||||
#include "../mwworld/world.hpp"
|
|
||||||
|
|
||||||
namespace MWRender
|
|
||||||
{
|
|
||||||
PlayerPos::PlayerPos (Ogre::Camera *cam, const ESM::NPC *player, MWWorld::World& world) :
|
|
||||||
mCellStore (0), camera(cam), mWorld (world), mClass (0)
|
|
||||||
{
|
|
||||||
mPlayer.base = player;
|
|
||||||
mName = player->name;
|
|
||||||
mMale = !(player->flags & ESM::NPC::Female);
|
|
||||||
mRace = player->race;
|
|
||||||
mPlayer.ref.pos.pos[0] = mPlayer.ref.pos.pos[1] = mPlayer.ref.pos.pos[2] = 0;
|
|
||||||
mClass = new ESM::Class (*world.getStore().classes.find (player->cls));
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayerPos::~PlayerPos()
|
|
||||||
{
|
|
||||||
delete mClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlayerPos::setPos(float x, float y, float z, bool updateCamera)
|
|
||||||
{
|
|
||||||
mWorld.moveObject (getPlayer(), x, y, z);
|
|
||||||
|
|
||||||
if (updateCamera)
|
|
||||||
camera->setPosition (Ogre::Vector3 (
|
|
||||||
mPlayer.ref.pos.pos[0],
|
|
||||||
mPlayer.ref.pos.pos[2],
|
|
||||||
-mPlayer.ref.pos.pos[1]));
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlayerPos::setClass (const ESM::Class& class_)
|
|
||||||
{
|
|
||||||
ESM::Class *new_class = new ESM::Class (class_);
|
|
||||||
delete mClass;
|
|
||||||
mClass = new_class;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,128 +0,0 @@
|
||||||
#ifndef _MWRENDER_PLAYERPOS_H
|
|
||||||
#define _MWRENDER_PLAYERPOS_H
|
|
||||||
|
|
||||||
#include "OgreCamera.h"
|
|
||||||
|
|
||||||
#include <components/esm_store/cell_store.hpp>
|
|
||||||
|
|
||||||
#include "../mwworld/refdata.hpp"
|
|
||||||
#include "../mwworld/ptr.hpp"
|
|
||||||
|
|
||||||
namespace MWWorld
|
|
||||||
{
|
|
||||||
class World;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace MWRender
|
|
||||||
{
|
|
||||||
// This class keeps track of the player position. It takes care of
|
|
||||||
// camera movement, sound listener updates, and collision handling
|
|
||||||
// (to be done).
|
|
||||||
class PlayerPos
|
|
||||||
{
|
|
||||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> mPlayer;
|
|
||||||
MWWorld::Ptr::CellStore *mCellStore;
|
|
||||||
Ogre::Camera *camera;
|
|
||||||
MWWorld::World& mWorld;
|
|
||||||
std::string mName;
|
|
||||||
bool mMale;
|
|
||||||
std::string mRace;
|
|
||||||
std::string mBirthsign;
|
|
||||||
ESM::Class *mClass;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
PlayerPos(Ogre::Camera *cam, const ESM::NPC *player, MWWorld::World& world);
|
|
||||||
|
|
||||||
~PlayerPos();
|
|
||||||
|
|
||||||
// Set the player position. Uses Morrowind coordinates.
|
|
||||||
void setPos(float _x, float _y, float _z, bool updateCamera = false);
|
|
||||||
|
|
||||||
void setCell (MWWorld::Ptr::CellStore *cellStore)
|
|
||||||
{
|
|
||||||
mCellStore = cellStore;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ogre::Camera *getCamera() { return camera; }
|
|
||||||
|
|
||||||
// Move the player relative to her own position and
|
|
||||||
// orientation. After the call, the new position is returned.
|
|
||||||
void moveRel(float &relX, float &relY, float &relZ)
|
|
||||||
{
|
|
||||||
using namespace Ogre;
|
|
||||||
|
|
||||||
// Move camera relative to its own direction
|
|
||||||
camera->moveRelative(Vector3(relX,0,relZ));
|
|
||||||
|
|
||||||
// Up/down movement is always done relative the world axis.
|
|
||||||
camera->move(Vector3(0,relY,0));
|
|
||||||
|
|
||||||
// Get new camera position, converting back to MW coords.
|
|
||||||
Vector3 pos = camera->getPosition();
|
|
||||||
relX = pos[0];
|
|
||||||
relY = -pos[2];
|
|
||||||
relZ = pos[1];
|
|
||||||
|
|
||||||
// TODO: Collision detection must be used to find the REAL new
|
|
||||||
// position.
|
|
||||||
|
|
||||||
// Set the position
|
|
||||||
setPos(relX, relY, relZ);
|
|
||||||
}
|
|
||||||
|
|
||||||
MWWorld::Ptr getPlayer()
|
|
||||||
{
|
|
||||||
MWWorld::Ptr ptr (&mPlayer, mCellStore);
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setName (const std::string& name)
|
|
||||||
{
|
|
||||||
mName = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setGender (bool male)
|
|
||||||
{
|
|
||||||
mMale = male;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setRace (const std::string& race)
|
|
||||||
{
|
|
||||||
mRace = race;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setBirthsign (const std::string& birthsign)
|
|
||||||
{
|
|
||||||
mBirthsign = birthsign;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setClass (const ESM::Class& class_);
|
|
||||||
|
|
||||||
std::string getName() const
|
|
||||||
{
|
|
||||||
return mName;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool isMale() const
|
|
||||||
{
|
|
||||||
return mMale;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string getRace() const
|
|
||||||
{
|
|
||||||
return mRace;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string getBirthsign() const
|
|
||||||
{
|
|
||||||
return mBirthsign;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ESM::Class& getClass() const
|
|
||||||
{
|
|
||||||
return *mClass;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
#endif
|
|
64
apps/openmw/mwworld/player.cpp
Normal file
64
apps/openmw/mwworld/player.cpp
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
|
||||||
|
#include "player.hpp"
|
||||||
|
|
||||||
|
#include "../mwrender/player.hpp"
|
||||||
|
|
||||||
|
#include "world.hpp"
|
||||||
|
|
||||||
|
namespace MWWorld
|
||||||
|
{
|
||||||
|
Player::Player (MWRender::Player *renderer, const ESM::NPC *player, MWWorld::World& world) :
|
||||||
|
mCellStore (0), mRenderer (renderer), mWorld (world), mClass (0)
|
||||||
|
{
|
||||||
|
mPlayer.base = player;
|
||||||
|
mName = player->name;
|
||||||
|
mMale = !(player->flags & ESM::NPC::Female);
|
||||||
|
mRace = player->race;
|
||||||
|
mPlayer.ref.pos.pos[0] = mPlayer.ref.pos.pos[1] = mPlayer.ref.pos.pos[2] = 0;
|
||||||
|
mClass = new ESM::Class (*world.getStore().classes.find (player->cls));
|
||||||
|
}
|
||||||
|
|
||||||
|
Player::~Player()
|
||||||
|
{
|
||||||
|
delete mClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Player::setPos(float x, float y, float z, bool updateCamera)
|
||||||
|
{
|
||||||
|
mWorld.moveObject (getPlayer(), x, y, z);
|
||||||
|
|
||||||
|
if (updateCamera)
|
||||||
|
mRenderer->getCamera()->setPosition (Ogre::Vector3 (
|
||||||
|
mPlayer.ref.pos.pos[0],
|
||||||
|
mPlayer.ref.pos.pos[2],
|
||||||
|
-mPlayer.ref.pos.pos[1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Player::moveRel (float &relX, float &relY, float &relZ)
|
||||||
|
{
|
||||||
|
// Move camera relative to its own direction
|
||||||
|
mRenderer->getCamera()->moveRelative (Ogre::Vector3(relX,0,relZ));
|
||||||
|
|
||||||
|
// Up/down movement is always done relative the world axis.
|
||||||
|
mRenderer->getCamera()->move (Ogre::Vector3(0,relY,0));
|
||||||
|
|
||||||
|
// Get new camera position, converting back to MW coords.
|
||||||
|
Ogre::Vector3 pos = mRenderer->getCamera()->getPosition();
|
||||||
|
relX = pos[0];
|
||||||
|
relY = -pos[2];
|
||||||
|
relZ = pos[1];
|
||||||
|
|
||||||
|
// TODO: Collision detection must be used to find the REAL new
|
||||||
|
// position.
|
||||||
|
|
||||||
|
// Set the position
|
||||||
|
setPos(relX, relY, relZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Player::setClass (const ESM::Class& class_)
|
||||||
|
{
|
||||||
|
ESM::Class *new_class = new ESM::Class (class_);
|
||||||
|
delete mClass;
|
||||||
|
mClass = new_class;
|
||||||
|
}
|
||||||
|
}
|
107
apps/openmw/mwworld/player.hpp
Normal file
107
apps/openmw/mwworld/player.hpp
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
#ifndef GAME_MWWORLD_PLAYER_H
|
||||||
|
#define GAME_MWWORLD_PLAYER_H
|
||||||
|
|
||||||
|
#include "OgreCamera.h"
|
||||||
|
|
||||||
|
#include <components/esm_store/cell_store.hpp>
|
||||||
|
|
||||||
|
#include "../mwworld/refdata.hpp"
|
||||||
|
#include "../mwworld/ptr.hpp"
|
||||||
|
|
||||||
|
namespace MWRender
|
||||||
|
{
|
||||||
|
class Player;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWWorld
|
||||||
|
{
|
||||||
|
class World;
|
||||||
|
|
||||||
|
/// \brief NPC object representing the player and additional player data
|
||||||
|
class Player
|
||||||
|
{
|
||||||
|
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> mPlayer;
|
||||||
|
MWWorld::Ptr::CellStore *mCellStore;
|
||||||
|
MWRender::Player *mRenderer;
|
||||||
|
MWWorld::World& mWorld;
|
||||||
|
std::string mName;
|
||||||
|
bool mMale;
|
||||||
|
std::string mRace;
|
||||||
|
std::string mBirthsign;
|
||||||
|
ESM::Class *mClass;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Player(MWRender::Player *renderer, const ESM::NPC *player, MWWorld::World& world);
|
||||||
|
|
||||||
|
~Player();
|
||||||
|
|
||||||
|
/// Set the player position. Uses Morrowind coordinates.
|
||||||
|
void setPos(float _x, float _y, float _z, bool updateCamera = false);
|
||||||
|
|
||||||
|
void setCell (MWWorld::Ptr::CellStore *cellStore)
|
||||||
|
{
|
||||||
|
mCellStore = cellStore;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Move the player relative to her own position and
|
||||||
|
/// orientation. After the call, the new position is returned.
|
||||||
|
void moveRel (float &relX, float &relY, float &relZ);
|
||||||
|
|
||||||
|
MWWorld::Ptr getPlayer()
|
||||||
|
{
|
||||||
|
MWWorld::Ptr ptr (&mPlayer, mCellStore);
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
MWRender::Player *getRenderer() { return mRenderer; }
|
||||||
|
|
||||||
|
void setName (const std::string& name)
|
||||||
|
{
|
||||||
|
mName = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setGender (bool male)
|
||||||
|
{
|
||||||
|
mMale = male;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setRace (const std::string& race)
|
||||||
|
{
|
||||||
|
mRace = race;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setBirthsign (const std::string& birthsign)
|
||||||
|
{
|
||||||
|
mBirthsign = birthsign;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setClass (const ESM::Class& class_);
|
||||||
|
|
||||||
|
std::string getName() const
|
||||||
|
{
|
||||||
|
return mName;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isMale() const
|
||||||
|
{
|
||||||
|
return mMale;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string getRace() const
|
||||||
|
{
|
||||||
|
return mRace;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string getBirthsign() const
|
||||||
|
{
|
||||||
|
return mBirthsign;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ESM::Class& getClass() const
|
||||||
|
{
|
||||||
|
return *mClass;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -17,7 +17,7 @@
|
||||||
#include "ptr.hpp"
|
#include "ptr.hpp"
|
||||||
#include "environment.hpp"
|
#include "environment.hpp"
|
||||||
#include "class.hpp"
|
#include "class.hpp"
|
||||||
|
#include "player.hpp"
|
||||||
|
|
||||||
#include "refdata.hpp"
|
#include "refdata.hpp"
|
||||||
#include "globals.hpp"
|
#include "globals.hpp"
|
||||||
|
@ -296,12 +296,12 @@ namespace MWWorld
|
||||||
|
|
||||||
void World::playerCellChange (Ptr::CellStore *cell, const ESM::Position& position)
|
void World::playerCellChange (Ptr::CellStore *cell, const ESM::Position& position)
|
||||||
{
|
{
|
||||||
mPlayerPos->setPos (position.pos[0], position.pos[1], position.pos[2], true);
|
mPlayer->setPos (position.pos[0], position.pos[1], position.pos[2], true);
|
||||||
mPlayerPos->setCell (cell);
|
mPlayer->setCell (cell);
|
||||||
// TODO orientation
|
// TODO orientation
|
||||||
|
|
||||||
mEnvironment.mMechanicsManager->addActor (mPlayerPos->getPlayer());
|
mEnvironment.mMechanicsManager->addActor (mPlayer->getPlayer());
|
||||||
mEnvironment.mMechanicsManager->watchActor (mPlayerPos->getPlayer());
|
mEnvironment.mMechanicsManager->watchActor (mPlayer->getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -317,7 +317,7 @@ namespace MWWorld
|
||||||
|
|
||||||
World::World (OEngine::Render::OgreRenderer& renderer, const boost::filesystem::path& dataDir,
|
World::World (OEngine::Render::OgreRenderer& renderer, const boost::filesystem::path& dataDir,
|
||||||
const std::string& master, bool newGame, Environment& environment)
|
const std::string& master, bool newGame, Environment& environment)
|
||||||
: mSkyManager (0), mScene (renderer), mPlayerPos (0), mCurrentCell (0), mGlobalVariables (0),
|
: mSkyManager (0), mScene (renderer), mPlayer (0), mCurrentCell (0), mGlobalVariables (0),
|
||||||
mSky (false), mCellChanged (false), mEnvironment (environment)
|
mSky (false), mCellChanged (false), mEnvironment (environment)
|
||||||
{
|
{
|
||||||
boost::filesystem::path masterPath (dataDir);
|
boost::filesystem::path masterPath (dataDir);
|
||||||
|
@ -329,7 +329,7 @@ namespace MWWorld
|
||||||
mEsm.open (masterPath.file_string());
|
mEsm.open (masterPath.file_string());
|
||||||
mStore.load (mEsm);
|
mStore.load (mEsm);
|
||||||
|
|
||||||
mPlayerPos = new MWRender::PlayerPos (mScene.getCamera(), mStore.npcs.find ("player"), *this);
|
mPlayer = new MWWorld::Player (mScene.getPlayer(), mStore.npcs.find ("player"), *this);
|
||||||
|
|
||||||
// global variables
|
// global variables
|
||||||
mGlobalVariables = new Globals (mStore);
|
mGlobalVariables = new Globals (mStore);
|
||||||
|
@ -354,14 +354,14 @@ namespace MWWorld
|
||||||
iter!=mBufferedCells.end(); ++iter)
|
iter!=mBufferedCells.end(); ++iter)
|
||||||
delete iter->second;
|
delete iter->second;
|
||||||
|
|
||||||
delete mPlayerPos;
|
delete mPlayer;
|
||||||
delete mSkyManager;
|
delete mSkyManager;
|
||||||
delete mGlobalVariables;
|
delete mGlobalVariables;
|
||||||
}
|
}
|
||||||
|
|
||||||
MWRender::PlayerPos& World::getPlayerPos()
|
MWWorld::Player& World::getPlayer()
|
||||||
{
|
{
|
||||||
return *mPlayerPos;
|
return *mPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
ESMS::ESMStore& World::getStore()
|
ESMS::ESMStore& World::getStore()
|
||||||
|
@ -394,7 +394,7 @@ namespace MWWorld
|
||||||
// the player is always in an active cell.
|
// the player is always in an active cell.
|
||||||
if (name=="player")
|
if (name=="player")
|
||||||
{
|
{
|
||||||
return mPlayerPos->getPlayer();
|
return mPlayer->getPlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
// active cells
|
// active cells
|
||||||
|
@ -763,7 +763,7 @@ namespace MWWorld
|
||||||
ptr.getCellRef().pos.pos[1] = y;
|
ptr.getCellRef().pos.pos[1] = y;
|
||||||
ptr.getCellRef().pos.pos[2] = z;
|
ptr.getCellRef().pos.pos[2] = z;
|
||||||
|
|
||||||
if (ptr==mPlayerPos->getPlayer())
|
if (ptr==mPlayer->getPlayer())
|
||||||
{
|
{
|
||||||
if (mCurrentCell)
|
if (mCurrentCell)
|
||||||
{
|
{
|
||||||
|
@ -777,7 +777,7 @@ namespace MWWorld
|
||||||
|
|
||||||
if (mCurrentCell->cell->data.gridX!=cellX || mCurrentCell->cell->data.gridY!=cellY)
|
if (mCurrentCell->cell->data.gridX!=cellX || mCurrentCell->cell->data.gridY!=cellY)
|
||||||
{
|
{
|
||||||
changeCell (cellX, cellY, mPlayerPos->getPlayer().getCellRef().pos);
|
changeCell (cellX, cellY, mPlayer->getPlayer().getCellRef().pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
|
|
||||||
#include <components/esm_store/cell_store.hpp>
|
#include <components/esm_store/cell_store.hpp>
|
||||||
|
|
||||||
#include "../mwrender/playerpos.hpp"
|
|
||||||
#include "../mwrender/mwscene.hpp"
|
#include "../mwrender/mwscene.hpp"
|
||||||
|
|
||||||
#include "refdata.hpp"
|
#include "refdata.hpp"
|
||||||
|
@ -34,6 +33,7 @@ namespace MWRender
|
||||||
namespace MWWorld
|
namespace MWWorld
|
||||||
{
|
{
|
||||||
class Environment;
|
class Environment;
|
||||||
|
class Player;
|
||||||
|
|
||||||
/// \brief The game world and its visual representation
|
/// \brief The game world and its visual representation
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ namespace MWWorld
|
||||||
|
|
||||||
MWRender::SkyManager* mSkyManager;
|
MWRender::SkyManager* mSkyManager;
|
||||||
MWRender::MWScene mScene;
|
MWRender::MWScene mScene;
|
||||||
MWRender::PlayerPos *mPlayerPos;
|
MWWorld::Player *mPlayer;
|
||||||
Ptr::CellStore *mCurrentCell; // the cell, the player is in
|
Ptr::CellStore *mCurrentCell; // the cell, the player is in
|
||||||
CellRenderCollection mActiveCells;
|
CellRenderCollection mActiveCells;
|
||||||
CellRenderCollection mBufferedCells; // loaded, but not active (buffering not implementd yet)
|
CellRenderCollection mBufferedCells; // loaded, but not active (buffering not implementd yet)
|
||||||
|
@ -94,7 +94,7 @@ namespace MWWorld
|
||||||
|
|
||||||
~World();
|
~World();
|
||||||
|
|
||||||
MWRender::PlayerPos& getPlayerPos();
|
MWWorld::Player& getPlayer();
|
||||||
|
|
||||||
ESMS::ESMStore& getStore();
|
ESMS::ESMStore& getStore();
|
||||||
|
|
||||||
|
|
|
@ -1,256 +0,0 @@
|
||||||
/* //This is old
|
|
||||||
if (pieces > 1){ //pieces > 1
|
|
||||||
MeshPtr justChest = MeshManager::getSingleton().createManual("justchest", group, NIFLoader::getSingletonPtr());
|
|
||||||
Ogre::AxisAlignedBox bounds = resize->getBounds();
|
|
||||||
Ogre::Vector3 width2 = bounds.getCorner(bounds.NEAR_RIGHT_BOTTOM) - bounds.getCorner(bounds.NEAR_LEFT_BOTTOM);
|
|
||||||
Ogre::Vector3 depth2 = (bounds.getCorner(bounds.FAR_LEFT_BOTTOM) - bounds.getCorner(bounds.NEAR_LEFT_BOTTOM));
|
|
||||||
Ogre::Vector3 height2 = bounds.getCorner(bounds.NEAR_LEFT_TOP) - bounds.getCorner(bounds.NEAR_LEFT_BOTTOM);
|
|
||||||
cout << "Width:" << width2; cout << "Height:" << height2; cout << "Depth:" << depth2;
|
|
||||||
/*int width = bounds.getMaximum().x - bounds.getMinimum().x;
|
|
||||||
int height = bounds.getMaximum().y - bounds.getMinimum().y;
|
|
||||||
int depth = bounds.getMaximum().z - bounds.getMinimum().z;
|
|
||||||
int xinc = width / pieces;
|
|
||||||
int yinc = height / pieces;
|
|
||||||
int zinc = depth / pieces;
|
|
||||||
int xmincorner = bounds.getMinimum().x + xinc*pieceIndex;
|
|
||||||
int ymincorner = bounds.getMinimum().y + yinc*pieceIndex;
|
|
||||||
int zmincorner = bounds.getMinimum().z + xinc*pieceIndex;*/
|
|
||||||
//Ogre::Vector3 bottom_left = bounds.getCorner(bounds.NEAR_LEFT_BOTTOM) + (width2 / pieces) * pieceIndex; //width2
|
|
||||||
//Ogre::Vector3 top_right = bottom_left + (width2 / pieces) + height2 + depth2;
|
|
||||||
//Ogre::AxisAlignedBox set = AxisAlignedBox ( Ogre::Vector3(xmincorner, bounds.getMinimum().y, bounds.getMinimum().z), Ogre::Vector3(xmincorner + xinc, bounds.getMaximum().y, bounds.getMaximum().z));
|
|
||||||
//Ogre::AxisAlignedBox set = bounds;//AxisAlignedBox(bottom_left, top_right);
|
|
||||||
//bounds.setMinimumX(xmincorner);
|
|
||||||
//bounds.setMaximumX(xmincorner + xinc);
|
|
||||||
//bounds.setMinimumY(ymincorner);
|
|
||||||
//bounds.setMaximumY(ymincorner + yinc);
|
|
||||||
//bounds.setMinimumZ(zmincorner);
|
|
||||||
//bounds.setMaximumZ(zmincorner + zinc);
|
|
||||||
//bounds.setMinimumY(bounds.getMinimum().y);
|
|
||||||
//bounds.setMaximumY( bounds.getMaximum().y;
|
|
||||||
//resize->_setBounds(set, true);
|
|
||||||
//resize->reload();
|
|
||||||
|
|
||||||
//Ogre::Mesh::SubMeshIterator subMeshIterator = resize->getSubMeshIterator();
|
|
||||||
/*Ogre::Vector3* point;
|
|
||||||
Ogre::SubMesh* subMesh;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
size_t vertex_count = 0;
|
|
||||||
Vector3* vertices;
|
|
||||||
size_t index_count = 0;
|
|
||||||
unsigned* indices;
|
|
||||||
Vector3 position = Vector3::ZERO;
|
|
||||||
Quaternion orient = Quaternion::IDENTITY;
|
|
||||||
Vector3 scale = Vector3::UNIT_SCALE;
|
|
||||||
|
|
||||||
|
|
||||||
// int vertex_count = 0;
|
|
||||||
//int index_count = 0;
|
|
||||||
|
|
||||||
bool added_shared = false;
|
|
||||||
size_t current_offset = vertex_count;
|
|
||||||
size_t shared_offset = vertex_count;
|
|
||||||
size_t next_offset = vertex_count;
|
|
||||||
size_t index_offset = index_count;
|
|
||||||
size_t prev_vert = vertex_count;
|
|
||||||
size_t prev_ind = index_count;
|
|
||||||
// Calculate how many vertices and indices we're going to need
|
|
||||||
/*
|
|
||||||
std::cout <<"FIRST CYCLE\n";
|
|
||||||
for(int i = 0;i < resize->getNumSubMeshes();i++)
|
|
||||||
{
|
|
||||||
std::cout<< "WEHAVEMESHES\n";
|
|
||||||
SubMesh* submesh = resize->getSubMesh(i);
|
|
||||||
|
|
||||||
// We only need to add the shared vertices once
|
|
||||||
if(submesh->useSharedVertices)
|
|
||||||
{
|
|
||||||
if(!added_shared)
|
|
||||||
{
|
|
||||||
VertexData* vertex_data = resize->sharedVertexData;
|
|
||||||
vertex_count += vertex_data->vertexCount;
|
|
||||||
added_shared = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
VertexData* vertex_data = submesh->vertexData;
|
|
||||||
vertex_count += vertex_data->vertexCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the indices
|
|
||||||
Ogre::IndexData* index_data = submesh->indexData;
|
|
||||||
index_count += index_data->indexCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
// Vector3* vertices;
|
|
||||||
// Allocate space for the vertices and indices
|
|
||||||
/*vertices = new Vector3[vertex_count];
|
|
||||||
indices = new unsigned[index_count];
|
|
||||||
|
|
||||||
int meshcounter = 0;
|
|
||||||
added_shared = false;
|
|
||||||
std::cout <<"SECOND CYCLE: " << resize->getNumSubMeshes() << "\n";
|
|
||||||
// Run through the submeshes again, adding the data into the arrays
|
|
||||||
int i;
|
|
||||||
for(i = 0;i < resize->getNumSubMeshes();i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
SubMesh* submesh = resize->getSubMesh(i);
|
|
||||||
|
|
||||||
Ogre::VertexData* vertex_data = submesh->useSharedVertices ? resize->sharedVertexData : submesh->vertexData;
|
|
||||||
/*
|
|
||||||
if((!submesh->useSharedVertices)||(submesh->useSharedVertices && !added_shared))
|
|
||||||
{
|
|
||||||
if(submesh->useSharedVertices)
|
|
||||||
{
|
|
||||||
added_shared = true;
|
|
||||||
shared_offset = current_offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Ogre::VertexElement* posElem = vertex_data->vertexDeclaration->findElementBySemantic(Ogre::VES_POSITION);
|
|
||||||
Ogre::HardwareVertexBufferSharedPtr vbuf = vertex_data->vertexBufferBinding->getBuffer(posElem->getSource());
|
|
||||||
unsigned char* vertex = static_cast<unsigned char*>(vbuf->lock(Ogre::HardwareBuffer::HBL_NORMAL));
|
|
||||||
Ogre::Real* pReal;
|
|
||||||
|
|
||||||
bool onepointexists = true;
|
|
||||||
Vector3 lastpoint;
|
|
||||||
for(size_t j = 0; j < vertex_data->vertexCount; ++j, vertex += vbuf->getVertexSize())
|
|
||||||
{
|
|
||||||
posElem->baseVertexPointerToElement(vertex, &pReal);
|
|
||||||
|
|
||||||
Vector3 pt;
|
|
||||||
pt.x = (*(pReal++));
|
|
||||||
pt.y = (*(pReal++));
|
|
||||||
pt.z = (*(pReal++));
|
|
||||||
//cout << "X:" << pt.x << "Y:" <<pt.y << "Z:" <<pt.z << "\n";
|
|
||||||
//cout << "Boxmin:" << set.getMinimum() <<" Boxmax:" <<set.getMaximum() <<"\n";
|
|
||||||
//if(set.intersects(pt))
|
|
||||||
//onepointexists = true;
|
|
||||||
if(!set.intersects(pt))
|
|
||||||
{
|
|
||||||
pt = lastpoint;
|
|
||||||
//*pReal = pt.x;
|
|
||||||
//*(pReal+1) = pt.y;
|
|
||||||
//*(pReal+2) = pt.z;
|
|
||||||
//vertex
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
lastpoint = pt;
|
|
||||||
|
|
||||||
|
|
||||||
pt = (orient * (pt * scale)) + position;
|
|
||||||
if(!set.intersects(pt))
|
|
||||||
onepointexists = false;
|
|
||||||
|
|
||||||
vertices[current_offset + j].x = pt.x;
|
|
||||||
vertices[current_offset + j].y = pt.y;
|
|
||||||
vertices[current_offset + j].z = pt.z;
|
|
||||||
|
|
||||||
}
|
|
||||||
/*if(true)
|
|
||||||
{
|
|
||||||
std::cout<< "Wearegoingtodelete"<< submesh->getMaterialName() << "\n";
|
|
||||||
|
|
||||||
if(meshcounter <= 2)
|
|
||||||
resize->destroySubMesh(i);
|
|
||||||
else if(meshcounter > 3 && meshcounter < 7)
|
|
||||||
resize->destroySubMesh(i);
|
|
||||||
//submesh->setMaterialName("BaseWhiteNoLighting"); //red
|
|
||||||
//submesh->updateMaterialUsingTextureAliases();
|
|
||||||
//resize->
|
|
||||||
meshcounter++;
|
|
||||||
//delete submesh;
|
|
||||||
//reakb;
|
|
||||||
}*/
|
|
||||||
/*
|
|
||||||
vbuf->unlock();
|
|
||||||
next_offset += vertex_data->vertexCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ogre::IndexData* index_data = submesh->indexData;
|
|
||||||
|
|
||||||
size_t numTris = index_data->indexCount / 3;
|
|
||||||
unsigned short* pShort;
|
|
||||||
unsigned int* pInt;
|
|
||||||
Ogre::HardwareIndexBufferSharedPtr ibuf = index_data->indexBuffer;
|
|
||||||
bool use32bitindexes = (ibuf->getType() == Ogre::HardwareIndexBuffer::IT_32BIT);
|
|
||||||
if (use32bitindexes) pInt = static_cast<unsigned int*>(ibuf->lock(Ogre::HardwareBuffer::HBL_READ_ONLY));
|
|
||||||
else pShort = static_cast<unsigned short*>(ibuf->lock(Ogre::HardwareBuffer::HBL_READ_ONLY));
|
|
||||||
|
|
||||||
for(size_t k = 0; k < numTris; ++k)
|
|
||||||
{
|
|
||||||
size_t offset = (submesh->useSharedVertices)?shared_offset:current_offset;
|
|
||||||
|
|
||||||
unsigned int vindex = use32bitindexes? *pInt++ : *pShort++;
|
|
||||||
indices[index_offset + 0] = vindex + offset;
|
|
||||||
vindex = use32bitindexes? *pInt++ : *pShort++;
|
|
||||||
indices[index_offset + 1] = vindex + offset;
|
|
||||||
vindex = use32bitindexes? *pInt++ : *pShort++;
|
|
||||||
indices[index_offset + 2] = vindex + offset;
|
|
||||||
|
|
||||||
index_offset += 3;
|
|
||||||
}
|
|
||||||
ibuf->unlock();
|
|
||||||
current_offset = next_offset;*/
|
|
||||||
//if (i == 3) //i!=3 i!=5
|
|
||||||
//{
|
|
||||||
//cout << "RETURNINGJUST\n";
|
|
||||||
//SubMesh* test =
|
|
||||||
//test = resize->getSubMesh(i);
|
|
||||||
// cout << "s:" << shape << "\n";
|
|
||||||
//NiTriShapeData *data = shape->data.getPtr();
|
|
||||||
// SubMesh *sub = justChest->createSubMesh(name + "2");
|
|
||||||
//sub = resize->getSubMesh(i);
|
|
||||||
|
|
||||||
// int nextBuf = 0;
|
|
||||||
|
|
||||||
// This function is just one long stream of Ogre-barf, but it works
|
|
||||||
// great.
|
|
||||||
|
|
||||||
// Add vertices
|
|
||||||
//int numVerts = data->vertices.length / 3;
|
|
||||||
//sub->vertexData = new VertexData();
|
|
||||||
//sub->vertexData->vertexCount = numVerts;
|
|
||||||
|
|
||||||
//justChest->load();
|
|
||||||
//return resize;
|
|
||||||
//}
|
|
||||||
// 0 hand thumb
|
|
||||||
// 1 hand thumb no chest on dunmer
|
|
||||||
//}
|
|
||||||
//resize->destroySubMesh(1);
|
|
||||||
/* while (subMeshIterator.hasMoreElements())
|
|
||||||
{
|
|
||||||
resize->getNum
|
|
||||||
//resize->d
|
|
||||||
std::cout << "CHEST";
|
|
||||||
subMesh = subMeshIterator.getNext();*/
|
|
||||||
//std::vector<Vector3>::type test =
|
|
||||||
//std::vector<Ogre::Vector3>::iterator fileIter = subMesh->extremityPoints.begin();
|
|
||||||
|
|
||||||
//std::vector<Ogre::Vector3>::type test = subMesh->extremityPoints;
|
|
||||||
//void* pData = subMesh->vertexData->vertexBufferBinding->getBuffer(1)->lock(0, 1000, HardwareBuffer::HBL_DISCARD);
|
|
||||||
|
|
||||||
|
|
||||||
// if(set.contains( subMesh->vertexData->vertexStart))
|
|
||||||
//delete subMesh;
|
|
||||||
//subMeshIterator.getNext();
|
|
||||||
//delete[] subMesh;
|
|
||||||
//subMesh->extremityPoints.clear();
|
|
||||||
//subMesh->mLodFaceList.clear();
|
|
||||||
//resize->destroySubMesh(subMesh->indexData->indexStart);
|
|
||||||
//resize->destroySubMesh(subMesh->indexData->);
|
|
||||||
//subMesh->
|
|
||||||
//std::cout << "THIS" << subMesh;
|
|
||||||
///}
|
|
||||||
//subMesh->vertexData->vertexBufferBinding->getBuffer(0)->readData(subMesh->vertexData->vertexStart, sizeof Ogre::Vector3, point);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//boost::filesystem::directory_iterator dir_iter(dir), dir_end;
|
|
||||||
|
|
||||||
//return resize;
|
|
Loading…
Reference in a new issue