Merge branch 'collision' of git://github.com/zinnschlag/openmw.git into collisions

actorid
gugus 14 years ago
commit b03dec4ad4

@ -183,7 +183,8 @@ bool OMW::Engine::frameStarted(const Ogre::FrameEvent& evt)
focusFrameCounter = 0;
}
mEnvironment.mWorld->doPhysics (movement, mEnvironment.mFrameDuration);
if (mEnvironment.mWindowManager->getMode()==MWGui::GM_Game)
mEnvironment.mWorld->doPhysics (movement, mEnvironment.mFrameDuration);
}
catch (const std::exception& e)
{

@ -200,7 +200,7 @@ void MWScene::scaleObject (const std::string& handle, float scale)
}
void MWScene::setCollsionMode (bool enabled)
void MWScene::toggleCollisionMode()
{
}

@ -87,9 +87,9 @@ namespace MWRender
/// Change object's scale.
void scaleObject (const std::string& handle, float scale);
/// Set collision mode for player. If disabled player object should ignore
/// Toggle collision mode for player. If disabled player object should ignore
/// collisions and gravity.
void setCollsionMode (bool enabled);
void toggleCollisionMode();
};
}

@ -46,7 +46,7 @@ namespace MWScript
InterpreterContext& context
= static_cast<InterpreterContext&> (runtime.getContext());
context.getWorld().getPlayer().toggleCollisionMode();
context.getWorld().toggleCollisionMode();
}
};

@ -9,7 +9,7 @@
namespace MWWorld
{
Player::Player (MWRender::Player *renderer, const ESM::NPC *player, MWWorld::World& world) :
mCellStore (0), mRenderer (renderer), mWorld (world), mClass (0), mCollisionMode (true),
mCellStore (0), mRenderer (renderer), mWorld (world), mClass (0),
mAutoMove (false), mForwardBackward (0)
{
mPlayer.base = player;
@ -37,27 +37,6 @@ namespace MWWorld
-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, if mCollisionMode==true
// Set the position
setPos(relX, relY, relZ);
}
void Player::setClass (const ESM::Class& class_)
{
ESM::Class *new_class = new ESM::Class (class_);

@ -29,7 +29,6 @@ namespace MWWorld
std::string mRace;
std::string mBirthsign;
ESM::Class *mClass;
bool mCollisionMode;
bool mAutoMove;
int mForwardBackward;
@ -47,10 +46,6 @@ namespace MWWorld
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);
@ -106,11 +101,6 @@ namespace MWWorld
return *mClass;
}
void toggleCollisionMode()
{
mCollisionMode = !mCollisionMode;
}
bool getAutoMove()
{
return mAutoMove;

@ -855,4 +855,9 @@ namespace MWWorld
{
mScene.doPhysics (duration, *this, actors);
}
void World::toggleCollisionMode()
{
mScene.toggleCollisionMode();
}
}

@ -179,6 +179,10 @@ namespace MWWorld
void doPhysics (const std::vector<std::pair<std::string, Ogre::Vector3> >& actors,
float duration);
///< Run physics simulation and modify \a world accordingly.
void toggleCollisionMode();
///< Toggle collision mode for player. If disabled player object should ignore
/// collisions and gravity.
};
}

Loading…
Cancel
Save