Movement keys; View angles

actorid
Jason Hooks 12 years ago
parent 76f2a82884
commit 192d634098

@ -176,11 +176,11 @@ namespace MWWorld
//set the DebugRenderingMode. To disable it,set it to 0 //set the DebugRenderingMode. To disable it,set it to 0
//eng->setDebugRenderingMode(1); //eng->setDebugRenderingMode(1);
//set the walkdirection to 0 (no movement) for every actor) //set the movement keys to 0 (no movement) for every actor)
for(std::map<std::string,OEngine::Physic::PhysicActor*>::iterator it = mEngine->PhysicActorMap.begin(); it != mEngine->PhysicActorMap.end();it++) for(std::map<std::string,OEngine::Physic::PhysicActor*>::iterator it = mEngine->PhysicActorMap.begin(); it != mEngine->PhysicActorMap.end();it++)
{ {
OEngine::Physic::PhysicActor* act = it->second; OEngine::Physic::PhysicActor* act = it->second;
act->setWalkDirection(btVector3(0,0,0)); act->setMovement(0,0,0);
} }
playerMove::playercmd& pm_ref = playerphysics->cmd; playerMove::playercmd& pm_ref = playerphysics->cmd;

@ -35,6 +35,7 @@ namespace Physic
mBoxRotationInverse = btQuaternion(inverse.x, inverse.y, inverse.z,inverse.w); mBoxRotationInverse = btQuaternion(inverse.x, inverse.y, inverse.z,inverse.w);
mEngine->addRigidBody(mBody, false); //Add rigid body to dynamics world, but do not add to object map mEngine->addRigidBody(mBody, false); //Add rigid body to dynamics world, but do not add to object map
pmove = new playerMove; pmove = new playerMove;
pmove->mEngine = mEngine;
} }
PhysicActor::~PhysicActor() PhysicActor::~PhysicActor()
@ -77,9 +78,18 @@ namespace Physic
return collisionMode; return collisionMode;
} }
void PhysicActor::setWalkDirection(const btVector3& mvt) void PhysicActor::setMovement(signed char rightmove, signed char forwardmove, signed char upmove)
{ {
playerMove::playercmd& pm_ref = pmove->cmd;
pm_ref.rightmove = rightmove;
pm_ref.forwardmove = forwardmove;
pm_ref.upmove = upmove;
}
void PhysicActor::setPmoveViewAngles(float pitch, float yaw, float roll){
pmove->ps.viewangles.x = pitch;
pmove->ps.viewangles.y = yaw;
pmove->ps.viewangles.z = roll;
} }
@ -110,6 +120,8 @@ namespace Physic
void PhysicActor::setPosition(const Ogre::Vector3 pos) void PhysicActor::setPosition(const Ogre::Vector3 pos)
{ {
mEngine->adjustRigidBody(mBody, pos, getRotation(), mBoxScaledTranslation, mBoxRotation); mEngine->adjustRigidBody(mBody, pos, getRotation(), mBoxScaledTranslation, mBoxRotation);
btVector3 vec = mBody->getWorldTransform().getOrigin();
pmove->ps.origin = Ogre::Vector3(vec.getX(), vec.getY(), vec.getZ());
} }
void PhysicActor::setScale(float scale){ void PhysicActor::setScale(float scale){
@ -127,6 +139,12 @@ namespace Physic
mEngine->addRigidBody(mBody, false); //Add rigid body to dynamics world, but do not add to object map mEngine->addRigidBody(mBody, false); //Add rigid body to dynamics world, but do not add to object map
} }
void PhysicActor::runPmove(){
Pmove(pmove);
Ogre::Vector3 newpos = pmove->ps.origin;
mBody->getWorldTransform().setOrigin(btVector3(newpos.x, newpos.y, newpos.z));
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////

@ -68,11 +68,9 @@ namespace Physic
void setCurrentWater(bool hasWater, int waterHeight); void setCurrentWater(bool hasWater, int waterHeight);
/** /**
* This function set the walkDirection. This is not relative to the actor orientation. * This function sets the movement keys for pmove
* I think it's also needed to take time into account. A typical call should look like this:
* setWalkDirection( mvt * orientation * dt)
*/ */
void setWalkDirection(const btVector3& mvt); void setMovement(signed char rightmove, signed char forwardmove, signed char upmove);
/** /**
* This adjusts the rotation of a PhysicActor * This adjusts the rotation of a PhysicActor
@ -106,11 +104,22 @@ namespace Physic
*/ */
void setPosition(const Ogre::Vector3 pos); void setPosition(const Ogre::Vector3 pos);
/**
* Sets the view angles for pmove directly.
* Remember, add 90 for yaw. Set roll to 0.
*/
void setPmoveViewAngles(float pitch, float yaw, float roll);
/** /**
* Sets the scale of the PhysicActor * Sets the scale of the PhysicActor
*/ */
void setScale(float scale); void setScale(float scale);
/**
* Runs pmove for this PhysicActor
*/
void runPmove();

Loading…
Cancel
Save