change fly mode behavior to address issue raised in [#30508] - there being no way to pause.

now when reversing direction immediately - fly mode translation will pause until pressed again.
This commit is contained in:
Campbell Barton
2012-03-10 04:19:25 +00:00
parent b1b07fb951
commit d3ffa53f78

View File

@@ -582,35 +582,68 @@ static void flyEvent(FlyInfo *fly, wmEvent *event)
/* implement WASD keys */
case FLY_MODAL_DIR_FORWARD:
if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather than stopping, game like motion */
else if (fly->axis==2) fly->speed += fly->grid; /* increase like mousewheel if were already
* moving in that difection*/
fly->axis= 2;
if (fly->axis == 2 && fly->speed < 0.0f) { /* reverse direction stops, tap again to continue */
fly->axis = -1;
}
else {
if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather than stopping, game like motion */
else if (fly->axis==2) fly->speed += fly->grid; /* increase like mousewheel if were already
* moving in that difection*/
fly->axis= 2;
}
break;
case FLY_MODAL_DIR_BACKWARD:
if (fly->speed > 0.0f) fly->speed= -fly->speed;
else if (fly->axis==2) fly->speed -= fly->grid;
fly->axis= 2;
if (fly->axis == 2 && fly->speed > 0.0f) { /* reverse direction stops, tap again to continue */
fly->axis = -1;
}
else {
if (fly->speed > 0.0f) fly->speed= -fly->speed;
else if (fly->axis==2) fly->speed -= fly->grid;
fly->axis= 2;
}
break;
case FLY_MODAL_DIR_LEFT:
if (fly->speed < 0.0f) fly->speed= -fly->speed;
else if (fly->axis==0) fly->speed += fly->grid;
fly->axis= 0;
if (fly->axis == 0 && fly->speed < 0.0f) { /* reverse direction stops, tap again to continue */
fly->axis = -1;
}
else {
if (fly->speed < 0.0f) fly->speed= -fly->speed;
else if (fly->axis==0) fly->speed += fly->grid;
fly->axis= 0;
}
break;
case FLY_MODAL_DIR_RIGHT:
if (fly->speed > 0.0f) fly->speed= -fly->speed;
else if (fly->axis==0) fly->speed -= fly->grid;
fly->axis= 0;
if (fly->axis == 0 && fly->speed > 0.0f) { /* reverse direction stops, tap again to continue */
fly->axis = -1;
}
else {
if (fly->speed > 0.0f) fly->speed= -fly->speed;
else if (fly->axis==0) fly->speed -= fly->grid;
fly->axis= 0;
}
break;
case FLY_MODAL_DIR_DOWN:
if (fly->speed < 0.0f) fly->speed= -fly->speed;
else if (fly->axis==1) fly->speed += fly->grid;
fly->axis= 1;
if (fly->axis == 1 && fly->speed < 0.0f) { /* reverse direction stops, tap again to continue */
fly->axis = -1;
}
else {
if (fly->speed < 0.0f) fly->speed= -fly->speed;
else if (fly->axis==1) fly->speed += fly->grid;
fly->axis= 1;
}
break;
case FLY_MODAL_DIR_UP:
if (fly->speed > 0.0f) fly->speed= -fly->speed;
else if (fly->axis==1) fly->speed -= fly->grid;
fly->axis= 1;
if (fly->axis == 1 && fly->speed > 0.0f) { /* reverse direction stops, tap again to continue */
fly->axis = -1;
}
else {
if (fly->speed > 0.0f) fly->speed= -fly->speed;
else if (fly->axis==1) fly->speed -= fly->grid;
fly->axis= 1;
}
break;
case FLY_MODAL_AXIS_LOCK_X:
@@ -932,7 +965,10 @@ static int flyApply(bContext *C, FlyInfo *fly)
}
}
if (fly->axis == -1) {
/* pause */
zero_v3(dvec_tmp);
}
if (!fly->use_freelook) {
/* Normal operation */
/* define dvec, view direction vector */