mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 05:17:24 +02:00
Update commands for speechControl.js
This commit is contained in:
parent
9127ac24a0
commit
6437ca1b50
1 changed files with 150 additions and 47 deletions
|
@ -9,90 +9,193 @@
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
|
|
||||||
|
var ACCELERATION = 80;
|
||||||
|
var STEP_DURATION = 1.0; // Duration of a step command in seconds
|
||||||
|
var TURN_DEGREES = 90;
|
||||||
|
var SLIGHT_TURN_DEGREES = 45;
|
||||||
|
var TURN_AROUND_DEGREES = 180;
|
||||||
|
var TURN_RATE = 90; // Turn rate in degrees per second
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/** COMMANDS *****************************************************************/
|
||||||
var CMD_MOVE_FORWARD = "Move forward";
|
var CMD_MOVE_FORWARD = "Move forward";
|
||||||
var CMD_MOVE_BACKWARD = "Move backward";
|
var CMD_MOVE_BACKWARD = "Move backward";
|
||||||
var CMD_MOVE_UP = "Move up";
|
var CMD_MOVE_UP = "Move up";
|
||||||
var CMD_MOVE_DOWN = "Move down";
|
var CMD_MOVE_DOWN = "Move down";
|
||||||
var CMD_STRAFE_LEFT = "Strafe left";
|
var CMD_MOVE_LEFT = "Move left";
|
||||||
var CMD_STRAFE_RIGHT = "Strafe right";
|
var CMD_MOVE_RIGHT = "Move right";
|
||||||
|
|
||||||
|
var CMD_STEP_FORWARD = "Step forward";
|
||||||
|
var CMD_STEP_BACKWARD = "Step backward";
|
||||||
|
var CMD_STEP_LEFT = "Step left";
|
||||||
|
var CMD_STEP_RIGHT = "Step right";
|
||||||
|
var CMD_STEP_UP = "Step up";
|
||||||
|
var CMD_STEP_DOWN = "Step down";
|
||||||
|
|
||||||
|
var CMD_TURN_LEFT = "Turn left";
|
||||||
|
var CMD_TURN_SLIGHT_LEFT = "Turn slight left";
|
||||||
|
var CMD_TURN_RIGHT = "Turn right";
|
||||||
|
var CMD_TURN_SLIGHT_RIGHT = "Turn slight right";
|
||||||
|
var CMD_TURN_AROUND = "Turn around";
|
||||||
|
|
||||||
var CMD_STOP = "Stop";
|
var CMD_STOP = "Stop";
|
||||||
|
|
||||||
var CMD_SHOW_COMMANDS = "Show commands";
|
var CMD_SHOW_COMMANDS = "Show commands";
|
||||||
|
|
||||||
var commands = [
|
var MOVE_COMMANDS = [
|
||||||
CMD_MOVE_FORWARD,
|
CMD_MOVE_FORWARD,
|
||||||
CMD_MOVE_BACKWARD,
|
CMD_MOVE_BACKWARD,
|
||||||
CMD_MOVE_UP,
|
CMD_MOVE_UP,
|
||||||
CMD_MOVE_DOWN,
|
CMD_MOVE_DOWN,
|
||||||
CMD_STRAFE_LEFT,
|
CMD_MOVE_LEFT,
|
||||||
CMD_STRAFE_RIGHT,
|
CMD_MOVE_RIGHT,
|
||||||
|
];
|
||||||
|
|
||||||
|
var STEP_COMMANDS = [
|
||||||
|
CMD_STEP_FORWARD,
|
||||||
|
CMD_STEP_BACKWARD,
|
||||||
|
CMD_STEP_UP,
|
||||||
|
CMD_STEP_DOWN,
|
||||||
|
CMD_STEP_LEFT,
|
||||||
|
CMD_STEP_RIGHT,
|
||||||
|
];
|
||||||
|
|
||||||
|
var TURN_COMMANDS = [
|
||||||
|
CMD_TURN_LEFT,
|
||||||
|
CMD_TURN_SLIGHT_LEFT,
|
||||||
|
CMD_TURN_RIGHT,
|
||||||
|
CMD_TURN_SLIGHT_RIGHT,
|
||||||
|
CMD_TURN_AROUND,
|
||||||
|
];
|
||||||
|
|
||||||
|
var OTHER_COMMANDS = [
|
||||||
CMD_STOP,
|
CMD_STOP,
|
||||||
CMD_SHOW_COMMANDS,
|
CMD_SHOW_COMMANDS,
|
||||||
];
|
];
|
||||||
|
|
||||||
var moveForward = 0;
|
var ALL_COMMANDS = []
|
||||||
var moveRight = 0;
|
.concat(MOVE_COMMANDS)
|
||||||
var turnRight = 0;
|
.concat(STEP_COMMANDS)
|
||||||
var moveUp = 0;
|
.concat(TURN_COMMANDS)
|
||||||
|
.concat(OTHER_COMMANDS);
|
||||||
|
|
||||||
function commandRecognized(command) {
|
/** END OF COMMANDS **********************************************************/
|
||||||
if (command === CMD_MOVE_FORWARD) {
|
/*****************************************************************************/
|
||||||
accel = { x: 0, y: 0, z: 1 };
|
|
||||||
} else if (command == CMD_MOVE_BACKWARD) {
|
|
||||||
accel = { x: 0, y: 0, z: -1 };
|
var currentCommandFunc = null;
|
||||||
} else if (command === CMD_MOVE_UP) {
|
|
||||||
accel = { x: 0, y: 1, z: 0 };
|
function handleCommandRecognized(command) {
|
||||||
} else if (command == CMD_MOVE_DOWN) {
|
if (MOVE_COMMANDS.indexOf(command) > -1 || STEP_COMMANDS.indexOf(command) > -1) {
|
||||||
accel = { x: 0, y: -1, z: 0 };
|
// If this is a STEP_* command, we will want to countdown the duration
|
||||||
} else if (command == CMD_STRAFE_LEFT) {
|
// of time to move. MOVE_* commands don't stop.
|
||||||
accel = { x: -1, y: 0, z: 0 };
|
var timeRemaining = MOVE_COMMANDS.indexOf(command) > -1 ? 0 : STEP_DURATION;
|
||||||
} else if (command == CMD_STRAFE_RIGHT) {
|
var accel = { x: 0, y: 0, z: 0 };
|
||||||
accel = { x: 1, y: 0, z: 0 };
|
|
||||||
|
if (command == CMD_MOVE_FORWARD || command == CMD_STEP_FORWARD) {
|
||||||
|
accel = { x: 0, y: 0, z: 1 };
|
||||||
|
} else if (command == CMD_MOVE_BACKWARD || command == CMD_STEP_BACKWARD) {
|
||||||
|
accel = { x: 0, y: 0, z: -1 };
|
||||||
|
} else if (command === CMD_MOVE_UP || command == CMD_STEP_UP) {
|
||||||
|
accel = { x: 0, y: 1, z: 0 };
|
||||||
|
} else if (command == CMD_MOVE_DOWN || command == CMD_STEP_DOWN) {
|
||||||
|
accel = { x: 0, y: -1, z: 0 };
|
||||||
|
} else if (command == CMD_MOVE_LEFT || command == CMD_STEP_LEFT) {
|
||||||
|
accel = { x: -1, y: 0, z: 0 };
|
||||||
|
} else if (command == CMD_MOVE_RIGHT || command == CMD_STEP_RIGHT) {
|
||||||
|
accel = { x: 1, y: 0, z: 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
currentCommandFunc = function(dt) {
|
||||||
|
if (timeRemaining > 0 && dt >= timeRemaining) {
|
||||||
|
dt = timeRemaining;
|
||||||
|
}
|
||||||
|
|
||||||
|
var headOrientation = MyAvatar.headOrientation;
|
||||||
|
var front = Quat.getFront(headOrientation);
|
||||||
|
var right = Quat.getRight(headOrientation);
|
||||||
|
var up = Quat.getUp(headOrientation);
|
||||||
|
|
||||||
|
var thrust = Vec3.multiply(front, accel.z * ACCELERATION);
|
||||||
|
thrust = Vec3.sum(thrust, Vec3.multiply(right, accel.x * ACCELERATION));
|
||||||
|
thrust = Vec3.sum(thrust, Vec3.multiply(up, accel.y * ACCELERATION));
|
||||||
|
MyAvatar.addThrust(thrust);
|
||||||
|
|
||||||
|
if (timeRemaining > 0) {
|
||||||
|
timeRemaining -= dt;
|
||||||
|
return timeRemaining > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
} else if (TURN_COMMANDS.indexOf(command) > -1) {
|
||||||
|
var degreesRemaining;
|
||||||
|
var sign;
|
||||||
|
if (command == CMD_TURN_LEFT) {
|
||||||
|
sign = 1;
|
||||||
|
degreesRemaining = TURN_DEGREES;
|
||||||
|
} else if (command == CMD_TURN_RIGHT) {
|
||||||
|
sign = -1;
|
||||||
|
degreesRemaining = TURN_DEGREES;
|
||||||
|
} else if (command == CMD_TURN_SLIGHT_LEFT) {
|
||||||
|
sign = 1;
|
||||||
|
degreesRemaining = SLIGHT_TURN_DEGREES;
|
||||||
|
} else if (command == CMD_TURN_SLIGHT_RIGHT) {
|
||||||
|
sign = -1;
|
||||||
|
degreesRemaining = SLIGHT_TURN_DEGREES;
|
||||||
|
} else if (command == CMD_TURN_AROUND) {
|
||||||
|
sign = 1;
|
||||||
|
degreesRemaining = TURN_AROUND_DEGREES;
|
||||||
|
}
|
||||||
|
currentCommandFunc = function(dt) {
|
||||||
|
// Determine how much to turn by
|
||||||
|
var turnAmount = TURN_RATE * dt;
|
||||||
|
if (turnAmount > degreesRemaining) {
|
||||||
|
turnAmount = degreesRemaining;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply turn
|
||||||
|
var orientation = MyAvatar.orientation;
|
||||||
|
var deltaOrientation = Quat.fromPitchYawRollDegrees(0, sign * turnAmount, 0);
|
||||||
|
MyAvatar.orientation = Quat.multiply(orientation, deltaOrientation);
|
||||||
|
|
||||||
|
degreesRemaining -= turnAmount;
|
||||||
|
return turnAmount > 0;
|
||||||
|
}
|
||||||
} else if (command == CMD_STOP) {
|
} else if (command == CMD_STOP) {
|
||||||
accel = { x: 0, y: 0, z: 0 };
|
currentCommandFunc = null;
|
||||||
} else if (command == CMD_SHOW_COMMANDS) {
|
} else if (command == CMD_SHOW_COMMANDS) {
|
||||||
var msg = "";
|
var msg = "";
|
||||||
for (var i = 0; i < commands.length; i++) {
|
for (var i = 0; i < ALL_COMMANDS.length; i++) {
|
||||||
msg += commands[i] + "\n";
|
msg += ALL_COMMANDS[i] + "\n";
|
||||||
}
|
}
|
||||||
Window.alert(msg);
|
Window.alert(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var accel = { x: 0, y: 0, z: 0 };
|
|
||||||
|
|
||||||
var ACCELERATION = 80;
|
|
||||||
var initialized = false;
|
|
||||||
|
|
||||||
function update(dt) {
|
function update(dt) {
|
||||||
var headOrientation = MyAvatar.headOrientation;
|
if (currentCommandFunc) {
|
||||||
var front = Quat.getFront(headOrientation);
|
if (currentCommandFunc(dt) === false) {
|
||||||
var right = Quat.getRight(headOrientation);
|
currentCommandFunc = null;
|
||||||
var up = Quat.getUp(headOrientation);
|
}
|
||||||
|
}
|
||||||
var thrust = Vec3.multiply(front, accel.z * ACCELERATION);
|
|
||||||
thrust = Vec3.sum(thrust, Vec3.multiply(right, accel.x * ACCELERATION));
|
|
||||||
thrust = Vec3.sum(thrust, Vec3.multiply(up, accel.y * ACCELERATION));
|
|
||||||
// print(thrust.x + ", " + thrust.y + ", " + thrust.z);
|
|
||||||
MyAvatar.addThrust(thrust);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function setup() {
|
function setup() {
|
||||||
for (var i = 0; i < commands.length; i++) {
|
for (var i = 0; i < ALL_COMMANDS.length; i++) {
|
||||||
SpeechRecognizer.addCommand(commands[i]);
|
SpeechRecognizer.addCommand(ALL_COMMANDS[i]);
|
||||||
}
|
}
|
||||||
print("SETTING UP");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function scriptEnding() {
|
function scriptEnding() {
|
||||||
print("ENDING");
|
for (var i = 0; i < ALL_COMMANDS.length; i++) {
|
||||||
for (var i = 0; i < commands.length; i++) {
|
SpeechRecognizer.removeCommand(ALL_COMMANDS[i]);
|
||||||
SpeechRecognizer.removeCommand(commands[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Script.scriptEnding.connect(scriptEnding);
|
Script.scriptEnding.connect(scriptEnding);
|
||||||
Script.update.connect(update);
|
Script.update.connect(update);
|
||||||
SpeechRecognizer.commandRecognized.connect(commandRecognized);
|
SpeechRecognizer.commandRecognized.connect(handleCommandRecognized);
|
||||||
|
|
||||||
setup();
|
setup();
|
||||||
|
|
Loading…
Reference in a new issue