mirror of
https://github.com/overte-org/overte.git
synced 2025-08-16 10:32:19 +02:00
commit
02a21c7196
3 changed files with 88 additions and 64 deletions
|
@ -820,13 +820,15 @@ function handeMenuEvent(menuItem) {
|
|||
Menu.menuItemEvent.connect(handeMenuEvent);
|
||||
|
||||
Controller.keyPressEvent.connect(function(event) {
|
||||
if (event.text == 'w' || event.text == 'a' || event.text == 's' || event.text == 'd'
|
||||
|| event.text == 'UP' || event.text == 'DOWN' || event.text == 'LEFT' || event.text == 'RIGHT') {
|
||||
toolBar.setActive(false);
|
||||
if (isActive) {
|
||||
cameraManager.keyPressEvent(event);
|
||||
}
|
||||
});
|
||||
|
||||
Controller.keyReleaseEvent.connect(function (event) {
|
||||
if (isActive) {
|
||||
cameraManager.keyReleaseEvent(event);
|
||||
}
|
||||
// since sometimes our menu shortcut keys don't work, trap our menu items here also and fire the appropriate menu items
|
||||
if (event.text == "BACKSPACE" || event.text == "DELETE") {
|
||||
deleteSelectedEntities();
|
||||
|
@ -850,55 +852,6 @@ Controller.keyReleaseEvent.connect(function (event) {
|
|||
newPosition = Vec3.subtract(newPosition, { x: 0, y: selectionManager.worldDimensions.y * 0.5, z: 0 });
|
||||
grid.setPosition(newPosition);
|
||||
}
|
||||
} else if (isActive) {
|
||||
var delta = null;
|
||||
var increment = event.isShifted ? grid.getMajorIncrement() : grid.getMinorIncrement();
|
||||
|
||||
if (event.text == 'UP') {
|
||||
if (event.isControl || event.isAlt) {
|
||||
delta = { x: 0, y: increment, z: 0 };
|
||||
} else {
|
||||
delta = { x: 0, y: 0, z: -increment };
|
||||
}
|
||||
} else if (event.text == 'DOWN') {
|
||||
if (event.isControl || event.isAlt) {
|
||||
delta = { x: 0, y: -increment, z: 0 };
|
||||
} else {
|
||||
delta = { x: 0, y: 0, z: increment };
|
||||
}
|
||||
} else if (event.text == 'LEFT') {
|
||||
delta = { x: -increment, y: 0, z: 0 };
|
||||
} else if (event.text == 'RIGHT') {
|
||||
delta = { x: increment, y: 0, z: 0 };
|
||||
}
|
||||
|
||||
if (delta != null) {
|
||||
// Adjust delta so that movements are relative to the current camera orientation
|
||||
var lookDirection = Quat.getFront(Camera.getOrientation());
|
||||
lookDirection.z *= -1;
|
||||
|
||||
var angle = Math.atan2(lookDirection.z, lookDirection.x);
|
||||
angle -= (Math.PI / 4);
|
||||
|
||||
var rotation = Math.floor(angle / (Math.PI / 2)) * (Math.PI / 2);
|
||||
var rotator = Quat.fromPitchYawRollRadians(0, rotation, 0);
|
||||
|
||||
delta = Vec3.multiplyQbyV(rotator, delta);
|
||||
|
||||
SelectionManager.saveProperties();
|
||||
|
||||
for (var i = 0; i < selectionManager.selections.length; i++) {
|
||||
var entityID = selectionManager.selections[i];
|
||||
var properties = Entities.getEntityProperties(entityID);
|
||||
Entities.editEntity(entityID, {
|
||||
position: Vec3.sum(properties.position, delta)
|
||||
});
|
||||
}
|
||||
|
||||
pushCommandForSelections();
|
||||
|
||||
selectionManager._update();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -15,6 +15,9 @@ var MOUSE_SENSITIVITY = 0.9;
|
|||
var SCROLL_SENSITIVITY = 0.05;
|
||||
var PAN_ZOOM_SCALE_RATIO = 0.4;
|
||||
|
||||
var KEY_ORBIT_SENSITIVITY = 40;
|
||||
var KEY_ZOOM_SENSITIVITY = 10;
|
||||
|
||||
// Scaling applied based on the size of the object being focused
|
||||
var FOCUS_ZOOM_SCALE = 1.3;
|
||||
|
||||
|
@ -43,6 +46,10 @@ var easeOutCubic = function(t) {
|
|||
|
||||
EASE_TIME = 0.5;
|
||||
|
||||
function clamp(value, minimum, maximum) {
|
||||
return Math.min(Math.max(value, minimum), maximum);
|
||||
}
|
||||
|
||||
function mergeObjects(obj1, obj2) {
|
||||
var newObj = {};
|
||||
for (key in obj1) {
|
||||
|
@ -60,6 +67,49 @@ CameraManager = function() {
|
|||
that.enabled = false;
|
||||
that.mode = MODE_INACTIVE;
|
||||
|
||||
var actions = {
|
||||
orbitLeft: 0,
|
||||
orbitRight: 0,
|
||||
orbitUp: 0,
|
||||
orbitDown: 0,
|
||||
orbitForward: 0,
|
||||
orbitBackward: 0,
|
||||
}
|
||||
|
||||
var keyToActionMapping = {
|
||||
"a": "orbitLeft",
|
||||
"d": "orbitRight",
|
||||
"w": "orbitForward",
|
||||
"s": "orbitBackward",
|
||||
"e": "orbitUp",
|
||||
"c": "orbitDown",
|
||||
|
||||
"LEFT": "orbitLeft",
|
||||
"RIGHT": "orbitRight",
|
||||
"UP": "orbitForward",
|
||||
"DOWN": "orbitBackward",
|
||||
}
|
||||
|
||||
var CAPTURED_KEYS = [];
|
||||
for (key in keyToActionMapping) {
|
||||
CAPTURED_KEYS.push(key);
|
||||
}
|
||||
|
||||
function getActionForKeyEvent(event) {
|
||||
var action = keyToActionMapping[event.text];
|
||||
if (action !== undefined) {
|
||||
if (event.isShifted) {
|
||||
if (action == "orbitForward") {
|
||||
action = "orbitUp";
|
||||
} else if (action == "orbitBackward") {
|
||||
action = "orbitDown";
|
||||
}
|
||||
}
|
||||
return action;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
that.zoomDistance = INITIAL_ZOOM_DISTANCE;
|
||||
that.targetZoomDistance = INITIAL_ZOOM_DISTANCE;
|
||||
|
||||
|
@ -82,6 +132,10 @@ CameraManager = function() {
|
|||
that.enable = function() {
|
||||
if (Camera.mode == "independent" || that.enabled) return;
|
||||
|
||||
for (var i = 0; i < CAPTURED_KEYS.length; i++) {
|
||||
Controller.captureKeyEvents({ text: CAPTURED_KEYS[i] });
|
||||
}
|
||||
|
||||
that.enabled = true;
|
||||
that.mode = MODE_INACTIVE;
|
||||
|
||||
|
@ -112,6 +166,11 @@ CameraManager = function() {
|
|||
|
||||
that.disable = function(ignoreCamera) {
|
||||
if (!that.enabled) return;
|
||||
|
||||
for (var i = 0; i < CAPTURED_KEYS.length; i++) {
|
||||
Controller.releaseKeyEvents({ text: CAPTURED_KEYS[i] });
|
||||
}
|
||||
|
||||
that.enabled = false;
|
||||
that.mode = MODE_INACTIVE;
|
||||
|
||||
|
@ -280,6 +339,20 @@ CameraManager = function() {
|
|||
that.mode = MODE_INACTIVE;
|
||||
}
|
||||
|
||||
that.keyPressEvent = function(event) {
|
||||
var action = getActionForKeyEvent(event);
|
||||
if (action) {
|
||||
actions[action] = 1;
|
||||
}
|
||||
};
|
||||
|
||||
that.keyReleaseEvent = function(event) {
|
||||
var action = getActionForKeyEvent(event);
|
||||
if (action) {
|
||||
actions[action] = 0;
|
||||
}
|
||||
};
|
||||
|
||||
that.wheelEvent = function(event) {
|
||||
if (!that.enabled) return;
|
||||
|
||||
|
@ -333,6 +406,14 @@ CameraManager = function() {
|
|||
return;
|
||||
}
|
||||
|
||||
// Update based on current actions
|
||||
that.targetYaw += (actions.orbitRight - actions.orbitLeft) * dt * KEY_ORBIT_SENSITIVITY;
|
||||
that.targetPitch += (actions.orbitUp - actions.orbitDown) * dt * KEY_ORBIT_SENSITIVITY;
|
||||
that.targetPitch = clamp(that.targetPitch, -90, 90);
|
||||
that.targetZoomDistance += (actions.orbitBackward - actions.orbitForward) * dt * KEY_ZOOM_SENSITIVITY;
|
||||
that.targetZoomDistance = clamp(that.targetZoomDistance, MIN_ZOOM_DISTANCE, MAX_ZOOM_DISTANCE);
|
||||
|
||||
|
||||
if (easing) {
|
||||
easingTime = Math.min(EASE_TIME, easingTime + dt);
|
||||
}
|
||||
|
@ -384,6 +465,7 @@ CameraManager = function() {
|
|||
});
|
||||
|
||||
Script.update.connect(that.update);
|
||||
Script.scriptEnding.connect(that.disable);
|
||||
|
||||
Controller.wheelEvent.connect(that.wheelEvent);
|
||||
|
||||
|
|
|
@ -292,7 +292,6 @@ GridTool = function(opts) {
|
|||
];
|
||||
|
||||
// Add all overlays from spritesheet
|
||||
var baseOverlay = null;
|
||||
var x = 0;
|
||||
for (var i = 0; i < UI_SPRITE_LIST.length; i++) {
|
||||
var info = UI_SPRITE_LIST[i];
|
||||
|
@ -306,17 +305,7 @@ GridTool = function(opts) {
|
|||
visible: false,
|
||||
};
|
||||
|
||||
var overlay;
|
||||
if (baseOverlay == null) {
|
||||
overlay = Overlays.addOverlay("image", {
|
||||
imageURL: UI_URL,
|
||||
});
|
||||
baseOverlay = overlay;
|
||||
} else {
|
||||
overlay = Overlays.cloneOverlay(baseOverlay);
|
||||
}
|
||||
|
||||
Overlays.editOverlay(overlay, props);
|
||||
var overlay = Overlays.addOverlay("image", props);
|
||||
|
||||
addUIOverlay(info.name, overlay, x, 0, info.width, UI_HEIGHT);
|
||||
|
||||
|
|
Loading…
Reference in a new issue