mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 04:23:33 +02:00
First pass
This commit is contained in:
parent
7702bfceaa
commit
9020607ccf
5 changed files with 133 additions and 103 deletions
|
@ -5393,6 +5393,12 @@ void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool se
|
||||||
}
|
}
|
||||||
renderArgs->_debugFlags = renderDebugFlags;
|
renderArgs->_debugFlags = renderDebugFlags;
|
||||||
//ViveControllerManager::getInstance().updateRendering(renderArgs, _main3DScene, transaction);
|
//ViveControllerManager::getInstance().updateRendering(renderArgs, _main3DScene, transaction);
|
||||||
|
|
||||||
|
RenderArgs::OutlineFlags renderOutlineFlags = RenderArgs::RENDER_OUTLINE_NONE;
|
||||||
|
if (DependencyManager::get<ContextOverlayInterface>()->getIsInMarketplaceInspectionMode()) {
|
||||||
|
renderOutlineFlags = static_cast<RenderArgs::OutlineFlags>(renderOutlineFlags |
|
||||||
|
static_cast<int>(RenderArgs::RENDER_OUTLINE_WIREFRAMES));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,8 @@ class ContextOverlayInterface : public QObject, public Dependency {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
Q_PROPERTY(QUuid entityWithContextOverlay READ getCurrentEntityWithContextOverlay WRITE setCurrentEntityWithContextOverlay)
|
Q_PROPERTY(QUuid entityWithContextOverlay READ getCurrentEntityWithContextOverlay WRITE setCurrentEntityWithContextOverlay)
|
||||||
Q_PROPERTY(bool enabled READ getEnabled WRITE setEnabled);
|
Q_PROPERTY(bool enabled READ getEnabled WRITE setEnabled)
|
||||||
|
Q_PROPERTY(bool isInMarketplaceInspectionMode READ getIsInMarketplaceInspectionMode WRITE setIsInMarketplaceInspectionMode)
|
||||||
QSharedPointer<EntityScriptingInterface> _entityScriptingInterface;
|
QSharedPointer<EntityScriptingInterface> _entityScriptingInterface;
|
||||||
EntityPropertyFlags _entityPropertyFlags;
|
EntityPropertyFlags _entityPropertyFlags;
|
||||||
QSharedPointer<HMDScriptingInterface> _hmdScriptingInterface;
|
QSharedPointer<HMDScriptingInterface> _hmdScriptingInterface;
|
||||||
|
@ -53,6 +54,8 @@ public:
|
||||||
void setCurrentEntityWithContextOverlay(const QUuid& entityID) { _currentEntityWithContextOverlay = entityID; }
|
void setCurrentEntityWithContextOverlay(const QUuid& entityID) { _currentEntityWithContextOverlay = entityID; }
|
||||||
void setEnabled(bool enabled) { _enabled = enabled; }
|
void setEnabled(bool enabled) { _enabled = enabled; }
|
||||||
bool getEnabled() { return _enabled; }
|
bool getEnabled() { return _enabled; }
|
||||||
|
bool getIsInMarketplaceInspectionMode() { return _isInMarketplaceInspectionMode; }
|
||||||
|
void setIsInMarketplaceInspectionMode(bool mode) { _isInMarketplaceInspectionMode = mode; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
bool createOrDestroyContextOverlay(const EntityItemID& entityItemID, const PointerEvent& event);
|
bool createOrDestroyContextOverlay(const EntityItemID& entityItemID, const PointerEvent& event);
|
||||||
|
@ -70,6 +73,7 @@ private:
|
||||||
bool _contextOverlayJustClicked { false };
|
bool _contextOverlayJustClicked { false };
|
||||||
|
|
||||||
void openMarketplace();
|
void openMarketplace();
|
||||||
|
bool _isInMarketplaceInspectionMode { false };
|
||||||
|
|
||||||
bool contextOverlayFilterPassed(const EntityItemID& entityItemID);
|
bool contextOverlayFilterPassed(const EntityItemID& entityItemID);
|
||||||
glm::vec3 drawOutlineOverlay(const EntityItemID& entityItemID);
|
glm::vec3 drawOutlineOverlay(const EntityItemID& entityItemID);
|
||||||
|
|
|
@ -372,6 +372,18 @@ void RenderableModelEntityItem::render(RenderArgs* args) {
|
||||||
_model->updateRenderItems();
|
_model->updateRenderItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool showingEntityHighlight = (bool)(args->_outlineFlags & (int)RenderArgs::RENDER_OUTLINE_WIREFRAMES);
|
||||||
|
if (getMarketplaceID().length() != 0 && showingEntityHighlight) {
|
||||||
|
static glm::vec4 yellowColor(1.0f, 1.0f, 0.0f, 1.0f);
|
||||||
|
gpu::Batch& batch = *args->_batch;
|
||||||
|
bool success;
|
||||||
|
auto shapeTransform = getTransformToCenter(success);
|
||||||
|
if (success) {
|
||||||
|
batch.setModelTransform(shapeTransform); // we want to include the scale as well
|
||||||
|
DependencyManager::get<GeometryCache>()->renderWireCubeInstance(args, batch, yellowColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!hasModel() || (_model && _model->didVisualGeometryRequestFail())) {
|
if (!hasModel() || (_model && _model->didVisualGeometryRequestFail())) {
|
||||||
static glm::vec4 greenColor(0.0f, 1.0f, 0.0f, 1.0f);
|
static glm::vec4 greenColor(0.0f, 1.0f, 0.0f, 1.0f);
|
||||||
gpu::Batch& batch = *args->_batch;
|
gpu::Batch& batch = *args->_batch;
|
||||||
|
|
|
@ -63,6 +63,11 @@ namespace render {
|
||||||
public:
|
public:
|
||||||
enum RenderMode { DEFAULT_RENDER_MODE, SHADOW_RENDER_MODE, DIFFUSE_RENDER_MODE, NORMAL_RENDER_MODE, MIRROR_RENDER_MODE, SECONDARY_CAMERA_RENDER_MODE };
|
enum RenderMode { DEFAULT_RENDER_MODE, SHADOW_RENDER_MODE, DIFFUSE_RENDER_MODE, NORMAL_RENDER_MODE, MIRROR_RENDER_MODE, SECONDARY_CAMERA_RENDER_MODE };
|
||||||
enum DisplayMode { MONO, STEREO_MONITOR, STEREO_HMD };
|
enum DisplayMode { MONO, STEREO_MONITOR, STEREO_HMD };
|
||||||
|
enum OutlineFlags {
|
||||||
|
RENDER_OUTLINE_NONE = 0,
|
||||||
|
RENDER_OUTLINE_WIREFRAMES = 1,
|
||||||
|
RENDER_OUTLINE_SHADER = 2
|
||||||
|
};
|
||||||
enum DebugFlags {
|
enum DebugFlags {
|
||||||
RENDER_DEBUG_NONE = 0,
|
RENDER_DEBUG_NONE = 0,
|
||||||
RENDER_DEBUG_HULLS = 1
|
RENDER_DEBUG_HULLS = 1
|
||||||
|
@ -112,6 +117,7 @@ namespace render {
|
||||||
int _boundaryLevelAdjust { 0 };
|
int _boundaryLevelAdjust { 0 };
|
||||||
RenderMode _renderMode { DEFAULT_RENDER_MODE };
|
RenderMode _renderMode { DEFAULT_RENDER_MODE };
|
||||||
DisplayMode _displayMode { MONO };
|
DisplayMode _displayMode { MONO };
|
||||||
|
OutlineFlags _outlineFlags{ RENDER_OUTLINE_NONE };
|
||||||
DebugFlags _debugFlags { RENDER_DEBUG_NONE };
|
DebugFlags _debugFlags { RENDER_DEBUG_NONE };
|
||||||
gpu::Batch* _batch = nullptr;
|
gpu::Batch* _batch = nullptr;
|
||||||
|
|
||||||
|
|
|
@ -11,135 +11,137 @@
|
||||||
/* global Tablet, Script, HMD, UserActivityLogger, Entities */
|
/* global Tablet, Script, HMD, UserActivityLogger, Entities */
|
||||||
/* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */
|
/* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */
|
||||||
|
|
||||||
(function() { // BEGIN LOCAL_SCOPE
|
(function () { // BEGIN LOCAL_SCOPE
|
||||||
|
|
||||||
Script.include("../libraries/WebTablet.js");
|
Script.include("../libraries/WebTablet.js");
|
||||||
|
|
||||||
var MARKETPLACE_URL = "https://metaverse.highfidelity.com/marketplace";
|
var MARKETPLACE_URL = "https://metaverse.highfidelity.com/marketplace";
|
||||||
var MARKETPLACE_URL_INITIAL = MARKETPLACE_URL + "?"; // Append "?" to signal injected script that it's the initial page.
|
var MARKETPLACE_URL_INITIAL = MARKETPLACE_URL + "?"; // Append "?" to signal injected script that it's the initial page.
|
||||||
var MARKETPLACES_URL = Script.resolvePath("../html/marketplaces.html");
|
var MARKETPLACES_URL = Script.resolvePath("../html/marketplaces.html");
|
||||||
var MARKETPLACES_INJECT_SCRIPT_URL = Script.resolvePath("../html/js/marketplacesInject.js");
|
var MARKETPLACES_INJECT_SCRIPT_URL = Script.resolvePath("../html/js/marketplacesInject.js");
|
||||||
|
|
||||||
var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png";
|
var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png";
|
||||||
// var HOME_BUTTON_TEXTURE = Script.resourcesPath() + "meshes/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png";
|
// var HOME_BUTTON_TEXTURE = Script.resourcesPath() + "meshes/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png";
|
||||||
|
|
||||||
// Event bridge messages.
|
// Event bridge messages.
|
||||||
var CLARA_IO_DOWNLOAD = "CLARA.IO DOWNLOAD";
|
var CLARA_IO_DOWNLOAD = "CLARA.IO DOWNLOAD";
|
||||||
var CLARA_IO_STATUS = "CLARA.IO STATUS";
|
var CLARA_IO_STATUS = "CLARA.IO STATUS";
|
||||||
var CLARA_IO_CANCEL_DOWNLOAD = "CLARA.IO CANCEL DOWNLOAD";
|
var CLARA_IO_CANCEL_DOWNLOAD = "CLARA.IO CANCEL DOWNLOAD";
|
||||||
var CLARA_IO_CANCELLED_DOWNLOAD = "CLARA.IO CANCELLED DOWNLOAD";
|
var CLARA_IO_CANCELLED_DOWNLOAD = "CLARA.IO CANCELLED DOWNLOAD";
|
||||||
var GOTO_DIRECTORY = "GOTO_DIRECTORY";
|
var GOTO_DIRECTORY = "GOTO_DIRECTORY";
|
||||||
var QUERY_CAN_WRITE_ASSETS = "QUERY_CAN_WRITE_ASSETS";
|
var QUERY_CAN_WRITE_ASSETS = "QUERY_CAN_WRITE_ASSETS";
|
||||||
var CAN_WRITE_ASSETS = "CAN_WRITE_ASSETS";
|
var CAN_WRITE_ASSETS = "CAN_WRITE_ASSETS";
|
||||||
var WARN_USER_NO_PERMISSIONS = "WARN_USER_NO_PERMISSIONS";
|
var WARN_USER_NO_PERMISSIONS = "WARN_USER_NO_PERMISSIONS";
|
||||||
|
|
||||||
var CLARA_DOWNLOAD_TITLE = "Preparing Download";
|
var CLARA_DOWNLOAD_TITLE = "Preparing Download";
|
||||||
var messageBox = null;
|
var messageBox = null;
|
||||||
var isDownloadBeingCancelled = false;
|
var isDownloadBeingCancelled = false;
|
||||||
|
|
||||||
var CANCEL_BUTTON = 4194304; // QMessageBox::Cancel
|
var CANCEL_BUTTON = 4194304; // QMessageBox::Cancel
|
||||||
var NO_BUTTON = 0; // QMessageBox::NoButton
|
var NO_BUTTON = 0; // QMessageBox::NoButton
|
||||||
|
|
||||||
var NO_PERMISSIONS_ERROR_MESSAGE = "Cannot download model because you can't write to \nthe domain's Asset Server.";
|
var NO_PERMISSIONS_ERROR_MESSAGE = "Cannot download model because you can't write to \nthe domain's Asset Server.";
|
||||||
|
|
||||||
function onMessageBoxClosed(id, button) {
|
function onMessageBoxClosed(id, button) {
|
||||||
if (id === messageBox && button === CANCEL_BUTTON) {
|
if (id === messageBox && button === CANCEL_BUTTON) {
|
||||||
isDownloadBeingCancelled = true;
|
isDownloadBeingCancelled = true;
|
||||||
messageBox = null;
|
messageBox = null;
|
||||||
tablet.emitScriptEvent(CLARA_IO_CANCEL_DOWNLOAD);
|
tablet.emitScriptEvent(CLARA_IO_CANCEL_DOWNLOAD);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Window.messageBoxClosed.connect(onMessageBoxClosed);
|
Window.messageBoxClosed.connect(onMessageBoxClosed);
|
||||||
|
|
||||||
var onMarketplaceScreen = false;
|
var onMarketplaceScreen = false;
|
||||||
|
|
||||||
function showMarketplace() {
|
function showMarketplace() {
|
||||||
UserActivityLogger.openedMarketplace();
|
UserActivityLogger.openedMarketplace();
|
||||||
tablet.gotoWebScreen(MARKETPLACE_URL_INITIAL, MARKETPLACES_INJECT_SCRIPT_URL);
|
tablet.gotoWebScreen(MARKETPLACE_URL_INITIAL, MARKETPLACES_INJECT_SCRIPT_URL);
|
||||||
tablet.webEventReceived.connect(function (message) {
|
tablet.webEventReceived.connect(function (message) {
|
||||||
|
|
||||||
if (message === GOTO_DIRECTORY) {
|
if (message === GOTO_DIRECTORY) {
|
||||||
tablet.gotoWebScreen(MARKETPLACES_URL, MARKETPLACES_INJECT_SCRIPT_URL);
|
tablet.gotoWebScreen(MARKETPLACES_URL, MARKETPLACES_INJECT_SCRIPT_URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message === QUERY_CAN_WRITE_ASSETS) {
|
if (message === QUERY_CAN_WRITE_ASSETS) {
|
||||||
tablet.emitScriptEvent(CAN_WRITE_ASSETS + " " + Entities.canWriteAssets());
|
tablet.emitScriptEvent(CAN_WRITE_ASSETS + " " + Entities.canWriteAssets());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message === WARN_USER_NO_PERMISSIONS) {
|
if (message === WARN_USER_NO_PERMISSIONS) {
|
||||||
Window.alert(NO_PERMISSIONS_ERROR_MESSAGE);
|
Window.alert(NO_PERMISSIONS_ERROR_MESSAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.slice(0, CLARA_IO_STATUS.length) === CLARA_IO_STATUS) {
|
if (message.slice(0, CLARA_IO_STATUS.length) === CLARA_IO_STATUS) {
|
||||||
if (isDownloadBeingCancelled) {
|
if (isDownloadBeingCancelled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var text = message.slice(CLARA_IO_STATUS.length);
|
||||||
|
if (messageBox === null) {
|
||||||
|
messageBox = Window.openMessageBox(CLARA_DOWNLOAD_TITLE, text, CANCEL_BUTTON, NO_BUTTON);
|
||||||
|
} else {
|
||||||
|
Window.updateMessageBox(messageBox, CLARA_DOWNLOAD_TITLE, text, CANCEL_BUTTON, NO_BUTTON);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var text = message.slice(CLARA_IO_STATUS.length);
|
if (message.slice(0, CLARA_IO_DOWNLOAD.length) === CLARA_IO_DOWNLOAD) {
|
||||||
if (messageBox === null) {
|
if (messageBox !== null) {
|
||||||
messageBox = Window.openMessageBox(CLARA_DOWNLOAD_TITLE, text, CANCEL_BUTTON, NO_BUTTON);
|
Window.closeMessageBox(messageBox);
|
||||||
} else {
|
messageBox = null;
|
||||||
Window.updateMessageBox(messageBox, CLARA_DOWNLOAD_TITLE, text, CANCEL_BUTTON, NO_BUTTON);
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message.slice(0, CLARA_IO_DOWNLOAD.length) === CLARA_IO_DOWNLOAD) {
|
if (message === CLARA_IO_CANCELLED_DOWNLOAD) {
|
||||||
if (messageBox !== null) {
|
isDownloadBeingCancelled = false;
|
||||||
Window.closeMessageBox(messageBox);
|
|
||||||
messageBox = null;
|
|
||||||
}
|
}
|
||||||
return;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message === CLARA_IO_CANCELLED_DOWNLOAD) {
|
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
|
||||||
isDownloadBeingCancelled = false;
|
var marketplaceButton = tablet.addButton({
|
||||||
}
|
icon: "icons/tablet-icons/market-i.svg",
|
||||||
|
activeIcon: "icons/tablet-icons/market-a.svg",
|
||||||
|
text: "MARKET",
|
||||||
|
sortOrder: 9
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
|
function onCanWriteAssetsChanged() {
|
||||||
var marketplaceButton = tablet.addButton({
|
var message = CAN_WRITE_ASSETS + " " + Entities.canWriteAssets();
|
||||||
icon: "icons/tablet-icons/market-i.svg",
|
tablet.emitScriptEvent(message);
|
||||||
activeIcon: "icons/tablet-icons/market-a.svg",
|
|
||||||
text: "MARKET",
|
|
||||||
sortOrder: 9
|
|
||||||
});
|
|
||||||
|
|
||||||
function onCanWriteAssetsChanged() {
|
|
||||||
var message = CAN_WRITE_ASSETS + " " + Entities.canWriteAssets();
|
|
||||||
tablet.emitScriptEvent(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
function onClick() {
|
|
||||||
if (onMarketplaceScreen) {
|
|
||||||
// for toolbar-mode: go back to home screen, this will close the window.
|
|
||||||
tablet.gotoHomeScreen();
|
|
||||||
} else {
|
|
||||||
var entity = HMD.tabletID;
|
|
||||||
Entities.editEntity(entity, {textures: JSON.stringify({"tex.close": HOME_BUTTON_TEXTURE})});
|
|
||||||
showMarketplace();
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function onScreenChanged(type, url) {
|
function onClick() {
|
||||||
onMarketplaceScreen = type === "Web" && url === MARKETPLACE_URL_INITIAL
|
if (onMarketplaceScreen) {
|
||||||
// for toolbar mode: change button to active when window is first openend, false otherwise.
|
// for toolbar-mode: go back to home screen, this will close the window.
|
||||||
marketplaceButton.editProperties({isActive: onMarketplaceScreen});
|
tablet.gotoHomeScreen();
|
||||||
}
|
ContextOverlay.isInMarketplaceInspectionMode = false;
|
||||||
|
} else {
|
||||||
marketplaceButton.clicked.connect(onClick);
|
var entity = HMD.tabletID;
|
||||||
tablet.screenChanged.connect(onScreenChanged);
|
Entities.editEntity(entity, { textures: JSON.stringify({ "tex.close": HOME_BUTTON_TEXTURE }) });
|
||||||
Entities.canWriteAssetsChanged.connect(onCanWriteAssetsChanged);
|
showMarketplace();
|
||||||
|
ContextOverlay.isInMarketplaceInspectionMode = true;
|
||||||
Script.scriptEnding.connect(function () {
|
}
|
||||||
if (onMarketplaceScreen) {
|
|
||||||
tablet.gotoHomeScreen();
|
|
||||||
}
|
}
|
||||||
tablet.removeButton(marketplaceButton);
|
|
||||||
tablet.screenChanged.disconnect(onScreenChanged);
|
function onScreenChanged(type, url) {
|
||||||
Entities.canWriteAssetsChanged.disconnect(onCanWriteAssetsChanged);
|
onMarketplaceScreen = type === "Web" && url === MARKETPLACE_URL_INITIAL
|
||||||
});
|
// for toolbar mode: change button to active when window is first openend, false otherwise.
|
||||||
|
marketplaceButton.editProperties({ isActive: onMarketplaceScreen });
|
||||||
|
}
|
||||||
|
|
||||||
|
marketplaceButton.clicked.connect(onClick);
|
||||||
|
tablet.screenChanged.connect(onScreenChanged);
|
||||||
|
Entities.canWriteAssetsChanged.connect(onCanWriteAssetsChanged);
|
||||||
|
|
||||||
|
Script.scriptEnding.connect(function () {
|
||||||
|
if (onMarketplaceScreen) {
|
||||||
|
tablet.gotoHomeScreen();
|
||||||
|
}
|
||||||
|
tablet.removeButton(marketplaceButton);
|
||||||
|
tablet.screenChanged.disconnect(onScreenChanged);
|
||||||
|
Entities.canWriteAssetsChanged.disconnect(onCanWriteAssetsChanged);
|
||||||
|
});
|
||||||
|
|
||||||
}()); // END LOCAL_SCOPE
|
}()); // END LOCAL_SCOPE
|
||||||
|
|
Loading…
Reference in a new issue