Decoupling player movement from external forces in physics engine
<p>I have a rigid-body physics engine for a game I'm creating, and am unsure of how to implement player movement with it.</p>

<p>The ideal behavior I want is as follows:</p>

<ul>
<li>Player participates properly in collisions, i.e. no direct manipulation of position</li>
<li>Player can start/stop almost instantly, at a fast acceleration/deceleration to a constant velocity/complete stop</li>
<li>Forces acting on the player that are external to the player controller should resolve normally, without being affected by whatever is controlling the player fast start/stop</li>
<li>The player should be able to move to counteract external forces, with the same responsiveness as point #2</li>
</ul>

<p>Currently, I am able to achieve the first 2 points by adding a constant acceleration on player input, then applying exponential drag. This makes the player eventually reach a max velocity, then decelerate quickly once the movement keys are not pressed.</p>

<p>It feels good and responsive, but any external forces I want to subject the player to will also be quickly diminished because of that drag. Is there any way around this?</p>

<p>The game is in 3D first-person, uses impulse resolution, and is coded in C++, if relevant.</p>