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:
Anthony Thibault 2017-05-04 14:07:21 -07:00 committed by GitHub
commit 7006fa6da4
6 changed files with 43 additions and 5 deletions

View file

@ -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();

View file

@ -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

View file

@ -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;
} }

View file

@ -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);

View file

@ -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}
}), }),

View file

@ -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();
} }