mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 21:57:00 +02:00
Merge pull request #11181 from cain-kilgore/skybox-changer
WL 21447 - Create a Skybox Changer
This commit is contained in:
commit
823f2fb252
2 changed files with 291 additions and 0 deletions
173
interface/resources/qml/hifi/SkyboxChanger.qml
Normal file
173
interface/resources/qml/hifi/SkyboxChanger.qml
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
//
|
||||||
|
// skyboxchanger.qml
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Cain Kilgore on 9th August 2017
|
||||||
|
// Copyright 2017 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
import QtQuick.Layouts 1.3
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: root;
|
||||||
|
|
||||||
|
color: hifi.colors.baseGray;
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: titleBarContainer;
|
||||||
|
// Size
|
||||||
|
width: parent.width;
|
||||||
|
height: 50;
|
||||||
|
// Anchors
|
||||||
|
anchors.left: parent.left;
|
||||||
|
anchors.top: parent.top;
|
||||||
|
|
||||||
|
RalewaySemiBold {
|
||||||
|
id: titleBarText;
|
||||||
|
text: "Skybox Changer";
|
||||||
|
// Text size
|
||||||
|
size: hifi.fontSizes.overlayTitle;
|
||||||
|
// Anchors
|
||||||
|
anchors.fill: parent;
|
||||||
|
anchors.leftMargin: 16;
|
||||||
|
// Style
|
||||||
|
color: hifi.colors.lightGrayText;
|
||||||
|
// Alignment
|
||||||
|
horizontalAlignment: Text.AlignHCenter;
|
||||||
|
verticalAlignment: Text.AlignVCenter;
|
||||||
|
}
|
||||||
|
RalewaySemiBold {
|
||||||
|
id: titleBarDesc;
|
||||||
|
text: "Click an image to choose a new Skybox.";
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
// Text size
|
||||||
|
size: 14;
|
||||||
|
// Anchors
|
||||||
|
anchors.fill: parent;
|
||||||
|
anchors.top: titleBarText.bottom
|
||||||
|
anchors.leftMargin: 16;
|
||||||
|
anchors.rightMargin: 16;
|
||||||
|
// Style
|
||||||
|
color: hifi.colors.lightGrayText;
|
||||||
|
// Alignment
|
||||||
|
horizontalAlignment: Text.AlignHCenter;
|
||||||
|
verticalAlignment: Text.AlignVCenter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This RowLayout could be a GridLayout instead for further expandability.
|
||||||
|
// As this SkyboxChanger task only required 6 images, implementing GridLayout wasn't necessary.
|
||||||
|
// In the future if this is to be expanded to add more Skyboxes, it might be worth changing this.
|
||||||
|
RowLayout {
|
||||||
|
id: row1
|
||||||
|
anchors.top: titleBarContainer.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 30
|
||||||
|
Layout.fillWidth: true
|
||||||
|
anchors.topMargin: 30
|
||||||
|
spacing: 10
|
||||||
|
Image {
|
||||||
|
width: 200; height: 200
|
||||||
|
fillMode: Image.Stretch
|
||||||
|
source: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_1.jpg"
|
||||||
|
clip: true
|
||||||
|
id: preview1
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: {
|
||||||
|
sendToScript({method: 'changeSkybox', url: 'http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/1.jpg'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
Image {
|
||||||
|
width: 200; height: 200
|
||||||
|
fillMode: Image.Stretch
|
||||||
|
source: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_2.jpg"
|
||||||
|
clip: true
|
||||||
|
id: preview2
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: {
|
||||||
|
sendToScript({method: 'changeSkybox', url: 'http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/2.png'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RowLayout {
|
||||||
|
id: row2
|
||||||
|
anchors.top: row1.bottom
|
||||||
|
anchors.topMargin: 10
|
||||||
|
anchors.left: parent.left
|
||||||
|
Layout.fillWidth: true
|
||||||
|
anchors.leftMargin: 30
|
||||||
|
spacing: 10
|
||||||
|
Image {
|
||||||
|
width: 200; height: 200
|
||||||
|
fillMode: Image.Stretch
|
||||||
|
source: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_3.jpg"
|
||||||
|
clip: true
|
||||||
|
id: preview3
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: {
|
||||||
|
sendToScript({method: 'changeSkybox', url: 'http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/3.jpg'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Image {
|
||||||
|
width: 200; height: 200
|
||||||
|
fillMode: Image.Stretch
|
||||||
|
source: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_4.jpg"
|
||||||
|
clip: true
|
||||||
|
id: preview4
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: {
|
||||||
|
sendToScript({method: 'changeSkybox', url: 'http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/4.jpg'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RowLayout {
|
||||||
|
id: row3
|
||||||
|
anchors.top: row2.bottom
|
||||||
|
anchors.topMargin: 10
|
||||||
|
anchors.left: parent.left
|
||||||
|
Layout.fillWidth: true
|
||||||
|
anchors.leftMargin: 30
|
||||||
|
spacing: 10
|
||||||
|
Image {
|
||||||
|
width: 200; height: 200
|
||||||
|
fillMode: Image.Stretch
|
||||||
|
source: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_5.jpg"
|
||||||
|
clip: true
|
||||||
|
id: preview5
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: {
|
||||||
|
sendToScript({method: 'changeSkybox', url: 'http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/5.png'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Image {
|
||||||
|
width: 200; height: 200
|
||||||
|
fillMode: Image.Stretch
|
||||||
|
source: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/thumbnails/thumb_6.jpg"
|
||||||
|
clip: true
|
||||||
|
id: preview6
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: {
|
||||||
|
sendToScript({method: 'changeSkybox', url: 'http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxes/6.jpg'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
signal sendToScript(var message);
|
||||||
|
|
||||||
|
}
|
118
unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js
Normal file
118
unpublishedScripts/marketplace/skyboxChanger/skyboxchanger.js
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
//
|
||||||
|
// skyboxchanger.js
|
||||||
|
//
|
||||||
|
// Created by Cain Kilgore on 9th August 2017
|
||||||
|
// Copyright 2017 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var TABLET_BUTTON_NAME = "SKYBOX";
|
||||||
|
|
||||||
|
var ICONS = {
|
||||||
|
icon: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxedit-i.svg",
|
||||||
|
activeIcon: "http://mpassets.highfidelity.com/05904016-8f7d-4dfc-88e1-2bf9ba3fac20-v1/skyboxedit-i.svg"
|
||||||
|
};
|
||||||
|
|
||||||
|
var onSkyboxChangerScreen = false;
|
||||||
|
|
||||||
|
function onClicked() {
|
||||||
|
if (onSkyboxChangerScreen) {
|
||||||
|
tablet.gotoHomeScreen();
|
||||||
|
} else {
|
||||||
|
tablet.loadQMLSource("../SkyboxChanger.qml");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
|
||||||
|
var button = tablet.addButton({
|
||||||
|
icon: ICONS.icon,
|
||||||
|
activeIcon: ICONS.activeIcon,
|
||||||
|
text: TABLET_BUTTON_NAME,
|
||||||
|
sortOrder: 1
|
||||||
|
});
|
||||||
|
|
||||||
|
var hasEventBridge = false;
|
||||||
|
|
||||||
|
function wireEventBridge(on) {
|
||||||
|
if (!tablet) {
|
||||||
|
print("Warning in wireEventBridge(): 'tablet' undefined!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (on) {
|
||||||
|
if (!hasEventBridge) {
|
||||||
|
tablet.fromQml.connect(fromQml);
|
||||||
|
hasEventBridge = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (hasEventBridge) {
|
||||||
|
tablet.fromQml.disconnect(fromQml);
|
||||||
|
hasEventBridge = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onScreenChanged(type, url) {
|
||||||
|
if (url === "../SkyboxChanger.qml") {
|
||||||
|
onSkyboxChangerScreen = true;
|
||||||
|
} else {
|
||||||
|
onSkyboxChangerScreen = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.editProperties({isActive: onSkyboxChangerScreen});
|
||||||
|
wireEventBridge(onSkyboxChangerScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fromQml(message) {
|
||||||
|
switch (message.method) {
|
||||||
|
case 'changeSkybox': // changeSkybox Code
|
||||||
|
var standingZone;
|
||||||
|
if (!Entities.canRez()) {
|
||||||
|
Window.alert("You need to have rez permissions to change the Skybox.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
var nearbyEntities = Entities.findEntities(MyAvatar.position, 5);
|
||||||
|
for (var i = 0; i < nearbyEntities.length; i++) {
|
||||||
|
if (Entities.getEntityProperties(nearbyEntities[i]).type === "Zone") {
|
||||||
|
standingZone = nearbyEntities[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Entities.getEntityProperties(standingZone).locked) {
|
||||||
|
Window.alert("This zone is currently locked; the Skybox can't be changed.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
var newSkybox = {
|
||||||
|
skybox: {
|
||||||
|
url: message.url
|
||||||
|
},
|
||||||
|
keyLight: {
|
||||||
|
ambientURL: message.url
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Entities.editEntity(standingZone, newSkybox);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
print('Unrecognized message from QML: ' + JSON.stringify(message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
button.clicked.connect(onClicked);
|
||||||
|
tablet.screenChanged.connect(onScreenChanged);
|
||||||
|
|
||||||
|
Script.scriptEnding.connect(function () {
|
||||||
|
if (onSkyboxChangerScreen) {
|
||||||
|
tablet.gotoHomeScreen();
|
||||||
|
}
|
||||||
|
button.clicked.disconnect(onClicked);
|
||||||
|
tablet.screenChanged.disconnect(onScreenChanged);
|
||||||
|
tablet.removeButton(button);
|
||||||
|
});
|
||||||
|
}());
|
Loading…
Reference in a new issue