mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 03:37:49 +02:00
Merge pull request #10257 from sethalves/grab-try-timer-instead-of-update
grab is driven by timer rather than update, load tablet model with high priority
This commit is contained in:
commit
7006fa6da4
6 changed files with 43 additions and 5 deletions
|
@ -22,6 +22,7 @@ ModelOverlay::ModelOverlay()
|
||||||
_modelTextures(QVariantMap())
|
_modelTextures(QVariantMap())
|
||||||
{
|
{
|
||||||
_model->init();
|
_model->init();
|
||||||
|
_model->setLoadingPriority(_loadPriority);
|
||||||
_isLoaded = false;
|
_isLoaded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,9 +31,11 @@ ModelOverlay::ModelOverlay(const ModelOverlay* modelOverlay) :
|
||||||
_model(std::make_shared<Model>(std::make_shared<Rig>(), nullptr, this)),
|
_model(std::make_shared<Model>(std::make_shared<Rig>(), nullptr, this)),
|
||||||
_modelTextures(QVariantMap()),
|
_modelTextures(QVariantMap()),
|
||||||
_url(modelOverlay->_url),
|
_url(modelOverlay->_url),
|
||||||
_updateModel(false)
|
_updateModel(false),
|
||||||
|
_loadPriority(modelOverlay->getLoadPriority())
|
||||||
{
|
{
|
||||||
_model->init();
|
_model->init();
|
||||||
|
_model->setLoadingPriority(_loadPriority);
|
||||||
if (_url.isValid()) {
|
if (_url.isValid()) {
|
||||||
_updateModel = true;
|
_updateModel = true;
|
||||||
_isLoaded = false;
|
_isLoaded = false;
|
||||||
|
@ -113,6 +116,12 @@ void ModelOverlay::setProperties(const QVariantMap& properties) {
|
||||||
_updateModel = true;
|
_updateModel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto loadPriorityProperty = properties["loadPriority"];
|
||||||
|
if (loadPriorityProperty.isValid()) {
|
||||||
|
_loadPriority = loadPriorityProperty.toFloat();
|
||||||
|
_model->setLoadingPriority(_loadPriority);
|
||||||
|
}
|
||||||
|
|
||||||
auto urlValue = properties["url"];
|
auto urlValue = properties["url"];
|
||||||
if (urlValue.isValid() && urlValue.canConvert<QString>()) {
|
if (urlValue.isValid() && urlValue.canConvert<QString>()) {
|
||||||
_url = urlValue.toString();
|
_url = urlValue.toString();
|
||||||
|
|
|
@ -41,6 +41,8 @@ public:
|
||||||
|
|
||||||
void locationChanged(bool tellPhysics) override;
|
void locationChanged(bool tellPhysics) override;
|
||||||
|
|
||||||
|
float getLoadPriority() const { return _loadPriority; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// helper to extract metadata from our Model's rigged joints
|
// helper to extract metadata from our Model's rigged joints
|
||||||
template <typename itemType> using mapFunction = std::function<itemType(int jointIndex)>;
|
template <typename itemType> using mapFunction = std::function<itemType(int jointIndex)>;
|
||||||
|
@ -55,6 +57,7 @@ private:
|
||||||
QUrl _url;
|
QUrl _url;
|
||||||
bool _updateModel = { false };
|
bool _updateModel = { false };
|
||||||
bool _scaleToFit = { false };
|
bool _scaleToFit = { false };
|
||||||
|
float _loadPriority { 0.0f };
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_ModelOverlay_h
|
#endif // hifi_ModelOverlay_h
|
||||||
|
|
|
@ -447,6 +447,10 @@ Grabber.prototype.moveEvent = function(event) {
|
||||||
|
|
||||||
// see if something added/restored gravity
|
// see if something added/restored gravity
|
||||||
var entityProperties = Entities.getEntityProperties(this.entityID);
|
var entityProperties = Entities.getEntityProperties(this.entityID);
|
||||||
|
if (!entityProperties || !entityProperties.gravity) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (Vec3.length(entityProperties.gravity) !== 0.0) {
|
if (Vec3.length(entityProperties.gravity) !== 0.0) {
|
||||||
this.originalGravity = entityProperties.gravity;
|
this.originalGravity = entityProperties.gravity;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,8 @@ var WANT_DEBUG = false;
|
||||||
var WANT_DEBUG_STATE = false;
|
var WANT_DEBUG_STATE = false;
|
||||||
var WANT_DEBUG_SEARCH_NAME = null;
|
var WANT_DEBUG_SEARCH_NAME = null;
|
||||||
|
|
||||||
|
var UPDATE_SLEEP_MS = 16; // how many milliseconds to wait between "update" calls
|
||||||
|
|
||||||
var FORCE_IGNORE_IK = false;
|
var FORCE_IGNORE_IK = false;
|
||||||
var SHOW_GRAB_POINT_SPHERE = false;
|
var SHOW_GRAB_POINT_SPHERE = false;
|
||||||
|
|
||||||
|
@ -1333,6 +1335,7 @@ function MyController(hand) {
|
||||||
var stylusProperties = {
|
var stylusProperties = {
|
||||||
name: "stylus",
|
name: "stylus",
|
||||||
url: Script.resourcesPath() + "meshes/tablet-stylus-fat.fbx",
|
url: Script.resourcesPath() + "meshes/tablet-stylus-fat.fbx",
|
||||||
|
loadPriority: 10.0,
|
||||||
localPosition: Vec3.sum({ x: 0.0,
|
localPosition: Vec3.sum({ x: 0.0,
|
||||||
y: WEB_TOUCH_Y_OFFSET,
|
y: WEB_TOUCH_Y_OFFSET,
|
||||||
z: 0.0 },
|
z: 0.0 },
|
||||||
|
@ -4091,7 +4094,7 @@ var updateTotalWork = 0;
|
||||||
|
|
||||||
var UPDATE_PERFORMANCE_DEBUGGING = false;
|
var UPDATE_PERFORMANCE_DEBUGGING = false;
|
||||||
|
|
||||||
function updateWrapper(){
|
var updateWrapper = function () {
|
||||||
|
|
||||||
intervalCount++;
|
intervalCount++;
|
||||||
var thisInterval = Date.now();
|
var thisInterval = Date.now();
|
||||||
|
@ -4139,12 +4142,12 @@ function updateWrapper(){
|
||||||
updateTotalWork = 0;
|
updateTotalWork = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Script.setTimeout(updateWrapper, UPDATE_SLEEP_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
Script.update.connect(updateWrapper);
|
Script.setTimeout(updateWrapper, UPDATE_SLEEP_MS);
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
Menu.removeMenuItem("Developer", "Show Grab Sphere");
|
Menu.removeMenuItem("Developer", "Show Grab Sphere");
|
||||||
Script.update.disconnect(updateWrapper);
|
|
||||||
rightController.cleanup();
|
rightController.cleanup();
|
||||||
leftController.cleanup();
|
leftController.cleanup();
|
||||||
Controller.disableMapping(MAPPING_NAME);
|
Controller.disableMapping(MAPPING_NAME);
|
||||||
|
|
|
@ -120,6 +120,7 @@ WebTablet = function (url, width, dpi, hand, clientOnly, location) {
|
||||||
modelURL: modelURL,
|
modelURL: modelURL,
|
||||||
url: modelURL, // for overlay
|
url: modelURL, // for overlay
|
||||||
grabbable: true, // for overlay
|
grabbable: true, // for overlay
|
||||||
|
loadPriority: 10.0, // for overlay
|
||||||
userData: JSON.stringify({
|
userData: JSON.stringify({
|
||||||
"grabbableKey": {"grabbable": true}
|
"grabbableKey": {"grabbable": true}
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
/* global Script, HMD, WebTablet, UIWebTablet, UserActivityLogger, Settings, Entities, Messages, Tablet, Overlays,
|
/* global Script, HMD, WebTablet, UIWebTablet, UserActivityLogger, Settings, Entities, Messages, Tablet, Overlays,
|
||||||
MyAvatar, Menu */
|
MyAvatar, Menu, Vec3 */
|
||||||
|
|
||||||
(function() { // BEGIN LOCAL_SCOPE
|
(function() { // BEGIN LOCAL_SCOPE
|
||||||
var tabletRezzed = false;
|
var tabletRezzed = false;
|
||||||
|
@ -214,6 +214,24 @@
|
||||||
closeTabletUI();
|
closeTabletUI();
|
||||||
rezTablet();
|
rezTablet();
|
||||||
tabletShown = false;
|
tabletShown = false;
|
||||||
|
|
||||||
|
// also cause the stylus model to be loaded
|
||||||
|
var tmpStylusID = Overlays.addOverlay("model", {
|
||||||
|
name: "stylus",
|
||||||
|
url: Script.resourcesPath() + "meshes/tablet-stylus-fat.fbx",
|
||||||
|
loadPriority: 10.0,
|
||||||
|
position: Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.1, z: -2})),
|
||||||
|
dimensions: { x: 0.01, y: 0.01, z: 0.2 },
|
||||||
|
solid: true,
|
||||||
|
visible: true,
|
||||||
|
ignoreRayIntersection: true,
|
||||||
|
drawInFront: false,
|
||||||
|
lifetime: 3
|
||||||
|
});
|
||||||
|
Script.setTimeout(function() {
|
||||||
|
Overlays.deleteOverlay(tmpStylusID);
|
||||||
|
}, 300);
|
||||||
|
|
||||||
} else if (!tabletShown) {
|
} else if (!tabletShown) {
|
||||||
hideTabletUI();
|
hideTabletUI();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue