mirror of
https://github.com/overte-org/overte.git
synced 2025-06-15 19:39:16 +02:00
commit
514c845b9a
3 changed files with 71 additions and 25 deletions
|
@ -1093,7 +1093,7 @@ void Application::keyPressEvent(QKeyEvent* event) {
|
||||||
_swatch.handleEvent(event->key(), Menu::getInstance()->isOptionChecked(MenuOption::VoxelGetColorMode));
|
_swatch.handleEvent(event->key(), Menu::getInstance()->isOptionChecked(MenuOption::VoxelGetColorMode));
|
||||||
break;
|
break;
|
||||||
case Qt::Key_At:
|
case Qt::Key_At:
|
||||||
Menu::getInstance()->goToUser();
|
Menu::getInstance()->goTo();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
event->ignore();
|
event->ignore();
|
||||||
|
|
|
@ -116,10 +116,10 @@ Menu::Menu() :
|
||||||
this,
|
this,
|
||||||
SLOT(goToLocation()));
|
SLOT(goToLocation()));
|
||||||
addActionToQMenuAndActionHash(fileMenu,
|
addActionToQMenuAndActionHash(fileMenu,
|
||||||
MenuOption::GoToUser,
|
MenuOption::GoTo,
|
||||||
Qt::Key_At,
|
Qt::Key_At,
|
||||||
this,
|
this,
|
||||||
SLOT(goToUser()));
|
SLOT(goTo()));
|
||||||
|
|
||||||
|
|
||||||
addDisabledActionAndSeparator(fileMenu, "Settings");
|
addDisabledActionAndSeparator(fileMenu, "Settings");
|
||||||
|
@ -910,6 +910,60 @@ void Menu::goToDomain() {
|
||||||
sendFakeEnterEvent();
|
sendFakeEnterEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Menu::goTo() {
|
||||||
|
|
||||||
|
QInputDialog gotoDialog(Application::getInstance()->getWindow());
|
||||||
|
gotoDialog.setWindowTitle("Go to");
|
||||||
|
gotoDialog.setLabelText("Destination:");
|
||||||
|
QString destination = Application::getInstance()->getProfile()->getUsername();
|
||||||
|
gotoDialog.setTextValue(destination);
|
||||||
|
gotoDialog.setWindowFlags(Qt::Sheet);
|
||||||
|
gotoDialog.resize(gotoDialog.parentWidget()->size().width() * DIALOG_RATIO_OF_WINDOW, gotoDialog.size().height());
|
||||||
|
|
||||||
|
int dialogReturn = gotoDialog.exec();
|
||||||
|
if (dialogReturn == QDialog::Accepted && !gotoDialog.textValue().isEmpty()) {
|
||||||
|
|
||||||
|
destination = gotoDialog.textValue();
|
||||||
|
|
||||||
|
QStringList coordinateItems = destination.split(QRegExp("_|,"), QString::SkipEmptyParts);
|
||||||
|
|
||||||
|
const int NUMBER_OF_COORDINATE_ITEMS = 3;
|
||||||
|
const int X_ITEM = 0;
|
||||||
|
const int Y_ITEM = 1;
|
||||||
|
const int Z_ITEM = 2;
|
||||||
|
if (coordinateItems.size() == NUMBER_OF_COORDINATE_ITEMS) {
|
||||||
|
|
||||||
|
double x = replaceLastOccurrence('-', '.', coordinateItems[X_ITEM].trimmed()).toDouble();
|
||||||
|
double y = replaceLastOccurrence('-', '.', coordinateItems[Y_ITEM].trimmed()).toDouble();
|
||||||
|
double z = replaceLastOccurrence('-', '.', coordinateItems[Z_ITEM].trimmed()).toDouble();
|
||||||
|
|
||||||
|
glm::vec3 newAvatarPos(x, y, z);
|
||||||
|
|
||||||
|
MyAvatar* myAvatar = Application::getInstance()->getAvatar();
|
||||||
|
glm::vec3 avatarPos = myAvatar->getPosition();
|
||||||
|
if (newAvatarPos != avatarPos) {
|
||||||
|
// send a node kill request, indicating to other clients that they should play the "disappeared" effect
|
||||||
|
MyAvatar::sendKillAvatar();
|
||||||
|
|
||||||
|
qDebug("Going To Location: %f, %f, %f...", x, y, z);
|
||||||
|
myAvatar->setPosition(newAvatarPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// there's a username entered by the user, make a request to the data-server
|
||||||
|
DataServerClient::getValuesForKeysAndUserString(
|
||||||
|
QStringList()
|
||||||
|
<< DataServerKey::Domain
|
||||||
|
<< DataServerKey::Position
|
||||||
|
<< DataServerKey::Orientation,
|
||||||
|
destination, Application::getInstance()->getProfile());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sendFakeEnterEvent();
|
||||||
|
}
|
||||||
|
|
||||||
void Menu::goToLocation() {
|
void Menu::goToLocation() {
|
||||||
MyAvatar* myAvatar = Application::getInstance()->getAvatar();
|
MyAvatar* myAvatar = Application::getInstance()->getAvatar();
|
||||||
glm::vec3 avatarPos = myAvatar->getPosition();
|
glm::vec3 avatarPos = myAvatar->getPosition();
|
||||||
|
@ -954,26 +1008,6 @@ void Menu::goToLocation() {
|
||||||
sendFakeEnterEvent();
|
sendFakeEnterEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::goToUser() {
|
|
||||||
QInputDialog userDialog(Application::getInstance()->getWindow());
|
|
||||||
userDialog.setWindowTitle("Go to User");
|
|
||||||
userDialog.setLabelText("Destination user:");
|
|
||||||
QString username = Application::getInstance()->getProfile()->getUsername();
|
|
||||||
userDialog.setTextValue(username);
|
|
||||||
userDialog.setWindowFlags(Qt::Sheet);
|
|
||||||
userDialog.resize(userDialog.parentWidget()->size().width() * DIALOG_RATIO_OF_WINDOW, userDialog.size().height());
|
|
||||||
|
|
||||||
int dialogReturn = userDialog.exec();
|
|
||||||
if (dialogReturn == QDialog::Accepted && !userDialog.textValue().isEmpty()) {
|
|
||||||
// there's a username entered by the user, make a request to the data-server
|
|
||||||
DataServerClient::getValuesForKeysAndUserString(
|
|
||||||
QStringList() << DataServerKey::Domain << DataServerKey::Position << DataServerKey::Orientation,
|
|
||||||
userDialog.textValue(), Application::getInstance()->getProfile());
|
|
||||||
}
|
|
||||||
|
|
||||||
sendFakeEnterEvent();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Menu::pasteToVoxel() {
|
void Menu::pasteToVoxel() {
|
||||||
QInputDialog pasteToOctalCodeDialog(Application::getInstance()->getWindow());
|
QInputDialog pasteToOctalCodeDialog(Application::getInstance()->getWindow());
|
||||||
pasteToOctalCodeDialog.setWindowTitle("Paste to Voxel");
|
pasteToOctalCodeDialog.setWindowTitle("Paste to Voxel");
|
||||||
|
@ -1137,3 +1171,14 @@ void Menu::updateFrustumRenderModeAction() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString Menu::replaceLastOccurrence(QChar search, QChar replace, QString string) {
|
||||||
|
int lastIndex;
|
||||||
|
lastIndex = string.lastIndexOf(search);
|
||||||
|
if (lastIndex > 0) {
|
||||||
|
lastIndex = string.lastIndexOf(search);
|
||||||
|
string.replace(lastIndex, 1, replace);
|
||||||
|
}
|
||||||
|
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ public slots:
|
||||||
void saveSettings(QSettings* settings = NULL);
|
void saveSettings(QSettings* settings = NULL);
|
||||||
void importSettings();
|
void importSettings();
|
||||||
void exportSettings();
|
void exportSettings();
|
||||||
void goToUser();
|
void goTo();
|
||||||
void pasteToVoxel();
|
void pasteToVoxel();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
@ -152,6 +152,7 @@ private:
|
||||||
QAction* _useVoxelShader;
|
QAction* _useVoxelShader;
|
||||||
int _maxVoxelPacketsPerSecond;
|
int _maxVoxelPacketsPerSecond;
|
||||||
QMenu* _activeScriptsMenu;
|
QMenu* _activeScriptsMenu;
|
||||||
|
QString replaceLastOccurrence(QChar search, QChar replace, QString string);
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace MenuOption {
|
namespace MenuOption {
|
||||||
|
@ -209,7 +210,7 @@ namespace MenuOption {
|
||||||
const QString GlowMode = "Cycle Glow Mode";
|
const QString GlowMode = "Cycle Glow Mode";
|
||||||
const QString GoToDomain = "Go To Domain...";
|
const QString GoToDomain = "Go To Domain...";
|
||||||
const QString GoToLocation = "Go To Location...";
|
const QString GoToLocation = "Go To Location...";
|
||||||
const QString GoToUser = "Go To User...";
|
const QString GoTo = "Go To...";
|
||||||
const QString ImportVoxels = "Import Voxels";
|
const QString ImportVoxels = "Import Voxels";
|
||||||
const QString ImportVoxelsClipboard = "Import Voxels to Clipboard";
|
const QString ImportVoxelsClipboard = "Import Voxels to Clipboard";
|
||||||
const QString IncreaseAvatarSize = "Increase Avatar Size";
|
const QString IncreaseAvatarSize = "Increase Avatar Size";
|
||||||
|
|
Loading…
Reference in a new issue