mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-05 15:45:33 +00:00
Merge remote branch 'star/master' into movement
This commit is contained in:
commit
eb5e4427c1
5 changed files with 134 additions and 14 deletions
|
@ -48,6 +48,26 @@ namespace MWInput
|
|||
|
||||
A_Activate,
|
||||
|
||||
A_Use, //Use weapon, spell, etc.
|
||||
A_Jump,
|
||||
A_AutoMove, //Toggle Auto-move forward
|
||||
A_Rest, //Rest
|
||||
A_Journal, //Journal
|
||||
A_Weapon, //Draw/Sheath weapon
|
||||
A_Spell, //Ready/Unready Casting
|
||||
A_AlwaysRun, //Toggle Always Run
|
||||
A_CycleSpellLeft, //cycling through spells
|
||||
A_CycleSpellRight,
|
||||
A_CycleWeaponLeft,//Cycling through weapons
|
||||
A_CycleWeaponRight,
|
||||
A_ToggleSneak, //Toggles Sneak, add Push-Sneak later
|
||||
A_ToggleWalk, //Toggle Walking/Running
|
||||
|
||||
A_QuickSave,
|
||||
A_QuickLoad,
|
||||
A_QuickMenu,
|
||||
A_GameMenu,
|
||||
|
||||
A_LAST // Marker for the last item
|
||||
};
|
||||
|
||||
|
@ -68,11 +88,14 @@ namespace MWInput
|
|||
// Count screenshots.
|
||||
int shotCount;
|
||||
|
||||
|
||||
/* InputImpl Methods */
|
||||
|
||||
// Write screenshot to file.
|
||||
void screenshot()
|
||||
{
|
||||
// Find the first unused filename.
|
||||
//
|
||||
|
||||
// Find the first unused filename with a do-while
|
||||
char buf[50];
|
||||
do
|
||||
{
|
||||
|
@ -82,8 +105,8 @@ namespace MWInput
|
|||
ogre.screenshot(buf);
|
||||
}
|
||||
|
||||
// Called when the user presses the button to toggle the inventory
|
||||
// screen.
|
||||
|
||||
/* toggleInventory() is called when the user presses the button to toggle the inventory screen. */
|
||||
void toggleInventory()
|
||||
{
|
||||
using namespace MWGui;
|
||||
|
@ -118,6 +141,21 @@ namespace MWInput
|
|||
mEngine.activate();
|
||||
}
|
||||
|
||||
void toggleAutoMove()
|
||||
{
|
||||
if (player.getAutoMove() == false)
|
||||
{
|
||||
player.setAutoMove(true);
|
||||
} else {
|
||||
player.setAutoMove(false);
|
||||
}
|
||||
}
|
||||
|
||||
void toggleWalking()
|
||||
{
|
||||
player.setisWalking(true);
|
||||
}
|
||||
|
||||
// Exit program now button (which is disabled in GUI mode)
|
||||
void exitNow()
|
||||
{
|
||||
|
@ -159,7 +197,10 @@ namespace MWInput
|
|||
"Toggle console");
|
||||
disp->funcs.bind(A_Activate, boost::bind(&InputImpl::activate, this),
|
||||
"Activate");
|
||||
|
||||
disp->funcs.bind(A_AutoMove, boost::bind(&InputImpl::toggleAutoMove, this),
|
||||
"Auto Move");
|
||||
disp->funcs.bind(A_ToggleWalk, boost::bind(&InputImpl::toggleWalking, this),
|
||||
"Toggle Walk/Run");
|
||||
|
||||
// Add the exit listener
|
||||
ogre.getRoot()->addFrameListener(&exit);
|
||||
|
@ -195,6 +236,7 @@ namespace MWInput
|
|||
**********************************/
|
||||
|
||||
// Key bindings for keypress events
|
||||
// NOTE: These keys do not require constant polling - use in conjuction with variables in loops.
|
||||
|
||||
disp->bind(A_Quit, KC_Q);
|
||||
disp->bind(A_Quit, KC_ESCAPE);
|
||||
|
@ -202,8 +244,12 @@ namespace MWInput
|
|||
disp->bind(A_Inventory, KC_I);
|
||||
disp->bind(A_Console, KC_F1);
|
||||
disp->bind(A_Activate, KC_SPACE);
|
||||
disp->bind(A_AutoMove, KC_Z);
|
||||
disp->bind(A_ToggleSneak, KC_X);
|
||||
disp->bind(A_ToggleWalk, KC_C);
|
||||
|
||||
// Key bindings for polled keys
|
||||
// NOTE: These keys are constantly being polled. Only add keys that must be checked each frame.
|
||||
|
||||
// Arrow keys
|
||||
poller.bind(A_MoveLeft, KC_LEFT);
|
||||
|
@ -222,7 +268,7 @@ namespace MWInput
|
|||
poller.bind(A_MoveDown, KC_LCONTROL);
|
||||
}
|
||||
|
||||
// Used to check for movement keys
|
||||
//NOTE: Used to check for movement keys
|
||||
bool frameStarted(const Ogre::FrameEvent &evt)
|
||||
{
|
||||
// Tell OIS to handle all input events
|
||||
|
@ -239,13 +285,40 @@ namespace MWInput
|
|||
// Disable movement in Gui mode
|
||||
if(windows.isGuiMode()) return true;
|
||||
|
||||
float speed = 300 * evt.timeSinceLastFrame;
|
||||
float speed = 300 * evt.timeSinceLastFrame; //placeholder player speed?
|
||||
//float TESTwalkSpeed = 100 * evt.timeSinceLastFrame; //How about another?
|
||||
|
||||
float moveX = 0, moveY = 0, moveZ = 0;
|
||||
|
||||
if(poller.isDown(A_MoveLeft)) moveX -= speed;
|
||||
if(poller.isDown(A_MoveRight)) moveX += speed;
|
||||
if(poller.isDown(A_MoveForward)) moveZ -= speed;
|
||||
if(poller.isDown(A_MoveBackward)) moveZ += speed;
|
||||
//execute Automove - condition checked in function
|
||||
player.executeAutoMove((float)evt.timeSinceLastFrame); //or since last frame?
|
||||
|
||||
//Poll and execute movement keys - will disable automove if pressed.
|
||||
if(poller.isDown(A_MoveLeft))
|
||||
{
|
||||
player.setAutoMove(false);
|
||||
moveX -= speed;
|
||||
|
||||
}
|
||||
|
||||
if(poller.isDown(A_MoveRight))
|
||||
{
|
||||
player.setAutoMove(false);
|
||||
moveX += speed;
|
||||
}
|
||||
|
||||
if(poller.isDown(A_MoveForward))
|
||||
{
|
||||
player.setAutoMove(false);
|
||||
moveZ -= speed;
|
||||
}
|
||||
|
||||
if(poller.isDown(A_MoveBackward))
|
||||
{
|
||||
player.setAutoMove(false);
|
||||
moveZ += speed;
|
||||
}
|
||||
|
||||
|
||||
// TODO: These should be enabled for floating modes (like
|
||||
// swimming and levitation) and disabled for everything else.
|
||||
|
@ -288,6 +361,7 @@ namespace MWInput
|
|||
}
|
||||
};
|
||||
|
||||
/***CONSTRUCTOR***/
|
||||
MWInputManager::MWInputManager(OEngine::Render::OgreRenderer &ogre,
|
||||
MWWorld::Player &player,
|
||||
MWGui::WindowManager &windows,
|
||||
|
@ -297,6 +371,7 @@ namespace MWInput
|
|||
impl = new InputImpl(ogre,player,windows,debug, engine);
|
||||
}
|
||||
|
||||
/***DESTRUCTOR***/
|
||||
MWInputManager::~MWInputManager()
|
||||
{
|
||||
delete impl;
|
||||
|
|
|
@ -16,6 +16,8 @@ namespace MWWorld
|
|||
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));
|
||||
mAutoMove = false;
|
||||
misWalking = false;
|
||||
}
|
||||
|
||||
Player::~Player()
|
||||
|
@ -61,4 +63,5 @@ namespace MWWorld
|
|||
delete mClass;
|
||||
mClass = new_class;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,6 +31,9 @@ namespace MWWorld
|
|||
ESM::Class *mClass;
|
||||
bool mCollisionMode;
|
||||
|
||||
bool mAutoMove;
|
||||
bool misWalking; //Testing...
|
||||
|
||||
public:
|
||||
|
||||
Player(MWRender::Player *renderer, const ESM::NPC *player, MWWorld::World& world);
|
||||
|
@ -108,6 +111,45 @@ namespace MWWorld
|
|||
{
|
||||
mCollisionMode = !mCollisionMode;
|
||||
}
|
||||
|
||||
bool getAutoMove()
|
||||
{
|
||||
return mAutoMove;
|
||||
}
|
||||
|
||||
void setAutoMove(bool setMe)
|
||||
{
|
||||
mAutoMove = setMe;
|
||||
}
|
||||
|
||||
//NOTE: we don't have speed being calculated yet, so for now this function only requires a frame duration.
|
||||
/// <param name="duration">float value representing time since last call</param>
|
||||
void executeAutoMove(float duration)
|
||||
{
|
||||
float X_Val = 0.0f;
|
||||
float Y_Val = 0.0f;
|
||||
float Z_Val = 300.0f * duration * -1.0f;
|
||||
if (mAutoMove == true)
|
||||
{
|
||||
//if player is running
|
||||
//Make player go at full speed
|
||||
moveRel(X_Val, Y_Val, Z_Val);
|
||||
//else go forward at walk speed.
|
||||
}
|
||||
}
|
||||
|
||||
bool getisWalking()
|
||||
{
|
||||
return misWalking;
|
||||
}
|
||||
|
||||
void setisWalking(bool setMe)
|
||||
{
|
||||
misWalking = setMe;
|
||||
}
|
||||
|
||||
|
||||
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 12e5c8d704b959c78a62931b2360d18092b82c3d
|
||||
Subproject commit 7345f2307f3ce6682a4044b98a811fac2cb7c4f0
|
|
@ -1 +1 @@
|
|||
Subproject commit 7185eab18c29a0a5e03e44690d6bd8ece7e3792b
|
||||
Subproject commit 377e7d71ceea5a1ca166b8df9a03a5b68df83bc5
|
Loading…
Reference in a new issue