diff --git a/.gitattributes b/.gitattributes
index 76f1b7c59..fefaaeff3 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -19,3 +19,5 @@
*.TGA filter=lfs diff=lfs merge=lfs -text
*.tif filter=lfs diff=lfs merge=lfs -text
*.obj filter=lfs diff=lfs merge=lfs -text
+*.FBX filter=lfs diff=lfs merge=lfs -text
+*.ttf filter=lfs diff=lfs merge=lfs -text
diff --git a/hifi-content/alan/dev/Alien_Animations.FBX b/hifi-content/alan/dev/Alien_Animations.FBX
index 667167876..fbd5eea1e 100644
Binary files a/hifi-content/alan/dev/Alien_Animations.FBX and b/hifi-content/alan/dev/Alien_Animations.FBX differ
diff --git a/hifi-content/alan/dev/Barcelona-Chair/Barcelona.FBX b/hifi-content/alan/dev/Barcelona-Chair/Barcelona.FBX
index c9ff7905b..d15a5d2ac 100644
Binary files a/hifi-content/alan/dev/Barcelona-Chair/Barcelona.FBX and b/hifi-content/alan/dev/Barcelona-Chair/Barcelona.FBX differ
diff --git a/hifi-content/alan/dev/Castle_Bridge01.FBX b/hifi-content/alan/dev/Castle_Bridge01.FBX
index 5681fbc50..ae2fc45d0 100644
Binary files a/hifi-content/alan/dev/Castle_Bridge01.FBX and b/hifi-content/alan/dev/Castle_Bridge01.FBX differ
diff --git a/hifi-content/alan/dev/Castle_Door01.FBX b/hifi-content/alan/dev/Castle_Door01.FBX
index bedec6127..892b44561 100644
Binary files a/hifi-content/alan/dev/Castle_Door01.FBX and b/hifi-content/alan/dev/Castle_Door01.FBX differ
diff --git a/hifi-content/alan/dev/Castle_Fort01.FBX b/hifi-content/alan/dev/Castle_Fort01.FBX
index af8040b2c..9903a0152 100644
Binary files a/hifi-content/alan/dev/Castle_Fort01.FBX and b/hifi-content/alan/dev/Castle_Fort01.FBX differ
diff --git a/hifi-content/alan/dev/Castle_Fountain01.FBX b/hifi-content/alan/dev/Castle_Fountain01.FBX
index eb0c884ee..7b9c6e8bb 100644
Binary files a/hifi-content/alan/dev/Castle_Fountain01.FBX and b/hifi-content/alan/dev/Castle_Fountain01.FBX differ
diff --git a/hifi-content/alan/dev/Castle_Gate01.FBX b/hifi-content/alan/dev/Castle_Gate01.FBX
index 53a31d8aa..79da98ae7 100644
Binary files a/hifi-content/alan/dev/Castle_Gate01.FBX and b/hifi-content/alan/dev/Castle_Gate01.FBX differ
diff --git a/hifi-content/alan/dev/Castle_Rotunda01.FBX b/hifi-content/alan/dev/Castle_Rotunda01.FBX
index 3d5f0858a..f89d5b8b3 100644
Binary files a/hifi-content/alan/dev/Castle_Rotunda01.FBX and b/hifi-content/alan/dev/Castle_Rotunda01.FBX differ
diff --git a/hifi-content/alan/dev/Castle_Shed01.FBX b/hifi-content/alan/dev/Castle_Shed01.FBX
index 64a9099de..ae7d27a4b 100644
Binary files a/hifi-content/alan/dev/Castle_Shed01.FBX and b/hifi-content/alan/dev/Castle_Shed01.FBX differ
diff --git a/hifi-content/alan/dev/Castle_Tower01.FBX b/hifi-content/alan/dev/Castle_Tower01.FBX
index 3e560b658..6e0c5e37a 100644
Binary files a/hifi-content/alan/dev/Castle_Tower01.FBX and b/hifi-content/alan/dev/Castle_Tower01.FBX differ
diff --git a/hifi-content/alan/dev/Castle_Tower02.FBX b/hifi-content/alan/dev/Castle_Tower02.FBX
index db86e97e6..60b495360 100644
Binary files a/hifi-content/alan/dev/Castle_Tower02.FBX and b/hifi-content/alan/dev/Castle_Tower02.FBX differ
diff --git a/hifi-content/alan/dev/Castle_wall01.FBX b/hifi-content/alan/dev/Castle_wall01.FBX
index 3dcdd4b76..cb0e4f675 100644
Binary files a/hifi-content/alan/dev/Castle_wall01.FBX and b/hifi-content/alan/dev/Castle_wall01.FBX differ
diff --git a/hifi-content/alan/dev/Fonts/fonts/hifi-glyphs.ttf b/hifi-content/alan/dev/Fonts/fonts/hifi-glyphs.ttf
index 8907cf785..8caf6f27e 100644
Binary files a/hifi-content/alan/dev/Fonts/fonts/hifi-glyphs.ttf and b/hifi-content/alan/dev/Fonts/fonts/hifi-glyphs.ttf differ
diff --git a/hifi-content/alan/dev/Mechanical_Demon_Mesh.FBX b/hifi-content/alan/dev/Mechanical_Demon_Mesh.FBX
index 07bfc2129..9f85a99f1 100644
Binary files a/hifi-content/alan/dev/Mechanical_Demon_Mesh.FBX and b/hifi-content/alan/dev/Mechanical_Demon_Mesh.FBX differ
diff --git a/hifi-content/alan/dev/Rock02-2.FBX b/hifi-content/alan/dev/Rock02-2.FBX
index 5d96a2572..c333d5f21 100644
Binary files a/hifi-content/alan/dev/Rock02-2.FBX and b/hifi-content/alan/dev/Rock02-2.FBX differ
diff --git a/hifi-content/alan/dev/Rock02.FBX b/hifi-content/alan/dev/Rock02.FBX
index 0a1541c7c..fe96fcfa7 100644
Binary files a/hifi-content/alan/dev/Rock02.FBX and b/hifi-content/alan/dev/Rock02.FBX differ
diff --git a/hifi-content/alan/dev/Rock03.FBX b/hifi-content/alan/dev/Rock03.FBX
index e6494c3e8..f413d93b0 100644
Binary files a/hifi-content/alan/dev/Rock03.FBX and b/hifi-content/alan/dev/Rock03.FBX differ
diff --git a/hifi-content/alan/dev/Test/Still-Life/Nectarins-peaches.FBX b/hifi-content/alan/dev/Test/Still-Life/Nectarins-peaches.FBX
index 6ed7532ca..24d572b9e 100644
Binary files a/hifi-content/alan/dev/Test/Still-Life/Nectarins-peaches.FBX and b/hifi-content/alan/dev/Test/Still-Life/Nectarins-peaches.FBX differ
diff --git a/hifi-content/alan/dev/Tree01.FBX b/hifi-content/alan/dev/Tree01.FBX
index f1ac0f5c8..a9a72e6d6 100644
Binary files a/hifi-content/alan/dev/Tree01.FBX and b/hifi-content/alan/dev/Tree01.FBX differ
diff --git a/hifi-content/alan/dev/Tree02.FBX b/hifi-content/alan/dev/Tree02.FBX
index bc1453a63..322c97460 100644
Binary files a/hifi-content/alan/dev/Tree02.FBX and b/hifi-content/alan/dev/Tree02.FBX differ
diff --git a/hifi-content/alan/dev/Tree_01_a.FBX b/hifi-content/alan/dev/Tree_01_a.FBX
index 6985d1a3e..f60234e32 100644
Binary files a/hifi-content/alan/dev/Tree_01_a.FBX and b/hifi-content/alan/dev/Tree_01_a.FBX differ
diff --git a/hifi-content/alan/dev/Tree_01_b.FBX b/hifi-content/alan/dev/Tree_01_b.FBX
index 1437eabdb..e1a721475 100644
Binary files a/hifi-content/alan/dev/Tree_01_b.FBX and b/hifi-content/alan/dev/Tree_01_b.FBX differ
diff --git a/hifi-content/alan/dev/Tree_03_e.FBX b/hifi-content/alan/dev/Tree_03_e.FBX
index daa8ad142..b39d39ee6 100644
Binary files a/hifi-content/alan/dev/Tree_03_e.FBX and b/hifi-content/alan/dev/Tree_03_e.FBX differ
diff --git a/hifi-content/alan/dev/Tree_04_e.FBX b/hifi-content/alan/dev/Tree_04_e.FBX
index e035d20cf..873df5e4f 100644
Binary files a/hifi-content/alan/dev/Tree_04_e.FBX and b/hifi-content/alan/dev/Tree_04_e.FBX differ
diff --git a/hifi-content/alan/dev/ant.FBX b/hifi-content/alan/dev/ant.FBX
index b68c0498d..8e6db47e0 100644
Binary files a/hifi-content/alan/dev/ant.FBX and b/hifi-content/alan/dev/ant.FBX differ
diff --git a/hifi-content/alan/dev/chair_computer_a_01.FBX b/hifi-content/alan/dev/chair_computer_a_01.FBX
index 092a41f8c..62e488010 100644
Binary files a/hifi-content/alan/dev/chair_computer_a_01.FBX and b/hifi-content/alan/dev/chair_computer_a_01.FBX differ
diff --git a/hifi-content/alan/dev/chair_computer_b_01.FBX b/hifi-content/alan/dev/chair_computer_b_01.FBX
index 2a99e694d..ddfac7511 100644
Binary files a/hifi-content/alan/dev/chair_computer_b_01.FBX and b/hifi-content/alan/dev/chair_computer_b_01.FBX differ
diff --git a/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Foliage02.FBX b/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Foliage02.FBX
index 4b2ffa7a7..d80a5ee09 100644
Binary files a/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Foliage02.FBX and b/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Foliage02.FBX differ
diff --git a/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Foliage03.FBX b/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Foliage03.FBX
index 19e862787..4359afdd9 100644
Binary files a/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Foliage03.FBX and b/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Foliage03.FBX differ
diff --git a/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Grass01.FBX b/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Grass01.FBX
index c912b0bb5..b557adc0d 100644
Binary files a/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Grass01.FBX and b/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Grass01.FBX differ
diff --git a/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Grass02.FBX b/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Grass02.FBX
index 137a6915b..6b9455255 100644
Binary files a/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Grass02.FBX and b/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Grass02.FBX differ
diff --git a/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Medieval_Castle_Composition.FBX b/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Medieval_Castle_Composition.FBX
index c03f6747e..f3453c580 100644
Binary files a/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Medieval_Castle_Composition.FBX and b/hifi-content/alan/dev/dev/_Medieval Castle/FBXs/Medieval_Castle_Composition.FBX differ
diff --git a/hifi-content/alan/dev/knoll_chair_a_01.FBX b/hifi-content/alan/dev/knoll_chair_a_01.FBX
index da6c10588..51af61fc6 100644
Binary files a/hifi-content/alan/dev/knoll_chair_a_01.FBX and b/hifi-content/alan/dev/knoll_chair_a_01.FBX differ
diff --git a/hifi-content/alan/dev/knoll_loveseat_a_01.FBX b/hifi-content/alan/dev/knoll_loveseat_a_01.FBX
index 397c5ead7..f76b48871 100644
Binary files a/hifi-content/alan/dev/knoll_loveseat_a_01.FBX and b/hifi-content/alan/dev/knoll_loveseat_a_01.FBX differ
diff --git a/hifi-content/alan/dev/knoll_sofa_a_01.FBX b/hifi-content/alan/dev/knoll_sofa_a_01.FBX
index cee59f5ae..819c36757 100644
Binary files a/hifi-content/alan/dev/knoll_sofa_a_01.FBX and b/hifi-content/alan/dev/knoll_sofa_a_01.FBX differ
diff --git a/hifi-content/alan/dev/table_end_a_01.FBX b/hifi-content/alan/dev/table_end_a_01.FBX
index 951e15c0a..d764c5acd 100644
Binary files a/hifi-content/alan/dev/table_end_a_01.FBX and b/hifi-content/alan/dev/table_end_a_01.FBX differ
diff --git a/hifi-content/alan/dev/table_kit_master_01.FBX b/hifi-content/alan/dev/table_kit_master_01.FBX
index 040c7c2c4..b4013d9fa 100644
Binary files a/hifi-content/alan/dev/table_kit_master_01.FBX and b/hifi-content/alan/dev/table_kit_master_01.FBX differ
diff --git a/hifi-content/alan/dev/table_square_a_01.FBX b/hifi-content/alan/dev/table_square_a_01.FBX
index 912cdccc1..35b4e1a80 100644
Binary files a/hifi-content/alan/dev/table_square_a_01.FBX and b/hifi-content/alan/dev/table_square_a_01.FBX differ
diff --git a/hifi-content/alan/dev/table_wall_a_01.FBX b/hifi-content/alan/dev/table_wall_a_01.FBX
index 94045e59a..f42498660 100644
Binary files a/hifi-content/alan/dev/table_wall_a_01.FBX and b/hifi-content/alan/dev/table_wall_a_01.FBX differ
diff --git a/hifi-content/alan/production/production/type/hifi-glyphs/hifi-glyphs.ttf b/hifi-content/alan/production/production/type/hifi-glyphs/hifi-glyphs.ttf
index 1c98f4e6f..2eb980a40 100644
Binary files a/hifi-content/alan/production/production/type/hifi-glyphs/hifi-glyphs.ttf and b/hifi-content/alan/production/production/type/hifi-glyphs/hifi-glyphs.ttf differ
diff --git a/hifi-content/alan/production/production/type/raleway/Raleway-Bold.ttf b/hifi-content/alan/production/production/type/raleway/Raleway-Bold.ttf
index 2ceaf63a3..80ac6f9c8 100644
Binary files a/hifi-content/alan/production/production/type/raleway/Raleway-Bold.ttf and b/hifi-content/alan/production/production/type/raleway/Raleway-Bold.ttf differ
diff --git a/hifi-content/alan/production/production/type/raleway/Raleway-Light.ttf b/hifi-content/alan/production/production/type/raleway/Raleway-Light.ttf
index 8b1d26065..b9a9be4ad 100644
Binary files a/hifi-content/alan/production/production/type/raleway/Raleway-Light.ttf and b/hifi-content/alan/production/production/type/raleway/Raleway-Light.ttf differ
diff --git a/hifi-content/alan/production/production/type/raleway/Raleway-Regular.ttf b/hifi-content/alan/production/production/type/raleway/Raleway-Regular.ttf
index 252cad14a..a7b7a6006 100644
Binary files a/hifi-content/alan/production/production/type/raleway/Raleway-Regular.ttf and b/hifi-content/alan/production/production/type/raleway/Raleway-Regular.ttf differ
diff --git a/hifi-content/alan/production/production/type/raleway/Raleway-SemiBold.ttf b/hifi-content/alan/production/production/type/raleway/Raleway-SemiBold.ttf
index 64b54a77a..0a2c7ad4b 100644
Binary files a/hifi-content/alan/production/production/type/raleway/Raleway-SemiBold.ttf and b/hifi-content/alan/production/production/type/raleway/Raleway-SemiBold.ttf differ
diff --git a/hifi-content/alessandro/dev/JS/Cart/shopCartEntityScript.js b/hifi-content/alessandro/dev/JS/Cart/shopCartEntityScript.js
new file mode 100644
index 000000000..66c778378
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/Cart/shopCartEntityScript.js
@@ -0,0 +1,205 @@
+//cart
+
+(function() {
+ HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/";
+ Script.include(HIFI_PUBLIC_BUCKET + "scripts/libraries/utils.js");
+ COMFORT_ARM_LENGTH = 0.5;
+
+ var _this;
+ var cartIsMine = false;
+ var originalY = 0;
+ var itemsID = [];
+ var relativeItemsPosition = [];
+ var scaleFactor = 0.7; //The scale factor will dipend on the number of items in the cart. We would resize even the items already present.
+ var cartTargetPosition;
+ var cartTargetRotation;
+
+ // this is the "constructor" for the entity as a JS object we don't do much here, but we do want to remember
+ // our this object, so we can access it in cases where we're called without a this (like in the case of various global signals)
+ ShopCart = function() {
+ _this = this;
+ };
+
+ function update(deltaTime) {
+ _this.followAvatar();
+ _this.carryItems();
+
+ if (Controller.getValue(Controller.Standard.RightPrimaryThumb)) {
+ _this.resetCart();
+ }
+ };
+
+
+ ShopCart.prototype = {
+
+ // preload() will be called when the entity has become visible (or known) to the interface
+ // it gives us a chance to set our local JavaScript object up. In this case it means:
+ // * remembering our entityID, so we can access it in cases where we're called without an entityID
+ // * connecting to the update signal so we can check our grabbed state
+ preload: function(entityID) {
+ this.entityID = entityID;
+ //get the owner ID from user data and compare to the mine
+ //the update will be connected just for the owner
+ var ownerObj = getEntityCustomData('ownerKey', this.entityID, null);
+ if (ownerObj.ownerID === MyAvatar.sessionUUID) {
+ cartIsMine = true;
+ cartTargetPosition = Entities.getEntityProperties(_this.entityID).position; //useful if the entity script is assigned manually
+ Script.update.connect(update);
+ print("PRELOAD USER DATA: " + Entities.getEntityProperties(_this.entityID).userData);
+ }
+ },
+
+ carryItems: function() {
+ for (var i=0; i < itemsID.length; i++) {
+ var newPosition = Vec3.sum(Entities.getEntityProperties(_this.entityID).position, relativeItemsPosition[i]);
+ Entities.editEntity(itemsID[i], { position: newPosition });
+ }
+ },
+
+ followAvatar: function() {
+ if (Vec3.length(MyAvatar.getVelocity()) > 0.1) {
+ //update cart target position and orientation
+ var radius = (Entities.getEntityProperties(_this.entityID).dimensions.x) / 2 + COMFORT_ARM_LENGTH;
+ //Vec3.length(Entities.getEntityProperties(_this.entityID).dimensions) / 2.0; //old radius
+ var properY = MyAvatar.position.y + ((MyAvatar.getHeadPosition().y - MyAvatar.position.y) / 2);
+ var targetPositionPrecomputing = {x: MyAvatar.position.x, y: properY, z: MyAvatar.position.z};
+ cartTargetPosition = Vec3.sum(targetPositionPrecomputing, Vec3.multiply(Quat.getRight(MyAvatar.orientation), radius));
+ }
+
+ var cartPosition = Entities.getEntityProperties(_this.entityID).position;
+ var positionDifference = Vec3.subtract(cartTargetPosition, cartPosition);
+ if (Vec3.length(positionDifference) > 0.01) {
+ //give to the cart the proper velocity
+ //print("fixing position - difference is: " + Vec3.length(positionDifference));
+ Entities.editEntity(_this.entityID, { velocity: positionDifference });
+ Entities.editEntity(_this.entityID, { ignoreForCollisions: true });
+ } else if (Vec3.length(positionDifference) > 0) {
+ //set the position
+ //print("setting position - difference is: " + Vec3.length(positionDifference));
+ Entities.editEntity(_this.entityID, { position: cartTargetPosition });
+ positionDifference = Vec3.subtract(cartTargetPosition, cartPosition);
+ Entities.editEntity(_this.entityID, { velocity: positionDifference });
+ Entities.editEntity(_this.entityID, { ignoreForCollisions: false });
+ }
+ },
+
+ resetCart: function (entityID) {
+
+ print("RESET CART - USER DATA: " + Entities.getEntityProperties(_this.entityID).userData);
+
+ print("itemsQuantity before: " + itemsID.length);
+ if (itemsID.length != 0) {
+ // Delete all the items (entities)
+ for (var i=0; i < itemsID.length; i++) {
+ Entities.deleteEntity(itemsID[i]);
+ }
+ print("Entities removed");
+
+ // Delete the userData fields for the items
+ // set userData in a destructive way
+ Entities.editEntity(this.entityID, { userData: ""}); // in which format do we write the owner of the cart at the beginning?
+
+ setEntityCustomData('ownerKey', this.entityID, {
+ ownerID: MyAvatar.sessionUUID
+ });
+
+ setEntityCustomData('grabbableKey', this.entityID, {
+ grabbable: false
+ });
+
+ print("userData clean");
+ itemsID = [];
+ print("itemsQuantity after: " + itemsID.length);
+
+ // Clean the relativePostion array
+ relativeItemsPosition = [];
+ print("relative position array " + relativeItemsPosition.length);
+ }
+ },
+
+ refreshCartContent: function (entityID, dataArray) {
+ var data = JSON.parse(dataArray[0]);
+ var itemOwnerObj = getEntityCustomData('ownerKey', data.id, null);
+
+ if (((itemOwnerObj == null) ? itemOwnerObj : itemOwnerObj.ownerID) === MyAvatar.sessionUUID) {
+ print("The owner of the item is you");
+ } else {
+ print("NOT YOUR ITEM, NOT YOUR CART!");
+ }
+
+ print("item ID: " + data.id);
+
+ for (var i=0; i < itemsID.length; i++) {
+ if(itemsID[i] == data.id) {
+ itemsID.splice(i, 1);
+ relativeItemsPosition.splice(i,1);
+ }
+ }
+
+ print("Number of items in cart: " + itemsID.length);
+ itemsID.forEach( function(p) { print(p) });
+ },
+
+ doSomething: function (entityID, dataArray) {
+ var data = JSON.parse(dataArray[0]);
+ var itemOwnerObj = getEntityCustomData('ownerKey', data.id, null);
+ print("------- The owner of the item is: " + ((itemOwnerObj == null) ? itemOwnerObj : itemOwnerObj.ownerID));
+ print("item ID: " + data.id);
+
+ var cartOwnerObj = getEntityCustomData('ownerKey', this.entityID, null);
+ print("------- The owner of the cart is: " + ((cartOwnerObj == null) ? cartOwnerObj : cartOwnerObj.ownerID));
+ print("cart ID: " + this.entityID);
+
+ if (cartOwnerObj == null) {
+ print("The cart doesn't have a owner.");
+ Entities.deleteEntity(data.id);
+ }
+
+ if (itemOwnerObj.ownerID === cartOwnerObj.ownerID) {
+ // if itemsQuantity == fullCart resize all the items present in the cart and change the scaleFactor for this and next insert
+
+ print("Going to put item in the cart!");
+ var itemsQuantity = itemsID.length;
+
+ itemsID[itemsQuantity] = data.id;
+
+ var oldDimension = Entities.getEntityProperties(data.id).dimensions;
+ Entities.editEntity(data.id, { dimensions: Vec3.multiply(oldDimension, scaleFactor) });
+ print("Item resized!");
+
+ Entities.editEntity(data.id, { velocity: MyAvatar.getVelocity() }); // MyAvatar.getVelocity() should be zero at this time
+ var oldPosition = Entities.getEntityProperties(data.id).position;
+ var cartPosition = Entities.getEntityProperties(this.entityID).position;
+ relativeItemsPosition[itemsQuantity] = Vec3.subtract(oldPosition, cartPosition);
+
+
+ // debug prints
+ //Vec3.print("Relative position saved: ", relativeItemsPosition[(itemsQuantity === 1) ? itemsQuantity : itemsQuantity.num]);
+ itemsQuantity = itemsID.length;
+ print("Item " + itemsQuantity + itemsID[itemsQuantity-1] + " inserted! New quantity: " + itemsQuantity);
+ relativeItemsPosition.forEach( function(p) { Vec3.print("", p) });
+
+ setEntityCustomData('statusKey', data.id, {
+ status: "inCart"
+ });
+
+ print("Set status!");
+ }else {
+ print("Not your cart!");
+ Entities.deleteEntity(data.id);
+ }
+ },
+
+ unload: function (entityID) {
+ print("UNLOAD CART");
+ if(cartIsMine){
+ Script.update.disconnect(update);
+ _this.resetCart(); //useful if the script is reloaded manually
+ //Entities.deleteEntity(_this.entityID); /commented to allow manual reload
+ }
+ }
+ };
+
+ // entity scripts always need to return a newly constructed object of our type
+ return new ShopCart();
+})
\ No newline at end of file
diff --git a/hifi-content/alessandro/dev/JS/Cart/shopCartSpawnEntityScript.js b/hifi-content/alessandro/dev/JS/Cart/shopCartSpawnEntityScript.js
new file mode 100644
index 000000000..58d34bef5
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/Cart/shopCartSpawnEntityScript.js
@@ -0,0 +1,90 @@
+//cartzone
+
+//
+// recordingEntityScript.js
+// examples/entityScripts
+//
+// Created by Alessandro Signa on 11/12/15.
+// Copyright 2015 High Fidelity, Inc.
+//
+
+// All the avatars in the area when the master presses the button will start/stop recording.
+//
+
+// 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 CART_MASTER_NAME = "ShopCartZero";
+ var SCRIPT_URL = "https://hifi-content.s3.amazonaws.com/alessandro/dev/JS/Cart/shopCartEntityScript.js";
+ var _this;
+ var isOwningACart = false;
+ var cartMasterID = null;
+ var myCartID = null;
+
+
+ function SpawnCartZone() {
+ _this = this;
+ return;
+ };
+
+
+
+ SpawnCartZone.prototype = {
+
+ preload: function (entityID) {
+ this.entityID = entityID;
+ var ids = Entities.findEntities(Entities.getEntityProperties(this.entityID).position, 50);
+ ids.forEach(function(id) {
+ var properties = Entities.getEntityProperties(id);
+ if (properties.name == CART_MASTER_NAME) {
+ cartMasterID = id;
+ print("Cart master found");
+ }
+ });
+ },
+
+ enterEntity: function (entityID) {
+ print("entering in the spawn cart area");
+ if (isOwningACart == false) {
+ var entityProperties = Entities.getEntityProperties(cartMasterID);
+
+ myCartID = Entities.addEntity({
+ type: entityProperties.type,
+ name: "Shopping cart",
+ ignoreForCollisions: false,
+ collisionsWillMove: false,
+ dimensions: entityProperties.dimensions,
+ modelURL: entityProperties.modelURL,
+ shapeType: entityProperties.shapeType,
+ originalTextures: entityProperties.originalTextures,
+ script: SCRIPT_URL,
+ userData: JSON.stringify({
+ ownerKey: {
+ ownerID: MyAvatar.sessionUUID
+ },
+ grabbableKey: {
+ grabbable: false
+ }
+ })
+ });
+ isOwningACart = true;
+ } else {
+ Entities.callEntityMethod(myCartID, "resetCart");
+ Entities.deleteEntity (myCartID);
+ isOwningACart = false;
+ }
+
+ },
+
+ leaveEntity: function (entityID) {
+ print("leaving the spawn cart area");
+ },
+
+ unload: function (entityID) {
+
+ }
+ }
+
+ return new SpawnCartZone();
+});
\ No newline at end of file
diff --git a/hifi-content/alessandro/dev/JS/Cart/shopCartZeroEntityScript.js b/hifi-content/alessandro/dev/JS/Cart/shopCartZeroEntityScript.js
new file mode 100644
index 000000000..70cc15a3e
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/Cart/shopCartZeroEntityScript.js
@@ -0,0 +1,30 @@
+//cart ball zero
+
+(function() {
+ BALL_ANGULAR_VELOCITY = {x:0, y:5, z:0}
+ var _this;
+
+
+ // this is the "constructor" for the entity as a JS object we don't do much here, but we do want to remember
+ // our this object, so we can access it in cases where we're called without a this (like in the case of various global signals)
+ ShopCartZero = function() {
+ _this = this;
+ };
+
+
+ ShopCartZero.prototype = {
+
+ // preload() will be called when the entity has become visible (or known) to the interface
+ // it gives us a chance to set our local JavaScript object up. In this case it means:
+ // * remembering our entityID, so we can access it in cases where we're called without an entityID
+ // * connecting to the update signal so we can check our grabbed state
+ preload: function(entityID) {
+ this.entityID = entityID;
+ Entities.editEntity(_this.entityID, { angularVelocity: BALL_ANGULAR_VELOCITY });
+ Entities.editEntity(_this.entityID, { angularDamping: 0 });
+ },
+ };
+
+ // entity scripts always need to return a newly constructed object of our type
+ return new ShopCartZero();
+})
\ No newline at end of file
diff --git a/hifi-content/alessandro/dev/JS/Cash/shopCashEntityScript.js b/hifi-content/alessandro/dev/JS/Cash/shopCashEntityScript.js
new file mode 100644
index 000000000..8cae389eb
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/Cash/shopCashEntityScript.js
@@ -0,0 +1,45 @@
+//cashzone
+
+(function () {
+ var _this;
+
+ var AGENT_PLAYBACK_CHANNEL = "playbackChannel";
+ var isPlaying = false;
+
+
+ function CashZone() {
+ _this = this;
+ return;
+ };
+
+ CashZone.prototype = {
+
+ preload: function (entityID) {
+ },
+
+ enterEntity: function (entityID) {
+ print("entering in the cash area");
+ if(!isPlaying) {
+ Messages.sendMessage(AGENT_PLAYBACK_CHANNEL, "Play");
+ print("Play sent.");
+ isPlaying = true;
+ }
+ },
+
+ leaveEntity: function (entityID) {
+ print("leaving cash area");
+ if(isPlaying) {
+ Messages.sendMessage(AGENT_PLAYBACK_CHANNEL, "Pause");
+ print("Pause sent.");
+ isPlaying = false;
+ }
+
+ },
+
+ unload: function (entityID) {
+
+ }
+ }
+
+ return new CashZone();
+});
\ No newline at end of file
diff --git a/hifi-content/alessandro/dev/JS/Cash/shopCashierAC.js b/hifi-content/alessandro/dev/JS/Cash/shopCashierAC.js
new file mode 100644
index 000000000..d3891ac7b
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/Cash/shopCashierAC.js
@@ -0,0 +1,87 @@
+
+// Set the following variables to the values needed
+var clip_url = "atp:4417bd30c34b970db276ee500a16ff3677ff766a45df0cc0549f3281517190b7.hfr"; // This url is working in VRshop
+// atp:4147173bdb79d0f48d8fdec2ad3a27926177e8f67e8c1078a841e389145a52d3.hfr
+var PLAYBACK_CHANNEL = "playbackChannel";
+var playFromCurrentLocation = true;
+var useDisplayName = true;
+var useAttachments = true;
+var useAvatarModel = true;
+
+// Set position/orientation/scale here if playFromCurrentLocation is true
+Avatar.position = { x:0, y: 0, z: 0 };
+Avatar.orientation = Quat.fromPitchYawRollDegrees(0, 0, 0);
+Avatar.scale = 1.0;
+
+var totalTime = 0;
+var subscribed = false;
+var WAIT_FOR_AUDIO_MIXER = 1;
+
+// Script. DO NOT MODIFY BEYOND THIS LINE.
+var PLAY = "Play";
+var PAUSE = "Pause";
+
+Recording.setPlayFromCurrentLocation(playFromCurrentLocation);
+Recording.setPlayerUseDisplayName(useDisplayName);
+Recording.setPlayerUseAttachments(useAttachments);
+Recording.setPlayerUseHeadModel(false);
+Recording.setPlayerUseSkeletonModel(useAvatarModel);
+
+function getAction(channel, message, senderID) {
+ if(subscribed) {
+ print("I'm the agent and I received this: " + message);
+
+ switch(message) {
+ case PLAY:
+ print("Play");
+ if (!Agent.isAvatar) {
+ Agent.isAvatar = true;
+ }
+ if (!Recording.isPlaying()) {
+ Recording.startPlaying();
+ }
+ Recording.setPlayerLoop(true);
+ break;
+
+ case PAUSE:
+ print("Pause");
+ if (Recording.isPlaying()) {
+ Recording.stopPlaying();
+ }
+ //Agent.isAvatar = false;
+ break;
+
+ default:
+ print("Unknown action: " + action);
+ break;
+ }
+
+ if (Recording.isPlaying()) {
+ Recording.play();
+ }
+ }
+}
+
+
+function update(deltaTime) {
+
+ totalTime += deltaTime;
+
+ if (totalTime > WAIT_FOR_AUDIO_MIXER) {
+ if (!subscribed) {
+ Messages.subscribe(PLAYBACK_CHANNEL);
+ subscribed = true;
+ Recording.loadRecording(clip_url);
+ print("I'm the agent and I am ready to receive!");
+ }
+ }
+
+}
+
+Messages.messageReceived.connect(function (channel, message, senderID) {
+ if (channel == PLAYBACK_CHANNEL) {
+ getAction(channel, message, senderID);
+ }
+});
+
+Script.update.connect(update);
diff --git a/hifi-content/alessandro/dev/JS/Inspect/overlayPanelExample - Copia.js b/hifi-content/alessandro/dev/JS/Inspect/overlayPanelExample - Copia.js
new file mode 100644
index 000000000..fbe83bc57
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/Inspect/overlayPanelExample - Copia.js
@@ -0,0 +1,217 @@
+//
+// overlayPanelExample.js
+// examples/example/ui
+//
+// Created by Alexander Otavka
+// Copyright 2015 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
+//
+
+Script.include([
+ "../../libraries/globals.js",
+ "../../libraries/overlayManager.js",
+]);
+var TOOL_ICON_URL = HIFI_PUBLIC_BUCKET + "images/tools/";
+var BG_IMAGE_URL = TOOL_ICON_URL + "recording-record.svg"
+var RED_DOT_IMAGE_URL = TOOL_ICON_URL + "play-pause.svg";
+var BLUE_SQUARE_IMAGE_URL = TOOL_ICON_URL + "recording-save.svg";
+
+var mainPanel = new OverlayPanel({
+ anchorPositionBinding: { avatar: "MyAvatar" },
+ offsetPosition: { x: 0, y: 0.4, z: -1 },
+ isFacingAvatar: false
+});
+
+var bluePanel = mainPanel.addChild(new OverlayPanel ({
+ offsetPosition: { x: 0.1, y: 0.1, z: 0.2 },
+ offsetScale: 0.5
+}));
+
+var mainPanelBackground = new Image3DOverlay({
+ url: BG_IMAGE_URL,
+ dimensions: {
+ x: 0.5,
+ y: 0.5,
+ },
+ isFacingAvatar: false,
+ alpha: 1.0,
+ ignoreRayIntersection: false,
+ offsetPosition: {
+ x: 0,
+ y: 0,
+ z: -0.001
+ }
+});
+
+var bluePanelBackground = mainPanelBackground.clone();
+
+mainPanel.addChild(mainPanelBackground);
+bluePanel.addChild(bluePanelBackground);
+
+var textWidth = .25;
+var textHeight = .1;
+var numberOfLines = 1;
+var textMargin = 0.00625;
+var lineHeight = (textHeight - (2 * textMargin)) / numberOfLines;
+
+var text = mainPanel.addChild(new Text3DOverlay({
+ text: "TEXT",
+ isFacingAvatar: false,
+ alpha: 1.0,
+ ignoreRayIntersection: false,
+ offsetPosition: {
+ x: 0.1,
+ y: -0.15,
+ z: 0.001
+ },
+ dimensions: { x: textWidth, y: textHeight },
+ backgroundColor: { red: 0, green: 0, blue: 0 },
+ color: { red: 255, green: 255, blue: 255 },
+ topMargin: textMargin,
+ leftMargin: textMargin,
+ bottomMargin: textMargin,
+ rightMargin: textMargin,
+ lineHeight: lineHeight,
+ alpha: 0.9,
+ backgroundAlpha: 0.9
+}));
+
+var redDot = mainPanel.addChild(new Image3DOverlay({
+ url: RED_DOT_IMAGE_URL,
+ dimensions: {
+ x: 0.1,
+ y: 0.1,
+ },
+ isFacingAvatar: true,
+ alpha: 1.0,
+ ignoreRayIntersection: false,
+ offsetPosition: {
+ x: -0.15,
+ y: -0.15,
+ z: 0
+ }
+}));
+
+var redDot2 = mainPanel.addChild(new Image3DOverlay({
+ url: RED_DOT_IMAGE_URL,
+ dimensions: {
+ x: 0.1,
+ y: 0.1,
+ },
+ isFacingAvatar: true,
+ alpha: 1.0,
+ ignoreRayIntersection: false,
+ offsetPosition: {
+ x: -0.155,
+ y: 0.005,
+ z: 0
+ }
+}));
+
+var blueSquare = bluePanel.addChild(new Image3DOverlay({
+ url: BLUE_SQUARE_IMAGE_URL,
+ dimensions: {
+ x: 0.15,
+ y: 0.15,
+ },
+ isFacingAvatar: false,
+ alpha: 1.0,
+ ignoreRayIntersection: false,
+ offsetPosition: {
+ x: 0.09,
+ y: -0.09,
+ z: 0
+ }
+}));
+
+var blueSquare2 = bluePanel.addChild(new Image3DOverlay({
+ url: BLUE_SQUARE_IMAGE_URL,
+ dimensions: {
+ x: 0.15,
+ y: 0.15,
+ },
+ isFacingAvatar: false,
+ alpha: 1.0,
+ ignoreRayIntersection: false,
+ offsetPosition: {
+ x: 0.09,
+ y: 0.09,
+ z: 0
+ }
+}));
+
+var blueSquare3 = blueSquare2.clone();
+blueSquare3.offsetPosition = {
+ x: -0.09,
+ y: 0.09,
+ z: 0
+};
+
+var mouseDown = {};
+
+function onMouseDown(event) {
+ if (event.isLeftButton) {
+ //mouseDown.overlay = OverlayManager.findAtPoint({ x: event.x, y: event.y });
+ //this.getHandPosition = MyAvatar.getRightPalmPosition;
+ //this.getHandRotation = MyAvatar.getRightPalmRotation;
+ var handPosition = MyAvatar.getRightPalmPosition();
+ var pickRay = {
+ origin: handPosition,
+ direction: Quat.getUp(MyAvatar.getRightPalmRotation())
+ //direction: MyAvatar.orientation
+ };
+ //pickRay = Camera.computePickRay(event.x, event.y); //class PickRay - vec3 origin, vec3 direction
+ //pickRay = Camera.computePickRay(handPosition.x, handPosition.y);
+ print("MOUSE: " + event.x + " - " + event.y);
+ print("HAND: " + handPosition.x + " - " + handPosition.y);
+ mouseDown.overlay = OverlayManager.findOnRay(pickRay);
+ }
+ if (event.isRightButton) {
+ mouseDown.pos = { x: event.x, y: event.y };
+ }
+ mouseDown.maxDistance = 0;
+}
+
+function onMouseMove(event) {
+ if (mouseDown.maxDistance !== undefined) {
+ var dist = Vec3.distance(mouseDown.pos, { x: event.x, y: event.y });
+ if (dist > mouseDown.maxDistance) {
+ mouseDown.maxDistance = dist;
+ }
+ }
+}
+
+function onMouseUp(event) {
+ if (event.isLeftButton) {
+ var handPosition = MyAvatar.getRightPalmPosition();
+ var pickRay = {
+ origin: handPosition,
+ direction: Quat.getUp(MyAvatar.getRightPalmRotation())
+ //direction: MyAvatar.orientation
+ };
+ //pickRay = Camera.computePickRay(event.x, event.y); //class PickRay - vec3 origin, vec3 direction
+ //pickRay = Camera.computePickRay(handPosition.x, handPosition.y);
+ var overlay = OverlayManager.findOnRay(pickRay);
+ if (overlay && overlay === mouseDown.overlay) {
+ if (overlay.parentPanel === bluePanel) {
+ overlay.destroy();
+ } else {
+ overlay.offsetPosition = Vec3.sum(overlay.offsetPosition, { x: 0, y: 0, z: -0.1 });
+ }
+ }
+ }
+ if (event.isRightButton && mouseDown.maxDistance < 10) {
+ mainPanel.visible = !mainPanel.visible;
+ }
+}
+
+function onScriptEnd() {
+ mainPanel.destroy();
+}
+
+Controller.mousePressEvent.connect(onMouseDown);
+Controller.mouseMoveEvent.connect(onMouseMove);
+Controller.mouseReleaseEvent.connect(onMouseUp);
+Script.scriptEnding.connect(onScriptEnd);
diff --git a/hifi-content/alessandro/dev/JS/Inspect/shopInspectEntityScript.js b/hifi-content/alessandro/dev/JS/Inspect/shopInspectEntityScript.js
new file mode 100644
index 000000000..213ce9482
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/Inspect/shopInspectEntityScript.js
@@ -0,0 +1,314 @@
+//
+// detectGrabExample.js
+// examples/entityScripts
+//
+// Created by Brad Hefta-Gaub on 9/3/15.
+// Copyright 2015 High Fidelity, Inc.
+//
+// This is an example of an entity script which when assigned to an entity, will detect when the entity is being grabbed by the hydraGrab script
+//
+// 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 HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/";
+ Script.include(HIFI_PUBLIC_BUCKET + "scripts/libraries/utils.js");
+ Script.include(HIFI_PUBLIC_BUCKET + "scripts/libraries/overlayManager.js");
+ //Script.include("C:\\Users\\Proprietario\\Desktop\\overlayManager.js"); //doesn't work
+ //Script.include('../libraries/overlayManager.js'); //doesn't work
+ //Script.include("http://s3.amazonaws.com/hifi-content/alessandro/dev/JS/libraries/overlayManager.js");
+
+ //var BROWN_ICON_URL = "http://cdn.highfidelity.com/alan/production/icons/ICO_rec-active.svg";
+ var BROWN_ICON_URL = "https://dl.dropboxusercontent.com/u/14127429/FBX/VRshop/UI_Brown.svg";
+ var RED_ICON_URL = "https://dl.dropboxusercontent.com/u/14127429/FBX/VRshop/UI_Red.svg";
+ var BLACK_ICON_URL = "https://dl.dropboxusercontent.com/u/14127429/FBX/VRshop/UI_Black.svg";
+
+ var ICONS = [
+ BROWN_ICON_URL,
+ RED_ICON_URL,
+ BLACK_ICON_URL
+ ];
+
+ var MIN_DIMENSION_THRESHOLD = null;
+ var IN_HAND_STATUS = "inHand";
+ var IN_INSPECT_STATUS = "inInspect";
+
+ var RIGHT_HAND = 1;
+ var LEFT_HAND = 0;
+
+ var LINE_LENGTH = 100;
+ var COLOR = {
+ red: 10,
+ green: 10,
+ blue: 255
+ };
+
+ var COMFORT_ARM_LENGTH = 0.5;
+
+ var PENETRATION_THRESHOLD = 0.2;
+
+ var _this;
+ var inspecting = false;
+ var isUIWorking = false;
+ var inspectingMyItem = false;
+ var waitingForBumpReleased = false;
+ var rightController = null; //rightController and leftController are two objects
+ var leftController = null;
+ var zoneID = null;
+ var inspectedEntityID = null;
+
+ var newPosition = null;
+ var newRotation = null;
+
+ var mainPanel = null;
+ var buttons = [];
+
+
+ // this is the "constructor" for the entity as a JS object we don't do much here, but we do want to remember
+ // our this object, so we can access it in cases where we're called without a this (like in the case of various global signals)
+ InspectEntity = function() {
+ _this = this;
+ };
+
+
+ function MyController(hand) {
+ print("created hand: " + hand);
+ this.hand = hand;
+ if (this.hand === RIGHT_HAND) {
+ this.getHandPosition = MyAvatar.getRightPalmPosition;
+ this.getHandRotation = MyAvatar.getRightPalmRotation;
+ this.bumper = Controller.Standard.RB;
+ } else {
+ this.getHandPosition = MyAvatar.getLeftPalmPosition;
+ this.getHandRotation = MyAvatar.getLeftPalmRotation;
+ this.bumper = Controller.Standard.LB;
+ }
+
+ this.pickRay = null; // ray object
+ this.overlayLine = null; // id of line overlay
+ this.waitingForBumpReleased = false;
+
+ this.overlayLineOn = function(closePoint, farPoint, color) {
+ if (this.overlayLine == null) {
+ var lineProperties = {
+ lineWidth: 5,
+ start: closePoint,
+ end: farPoint,
+ color: color,
+ ignoreRayIntersection: true, // ??
+ visible: true,
+ alpha: 1
+ };
+ this.overlayLine = new Line3DOverlay(lineProperties);
+ } else {
+ this.overlayLine.start = closePoint;
+ this.overlayLine.end = farPoint;
+ }
+ },
+
+ //the update of each hand has to update the ray belonging to that hand and handle the bumper event
+ this.updateHand = function() {
+ //update the ray object
+ this.pickRay = {
+ origin: this.getHandPosition(),
+ direction: Quat.getUp(this.getHandRotation())
+ };
+ //update the ray overlay
+ this.overlayLineOn(this.pickRay.origin, Vec3.sum(this.pickRay.origin, Vec3.multiply(this.pickRay.direction, LINE_LENGTH)), COLOR);
+
+ //detect the bumper event
+ //manage event on UI
+ var bumperPressed = Controller.getValue(this.bumper);
+ if (bumperPressed && !this.waitingForBumpReleased) {
+ this.waitingForBumpReleased = true;
+ var triggeredButton = OverlayManager.findOnRay(this.pickRay);
+ if (triggeredButton != null) {
+ for (var i = 0; i < buttons.length; i++) {
+ if (buttons[i] == triggeredButton) {
+ var dataJSON = {
+ index: i
+ };
+ var dataArray = [JSON.stringify(dataJSON)];
+
+ Entities.callEntityMethod(inspectedEntityID, 'changeModel', dataArray);
+ print("ChangeColor by ID: " + i);
+ }
+ }
+ }
+ } else if (!bumperPressed && this.waitingForBumpReleased) {
+ this.waitingForBumpReleased = false;
+ }
+ },
+
+ this.clean = function() {
+ this.pickRay = null;
+ this.overlayLine.destroy();
+ }
+ };
+
+ function update(deltaTime) {
+ //the if condition should depend from other stuff
+ if (inspecting) {
+ //update the rays from both hands
+ leftController.updateHand();
+ rightController.updateHand();
+
+ //check the item status for consistency
+ var entityStatus = getEntityCustomData('statusKey', inspectedEntityID, null).status;
+ if (entityStatus == IN_HAND_STATUS) {
+ //the inspection is over
+ inspecting = false;
+ inspectedEntityID = null;
+ }
+ } else if (isUIWorking) {
+ //clean all the UI stuff
+ // Destroy rays
+ leftController.clean();
+ rightController.clean();
+ // Destroy overlay
+ mainPanel.destroy();
+ isUIWorking = false;
+ }
+
+ _this.positionRotationUpdate();
+ };
+
+ InspectEntity.prototype = {
+
+ preload: function(entityID) {
+ this.entityID = entityID;
+ print("PRELOAD INSPECT ENTITY");
+ //get the owner ID from user data and compare to the mine
+ //the update will be connected just for the owner
+ var ownerObj = getEntityCustomData('ownerKey', this.entityID, null);
+ if (ownerObj.ownerID === MyAvatar.sessionUUID) {
+ rightController = new MyController(RIGHT_HAND); //rightController and leftController are two objects
+ leftController = new MyController(LEFT_HAND);
+ inspectingMyItem = true;
+ inspectRadius = (Entities.getEntityProperties(_this.entityID).dimensions.x) / 2 + COMFORT_ARM_LENGTH;
+ Script.update.connect(update);
+ }
+ },
+
+ doSomething: function (entityID, dataArray) {
+ var data = JSON.parse(dataArray[0]);
+ var itemOwnerObj = getEntityCustomData('ownerKey', data.id, null);
+ //print("------- The owner of the item is: " + ((itemOwnerObj == null) ? itemOwnerObj : itemOwnerObj.ownerID));
+ //print("item ID: " + data.id);
+
+ var inspectOwnerObj = getEntityCustomData('ownerKey', this.entityID, null);
+ //print("------- The owner of the inspectZone is: " + ((inspectOwnerObj == null) ? inspectOwnerObj : inspectOwnerObj.ownerID));
+ //print("zone ID: " + this.entityID);
+
+ if (inspectOwnerObj == null) {
+ //print("The inspectZone doesn't have a owner.");
+ Entities.deleteEntity(data.id);
+ }
+
+ if (itemOwnerObj.ownerID === inspectOwnerObj.ownerID) {
+ //setup the things for inspecting the item
+ inspecting = true;
+ inspectedEntityID = data.id; //store the ID of the inspected entity
+ setEntityCustomData('statusKey', data.id, {
+ status: IN_INSPECT_STATUS
+ });
+ //print("Set status!");
+
+ _this.createInspectUI();
+
+ Entities.editEntity(_this.entityID, { visible: false });
+
+ } else {
+ //print("Not your inspect zone!");
+ Entities.deleteEntity(data.id);
+ }
+ },
+
+ positionRotationUpdate: function() {
+ //position
+ newPosition = Vec3.sum(Camera.position, Vec3.multiply(Quat.getFront(Camera.getOrientation()), inspectRadius));
+ Entities.editEntity(_this.entityID, { position: newPosition });
+
+ newRotation = Camera.getOrientation();
+ Entities.editEntity(_this.entityID, { rotation: newRotation });
+ },
+
+ createInspectUI : function() {
+ //print ("Creating UI");
+
+ //set the main panel to follow the inspect entity
+ mainPanel = new OverlayPanel({
+ anchorPositionBinding: { entity: _this.entityID },
+ isFacingAvatar: true
+ });
+
+ var offsetPositionY = 0.2;
+ var offsetPositionX = -0.4;
+
+ for (var i = 0; i < ICONS.length; i++) {
+ //print("creating button " + ICONS[i]);
+ buttons[i] = new Image3DOverlay({
+ url: ICONS[i],
+ dimensions: {
+ x: 0.15,
+ y: 0.15
+ },
+ isFacingAvatar: false,
+ alpha: 0.8,
+ ignoreRayIntersection: false,
+ offsetPosition: {
+ x: offsetPositionX,
+ y: offsetPositionY - (i * offsetPositionY),
+ z: 0
+ },
+ });
+
+ mainPanel.addChild(buttons[i]);
+ }
+
+
+
+ isUIWorking = true;
+ },
+
+
+ collisionWithEntity: function(myID, otherID, collisionInfo) {
+ //print("SHOE COLLISION: " + collisionInfo.penetration.x + " - " + collisionInfo.penetration.y + " - " + collisionInfo.penetration.z);
+ //var penetrationValue = collisionInfo.penetration.x + collisionInfo.penetration.y + collisionInfo.penetration.z;
+ var penetrationValue = Vec3.length(collisionInfo.penetration);
+ //print("Value: " + penetrationValue);
+ if (penetrationValue > PENETRATION_THRESHOLD && zoneID === null) {
+ zoneID = otherID;
+ print("Zone: " + zoneID);
+
+ var itemObj = getEntityCustomData('itemKey', this.entityID, null);
+ //print("------- The entity in the inspect zone is: " + ((itemObj == null) ? itemObj : itemObj.itemID));
+
+ if (itemObj != null) {
+ if (itemObj.itemID == otherID) {
+ // change overlay color
+ //print("Going to call the change color to red");
+ Entities.callEntityMethod(otherID, 'changeOverlayColor', null);
+ }
+ }
+ } else if (penetrationValue < PENETRATION_THRESHOLD && zoneID !== null) {
+ zoneID = null;
+ //print("Zone: " + zoneID);
+ //print("Going to call the change color to green");
+ Entities.callEntityMethod(otherID, 'changeOverlayColor', null);
+ }
+ },
+
+ unload: function (entityID) {
+ if(inspectingMyItem){
+ print("UNLOAD INSPECT ENTITY");
+ Script.update.disconnect(update);
+
+ // clean UI
+ Entities.deleteEntity(_this.entityID);
+ }
+ }
+ };
+ return new InspectEntity();
+})
\ No newline at end of file
diff --git a/hifi-content/alessandro/dev/JS/Misc/shopItemEntityScript.js b/hifi-content/alessandro/dev/JS/Misc/shopItemEntityScript.js
new file mode 100644
index 000000000..226a007cc
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/Misc/shopItemEntityScript.js
@@ -0,0 +1,374 @@
+//
+// detectGrabExample.js
+// examples/entityScripts
+//
+// Created by Brad Hefta-Gaub on 9/3/15.
+// Copyright 2015 High Fidelity, Inc.
+//
+// This is an example of an entity script which when assigned to an entity, will detect when the entity is being grabbed by the hydraGrab script
+//
+// 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 HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/";
+ Script.include(HIFI_PUBLIC_BUCKET + "scripts/libraries/utils.js");
+ Script.include(HIFI_PUBLIC_BUCKET + "scripts/libraries/overlayManager.js");
+ //Script.include("C:\\Users\\Proprietario\\Desktop\\overlayManager.js");
+ //Script.include('../libraries/overlayManager.js'); //doesn't work
+ //Script.include("http://s3.amazonaws.com/hifi-content/alessandro/dev/JS/libraries/overlayManager.js");
+ //Script.include("http://s3.amazonaws.com/hifi-public/scripts/libraries/overlayManager.js");
+
+
+ var TOOL_ICON_URL = HIFI_PUBLIC_BUCKET + "images/tools/";
+ var RED_IMAGE_URL = "https://dl.dropboxusercontent.com/u/14127429/FBX/VRshop/inspRED.png";
+ var GREEN_IMAGE_URL = "https://dl.dropboxusercontent.com/u/14127429/FBX/VRshop/inspGREEN.png";
+ var MIN_DIMENSION_THRESHOLD = null;
+ var MAX_DIMENSION_THRESHOLD = null;
+ var PENETRATION_THRESHOLD = 0.2;
+ var MAPPING_NAME = "controllerMapping_Inspection";
+
+ var _this;
+ var hand;
+ var onShelf = true;
+ var inspecting = false;
+ var inCart = false;
+ var overlayInspectRed = true;
+ var zoneID = null;
+ var newPosition;
+ var originalDimensions = null;
+ var deltaLX = 0;
+ var deltaLY = 0;
+ var deltaRX = 0;
+ var deltaRY = 0;
+ var radius;
+ var inspectingEntity = null;
+ var inspectPanel = null;
+ var background = null;
+ var modelURLsArray = [];
+
+ // this is the "constructor" for the entity as a JS object we don't do much here, but we do want to remember
+ // our this object, so we can access it in cases where we're called without a this (like in the case of various global signals)
+ DetectGrabbed = function() {
+ _this = this;
+ };
+
+ function update(deltaTime) {
+ if(inspecting){
+ _this.orientationPositionUpdate();
+ }
+ };
+
+
+ DetectGrabbed.prototype = {
+
+ // preload() will be called when the entity has become visible (or known) to the interface
+ // it gives us a chance to set our local JavaScript object up. In this case it means:
+ // * remembering our entityID, so we can access it in cases where we're called without an entityID
+ // * connecting to the update signal so we can check our grabbed state
+ preload: function(entityID) {
+ this.entityID = entityID;
+ Script.update.connect(update);
+
+ MIN_DIMENSION_THRESHOLD = Vec3.length(Entities.getEntityProperties(this.entityID).dimensions)/2;
+ MAX_DIMENSION_THRESHOLD = Vec3.length(Entities.getEntityProperties(this.entityID).dimensions)*2;
+ radius = Vec3.length(Entities.getEntityProperties(this.entityID).dimensions) / 2.0;
+ //inspectRadius = Vec3.length(Entities.getEntityProperties(this.entityID).dimensions) / 2.0; //??
+
+ },
+
+ setRightHand: function () {
+ //print("I am being held in a right hand... entity:" + this.entityID);
+ hand = MyAvatar.rightHandPose;
+ },
+
+ setLeftHand: function () {
+ //print("I am being held in a left hand... entity:" + this.entityID);
+ hand = MyAvatar.leftHandPose;
+ },
+
+ createInspectOverlay: function (entityBindID) {
+ //print ("Creating overlay");
+ inspectPanel = new OverlayPanel({
+ anchorPositionBinding: { entity: entityBindID },
+ //anchorRotationBinding: { entity: entityBindID },
+ //offsetPosition: { x: 0, y: 0, z: 0 },
+ isFacingAvatar: true
+ });
+
+ background = new Image3DOverlay({
+ url: RED_IMAGE_URL,
+ dimensions: {
+ x: 0.6,
+ y: 0.6,
+ },
+ isFacingAvatar: false,
+ alpha: 1,
+ ignoreRayIntersection: false,
+ offsetPosition: {
+ x: 0,
+ y: 0,
+ z: 0
+ },
+ });
+
+ inspectPanel.addChild(background);
+
+ //print ("Overlay created");
+
+ // backgroundGREEN = new Image3DOverlay({
+ // url: GREEN_IMAGE_URL,
+ // dimensions: {
+ // x: 0.5,
+ // y: 0.5,
+ // },
+ // isFacingAvatar: false,
+ // alpha: 0.8,
+ // ignoreRayIntersection: false,
+ // offsetPosition: {
+ // x: 0,
+ // y: 0,
+ // z: -0.001
+ // },
+ // visible: false
+ // });
+
+ // inspectPanel.addChild(backgroundGREEN);
+ },
+
+ changeOverlayColor: function () {
+ if (overlayInspectRed) {
+ //print ("Change color of overlay to green");
+ overlayInspectRed = false;
+ //background.dimensions = Vec3.sum(background.dimension, { x: 1, y: 1, z: 1 });
+ // backgroundRED.visible = overlayInspectRed;
+ // backgroundGREEN.visible = !overlayInspectRed;
+ background.url = GREEN_IMAGE_URL;
+ } else {
+ //print ("Change color of overlay to red");
+ overlayInspectRed = true;
+ //background.dimensions = Vec3.sum(background.dimension, { x: 1, y: 1, z: 1 });
+ // backgroundRED.visible = overlayInspectRed;
+ // backgroundGREEN.visible = !overlayInspectRed;
+ background.url = RED_IMAGE_URL;
+ }
+ },
+
+ startNearGrab: function () {
+
+ print("I was just grabbed... entity:" + this.entityID);
+ Entities.editEntity(this.entityID, { ignoreForCollisions: false });
+ Entities.editEntity(this.entityID, { dimensions: originalDimensions });
+
+ // Everytime we grab, we create the inspectEntity and the inspectAreaOverlay in front of the avatar
+
+
+ if(!inspecting) {
+ var entityProperties = Entities.getEntityProperties(this.entityID);
+
+ inspectingEntity = Entities.addEntity({
+ type: "Box",
+ name: "inspectionEntity",
+ //position: Vec3.sum(Camera.position, Vec3.multiply(Quat.getFront(Camera.getOrientation()), inspectRadius * 3.0)), // maybe we can avoid to set this here
+ dimensions: {x: 0.5, y: 0.5, z: 0.5}, //??
+ //rotation: entityProperties.rotation,
+ collisionsWillMove: false,
+ ignoreForCollisions: false,
+ visible: false,
+ script: "https://hifi-content.s3.amazonaws.com/alessandro/dev/JS/Inspect/shopInspectEntityScript.js", // I don't know, ask desktop
+ userData: JSON.stringify({
+ ownerKey: {
+ ownerID: MyAvatar.sessionUUID
+ },
+ itemKey: {
+ itemID: this.entityID
+ },
+ grabbableKey: {
+ grabbable: false
+ }
+ })
+ });
+ }
+
+ _this.createInspectOverlay(inspectingEntity);
+ //print("Got after the creation!");
+
+ if (inspecting === true) {
+ inspecting = false;
+ //deletentityforinspecting
+ Controller.disableMapping(MAPPING_NAME);
+ setEntityCustomData('statusKey', this.entityID, {
+ status: "inHand"
+ });
+ } else if (onShelf === true) {
+ //create a copy of this entity if it is the first grab
+ var entityProperties = Entities.getEntityProperties(this.entityID);
+
+ Entities.addEntity({
+ type: entityProperties.type,
+ name: entityProperties.name,
+ position: entityProperties.position,
+ dimensions: entityProperties.dimensions,
+ rotation: entityProperties.rotation,
+ collisionsWillMove: false,
+ ignoreForCollisions: true,
+ modelURL: entityProperties.modelURL,
+ shapeType: entityProperties.shapeType,
+ originalTextures: entityProperties.originalTextures,
+ script: entityProperties.script,
+ });
+
+ onShelf = false;
+ setEntityCustomData('ownerKey', this.entityID, {
+ ownerID: MyAvatar.sessionUUID
+ });
+ originalDimensions = entityProperties.dimensions;
+
+
+ //var url = Window.prompt("Insert the url of the JSON: ","");
+ var url = "atp://ead2a69e8e0d7b9d9a443e85f4b588f7daeda54c8a20a0dc5b88e6e33c13a398.txt";
+
+ var i = 0;
+
+ //Retrieve the url from the userData
+ //var url = getEntityCustomData('jsonKey', this.entityID, null);
+
+ Assets.downloadData(url, function (data) {
+ print("data downloaded from:" + url);
+ //printPerformanceJSON(JSON.parse(data));
+ var obj = JSON.parse(data);
+ var modelURLs = obj.modelURLs;
+
+ modelURLs.forEach(function(param) {
+ modelURLsArray[i] = param;
+ print("url obtained: " + modelURLsArray[i]);
+ i++;
+ });
+ });
+ } else if (inCart === true) {
+ print("GOT IN inCart BRANCH");
+ inCart = false;
+ setEntityCustomData('statusKey', this.entityID, {
+ status: "inHand"
+ });
+ var dataJSON = {
+ id: this.entityID
+ };
+ var dataArray = [JSON.stringify(dataJSON)];
+ print("Going to refresh!");
+ Entities.callEntityMethod(zoneID, 'refreshCartContent', dataArray);
+ }
+ },
+
+ continueNearGrab: function () {
+ //print("I am still being grabbed... entity:" + this.entityID);
+ },
+
+ releaseGrab: function () {
+
+ print("I was released... entity:" + this.entityID);
+ Entities.editEntity(this.entityID, { ignoreForCollisions: true });
+ print("zoneID is " + zoneID);
+
+ // Destroy overlay
+ inspectPanel.destroy();
+
+ if (zoneID !== null) {
+
+ print("Got here. Entity ID is: " + this.entityID);
+ //Entities.callEntityMethod(zoneID, 'doSomething', this.entityID);
+ var dataJSON = {
+ id: this.entityID
+ };
+ var dataArray = [JSON.stringify(dataJSON)];
+ Entities.callEntityMethod(zoneID, 'doSomething', dataArray);
+
+ var statusObj = getEntityCustomData('statusKey', this.entityID, null);
+
+ //print("ZONE ID NOT NULL AND STATUS IS: " + statusObj.status);
+
+ if (statusObj.status == "inInspect") { // if I'm releasing in the inspectZone
+ inspecting = true;
+ print("released inside the inspection area");
+
+ var mapping = Controller.newMapping(MAPPING_NAME);
+ mapping.from(Controller.Standard.LX).to(function (value) {
+ deltaLX = value;
+ });
+ mapping.from(Controller.Standard.LY).to(function (value) {
+ deltaLY = value;
+ });
+ mapping.from(Controller.Standard.RX).to(function (value) {
+ deltaRX = value;
+ });
+ mapping.from(Controller.Standard.RY).to(function (value) {
+ deltaRY = value;
+ });
+ Controller.enableMapping(MAPPING_NAME);
+ } else if (statusObj.status == "inCart") { // in cart
+ Entities.deleteEntity(inspectingEntity);
+ print("inCart is TRUE");
+ inCart = true;
+ } else { // any other zone
+ Entities.deleteEntity(inspectingEntity);
+ }
+
+ } else { // ZoneID is null, released somewhere that is not a zone
+ Entities.deleteEntity(inspectingEntity);
+ Entities.deleteEntity(this.entityID);
+ }
+
+ },
+
+ collisionWithEntity: function(myID, otherID, collisionInfo) {
+ //print("SHOE COLLISION: " + collisionInfo.penetration.x + " - " + collisionInfo.penetration.y + " - " + collisionInfo.penetration.z);
+ //var penetrationValue = collisionInfo.penetration.x + collisionInfo.penetration.y + collisionInfo.penetration.z;
+ var penetrationValue = Vec3.length(collisionInfo.penetration);
+ //print("Value: " + penetrationValue);
+ if (penetrationValue > PENETRATION_THRESHOLD && zoneID === null) {
+ zoneID = otherID;
+ print("Zone: " + zoneID);
+ } else if (penetrationValue < PENETRATION_THRESHOLD && zoneID !== null) {
+ zoneID = null;
+ print("Zone: " + zoneID);
+ }
+ },
+
+ orientationPositionUpdate: function() {
+ //position
+ //var radius = Vec3.length(Entities.getEntityProperties(this.entityID).dimensions) / 2.0;
+ //newPosition = Vec3.sum(MyAvatar.getHeadPosition(), Vec3.multiply(Quat.getFront(MyAvatar.orientation), radius * 3.0)); // we need to tune this because we don't want it in the center but on the left
+ newPosition = Vec3.sum(Camera.position, Vec3.multiply(Quat.getFront(Camera.getOrientation()), radius * 3.0)); // we need to tune this because we don't want it in the center but on the left
+
+ Entities.editEntity(_this.entityID, { position: newPosition });
+ //orientation
+ var newRotation = Quat.multiply(Entities.getEntityProperties(_this.entityID).rotation, Quat.fromPitchYawRollDegrees(deltaLY*10, deltaLX*10, 0))
+ Entities.editEntity(_this.entityID, { rotation: newRotation });
+ //zoom
+ var oldDimension = Entities.getEntityProperties(_this.entityID).dimensions;
+ var scaleFactor = (deltaRY * 0.1) + 1;
+ if (!((Vec3.length(oldDimension) < MIN_DIMENSION_THRESHOLD && scaleFactor < 1) || (Vec3.length(oldDimension) > MAX_DIMENSION_THRESHOLD && scaleFactor > 1))) {
+ var newDimension = Vec3.multiply(oldDimension, scaleFactor);
+ Entities.editEntity(_this.entityID, { dimensions: newDimension });
+ }
+ },
+
+ changeModel: function(entityID, dataArray) {
+ // Change model of the entity
+ //print("Attempting to change model by: " + dataArray[0]);
+ var data = JSON.parse(dataArray[0]);
+ var index = data.index;
+ var entityProperties = Entities.getEntityProperties(this.entityID);
+ //print("------------- Changing the model from " + entityProperties.modelURL + " to: " + modelURLsArray[index]);
+ Entities.editEntity(this.entityID, { modelURL: modelURLsArray[index] }); // ????????
+ },
+
+ unload: function (entityID) {
+ Script.update.disconnect(update);
+ }
+ };
+
+ // entity scripts always need to return a newly constructed object of our type
+ return new DetectGrabbed();
+})
\ No newline at end of file
diff --git a/hifi-content/alessandro/dev/JS/Misc/shopItemGrab.js b/hifi-content/alessandro/dev/JS/Misc/shopItemGrab.js
new file mode 100644
index 000000000..92bb49eed
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/Misc/shopItemGrab.js
@@ -0,0 +1,919 @@
+// handControllerGrab.js
+// examples
+//
+// Created by Eric Levin on 9/2/15
+// Additions by James B. Pollack @imgntn on 9/24/2015
+// Additions By Seth Alves on 10/20/2015
+// Copyright 2015 High Fidelity, Inc.
+//
+// Grabs physically moveable entities with hydra-like controllers; it works for either near or far objects.
+//
+// Distributed under the Apache License, Version 2.0.
+// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
+/*global print, MyAvatar, Entities, AnimationCache, SoundCache, Scene, Camefra, Overlays, Audio, HMD, AvatarList, AvatarManager, Controller, UndoStack, Window, Account, GlobalServices, Script, ScriptDiscoveryService, LODManager, Menu, Vec3, Quat, AudioDevice, Paths, Clipboard, Settings, XMLHttpRequest, randFloat, randInt, pointInExtents, vec3equal, setEntityCustomData, getEntityCustomData */
+
+HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/";
+Script.include(HIFI_PUBLIC_BUCKET + "scripts/libraries/utils.js");
+
+
+//
+// add lines where the hand ray picking is happening
+//
+var WANT_DEBUG = false;
+
+//
+// these tune time-averaging and "on" value for analog trigger
+//
+
+var TRIGGER_SMOOTH_RATIO = 0.1; // 0.0 disables smoothing of trigger value
+var TRIGGER_ON_VALUE = 0.4;
+var TRIGGER_OFF_VALUE = 0.15;
+//
+// distant manipulation
+//
+
+var DISTANCE_HOLDING_RADIUS_FACTOR = 5; // multiplied by distance between hand and object
+var DISTANCE_HOLDING_ACTION_TIMEFRAME = 0.1; // how quickly objects move to their new position
+var DISTANCE_HOLDING_ROTATION_EXAGGERATION_FACTOR = 2.0; // object rotates this much more than hand did
+
+var NO_INTERSECT_COLOR = {
+ red: 10,
+ green: 10,
+ blue: 255
+}; // line color when pick misses
+var INTERSECT_COLOR = {
+ red: 250,
+ green: 10,
+ blue: 10
+}; // line color when pick hits
+var LINE_ENTITY_DIMENSIONS = {
+ x: 1000,
+ y: 1000,
+ z: 1000
+};
+var LINE_LENGTH = 500;
+var PICK_MAX_DISTANCE = 500; // max length of pick-ray
+
+//
+// near grabbing
+//
+
+var GRAB_RADIUS = 0.03; // if the ray misses but an object is this close, it will still be selected
+var NEAR_GRABBING_ACTION_TIMEFRAME = 0.05; // how quickly objects move to their new position
+var NEAR_GRABBING_VELOCITY_SMOOTH_RATIO = 1.0; // adjust time-averaging of held object's velocity. 1.0 to disable.
+var NEAR_PICK_MAX_DISTANCE = 0.3; // max length of pick-ray for close grabbing to be selected
+var RELEASE_VELOCITY_MULTIPLIER = 1.5; // affects throwing things
+var PICK_BACKOFF_DISTANCE = 0.2; // helps when hand is intersecting the grabble object
+var NEAR_GRABBING_KINEMATIC = true; // force objects to be kinematic when near-grabbed
+
+//
+// equip
+//
+
+var EQUIP_SPRING_SHUTOFF_DISTANCE = 0.05;
+var EQUIP_SPRING_TIMEFRAME = 0.4; // how quickly objects move to their new position
+
+//
+// other constants
+//
+
+var RIGHT_HAND = 1;
+var LEFT_HAND = 0;
+
+var ZERO_VEC = {
+ x: 0,
+ y: 0,
+ z: 0
+};
+
+var NULL_ACTION_ID = "{00000000-0000-0000-000000000000}";
+var MSEC_PER_SEC = 1000.0;
+
+// these control how long an abandoned pointer line or action will hang around
+var LIFETIME = 10;
+var ACTION_TTL = 15; // seconds
+var ACTION_TTL_REFRESH = 5;
+var PICKS_PER_SECOND_PER_HAND = 5;
+var MSECS_PER_SEC = 1000.0;
+var GRABBABLE_PROPERTIES = [
+ "position",
+ "rotation",
+ "gravity",
+ "ignoreForCollisions",
+ "collisionsWillMove",
+ "locked",
+ "name"
+];
+
+var GRABBABLE_DATA_KEY = "grabbableKey"; // shared with grab.js
+var GRAB_USER_DATA_KEY = "grabKey"; // shared with grab.js
+
+var DEFAULT_GRABBABLE_DATA = {
+ grabbable: true,
+ invertSolidWhileHeld: false
+};
+
+
+// states for the state machine
+var STATE_OFF = 0;
+var STATE_SEARCHING = 1;
+var STATE_NEAR_GRABBING = 4;
+var STATE_CONTINUE_NEAR_GRABBING = 5;
+var STATE_NEAR_TRIGGER = 6;
+var STATE_CONTINUE_NEAR_TRIGGER = 7;
+var STATE_FAR_TRIGGER = 8;
+var STATE_CONTINUE_FAR_TRIGGER = 9;
+var STATE_RELEASE = 10;
+var STATE_EQUIP_SEARCHING = 11;
+var STATE_EQUIP = 12
+var STATE_CONTINUE_EQUIP_BD = 13; // equip while bumper is still held down
+var STATE_CONTINUE_EQUIP = 14;
+var STATE_EQUIP_SPRING = 16;
+
+
+function stateToName(state) {
+ switch (state) {
+ case STATE_OFF:
+ return "off";
+ case STATE_SEARCHING:
+ return "searching";
+ case STATE_NEAR_GRABBING:
+ return "near_grabbing";
+ case STATE_CONTINUE_NEAR_GRABBING:
+ return "continue_near_grabbing";
+ case STATE_NEAR_TRIGGER:
+ return "near_trigger";
+ case STATE_CONTINUE_NEAR_TRIGGER:
+ return "continue_near_trigger";
+ case STATE_FAR_TRIGGER:
+ return "far_trigger";
+ case STATE_CONTINUE_FAR_TRIGGER:
+ return "continue_far_trigger";
+ case STATE_RELEASE:
+ return "release";
+ case STATE_EQUIP_SEARCHING:
+ return "equip_searching";
+ case STATE_EQUIP:
+ return "equip";
+ case STATE_CONTINUE_EQUIP_BD:
+ return "continue_equip_bd";
+ case STATE_CONTINUE_EQUIP:
+ return "continue_equip";
+ case STATE_EQUIP_SPRING:
+ return "state_equip_spring";
+ }
+
+ return "unknown";
+}
+
+
+
+function MyController(hand) {
+ this.hand = hand;
+ if (this.hand === RIGHT_HAND) {
+ this.getHandPosition = MyAvatar.getRightPalmPosition;
+ this.getHandRotation = MyAvatar.getRightPalmRotation;
+ } else {
+ this.getHandPosition = MyAvatar.getLeftPalmPosition;
+ this.getHandRotation = MyAvatar.getLeftPalmRotation;
+ }
+
+ var SPATIAL_CONTROLLERS_PER_PALM = 2;
+ var TIP_CONTROLLER_OFFSET = 1;
+ this.palm = SPATIAL_CONTROLLERS_PER_PALM * hand;
+ this.tip = SPATIAL_CONTROLLERS_PER_PALM * hand + TIP_CONTROLLER_OFFSET;
+
+ this.actionID = null; // action this script created...
+ this.grabbedEntity = null; // on this entity.
+ this.state = STATE_OFF;
+ this.pointer = null; // entity-id of line object
+ this.triggerValue = 0; // rolling average of trigger value
+ this.rawTriggerValue = 0;
+
+ this.offsetPosition = {
+ x: 0.0,
+ y: 0.0,
+ z: 0.0
+ };
+ this.offsetRotation = {
+ x: 0.0,
+ y: 0.0,
+ z: 0.0,
+ w: 1.0
+ };
+
+ var _this = this;
+
+ this.update = function() {
+
+ this.updateSmoothedTrigger();
+
+ switch (this.state) {
+ case STATE_OFF:
+ this.off();
+ this.touchTest();
+ break;
+ case STATE_SEARCHING:
+ this.search();
+ break;
+ case STATE_EQUIP_SEARCHING:
+ this.search();
+ break;
+ case STATE_NEAR_GRABBING:
+ case STATE_EQUIP:
+ this.nearGrabbing();
+ break;
+ case STATE_EQUIP_SPRING:
+ this.pullTowardEquipPosition()
+ break;
+ case STATE_CONTINUE_NEAR_GRABBING:
+ case STATE_CONTINUE_EQUIP_BD:
+ case STATE_CONTINUE_EQUIP:
+ this.continueNearGrabbing();
+ break;
+ case STATE_NEAR_TRIGGER:
+ this.nearTrigger();
+ break;
+ case STATE_CONTINUE_NEAR_TRIGGER:
+ this.continueNearTrigger();
+ break;
+ case STATE_FAR_TRIGGER:
+ this.farTrigger();
+ break;
+ case STATE_CONTINUE_FAR_TRIGGER:
+ this.continueFarTrigger();
+ break;
+ case STATE_RELEASE:
+ this.release();
+ break;
+ }
+ };
+
+ this.setState = function(newState) {
+ if (WANT_DEBUG) {
+ print("STATE: " + stateToName(this.state) + " --> " + stateToName(newState) + ", hand: " + this.hand);
+ }
+ this.state = newState;
+ }
+
+ this.debugLine = function(closePoint, farPoint, color) {
+ Entities.addEntity({
+ type: "Line",
+ name: "Grab Debug Entity",
+ dimensions: LINE_ENTITY_DIMENSIONS,
+ visible: true,
+ position: closePoint,
+ linePoints: [ZERO_VEC, farPoint],
+ color: color,
+ lifetime: 0.1,
+ collisionsWillMove: false,
+ ignoreForCollisions: true,
+ userData: JSON.stringify({
+ grabbableKey: {
+ grabbable: false
+ }
+ })
+ });
+ }
+
+ this.lineOn = function(closePoint, farPoint, color) {
+ // draw a line
+ if (this.pointer === null) {
+ this.pointer = Entities.addEntity({
+ type: "Line",
+ name: "grab pointer",
+ dimensions: LINE_ENTITY_DIMENSIONS,
+ visible: false,
+ position: closePoint,
+ linePoints: [ZERO_VEC, farPoint],
+ color: color,
+ lifetime: LIFETIME,
+ collisionsWillMove: false,
+ ignoreForCollisions: true,
+ userData: JSON.stringify({
+ grabbableKey: {
+ grabbable: false
+ }
+ })
+ });
+ } else {
+ var age = Entities.getEntityProperties(this.pointer, "age").age;
+ this.pointer = Entities.editEntity(this.pointer, {
+ position: closePoint,
+ linePoints: [ZERO_VEC, farPoint],
+ color: color,
+ lifetime: age + LIFETIME
+ });
+ }
+ };
+
+ this.lineOff = function() {
+ if (this.pointer !== null) {
+ Entities.deleteEntity(this.pointer);
+ }
+ this.pointer = null;
+ };
+
+ this.triggerPress = function(value) {
+ _this.rawTriggerValue = value;
+ };
+
+
+ this.updateSmoothedTrigger = function() {
+ var triggerValue = this.rawTriggerValue;
+ // smooth out trigger value
+ this.triggerValue = (this.triggerValue * TRIGGER_SMOOTH_RATIO) +
+ (triggerValue * (1.0 - TRIGGER_SMOOTH_RATIO));
+ };
+
+ this.triggerSmoothedSqueezed = function() {
+ return this.triggerValue > TRIGGER_ON_VALUE;
+ };
+
+ this.triggerSmoothedReleased = function() {
+ return this.triggerValue < TRIGGER_OFF_VALUE;
+ };
+
+ this.triggerSqueezed = function() {
+ var triggerValue = this.rawTriggerValue;
+ return triggerValue > TRIGGER_ON_VALUE;
+ };
+
+ this.off = function() {
+ if (this.triggerSmoothedSqueezed()) {
+ this.lastPickTime = 0;
+ this.setState(STATE_SEARCHING);
+ return;
+ }
+ }
+
+ this.search = function() {
+ this.grabbedEntity = null;
+
+ if (this.state == STATE_SEARCHING && this.triggerSmoothedReleased()) {
+ this.setState(STATE_RELEASE);
+ return;
+ }
+
+ // the trigger is being pressed, do a ray test
+ var handPosition = this.getHandPosition();
+ var distantPickRay = {
+ origin: handPosition,
+ direction: Quat.getUp(this.getHandRotation()),
+ length: PICK_MAX_DISTANCE
+ };
+
+ // don't pick 60x per second.
+ var pickRays = [];
+ var now = Date.now();
+ if (now - this.lastPickTime > MSECS_PER_SEC / PICKS_PER_SECOND_PER_HAND) {
+ pickRays = [distantPickRay];
+ this.lastPickTime = now;
+ }
+
+ for (var index = 0; index < pickRays.length; ++index) {
+ var pickRay = pickRays[index];
+ var directionNormalized = Vec3.normalize(pickRay.direction);
+ var directionBacked = Vec3.multiply(directionNormalized, PICK_BACKOFF_DISTANCE);
+ var pickRayBacked = {
+ origin: Vec3.subtract(pickRay.origin, directionBacked),
+ direction: pickRay.direction
+ };
+
+
+ var intersection = Entities.findRayIntersection(pickRayBacked, true);
+
+ if (intersection.intersects) {
+ // the ray is intersecting something we can move.
+ var intersectionDistance = Vec3.distance(pickRay.origin, intersection.intersection);
+
+ var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, intersection.entityID, DEFAULT_GRABBABLE_DATA);
+
+ if (intersection.properties.name == "Grab Debug Entity") {
+ continue;
+ }
+
+ if (typeof grabbableData.grabbable !== 'undefined' && !grabbableData.grabbable) {
+ continue;
+ }
+ if (intersectionDistance > pickRay.length) {
+ // too far away for this ray.
+ continue;
+ }
+ if (intersectionDistance <= NEAR_PICK_MAX_DISTANCE) {
+ // the hand is very close to the intersected object. go into close-grabbing mode.
+ if (grabbableData.wantsTrigger) {
+ print("--------------- grabbable data -> STATE_NEAR_TRIGGER");
+ this.grabbedEntity = intersection.entityID;
+ this.setState(STATE_NEAR_TRIGGER);
+ return;
+ } else if (!intersection.properties.locked) {
+ var ownerObj = getEntityCustomData('ownerKey', intersection.entityID, null);
+ print("----------------------- ownerID: " + ((ownerObj == null) ? ownerObj : ownerObj.ownerID));
+
+ if (ownerObj == null || ownerObj.ownerID === MyAvatar.sessionUUID) {
+ this.grabbedEntity = intersection.entityID;
+ if (this.state == STATE_SEARCHING) {
+ this.setState(STATE_NEAR_GRABBING);
+ } else { // equipping
+ if (typeof grabbableData.spatialKey !== 'undefined') {
+ this.setState(STATE_EQUIP_SPRING);
+ } else {
+ this.setState(STATE_EQUIP);
+ }
+ }
+ return;
+ }
+ }
+ }
+ }
+ }
+
+ this.lineOn(distantPickRay.origin, Vec3.multiply(distantPickRay.direction, LINE_LENGTH), NO_INTERSECT_COLOR);
+ };
+
+ this.nearGrabbing = function() {
+ var now = Date.now();
+ var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, this.grabbedEntity, DEFAULT_GRABBABLE_DATA);
+
+ if (this.state == STATE_NEAR_GRABBING && this.triggerSmoothedReleased()) {
+ this.setState(STATE_RELEASE);
+ Entities.callEntityMethod(this.grabbedEntity, "releaseGrab");
+ return;
+ }
+
+ this.lineOff();
+
+ var grabbedProperties = Entities.getEntityProperties(this.grabbedEntity, GRABBABLE_PROPERTIES);
+ this.activateEntity(this.grabbedEntity, grabbedProperties);
+ if (grabbedProperties.collisionsWillMove && NEAR_GRABBING_KINEMATIC) {
+ Entities.editEntity(this.grabbedEntity, {
+ collisionsWillMove: false
+ });
+ }
+
+ var handRotation = this.getHandRotation();
+ var handPosition = this.getHandPosition();
+
+ var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, this.grabbedEntity, DEFAULT_GRABBABLE_DATA);
+
+ if (this.state != STATE_NEAR_GRABBING && grabbableData.spatialKey) {
+ // if an object is "equipped" and has a spatialKey, use it.
+ if (grabbableData.spatialKey.relativePosition) {
+ this.offsetPosition = grabbableData.spatialKey.relativePosition;
+ }
+ if (grabbableData.spatialKey.relativeRotation) {
+ this.offsetRotation = grabbableData.spatialKey.relativeRotation;
+ }
+ } else {
+ var objectRotation = grabbedProperties.rotation;
+ this.offsetRotation = Quat.multiply(Quat.inverse(handRotation), objectRotation);
+
+ var currentObjectPosition = grabbedProperties.position;
+ var offset = Vec3.subtract(currentObjectPosition, handPosition);
+ this.offsetPosition = Vec3.multiplyQbyV(Quat.inverse(Quat.multiply(handRotation, this.offsetRotation)), offset);
+ }
+
+ this.actionID = NULL_ACTION_ID;
+ this.actionID = Entities.addAction("hold", this.grabbedEntity, {
+ hand: this.hand === RIGHT_HAND ? "right" : "left",
+ timeScale: NEAR_GRABBING_ACTION_TIMEFRAME,
+ relativePosition: this.offsetPosition,
+ relativeRotation: this.offsetRotation,
+ ttl: ACTION_TTL,
+ kinematic: NEAR_GRABBING_KINEMATIC,
+ kinematicSetVelocity: true
+ });
+ if (this.actionID === NULL_ACTION_ID) {
+ this.actionID = null;
+ } else {
+ this.actionTimeout = now + (ACTION_TTL * MSEC_PER_SEC);
+ if (this.state == STATE_NEAR_GRABBING) {
+ this.setState(STATE_CONTINUE_NEAR_GRABBING);
+ } else {
+ // equipping
+ Entities.callEntityMethod(this.grabbedEntity, "startEquip", [JSON.stringify(this.hand)]);
+ this.startHandGrasp();
+ this.setState(STATE_CONTINUE_EQUIP_BD);
+ }
+
+ if (this.hand === RIGHT_HAND) {
+ Entities.callEntityMethod(this.grabbedEntity, "setRightHand");
+ } else {
+ Entities.callEntityMethod(this.grabbedEntity, "setLeftHand");
+ }
+
+ Entities.callEntityMethod(this.grabbedEntity, "setHand", [this.hand]);
+
+ Entities.callEntityMethod(this.grabbedEntity, "startNearGrab");
+
+ }
+
+ this.currentHandControllerTipPosition =
+ (this.hand === RIGHT_HAND) ? MyAvatar.rightHandTipPosition : MyAvatar.leftHandTipPosition;
+
+ this.currentObjectTime = Date.now();
+ };
+
+ this.continueNearGrabbing = function() {
+ if (this.state == STATE_CONTINUE_NEAR_GRABBING && this.triggerSmoothedReleased()) {
+ this.setState(STATE_RELEASE);
+ Entities.callEntityMethod(this.grabbedEntity, "releaseGrab");
+ return;
+ }
+
+ // Keep track of the fingertip velocity to impart when we release the object.
+ // Note that the idea of using a constant 'tip' velocity regardless of the
+ // object's actual held offset is an idea intended to make it easier to throw things:
+ // Because we might catch something or transfer it between hands without a good idea
+ // of it's actual offset, let's try imparting a velocity which is at a fixed radius
+ // from the palm.
+
+ var handControllerPosition = (this.hand === RIGHT_HAND) ? MyAvatar.rightHandPosition : MyAvatar.leftHandPosition;
+ var now = Date.now();
+
+ var deltaPosition = Vec3.subtract(handControllerPosition, this.currentHandControllerTipPosition); // meters
+ var deltaTime = (now - this.currentObjectTime) / MSEC_PER_SEC; // convert to seconds
+
+ this.currentHandControllerTipPosition = handControllerPosition;
+ this.currentObjectTime = now;
+ Entities.callEntityMethod(this.grabbedEntity, "continueNearGrab");
+
+ if (this.state === STATE_CONTINUE_EQUIP_BD) {
+ Entities.callEntityMethod(this.grabbedEntity, "continueEquip");
+ }
+
+ if (this.actionTimeout - now < ACTION_TTL_REFRESH * MSEC_PER_SEC) {
+ // if less than a 5 seconds left, refresh the actions ttl
+ Entities.updateAction(this.grabbedEntity, this.actionID, {
+ hand: this.hand === RIGHT_HAND ? "right" : "left",
+ timeScale: NEAR_GRABBING_ACTION_TIMEFRAME,
+ relativePosition: this.offsetPosition,
+ relativeRotation: this.offsetRotation,
+ ttl: ACTION_TTL,
+ kinematic: NEAR_GRABBING_KINEMATIC,
+ kinematicSetVelocity: true
+ });
+ this.actionTimeout = now + (ACTION_TTL * MSEC_PER_SEC);
+ }
+ };
+
+
+ this.pullTowardEquipPosition = function() {
+ this.lineOff();
+
+ var grabbedProperties = Entities.getEntityProperties(this.grabbedEntity, GRABBABLE_PROPERTIES);
+ var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, this.grabbedEntity, DEFAULT_GRABBABLE_DATA);
+
+ // use a spring to pull the object to where it will be when equipped
+ var relativeRotation = {
+ x: 0.0,
+ y: 0.0,
+ z: 0.0,
+ w: 1.0
+ };
+ var relativePosition = {
+ x: 0.0,
+ y: 0.0,
+ z: 0.0
+ };
+ if (grabbableData.spatialKey.relativePosition) {
+ relativePosition = grabbableData.spatialKey.relativePosition;
+ }
+ if (grabbableData.spatialKey.relativeRotation) {
+ relativeRotation = grabbableData.spatialKey.relativeRotation;
+ }
+ var handRotation = this.getHandRotation();
+ var handPosition = this.getHandPosition();
+ var targetRotation = Quat.multiply(handRotation, relativeRotation);
+ var offset = Vec3.multiplyQbyV(targetRotation, relativePosition);
+ var targetPosition = Vec3.sum(handPosition, offset);
+
+ if (typeof this.equipSpringID === 'undefined' ||
+ this.equipSpringID === null ||
+ this.equipSpringID === NULL_ACTION_ID) {
+ this.equipSpringID = Entities.addAction("spring", this.grabbedEntity, {
+ targetPosition: targetPosition,
+ linearTimeScale: EQUIP_SPRING_TIMEFRAME,
+ targetRotation: targetRotation,
+ angularTimeScale: EQUIP_SPRING_TIMEFRAME,
+ ttl: ACTION_TTL
+ });
+ if (this.equipSpringID === NULL_ACTION_ID) {
+ this.equipSpringID = null;
+ this.setState(STATE_OFF);
+ return;
+ }
+ } else {
+ Entities.updateAction(this.grabbedEntity, this.equipSpringID, {
+ targetPosition: targetPosition,
+ linearTimeScale: EQUIP_SPRING_TIMEFRAME,
+ targetRotation: targetRotation,
+ angularTimeScale: EQUIP_SPRING_TIMEFRAME,
+ ttl: ACTION_TTL
+ });
+ }
+
+ if (Vec3.distance(grabbedProperties.position, targetPosition) < EQUIP_SPRING_SHUTOFF_DISTANCE) {
+ Entities.deleteAction(this.grabbedEntity, this.equipSpringID);
+ this.equipSpringID = null;
+ this.setState(STATE_EQUIP);
+ }
+ };
+
+ this.nearTrigger = function() {
+ if (this.triggerSmoothedReleased()) {
+ this.setState(STATE_RELEASE);
+ Entities.callEntityMethod(this.grabbedEntity, "stopNearTrigger");
+ return;
+ }
+ if (this.hand === RIGHT_HAND) {
+ Entities.callEntityMethod(this.grabbedEntity, "setRightHand");
+ } else {
+ Entities.callEntityMethod(this.grabbedEntity, "setLeftHand");
+ }
+
+ Entities.callEntityMethod(this.grabbedEntity, "setHand", [this.hand]);
+
+ Entities.callEntityMethod(this.grabbedEntity, "startNearTrigger");
+ this.setState(STATE_CONTINUE_NEAR_TRIGGER);
+ };
+
+ this.farTrigger = function() {
+ if (this.triggerSmoothedReleased()) {
+ this.setState(STATE_RELEASE);
+ Entities.callEntityMethod(this.grabbedEntity, "stopFarTrigger");
+ return;
+ }
+
+ if (this.hand === RIGHT_HAND) {
+ Entities.callEntityMethod(this.grabbedEntity, "setRightHand");
+ } else {
+ Entities.callEntityMethod(this.grabbedEntity, "setLeftHand");
+ }
+ Entities.callEntityMethod(this.grabbedEntity, "setHand", [this.hand]);
+ Entities.callEntityMethod(this.grabbedEntity, "startFarTrigger");
+ this.setState(STATE_CONTINUE_FAR_TRIGGER);
+ };
+
+ this.continueNearTrigger = function() {
+ if (this.triggerSmoothedReleased()) {
+ this.setState(STATE_RELEASE);
+ Entities.callEntityMethod(this.grabbedEntity, "stopNearTrigger");
+ return;
+ }
+
+ Entities.callEntityMethod(this.grabbedEntity, "continueNearTrigger");
+ };
+
+ this.continueFarTrigger = function() {
+ if (this.triggerSmoothedReleased()) {
+ this.setState(STATE_RELEASE);
+ Entities.callEntityMethod(this.grabbedEntity, "stopNearTrigger");
+ return;
+ }
+
+ var handPosition = this.getHandPosition();
+ var pickRay = {
+ origin: handPosition,
+ direction: Quat.getUp(this.getHandRotation())
+ };
+
+ var now = Date.now();
+ if (now - this.lastPickTime > MSECS_PER_SEC / PICKS_PER_SECOND_PER_HAND) {
+ var intersection = Entities.findRayIntersection(pickRay, true);
+ this.lastPickTime = now;
+ if (intersection.entityID != this.grabbedEntity) {
+ this.setState(STATE_RELEASE);
+ Entities.callEntityMethod(this.grabbedEntity, "stopFarTrigger");
+ return;
+ }
+ }
+
+ this.lineOn(pickRay.origin, Vec3.multiply(pickRay.direction, LINE_LENGTH), NO_INTERSECT_COLOR);
+ Entities.callEntityMethod(this.grabbedEntity, "continueFarTrigger");
+ };
+
+ _this.allTouchedIDs = {};
+ this.touchTest = function() {
+ var maxDistance = 0.05;
+ var leftHandPosition = MyAvatar.getLeftPalmPosition();
+ var rightHandPosition = MyAvatar.getRightPalmPosition();
+ var leftEntities = Entities.findEntities(leftHandPosition, maxDistance);
+ var rightEntities = Entities.findEntities(rightHandPosition, maxDistance);
+ var ids = [];
+
+ if (leftEntities.length !== 0) {
+ leftEntities.forEach(function(entity) {
+ ids.push(entity);
+ });
+
+ }
+
+ if (rightEntities.length !== 0) {
+ rightEntities.forEach(function(entity) {
+ ids.push(entity);
+ });
+ }
+
+ ids.forEach(function(id) {
+
+ var props = Entities.getEntityProperties(id, ["boundingBox", "name"]);
+ if (props.name === 'pointer') {
+ return;
+ } else {
+ var entityMinPoint = props.boundingBox.brn;
+ var entityMaxPoint = props.boundingBox.tfl;
+ var leftIsTouching = pointInExtents(leftHandPosition, entityMinPoint, entityMaxPoint);
+ var rightIsTouching = pointInExtents(rightHandPosition, entityMinPoint, entityMaxPoint);
+
+ if ((leftIsTouching || rightIsTouching) && _this.allTouchedIDs[id] === undefined) {
+ // we haven't been touched before, but either right or left is touching us now
+ _this.allTouchedIDs[id] = true;
+ _this.startTouch(id);
+ } else if ((leftIsTouching || rightIsTouching) && _this.allTouchedIDs[id]) {
+ // we have been touched before and are still being touched
+ // continue touch
+ _this.continueTouch(id);
+ } else if (_this.allTouchedIDs[id]) {
+ delete _this.allTouchedIDs[id];
+ _this.stopTouch(id);
+
+ } else {
+ //we are in another state
+ return;
+ }
+ }
+
+ });
+
+ };
+
+ this.startTouch = function(entityID) {
+ Entities.callEntityMethod(entityID, "startTouch");
+ };
+
+ this.continueTouch = function(entityID) {
+ Entities.callEntityMethod(entityID, "continueTouch");
+ };
+
+ this.stopTouch = function(entityID) {
+ Entities.callEntityMethod(entityID, "stopTouch");
+ };
+
+ this.release = function() {
+
+ this.lineOff();
+
+ if (this.grabbedEntity !== null) {
+ if (this.actionID !== null) {
+ Entities.deleteAction(this.grabbedEntity, this.actionID);
+ }
+ }
+
+ this.deactivateEntity(this.grabbedEntity);
+
+ this.grabbedEntity = null;
+ this.actionID = null;
+ this.setState(STATE_OFF);
+ };
+
+ this.cleanup = function() {
+ this.release();
+ this.endHandGrasp();
+ };
+
+ this.activateEntity = function(entityID, grabbedProperties) {
+ var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, entityID, DEFAULT_GRABBABLE_DATA);
+ var invertSolidWhileHeld = grabbableData["invertSolidWhileHeld"];
+ var data = getEntityCustomData(GRAB_USER_DATA_KEY, entityID, {});
+ data["activated"] = true;
+ data["avatarId"] = MyAvatar.sessionUUID;
+ data["refCount"] = data["refCount"] ? data["refCount"] + 1 : 1;
+ // zero gravity and set ignoreForCollisions in a way that lets us put them back, after all grabs are done
+ if (data["refCount"] == 1) {
+ data["gravity"] = grabbedProperties.gravity;
+ data["ignoreForCollisions"] = grabbedProperties.ignoreForCollisions;
+ data["collisionsWillMove"] = grabbedProperties.collisionsWillMove;
+ var whileHeldProperties = {
+ gravity: {
+ x: 0,
+ y: 0,
+ z: 0
+ }
+ };
+ if (invertSolidWhileHeld) {
+ whileHeldProperties["ignoreForCollisions"] = !grabbedProperties.ignoreForCollisions;
+ }
+ Entities.editEntity(entityID, whileHeldProperties);
+ }
+
+ setEntityCustomData(GRAB_USER_DATA_KEY, entityID, data);
+ return data;
+ };
+
+ this.deactivateEntity = function(entityID) {
+ var data = getEntityCustomData(GRAB_USER_DATA_KEY, entityID, {});
+ if (data && data["refCount"]) {
+ data["refCount"] = data["refCount"] - 1;
+ if (data["refCount"] < 1) {
+ Entities.editEntity(entityID, {
+ gravity: data["gravity"],
+ ignoreForCollisions: data["ignoreForCollisions"],
+ collisionsWillMove: data["collisionsWillMove"]
+ });
+ data = null;
+ }
+ } else {
+ data = null;
+ }
+ setEntityCustomData(GRAB_USER_DATA_KEY, entityID, data);
+ };
+
+
+ //this is our handler, where we do the actual work of changing animation settings
+ this.graspHand = function(animationProperties) {
+ var result = {};
+ //full alpha on overlay for this hand
+ //set grab to true
+ //set idle to false
+ //full alpha on the blend btw open and grab
+ if (_this.hand === RIGHT_HAND) {
+ result['rightHandOverlayAlpha'] = 1.0;
+ result['isRightHandGrab'] = true;
+ result['isRightHandIdle'] = false;
+ result['rightHandGrabBlend'] = 1.0;
+ } else if (_this.hand === LEFT_HAND) {
+ result['leftHandOverlayAlpha'] = 1.0;
+ result['isLeftHandGrab'] = true;
+ result['isLeftHandIdle'] = false;
+ result['leftHandGrabBlend'] = 1.0;
+ }
+ //return an object with our updated settings
+ return result;
+ }
+
+ this.graspHandler = null
+ this.startHandGrasp = function() {
+ if (this.hand === RIGHT_HAND) {
+ this.graspHandler = MyAvatar.addAnimationStateHandler(this.graspHand, ['isRightHandGrab']);
+ } else if (this.hand === LEFT_HAND) {
+ this.graspHandler = MyAvatar.addAnimationStateHandler(this.graspHand, ['isLeftHandGrab']);
+ }
+ }
+
+ this.endHandGrasp = function() {
+ // Tell the animation system we don't need any more callbacks.
+ MyAvatar.removeAnimationStateHandler(this.graspHandler);
+ }
+
+}
+
+var rightController = new MyController(RIGHT_HAND);
+var leftController = new MyController(LEFT_HAND);
+
+var MAPPING_NAME = "com.highfidelity.handControllerGrab";
+
+var mapping = Controller.newMapping(MAPPING_NAME);
+mapping.from([Controller.Standard.RT]).peek().to(rightController.triggerPress);
+mapping.from([Controller.Standard.LT]).peek().to(leftController.triggerPress);
+
+Controller.enableMapping(MAPPING_NAME);
+
+var handToDisable = 'none';
+
+function update() {
+ if (handToDisable !== LEFT_HAND) {
+ leftController.update();
+ }
+ if (handToDisable !== RIGHT_HAND) {
+ rightController.update();
+ }
+}
+
+Messages.subscribe('Hifi-Hand-Disabler');
+
+handleHandDisablerMessages = function(channel, message, sender) {
+
+ if (sender === MyAvatar.sessionUUID) {
+ handToDisable = message;
+ if (message === 'left') {
+ handToDisable = LEFT_HAND;
+ }
+ if (message === 'right') {
+ handToDisable = RIGHT_HAND;
+ }
+ }
+
+}
+
+Messages.messageReceived.connect(handleHandDisablerMessages);
+
+function cleanup() {
+ rightController.cleanup();
+ leftController.cleanup();
+ Controller.disableMapping(MAPPING_NAME);
+}
+
+Script.scriptEnding.connect(cleanup);
+Script.update.connect(update);
\ No newline at end of file
diff --git a/hifi-content/alessandro/dev/JS/Misc/shopShelfEntityScript.js b/hifi-content/alessandro/dev/JS/Misc/shopShelfEntityScript.js
new file mode 100644
index 000000000..41c54c1b8
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/Misc/shopShelfEntityScript.js
@@ -0,0 +1,45 @@
+//
+// detectGrabExample.js
+// examples/entityScripts
+//
+// Created by Brad Hefta-Gaub on 9/3/15.
+// Copyright 2015 High Fidelity, Inc.
+//
+// This is an example of an entity script which when assigned to an entity, will detect when the entity is being grabbed by the hydraGrab script
+//
+// 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 _this;
+ var hand;
+ var onShelf = true;
+
+ // this is the "constructor" for the entity as a JS object we don't do much here, but we do want to remember
+ // our this object, so we can access it in cases where we're called without a this (like in the case of various global signals)
+ Shelf = function() {
+ _this = this;
+ };
+
+ Shelf.prototype = {
+
+ // preload() will be called when the entity has become visible (or known) to the interface
+ // it gives us a chance to set our local JavaScript object up. In this case it means:
+ // * remembering our entityID, so we can access it in cases where we're called without an entityID
+ // * connecting to the update signal so we can check our grabbed state
+ preload: function(entityID) {
+ this.entityID = entityID;
+ },
+
+ doSomething: function (entityID, dataArray) {
+ var data = JSON.parse(dataArray[0]);
+ print("item ID: " + data.id);
+ Entities.deleteEntity(data.id);
+ },
+ };
+
+ // entity scripts always need to return a newly constructed object of our type
+ return new Shelf();
+})
diff --git a/hifi-content/alessandro/dev/JS/libraries/overlayManager.js b/hifi-content/alessandro/dev/JS/libraries/overlayManager.js
new file mode 100644
index 000000000..1e39e70fd
--- /dev/null
+++ b/hifi-content/alessandro/dev/JS/libraries/overlayManager.js
@@ -0,0 +1,412 @@
+//
+// overlayManager.js
+// examples/libraries
+//
+// Created by Zander Otavka on 7/24/15
+// Copyright 2015 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
+//
+// Manage overlays with object oriented goodness, instead of ugly `Overlays.h` methods.
+// Instead of:
+//
+// var billboard = Overlays.addOverlay("image3d", { visible: false });
+// ...
+// Overlays.editOverlay(billboard, { visible: true });
+// ...
+// Overlays.deleteOverlay(billboard);
+//
+// You can now do:
+//
+// var billboard = new Image3DOverlay({ visible: false });
+// ...
+// billboard.visible = true;
+// ...
+// billboard.destroy();
+//
+// More on usage below. Examples in `examples/example/overlayPanelExample.js`.
+//
+// Note that including this file will delete `Overlays` from the global scope. All the
+// functionality of `Overlays` is represented here, just better. If you try to use `Overlays`
+// in tandem, there may be performance problems or nasty surprises.
+//
+
+(function() {
+ // Delete `Overlays` from the global scope.
+ var Overlays = this.Overlays;
+ delete this.Overlays;
+
+
+ var ABSTRACT = null;
+
+ var overlays = {};
+ var panels = {};
+
+ var overlayTypes = {};
+
+
+ function generateOverlayClass(superclass, type, properties) {
+ var that;
+ if (type == ABSTRACT) {
+ that = function(type, params) {
+ superclass.call(this, type, params);
+ };
+ } else {
+ that = function(params) {
+ superclass.call(this, type, params);
+ };
+ overlayTypes[type] = that;
+ }
+
+ that.prototype = new superclass();
+ that.prototype.constructor = that;
+
+ properties.forEach(function(prop) {
+ Object.defineProperty(that.prototype, prop, {
+ get: function() {
+ return Overlays.getProperty(this._id, prop);
+ },
+ set: function(newValue) {
+ var keyValuePair = {};
+ keyValuePair[prop] = newValue;
+ this.setProperties(keyValuePair);
+ },
+ configurable: false
+ });
+ });
+
+ return that;
+ }
+
+ //
+ // Create a new JavaScript object for an overlay of given ID.
+ //
+ function makeOverlayFromId(id) {
+ var type = Overlays.getOverlayType(id);
+ if (!type) {
+ return null;
+ }
+ var overlay = new overlayTypes[type]();
+ overlay._id = id;
+ overlays[id] = overlay;
+ return overlay;
+ }
+
+ //
+ // Get or create an overlay object from the id.
+ //
+ // @param knownOverlaysOnly (Optional: Boolean)
+ // If true, a new object will not be created.
+ // @param searchList (Optional: Object)
+ // Map of overlay id's and overlay objects. Can be generated with
+ // `OverlayManager.makeSearchList`.
+ //
+ function findOverlay(id, knownOverlaysOnly, searchList) {
+ if (id > 0) {
+ knownOverlaysOnly = Boolean(knownOverlaysOnly);
+ searchList = searchList || overlays;
+ var foundOverlay = searchList[id];
+ if (foundOverlay) {
+ return foundOverlay;
+ }
+ if (!knownOverlaysOnly) {
+ return makeOverlayFromId(id);
+ }
+ }
+ return null;
+ }
+
+ //
+ // Create a new JavaScript object for a panel of given ID.
+ //
+ function makePanelFromId(id) {
+ if (!Overlays.isAddedPanel(id)) {
+ return null;
+ }
+ var panel = new OverlayPanel();
+ panel._id = id;
+ overlays[id] = overlay;
+ return overlay;
+ }
+
+ //
+ // Get or create a panel object from the id.
+ //
+ // @param knownOverlaysOnly (Optional: Boolean)
+ // If true, a new object will not be created.
+ // @param searchList (Optional: Object)
+ // Map of overlay id's and overlay objects. Can be generated with
+ // `OverlayManager.makeSearchList`.
+ //
+ function findPanel(id, knownPanelsOnly, searchList) {
+ if (id > 0) {
+ knownPanelsOnly = Boolean(knownPanelsOnly);
+ searchList = searchList || panels;
+ var foundPanel = searchList[id];
+ if (foundPanel) {
+ return foundPanel;
+ }
+ if (!knownPanelsOnly) {
+ return makePanelFromId(id);
+ }
+ }
+ return null;
+ }
+
+ function findOverlayOrPanel(id, knownObjectsOnly, searchList) {
+ return findOverlay(id, knownObjectsOnly, searchList) ||
+ findPanel(id, knownObjectsOnly, searchList);
+ }
+
+
+ var Overlay = (function() {
+ var that = function(type, params) {
+ if (type && params) {
+ this._id = Overlays.addOverlay(type, params);
+ overlays[this._id] = this;
+ } else {
+ this._id = 0;
+ }
+ };
+
+ that.prototype.constructor = that;
+
+ Object.defineProperty(that.prototype, "isLoaded", {
+ get: function() {
+ return Overlays.isLoaded(this._id);
+ }
+ });
+
+ Object.defineProperty(that.prototype, "parentPanel", {
+ get: function() {
+ return findPanel(Overlays.getParentPanel(this._id));
+ }
+ });
+
+ that.prototype.getTextSize = function(text) {
+ return Overlays.textSize(this._id, text);
+ };
+
+ that.prototype.setProperties = function(properties) {
+ Overlays.editOverlay(this._id, properties);
+ };
+
+ that.prototype.clone = function() {
+ return makeOverlayFromId(Overlays.cloneOverlay(this._id));
+ };
+
+ that.prototype.destroy = function() {
+ Overlays.deleteOverlay(this._id);
+ };
+
+ that.prototype.isPanelAttachable = function() {
+ return false;
+ };
+
+ return generateOverlayClass(that, ABSTRACT, [
+ "alpha", "glowLevel", "pulseMax", "pulseMin", "pulsePeriod", "glowLevelPulse",
+ "alphaPulse", "colorPulse", "visible", "anchor"
+ ]);
+ })();
+
+ // Supports multiple inheritance of properties. Just `concat` them onto the end of the
+ // properties list.
+ var PanelAttachable = ["offsetPosition", "offsetRotation", "offsetScale"];
+ var Billboardable = ["isFacingAvatar"];
+
+ var Overlay2D = generateOverlayClass(Overlay, ABSTRACT, [
+ "bounds", "x", "y", "width", "height"
+ ]);
+
+ var Base3DOverlay = generateOverlayClass(Overlay, ABSTRACT, [
+ "position", "lineWidth", "rotation", "isSolid", "isFilled", "isWire", "isDashedLine",
+ "ignoreRayIntersection", "drawInFront", "drawOnHUD"
+ ]);
+
+ var Planar3DOverlay = generateOverlayClass(Base3DOverlay, ABSTRACT, [
+ "dimensions"
+ ]);
+
+ var Billboard3DOverlay = generateOverlayClass(Planar3DOverlay, ABSTRACT, [
+ ].concat(PanelAttachable).concat(Billboardable));
+ Billboard3DOverlay.prototype.isPanelAttachable = function() { return true; };
+
+ var Volume3DOverlay = generateOverlayClass(Base3DOverlay, ABSTRACT, [
+ "dimensions"
+ ]);
+
+ ImageOverlay = generateOverlayClass(Overlay2D, "image", [
+ "subImage", "imageURL"
+ ]);
+
+ Image3DOverlay = generateOverlayClass(Billboard3DOverlay, "image3d", [
+ "url", "subImage"
+ ]);
+
+ TextOverlay = generateOverlayClass(Overlay2D, "text", [
+ "font", "text", "backgroundColor", "backgroundAlpha", "leftMargin", "topMargin"
+ ]);
+
+ Text3DOverlay = generateOverlayClass(Billboard3DOverlay, "text3d", [
+ "text", "backgroundColor", "backgroundAlpha", "lineHeight", "leftMargin", "topMargin",
+ "rightMargin", "bottomMargin"
+ ]);
+
+ Cube3DOverlay = generateOverlayClass(Volume3DOverlay, "cube", [
+ "borderSize"
+ ]);
+
+ Sphere3DOverlay = generateOverlayClass(Volume3DOverlay, "sphere", [
+ ]);
+
+ Circle3DOverlay = generateOverlayClass(Planar3DOverlay, "circle3d", [
+ "startAt", "endAt", "outerRadius", "innerRadius", "hasTickMarks",
+ "majorTickMarksAngle", "minorTickMarksAngle", "majorTickMarksLength",
+ "minorTickMarksLength", "majorTickMarksColor", "minorTickMarksColor"
+ ]);
+
+ Rectangle3DOverlay = generateOverlayClass(Planar3DOverlay, "rectangle3d", [
+ ]);
+
+ Line3DOverlay = generateOverlayClass(Base3DOverlay, "line3d", [
+ "start", "end"
+ ]);
+
+ Grid3DOverlay = generateOverlayClass(Planar3DOverlay, "grid", [
+ "minorGridWidth", "majorGridEvery"
+ ]);
+
+ LocalModelsOverlay = generateOverlayClass(Volume3DOverlay, "localmodels", [
+ ]);
+
+ ModelOverlay = generateOverlayClass(Volume3DOverlay, "model", [
+ "url", "dimensions", "textures"
+ ]);
+
+
+ OverlayPanel = (function() {
+ var that = function(params) {
+ this._id = Overlays.addPanel(params);
+ panels[this._id] = this;
+ };
+
+ that.prototype.constructor = that;
+
+ var props = [
+ "anchorPosition", "anchorPositionBinding", "anchorRotation", "anchorRotationBinding", "anchorScale", "visible"
+ ].concat(PanelAttachable).concat(Billboardable)
+
+ props.forEach(function(prop) {
+ Object.defineProperty(that.prototype, prop, {
+ get: function() {
+ return Overlays.getPanelProperty(this._id, prop);
+ },
+ set: function(newValue) {
+ var keyValuePair = {};
+ keyValuePair[prop] = newValue;
+ this.setProperties(keyValuePair);
+ },
+ configurable: false
+ });
+ });
+
+ Object.defineProperty(that.prototype, "parentPanel", {
+ get: function() {
+ return findPanel(Overlays.getParentPanel(this._id));
+ }
+ });
+
+ Object.defineProperty(that.prototype, "children", {
+ get: function() {
+ var idArray = Overlays.getPanelProperty(this._id, "children");
+ var objArray = [];
+ for (var i = 0; i < idArray.length; i++) {
+ objArray[i] = findOverlayOrPanel(idArray[i]);
+ }
+ return objArray;
+ }
+ });
+
+ that.prototype.addChild = function(child) {
+ Overlays.setParentPanel(child._id, this._id);
+ return child;
+ };
+
+ that.prototype.removeChild = function(child) {
+ if (child.parentPanel === this) {
+ Overlays.setParentPanel(child._id, 0);
+ }
+ };
+
+ that.prototype.setProperties = function(properties) {
+ Overlays.editPanel(this._id, properties);
+ };
+
+ that.prototype.setChildrenVisible = function() {
+ this.children.forEach(function(child) {
+ child.visible = true;
+ if (child.setChildrenVisible !== undefined) {
+ child.setChildrenVisible();
+ }
+ });
+ };
+
+ that.prototype.destroy = function() {
+ Overlays.deletePanel(this._id);
+ };
+
+ return that;
+ })();
+
+
+ OverlayManager = {
+ findOnRay: function(pickRay, knownOverlaysOnly, searchList) {
+ var rayPickResult = Overlays.findRayIntersection(pickRay);
+ if (rayPickResult.intersects) {
+ return findOverlay(rayPickResult.overlayID, knownOverlaysOnly, searchList);
+ }
+ return null;
+ },
+ findAtPoint: function(point, knownOverlaysOnly, searchList) {
+ var foundID = Overlays.getOverlayAtPoint(point);
+ if (foundID) {
+ return findOverlay(foundID, knownOverlaysOnly, searchList);
+ } else {
+ var pickRay = Camera.computePickRay(point.x, point.y);
+ return OverlayManager.findOnRay(pickRay, knownOverlaysOnly, searchList);
+ }
+ },
+ makeSearchList: function(array) {
+ var searchList = {};
+ array.forEach(function(object) {
+ searchList[object._id] = object;
+ });
+ return searchList;
+ }
+ };
+
+
+ // Threadsafe cleanup of JavaScript objects.
+
+ function onOverlayDeleted(id) {
+ if (id in overlays) {
+ if (overlays[id].parentPanel) {
+ overlays[id].parentPanel.removeChild(overlays[id]);
+ }
+ delete overlays[id];
+ }
+ }
+
+ function onPanelDeleted(id) {
+ if (id in panels) {
+ if (panels[id].parentPanel) {
+ panels[id].parentPanel.removeChild(panels[id]);
+ }
+ delete panels[id];
+ }
+ }
+
+ Overlays.overlayDeleted.connect(onOverlayDeleted);
+ Overlays.panelDeleted.connect(onPanelDeleted);
+})();
diff --git a/hifi-content/alessandro/dev/models/cleanRoom.fbx b/hifi-content/alessandro/dev/models/cleanRoom.fbx
new file mode 100644
index 000000000..1b33518cd
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/cleanRoom.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1328bf99f0c4d59eccd95df0741e67574c66d371bc06185546fe000022eb5cf8
+size 2745452
diff --git a/hifi-content/alessandro/dev/models/desk.fbx b/hifi-content/alessandro/dev/models/desk.fbx
new file mode 100644
index 000000000..607e33078
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/desk.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:15a5bdb03719170a47623ab9a8fa167a6691535574ca18abb13fce3cf1970e15
+size 34284
diff --git a/hifi-content/alessandro/dev/models/hat1model.fbx b/hifi-content/alessandro/dev/models/hat1model.fbx
new file mode 100644
index 000000000..3e8998231
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/hat1model.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d01bb0c97184e26ac3c0d2ef9d42c8e2e83191e94ed3ace74e93350bc17d912
+size 1463132
diff --git a/hifi-content/alessandro/dev/models/hat1preview.png b/hifi-content/alessandro/dev/models/hat1preview.png
new file mode 100644
index 000000000..983fac9bc
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/hat1preview.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f4438783a0fd59ea32f3db932e1c1b770e8fffa92b2c66a05147b03b91b8d52b
+size 106528
diff --git a/hifi-content/alessandro/dev/models/hat2model.fbx b/hifi-content/alessandro/dev/models/hat2model.fbx
new file mode 100644
index 000000000..22ff6d1b7
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/hat2model.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac87572cf1d18e9b89b58e4f67a3e7549e0aac958606b4a6e64817bbd76f9271
+size 1463132
diff --git a/hifi-content/alessandro/dev/models/hat2preview.png b/hifi-content/alessandro/dev/models/hat2preview.png
new file mode 100644
index 000000000..1218a48df
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/hat2preview.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9ec549e9449633d9dde868d4e2c1f75ebcbd4ca71b026f7046d71fd773c797e6
+size 95098
diff --git a/hifi-content/alessandro/dev/models/hat3model.fbx b/hifi-content/alessandro/dev/models/hat3model.fbx
new file mode 100644
index 000000000..502b30dc1
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/hat3model.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a73d02f535c591dd0d0542d43fb4fc4b5d9add65aeb41ee3ffd815df19e0bb63
+size 1463132
diff --git a/hifi-content/alessandro/dev/models/hat3preview.png b/hifi-content/alessandro/dev/models/hat3preview.png
new file mode 100644
index 000000000..b6bbc2c8a
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/hat3preview.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:034cb3cc549276a68e7b67fa2f652248101c247f9f91c801140a538117155625
+size 104329
diff --git a/hifi-content/alessandro/dev/models/sunglasses1model.fbx b/hifi-content/alessandro/dev/models/sunglasses1model.fbx
new file mode 100644
index 000000000..3b82f2bf3
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/sunglasses1model.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:65d18572fe0eb3746a1766fd360757cd277c4df190cd1e4b1546e53f501d6c01
+size 33372
diff --git a/hifi-content/alessandro/dev/models/sunglasses1preview.png b/hifi-content/alessandro/dev/models/sunglasses1preview.png
new file mode 100644
index 000000000..a380280f2
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/sunglasses1preview.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:431300a47d5476951bd83b711a8a3dc4a09f0ddcf8b5074534f7d5bf1ebf239b
+size 64821
diff --git a/hifi-content/alessandro/dev/models/sunglasses2model.fbx b/hifi-content/alessandro/dev/models/sunglasses2model.fbx
new file mode 100644
index 000000000..c157331e2
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/sunglasses2model.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9206be49dba23102b5992eb1bda13d90e1eff5bbfcdfddd20aa3224976e22c6d
+size 33372
diff --git a/hifi-content/alessandro/dev/models/sunglasses2preview.png b/hifi-content/alessandro/dev/models/sunglasses2preview.png
new file mode 100644
index 000000000..11d4da2ff
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/sunglasses2preview.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c50d940b5a310beca7915c02bdc5bc9a2e54e4c4d95d86e01631008a15a6ea4d
+size 66639
diff --git a/hifi-content/alessandro/dev/models/sunglasses3model.fbx b/hifi-content/alessandro/dev/models/sunglasses3model.fbx
new file mode 100644
index 000000000..c32365171
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/sunglasses3model.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b27bc28aaec0dca7b994ed131f94b666a634ec5b0f220eaecc62971f98d6d7bd
+size 33372
diff --git a/hifi-content/alessandro/dev/models/sunglasses3preview.png b/hifi-content/alessandro/dev/models/sunglasses3preview.png
new file mode 100644
index 000000000..b21ff965e
--- /dev/null
+++ b/hifi-content/alessandro/dev/models/sunglasses3preview.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c1cb4c7ead8237d5dc21f9c876a31d244dd1aaad11f917b5c3929dc9552f774
+size 72223
diff --git a/hifi-content/alexia/AndroidMedia/MobileUI.png b/hifi-content/alexia/AndroidMedia/MobileUI.png
new file mode 100644
index 000000000..b608038b4
--- /dev/null
+++ b/hifi-content/alexia/AndroidMedia/MobileUI.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7b3bae6925e8a0f1763c43af4faacfd8f2b82784f1e1cbf4b22c4131b7a38736
+size 179426
diff --git a/hifi-content/alexia/Apps/Template/VRFontTest.html b/hifi-content/alexia/Apps/Template/VRFontTest.html
new file mode 100644
index 000000000..29e9c7a11
--- /dev/null
+++ b/hifi-content/alexia/Apps/Template/VRFontTest.html
@@ -0,0 +1,155 @@
+
+
+
+ VR Font Test
+
+
+
+
+
+
+
+
VR Font Test
+
+
+
+
+
+
+
quiet
+
fence proud
+
neat royal voyage
+
stain form
+
lamp notice dime
+
found hover country
+
cow wise glow
+
donkey cheer shock cup
+
sin branch sheet knee
+
alert blue desire teeny
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hifi-content/alexia/Apps/Template/VRFontTest.js b/hifi-content/alexia/Apps/Template/VRFontTest.js
new file mode 100644
index 000000000..80f397a0b
--- /dev/null
+++ b/hifi-content/alexia/Apps/Template/VRFontTest.js
@@ -0,0 +1,69 @@
+"use strict";
+
+//
+// template.js
+//
+
+(function() {
+ var APP_NAME = "VR FONT";
+ // Link to your app's HTML file
+ var APP_URL_BOLD = "http://hifi-content.s3.amazonaws.com/alexia/Apps/Template/VRFontTestBold.html";
+ var APP_URL_NORMAL = "http://hifi-content.s3.amazonaws.com/alexia/Apps/Template/VRFontTest.html";
+ // Path to the icon art for your app
+ var APP_ICON = "https://hifi-content.s3.amazonaws.com/faye/gemstoneMagicMaker/gemstoneAppIcon.svg";
+
+
+
+ // Get a reference to the tablet
+ var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
+
+ // The following lines create a button on the tablet's menu screen
+ var button = tablet.addButton({
+ icon: APP_ICON,
+ text: APP_NAME
+ });
+
+ // When user click the app button, we'll display our app on the tablet screen
+ function onClicked() {
+ tablet.gotoWebScreen(APP_URL_NORMAL);
+ }
+ button.clicked.connect(onClicked);
+
+ // Helper function that gives us a position right in front of the user
+ function getPositionToCreateEntity() {
+ var direction = Quat.getFront(MyAvatar.orientation);
+ var distance = 0.5;
+ var position = Vec3.sum(MyAvatar.position, Vec3.multiply(direction, distance));
+ position.y += 0.5;
+ return position;
+ }
+
+ // Handle the events we're recieving from the web UI
+ function onWebEventReceived(event) {
+ print("template.js received a web event:" + event);
+
+ // Converts the event to a JavasScript Object
+ if (typeof event === "string") {
+ event = JSON.parse(event);
+ }
+
+ if (event.type === "click") {
+ // Define the entity properties of for each of the gemstone, then add it to the scene
+
+ if (event.data === "Bold") {
+ tablet.gotoWebScreen(APP_URL_BOLD);
+ } else if (event.data === "Normal") {
+ tablet.gotoWebScreen(APP_URL_NORMAL);
+ }
+ }
+ }
+ tablet.webEventReceived.connect(onWebEventReceived);
+
+ // Provide a way to "uninstall" the app
+ // Here, we write a function called "cleanup" which gets executed when
+ // this script stops running. It'll remove the app button from the tablet.
+ function cleanup() {
+ tablet.removeButton(button);
+ }
+ Script.scriptEnding.connect(cleanup);
+}());
\ No newline at end of file
diff --git a/hifi-content/alexia/Apps/Template/VRFontTestBold.html b/hifi-content/alexia/Apps/Template/VRFontTestBold.html
new file mode 100644
index 000000000..d33ec554d
--- /dev/null
+++ b/hifi-content/alexia/Apps/Template/VRFontTestBold.html
@@ -0,0 +1,156 @@
+
+
+
+ VR Font Test
+
+
+
+
+
+
+
+
VR Font Test
+
+
+
+
+
+
+
copper
+
explain truck
+
neat unite branch
+
educated hum
+
decisive notice far
+
pig intelligent birthday
+
calm month glow
+
unusual man boring arrest
+
pies murky sheet stiff
+
overflow blue cobweb guess
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hifi-content/alexia/Avatars/Bevi/FST/bevi.fst b/hifi-content/alexia/Avatars/Bevi/FST/bevi.fst
new file mode 100644
index 000000000..70c6c508c
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Bevi/FST/bevi.fst
@@ -0,0 +1,85 @@
+name = bevi
+type = body+head
+scale = 1
+filename = bevi/bevi.fbx
+texdir = bevi/textures
+joint = jointRightHand = RightHand
+joint = jointHead = Head
+joint = jointRoot = Hips
+joint = jointNeck = Neck
+joint = jointLean = Spine
+joint = jointEyeLeft = LeftEye
+joint = jointLeftHand = LeftHand
+joint = jointEyeRight = RightEye
+freeJoint = LeftArm
+freeJoint = LeftForeArm
+freeJoint = RightArm
+freeJoint = RightForeArm
+jointIndex = LeftHandRing4 = 49
+jointIndex = RightHandThumb4 = 21
+jointIndex = LeftHandIndex2 = 51
+jointIndex = LeftHandIndex4 = 53
+jointIndex = RightHandRing1 = 26
+jointIndex = RightToe_End = 5
+jointIndex = LeftHandThumb3 = 56
+jointIndex = RightHandThumb3 = 20
+jointIndex = RightHandRing2 = 27
+jointIndex = LeftHandRing1 = 46
+jointIndex = LeftHandIndex1 = 50
+jointIndex = Hips = 0
+jointIndex = Spine = 11
+jointIndex = RightHand = 17
+jointIndex = RightHandPinky3 = 32
+jointIndex = Spine1 = 12
+jointIndex = LeftHandPinky4 = 45
+jointIndex = RightHandMiddle2 = 35
+jointIndex = LeftFoot = 8
+jointIndex = RightHandMiddle3 = 36
+jointIndex = RightHandMiddle1 = 34
+jointIndex = LeftHandMiddle2 = 59
+jointIndex = LeftEye = 64
+jointIndex = RightHandRing4 = 29
+jointIndex = LeftHandRing3 = 48
+jointIndex = RightHandIndex1 = 22
+jointIndex = LeftHandMiddle1 = 58
+jointIndex = RightUpLeg = 1
+jointIndex = LeftHandPinky1 = 42
+jointIndex = RightHandIndex3 = 24
+jointIndex = LeftHandThumb1 = 54
+jointIndex = RightHandPinky2 = 31
+jointIndex = RightHandRing3 = 28
+jointIndex = RightHandIndex2 = 23
+jointIndex = Spine2 = 13
+jointIndex = LeftHandRing2 = 47
+jointIndex = RightLeg = 2
+jointIndex = RightFoot = 3
+jointIndex = RightArm = 15
+jointIndex = LeftHandIndex3 = 52
+jointIndex = pCube1 = 67
+jointIndex = RightHandThumb2 = 19
+jointIndex = LeftForeArm = 40
+jointIndex = LeftHandPinky3 = 44
+jointIndex = LeftHandThumb4 = 57
+jointIndex = LeftToeBase = 9
+jointIndex = RightForeArm = 16
+jointIndex = RightHandThumb1 = 18
+jointIndex = LeftHandMiddle3 = 60
+jointIndex = LeftArm = 39
+jointIndex = LeftHandPinky2 = 43
+jointIndex = RightHandMiddle4 = 37
+jointIndex = HeadTop_End = 66
+jointIndex = RightHandIndex4 = 25
+jointIndex = RightToeBase = 4
+jointIndex = LeftLeg = 7
+jointIndex = RightHandPinky4 = 33
+jointIndex = Head = 63
+jointIndex = RightHandPinky1 = 30
+jointIndex = RightEye = 65
+jointIndex = LeftToe_End = 10
+jointIndex = RightShoulder = 14
+jointIndex = LeftShoulder = 38
+jointIndex = LeftHandMiddle4 = 61
+jointIndex = LeftHandThumb2 = 55
+jointIndex = LeftUpLeg = 6
+jointIndex = LeftHand = 41
+jointIndex = Neck = 62
diff --git a/hifi-content/alexia/Avatars/Bevi/FST/bevi/bevi.fbx b/hifi-content/alexia/Avatars/Bevi/FST/bevi/bevi.fbx
new file mode 100644
index 000000000..1346fb99d
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Bevi/FST/bevi/bevi.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bb97bcc576b0a13b2ada28ead7f7928196978c0bb432c29b0d2ac5c6e7d8e249
+size 386768
diff --git a/hifi-content/alexia/Avatars/Bevi/bubble.png b/hifi-content/alexia/Avatars/Bevi/bubble.png
new file mode 100644
index 000000000..11c427141
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Bevi/bubble.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e23de767c864ac8eb578fd01897f3214b4eed5ffe101d07d60efbab0e35c8abf
+size 343428
diff --git a/hifi-content/alexia/Avatars/Bevi/coconut.png b/hifi-content/alexia/Avatars/Bevi/coconut.png
new file mode 100644
index 000000000..0e3d12b58
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Bevi/coconut.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53b06b58b1e7629be064a6ba4e10d1733547abc65a2dca1e4bde6c4d90ab820d
+size 31056
diff --git a/hifi-content/alexia/Avatars/Cloud/Cloud.fst b/hifi-content/alexia/Avatars/Cloud/Cloud.fst
new file mode 100644
index 000000000..f80479e0a
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Cloud/Cloud.fst
@@ -0,0 +1,91 @@
+name = Cloud
+type = body+head
+scale = 1
+filename = Cloud/Cloud.fbx
+texdir = Cloud/textures
+script = http://hifi-content.s3.amazonaws.com/alexia/Avatars/Stormcloud/rainParticles.js
+script = http://hifi-content.s3.amazonaws.com/alexia/Avatars/Stormcloud/lightningParticles.js
+joint = jointLean = Spine
+joint = jointEyeLeft = LeftEye
+joint = jointNeck = Neck
+joint = jointRightHand = RightHand
+joint = jointEyeRight = RightEye
+joint = jointHead = Head
+joint = jointLeftHand = LeftHand
+joint = jointRoot = Hips
+freeJoint = LeftArm
+freeJoint = LeftForeArm
+freeJoint = RightArm
+freeJoint = RightForeArm
+jointIndex = MeshGroup = 4
+jointIndex = Spine = 16
+jointIndex = LeftHandThumb4 = 62
+jointIndex = LeftHandMiddle3 = 65
+jointIndex = LeftHandMiddle2 = 64
+jointIndex = LeftHandMiddle4 = 66
+jointIndex = RightHandThumb1 = 23
+jointIndex = LeftArm = 44
+jointIndex = RightHandIndex1 = 27
+jointIndex = LeftHandRing4 = 54
+jointIndex = LeftHandPinky3 = 49
+jointIndex = LeftHandIndex4 = 58
+jointIndex = LeftHandIndex2 = 56
+jointIndex = LeftShoulder = 43
+jointIndex = RightHandRing2 = 32
+jointIndex = Hips = 5
+jointIndex = polySurface2 = 3
+jointIndex = RightHandIndex3 = 29
+jointIndex = RightHandPinky3 = 37
+jointIndex = RightFoot = 8
+jointIndex = LeftHandThumb1 = 59
+jointIndex = RightHandThumb2 = 24
+jointIndex = RightHandRing3 = 33
+jointIndex = RightEye = 70
+jointIndex = RightHandThumb4 = 26
+jointIndex = polySurface4 = 2
+jointIndex = LeftHandIndex1 = 55
+jointIndex = LeftHandThumb2 = 60
+jointIndex = RightHandIndex4 = 30
+jointIndex = LeftFoot = 13
+jointIndex = RightHandRing1 = 31
+jointIndex = RightHandMiddle3 = 41
+jointIndex = RightUpLeg = 6
+jointIndex = RightHandMiddle1 = 39
+jointIndex = LeftLeg = 12
+jointIndex = RightHand = 22
+jointIndex = RightHandMiddle2 = 40
+jointIndex = RightToe_End = 10
+jointIndex = LeftToe_End = 15
+jointIndex = LeftUpLeg = 11
+jointIndex = RightHandPinky1 = 35
+jointIndex = LeftHandMiddle1 = 63
+jointIndex = LeftHandThumb3 = 61
+jointIndex = LeftForeArm = 45
+jointIndex = RightArm = 20
+jointIndex = Spine2 = 18
+jointIndex = Head = 68
+jointIndex = LeftHandRing3 = 53
+jointIndex = LeftToeBase = 14
+jointIndex = LeftHandPinky4 = 50
+jointIndex = HeadTop_End = 71
+jointIndex = LeftHandPinky2 = 48
+jointIndex = RightHandPinky4 = 38
+jointIndex = RightHandMiddle4 = 42
+jointIndex = pPlane1 = 0
+jointIndex = RightHandRing4 = 34
+jointIndex = RightForeArm = 21
+jointIndex = RightToeBase = 9
+jointIndex = LeftHand = 46
+jointIndex = RightShoulder = 19
+jointIndex = Spine1 = 17
+jointIndex = cloud = 1
+jointIndex = RightHandThumb3 = 25
+jointIndex = RightHandIndex2 = 28
+jointIndex = RightHandPinky2 = 36
+jointIndex = LeftHandRing2 = 52
+jointIndex = Neck = 67
+jointIndex = RightLeg = 7
+jointIndex = LeftEye = 69
+jointIndex = LeftHandIndex3 = 57
+jointIndex = LeftHandPinky1 = 47
+jointIndex = LeftHandRing1 = 51
diff --git a/hifi-content/alexia/Avatars/Cloud/Cloud/Cloud.fbx b/hifi-content/alexia/Avatars/Cloud/Cloud/Cloud.fbx
new file mode 100644
index 000000000..a0bb44058
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Cloud/Cloud/Cloud.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:847b2cf0a783bbda16f93426585b2acbfc3252df3b620b19492d26fb86ad7f4f
+size 340096
diff --git a/hifi-content/alexia/Avatars/Cloud/Cloud/textures/Cloud.jpg b/hifi-content/alexia/Avatars/Cloud/Cloud/textures/Cloud.jpg
new file mode 100644
index 000000000..2f2b2eafa
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Cloud/Cloud/textures/Cloud.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fdeaac3e6802ee9cdf49eac2c08fc9c9a3683eacd7218a83b6dd078e5017bf56
+size 1116349
diff --git a/hifi-content/alexia/Avatars/Cloud/Cloud/textures/Cloudface0000.png b/hifi-content/alexia/Avatars/Cloud/Cloud/textures/Cloudface0000.png
new file mode 100644
index 000000000..bd5d1c483
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Cloud/Cloud/textures/Cloudface0000.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a4a7977143a728a5302eef49ad8e8173631eae2e4fab5a1c764349ddfc4a2fb5
+size 16018
diff --git a/hifi-content/alexia/Avatars/DroopyCloudBind/cloudHappy.fst b/hifi-content/alexia/Avatars/DroopyCloudBind/cloudHappy.fst
new file mode 100644
index 000000000..10ff04243
--- /dev/null
+++ b/hifi-content/alexia/Avatars/DroopyCloudBind/cloudHappy.fst
@@ -0,0 +1,90 @@
+name = cloudHappy
+type = body+head
+scale = 1
+filename = cloudHappy/cloudHappy.fbx
+texdir = cloudHappy/textures
+joint = jointEyeLeft = LeftEye
+joint = jointHead = Head
+joint = jointEyeRight = RightEye
+joint = jointLean = Spine
+joint = jointRoot = Hips
+joint = jointRightHand = RightHand
+joint = jointNeck = Neck
+joint = jointLeftHand = LeftHand
+freeJoint = LeftArm
+freeJoint = LeftForeArm
+freeJoint = RightArm
+freeJoint = RightForeArm
+jointIndex = Spine2 = 18
+jointIndex = RightHandIndex4 = 31
+jointIndex = Hips = 5
+jointIndex = RightHandIndex3 = 30
+jointIndex = LeftToe_End = 15
+jointIndex = LeftHandPinky1 = 48
+jointIndex = LeftHandIndex3 = 58
+jointIndex = LeftHandRing4 = 55
+jointIndex = LeftHand = 47
+jointIndex = RightHandRing3 = 34
+jointIndex = LeftHandIndex4 = 59
+jointIndex = cloud = 1
+jointIndex = polySurface4 = 2
+jointIndex = RightHandThumb3 = 26
+jointIndex = LeftToeBase = 14
+jointIndex = LeftHandIndex1 = 56
+jointIndex = LeftForeArm = 46
+jointIndex = RightHandPinky1 = 36
+jointIndex = LeftHandPinky3 = 50
+jointIndex = Neck = 68
+jointIndex = RightHand = 23
+jointIndex = RightHandRing2 = 33
+jointIndex = RightLeg = 7
+jointIndex = RightHandThumb2 = 25
+jointIndex = LeftHandThumb3 = 62
+jointIndex = RightHandPinky4 = 39
+jointIndex = RightHandIndex1 = 28
+jointIndex = polySurface2 = 3
+jointIndex = pPlane1 = 0
+jointIndex = RightHandMiddle3 = 42
+jointIndex = LeftEye = 70
+jointIndex = LeftHandMiddle4 = 67
+jointIndex = LeftHandIndex2 = 57
+jointIndex = LeftFoot = 13
+jointIndex = LeftHandRing2 = 53
+jointIndex = RightArm = 21
+jointIndex = Spine1 = 17
+jointIndex = RightHandPinky3 = 38
+jointIndex = RightHandMiddle1 = 40
+jointIndex = LeftHandRing3 = 54
+jointIndex = RightUpLeg = 6
+jointIndex = LeftHandPinky2 = 49
+jointIndex = LeftArm = 45
+jointIndex = RightFoot = 8
+jointIndex = RightToe_End = 10
+jointIndex = LeftHandThumb2 = 61
+jointIndex = Spine = 16
+jointIndex = LeftHandThumb1 = 60
+jointIndex = LeftUpLeg = 11
+jointIndex = RightToeBase = 9
+jointIndex = LeftLeg = 12
+jointIndex = LeftHandThumb4 = 63
+jointIndex = joint = 19
+jointIndex = LeftHandMiddle2 = 65
+jointIndex = LeftHandMiddle1 = 64
+jointIndex = RightHandRing1 = 32
+jointIndex = RightHandRing4 = 35
+jointIndex = RightShoulder = 20
+jointIndex = LeftShoulder = 44
+jointIndex = RightHandThumb1 = 24
+jointIndex = LeftHandRing1 = 52
+jointIndex = RightHandPinky2 = 37
+jointIndex = RightHandMiddle2 = 41
+jointIndex = HeadTop_End = 72
+jointIndex = RightHandMiddle4 = 43
+jointIndex = LeftHandPinky4 = 51
+jointIndex = Head = 69
+jointIndex = LeftHandMiddle3 = 66
+jointIndex = RightEye = 71
+jointIndex = RightHandIndex2 = 29
+jointIndex = RightHandThumb4 = 27
+jointIndex = RightForeArm = 22
+jointIndex = MeshGroup = 4
diff --git a/hifi-content/alexia/Avatars/DroopyCloudBind/cloudHappy/cloudHappy.fbx b/hifi-content/alexia/Avatars/DroopyCloudBind/cloudHappy/cloudHappy.fbx
new file mode 100644
index 000000000..68785d1e8
--- /dev/null
+++ b/hifi-content/alexia/Avatars/DroopyCloudBind/cloudHappy/cloudHappy.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:473b1c427018f5304e53b3ca5b20e3c42a5bfa3743093899e6c05df86095d6a2
+size 2569232
diff --git a/hifi-content/alexia/Avatars/HappyCloud/CloudHappy.fst b/hifi-content/alexia/Avatars/HappyCloud/CloudHappy.fst
new file mode 100644
index 000000000..6ae724390
--- /dev/null
+++ b/hifi-content/alexia/Avatars/HappyCloud/CloudHappy.fst
@@ -0,0 +1,91 @@
+name = CloudHappy
+type = body+head
+scale = 1
+filename = CloudHappy/CloudHappy.fbx
+texdir = CloudHappy/textures
+script = http://hifi-content.s3.amazonaws.com/alexia/Avatars/HappyCloud/rainbowParticles.js
+joint = jointNeck = Neck
+joint = jointLeftHand = LeftHand
+joint = jointEyeLeft = LeftEye
+joint = jointRightHand = RightHand
+joint = jointEyeRight = RightEye
+joint = jointRoot = Hips
+joint = jointLean = Spine
+joint = jointHead = Head
+freeJoint = LeftArm
+freeJoint = LeftForeArm
+freeJoint = RightArm
+freeJoint = RightForeArm
+jointIndex = RightHand = 23
+jointIndex = LeftHandPinky2 = 49
+jointIndex = LeftHandMiddle4 = 67
+jointIndex = LeftShoulder = 44
+jointIndex = Hips = 5
+jointIndex = LeftArm = 45
+jointIndex = LeftHandIndex3 = 58
+jointIndex = LeftToe_End = 15
+jointIndex = RightHandRing3 = 34
+jointIndex = RightLeg = 7
+jointIndex = LeftHandPinky1 = 48
+jointIndex = polySurface2 = 3
+jointIndex = RightHandMiddle2 = 41
+jointIndex = RightHandRing1 = 32
+jointIndex = HeadTop_End = 72
+jointIndex = RightHandMiddle4 = 43
+jointIndex = Spine1 = 17
+jointIndex = RightHandRing4 = 35
+jointIndex = LeftToeBase = 14
+jointIndex = LeftHandRing3 = 54
+jointIndex = RightHandPinky3 = 38
+jointIndex = RightHandMiddle3 = 42
+jointIndex = LeftHandThumb1 = 60
+jointIndex = RightHandRing2 = 33
+jointIndex = Spine2 = 18
+jointIndex = RightHandIndex1 = 28
+jointIndex = RightToeBase = 9
+jointIndex = LeftUpLeg = 11
+jointIndex = LeftHandThumb4 = 63
+jointIndex = RightArm = 21
+jointIndex = RightHandThumb2 = 25
+jointIndex = RightHandPinky4 = 39
+jointIndex = RightToe_End = 10
+jointIndex = LeftHandIndex2 = 57
+jointIndex = RightHandPinky2 = 37
+jointIndex = LeftHandThumb3 = 62
+jointIndex = RightHandIndex3 = 30
+jointIndex = RightForeArm = 22
+jointIndex = LeftEye = 70
+jointIndex = RightHandIndex4 = 31
+jointIndex = RightFoot = 8
+jointIndex = RightHandThumb3 = 26
+jointIndex = polySurface4 = 2
+jointIndex = LeftForeArm = 46
+jointIndex = RightHandIndex2 = 29
+jointIndex = LeftHandRing4 = 55
+jointIndex = MeshGroup = 4
+jointIndex = LeftHandRing1 = 52
+jointIndex = pPlane1 = 0
+jointIndex = LeftHandIndex4 = 59
+jointIndex = RightShoulder = 20
+jointIndex = Spine = 16
+jointIndex = Neck = 68
+jointIndex = joint = 19
+jointIndex = RightUpLeg = 6
+jointIndex = LeftHandIndex1 = 56
+jointIndex = LeftHandMiddle1 = 64
+jointIndex = RightHandPinky1 = 36
+jointIndex = Head = 69
+jointIndex = LeftHandThumb2 = 61
+jointIndex = RightHandMiddle1 = 40
+jointIndex = LeftHandPinky3 = 50
+jointIndex = LeftFoot = 13
+jointIndex = LeftHandMiddle2 = 65
+jointIndex = cloud = 1
+jointIndex = LeftHandRing2 = 53
+jointIndex = LeftHandMiddle3 = 66
+jointIndex = LeftHand = 47
+jointIndex = RightHandThumb1 = 24
+jointIndex = LeftLeg = 12
+jointIndex = RightEye = 71
+jointIndex = RightHandThumb4 = 27
+jointIndex = LeftHandPinky4 = 51
diff --git a/hifi-content/alexia/Avatars/HappyCloud/CloudHappy/CloudHappy.fbx b/hifi-content/alexia/Avatars/HappyCloud/CloudHappy/CloudHappy.fbx
new file mode 100644
index 000000000..ddff5ef6d
--- /dev/null
+++ b/hifi-content/alexia/Avatars/HappyCloud/CloudHappy/CloudHappy.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bfcda548e98bb8d706aed5e2e4da554f872eb78f503cd7183f05f0e5968a2ce3
+size 2314096
diff --git a/hifi-content/alexia/Avatars/HappyCloud/cloudAvatarHappy.png b/hifi-content/alexia/Avatars/HappyCloud/cloudAvatarHappy.png
new file mode 100644
index 000000000..12036d0f5
--- /dev/null
+++ b/hifi-content/alexia/Avatars/HappyCloud/cloudAvatarHappy.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:338d141df44dd070819efed8e1598b1695011c58a2079d1115043601f75153ea
+size 11934
diff --git a/hifi-content/alexia/Avatars/HappyCloud/rainbow.png b/hifi-content/alexia/Avatars/HappyCloud/rainbow.png
new file mode 100644
index 000000000..cc8343f61
--- /dev/null
+++ b/hifi-content/alexia/Avatars/HappyCloud/rainbow.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8d3b52db2f67da668a5fa41f0486313b41f6eceeb35748cb012354b469002779
+size 2806
diff --git a/hifi-content/alexia/Avatars/HappyCloud/rainbowParticles.js b/hifi-content/alexia/Avatars/HappyCloud/rainbowParticles.js
new file mode 100644
index 000000000..d5149ea89
--- /dev/null
+++ b/hifi-content/alexia/Avatars/HappyCloud/rainbowParticles.js
@@ -0,0 +1,67 @@
+Entities.addEntity({
+ "accelerationSpread": {
+ "x": 0.009999999776482582,
+ "y": 0.009999999776482582,
+ "z": 0.009999999776482582
+ },
+ parentID: MyAvatar.sessionUUID,
+ "alpha": 1,
+ "clientOnly": true,
+ "colorSpread": {
+ "blue": 255,
+ "green": 255,
+ "red": 255
+ },
+ "dimensions": {
+ "x": 2.630753517150879,
+ "y": 2.630753517150879,
+ "z": 2.630753517150879
+ },
+ "emitAcceleration": {
+ "x": -0.0010000000474974513,
+ "y": -1,
+ "z": -0.0010000000474974513
+ },
+ "emitDimensions": {
+ "x": 2,
+ "y": 0,
+ "z": 0
+ },
+ "emitOrientation": {
+ "w": 0.9961956143379211,
+ "x": 0.08714515715837479,
+ "y": -1.525894731457811e-05,
+ "z": -1.525894731457811e-05
+ },
+ "emitterShouldTrail": true,
+ "emitRate": 5,
+ "emitSpeed": 0.1,
+ "lastEdited": 1523663549048249,
+ "lastEditedBy": "{7493705d-dd55-4110-a7f7-15c53d24425f}",
+ "lifespan": 0.9999979019165,
+ "maxParticles": 300,
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "particleRadius": 0.15,
+ "polarFinish": 3.1415927410125732,
+ "queryAACube": {
+ "scale": 4.556598663330078,
+ "x": -2.278299331665039,
+ "y": -2.278299331665039,
+ "z": -2.278299331665039
+ },
+ "radiusFinish": 0.15,
+ "radiusSpread": 0.15,
+ "radiusStart": 0.15,
+ "rotation": {
+ "w": -0.7054398059844971,
+ "x": -1.52587890625e-05,
+ "y": 0.7087968587875366,
+ "z": -1.52587890625e-05
+ },
+ "speedSpread": 0,
+ localPosition: Vec3.ZERO,
+ localRotation: Quat.IDENTITY,
+ "textures": "http://hifi-content.s3.amazonaws.com/alexia/Avatars/HappyCloud/rainbow.png",
+ "type": "ParticleEffect",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ }, true);
\ No newline at end of file
diff --git a/hifi-content/alexia/Avatars/Stormcloud/cloud.fst b/hifi-content/alexia/Avatars/Stormcloud/cloud.fst
new file mode 100644
index 000000000..0242dce99
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Stormcloud/cloud.fst
@@ -0,0 +1,92 @@
+name = cloud
+type = body+head
+scale = 1
+filename = cloud/cloud.fbx
+script = http://hifi-content.s3.amazonaws.com/alexia/Avatars/Stormcloud/rainParticles.js
+script = http://hifi-content.s3.amazonaws.com/alexia/Avatars/Stormcloud/lightningParticles.js
+texdir = cloud/textures
+joint = jointRoot = Hips
+joint = jointEyeRight = RightEye
+joint = jointRightHand = RightHand
+joint = jointLeftHand = LeftHand
+joint = jointHead = Head
+joint = jointLean = Spine
+joint = jointEyeLeft = LeftEye
+joint = jointNeck = Neck
+freeJoint = LeftArm
+freeJoint = LeftForeArm
+freeJoint = RightArm
+freeJoint = RightForeArm
+jointIndex = RightFoot = 8
+jointIndex = Spine1 = 17
+jointIndex = RightUpLeg = 6
+jointIndex = LeftHandPinky1 = 48
+jointIndex = RightHandRing1 = 32
+jointIndex = Spine2 = 18
+jointIndex = MeshGroup = 4
+jointIndex = RightArm = 21
+jointIndex = RightShoulder = 20
+jointIndex = RightHandIndex2 = 29
+jointIndex = LeftHand = 47
+jointIndex = LeftHandThumb3 = 62
+jointIndex = RightHandPinky2 = 37
+jointIndex = LeftHandRing2 = 53
+jointIndex = RightHandMiddle3 = 42
+jointIndex = RightHandThumb4 = 27
+jointIndex = LeftHandPinky3 = 50
+jointIndex = LeftHandThumb2 = 61
+jointIndex = pPlane1 = 0
+jointIndex = RightHandThumb2 = 25
+jointIndex = RightHandIndex4 = 31
+jointIndex = LeftShoulder = 44
+jointIndex = LeftHandMiddle4 = 67
+jointIndex = RightEye = 71
+jointIndex = Hips = 5
+jointIndex = LeftHandMiddle2 = 65
+jointIndex = LeftEye = 70
+jointIndex = LeftHandThumb1 = 60
+jointIndex = RightHand = 23
+jointIndex = LeftHandThumb4 = 63
+jointIndex = RightLeg = 7
+jointIndex = LeftToeBase = 14
+jointIndex = LeftHandMiddle1 = 64
+jointIndex = LeftHandMiddle3 = 66
+jointIndex = LeftToe_End = 15
+jointIndex = joint = 19
+jointIndex = RightHandRing3 = 34
+jointIndex = LeftHandIndex4 = 59
+jointIndex = RightHandRing4 = 35
+jointIndex = RightHandThumb1 = 24
+jointIndex = LeftFoot = 13
+jointIndex = LeftArm = 45
+jointIndex = polySurface4 = 2
+jointIndex = Neck = 68
+jointIndex = LeftHandIndex2 = 57
+jointIndex = LeftUpLeg = 11
+jointIndex = RightHandMiddle2 = 41
+jointIndex = RightHandMiddle4 = 43
+jointIndex = LeftHandPinky4 = 51
+jointIndex = LeftHandPinky2 = 49
+jointIndex = RightHandPinky3 = 38
+jointIndex = polySurface2 = 3
+jointIndex = cloud = 1
+jointIndex = RightHandMiddle1 = 40
+jointIndex = LeftHandIndex3 = 58
+jointIndex = RightToeBase = 9
+jointIndex = LeftHandRing1 = 52
+jointIndex = LeftForeArm = 46
+jointIndex = LeftLeg = 12
+jointIndex = Head = 69
+jointIndex = RightHandPinky4 = 39
+jointIndex = LeftHandRing4 = 55
+jointIndex = LeftHandRing3 = 54
+jointIndex = RightHandPinky1 = 36
+jointIndex = RightHandIndex1 = 28
+jointIndex = RightHandThumb3 = 26
+jointIndex = RightForeArm = 22
+jointIndex = Spine = 16
+jointIndex = RightHandIndex3 = 30
+jointIndex = RightToe_End = 10
+jointIndex = HeadTop_End = 72
+jointIndex = RightHandRing2 = 33
+jointIndex = LeftHandIndex1 = 56
diff --git a/hifi-content/alexia/Avatars/Stormcloud/cloud/cloud.fbx b/hifi-content/alexia/Avatars/Stormcloud/cloud/cloud.fbx
new file mode 100644
index 000000000..6d43eec2d
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Stormcloud/cloud/cloud.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c44c2d1551b74d6a0b5b98bab5683f7103d77712db50fdd92ac5336bb90bddf3
+size 381568
diff --git a/hifi-content/alexia/Avatars/Stormcloud/cloud/textures/Cloud.jpg b/hifi-content/alexia/Avatars/Stormcloud/cloud/textures/Cloud.jpg
new file mode 120000
index 000000000..73ec19939
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Stormcloud/cloud/textures/Cloud.jpg
@@ -0,0 +1 @@
+../../../Cloud/Cloud/textures/Cloud.jpg
\ No newline at end of file
diff --git a/hifi-content/alexia/Avatars/Stormcloud/cloud/textures/angryFace.png b/hifi-content/alexia/Avatars/Stormcloud/cloud/textures/angryFace.png
new file mode 100644
index 000000000..9624f0397
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Stormcloud/cloud/textures/angryFace.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e831484f594f55ac7b0267eee7bad51db57131950cff99a62d85e03e4be9fad8
+size 10917
diff --git a/hifi-content/alexia/Avatars/Stormcloud/lightning.png b/hifi-content/alexia/Avatars/Stormcloud/lightning.png
new file mode 100644
index 000000000..48e7cd016
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Stormcloud/lightning.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:950da88119898e387b49bf57efd282d86e88031a1e7a8eb558242bfb9a3ce5cc
+size 7229
diff --git a/hifi-content/alexia/Avatars/Stormcloud/lightningParticles.js b/hifi-content/alexia/Avatars/Stormcloud/lightningParticles.js
new file mode 100644
index 000000000..2c976abf5
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Stormcloud/lightningParticles.js
@@ -0,0 +1,89 @@
+// lightningParticles.js
+//
+// Created by Alexia Mandeville on 30 Apr 2018
+// al@alexiamandeville.com
+//
+// A script to briefly show particles parented to my avatar in High Fidelity on keypress
+// To run the script, Edit > Running Scripts > Load the script here
+// When input is provided, I show my lightning particles, parent to my avatar
+//
+// High Fidelity docs: https://docs.highfidelity.com/
+//
+
+Controller.keyPressEvent.connect(function (event) { // More info: https://docs.highfidelity.com/api-reference/namespaces/controller
+
+ //When I press the L key, show my lightning briefly
+ if(event.text === "l"){
+ AddEntity(); // Create the entity
+ }
+});
+
+function AddEntity(){
+ Entities.addEntity({ // More info:https://docs.highfidelity.com/api-reference/namespaces/entities
+ "accelerationSpread": {
+ "x": 0.009999999776482582,
+ "y": 0.009999999776482582,
+ "z": 0.009999999776482582
+ },
+ "lifetime": 1, //Make sure the entity only shows for a small time
+ parentID: MyAvatar.sessionUUID,
+ "alpha": 1,
+ "clientOnly": true,
+ "colorSpread": {
+ "blue": 255,
+ "green": 255,
+ "red": 255
+ },
+ "dimensions": {
+ "x": 2.630753517150879,
+ "y": 2.630753517150879,
+ "z": 2.630753517150879
+ },
+ "emitAcceleration": {
+ "x": -0.0010000000474974513,
+ "y": -1,
+ "z": -0.0010000000474974513
+ },
+ "emitDimensions": {
+ "x": 1,
+ "y": 0,
+ "z": 0
+ },
+ "emitOrientation": {
+ "w": 0.9961956143379211,
+ "x": 0.08714515715837479,
+ "y": -1.5,
+ "z": -1.0
+ },
+ "emitRate": 5,
+ "emitSpeed": 0.1,
+ "lastEdited": 1523663549048249,
+ "lastEditedBy": "{7493705d-dd55-4110-a7f7-15c53d24425f}",
+ "lifespan": 0.91999979019165,
+ "maxParticles": 2,
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "particleRadius": 0.8,
+ "polarFinish": 3.1415927410125732,
+ "queryAACube": {
+ "scale": 4.556598663330078,
+ "x": -2.278299331665039,
+ "y": -2.278299331665039,
+ "z": -2.278299331665039
+ },
+ "radiusFinish": 0.8,
+ "radiusSpread": 0.8,
+ "radiusStart": 0.8,
+ "rotation": {
+ "w": -0.7054398059844971,
+ "x": -1.52587890625e-05,
+ "y": 0.7087968587875366,
+ "z": -1.52587890625e-05
+ },
+ "speedSpread": 0,
+ localPosition: Vec3.ZERO,
+ localRotation: Quat.IDENTITY,
+ "textures": "http://hifi-content.s3.amazonaws.com/alexia/Avatars/Stormcloud/lightning.png",
+ "type": "ParticleEffect",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ }, true);
+}
\ No newline at end of file
diff --git a/hifi-content/alexia/Avatars/Stormcloud/rainParticles.js b/hifi-content/alexia/Avatars/Stormcloud/rainParticles.js
new file mode 100644
index 000000000..ceb636f6c
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Stormcloud/rainParticles.js
@@ -0,0 +1,67 @@
+Entities.addEntity({
+ "accelerationSpread": {
+ "x": 0.009999999776482582,
+ "y": 0.009999999776482582,
+ "z": 0.009999999776482582
+ },
+ parentID: MyAvatar.sessionUUID,
+ "alpha": 1,
+ "clientOnly": true,
+ "colorSpread": {
+ "blue": 255,
+ "green": 255,
+ "red": 255
+ },
+ "dimensions": {
+ "x": 2.630753517150879,
+ "y": 2.630753517150879,
+ "z": 2.630753517150879
+ },
+ "emitAcceleration": {
+ "x": -0.0010000000474974513,
+ "y": -1,
+ "z": -0.0010000000474974513
+ },
+ "emitDimensions": {
+ "x": 2,
+ "y": 0,
+ "z": 0
+ },
+ "emitOrientation": {
+ "w": 0.9961956143379211,
+ "x": 0.08714515715837479,
+ "y": -1.525894731457811e-05,
+ "z": -1.525894731457811e-05
+ },
+ "emitterShouldTrail": true,
+ "emitRate": 5,
+ "emitSpeed": 0.1,
+ "lastEdited": 1523663549048249,
+ "lastEditedBy": "{7493705d-dd55-4110-a7f7-15c53d24425f}",
+ "lifespan": 3.21999979019165,
+ "maxParticles": 300,
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "particleRadius": 0.15,
+ "polarFinish": 3.1415927410125732,
+ "queryAACube": {
+ "scale": 4.556598663330078,
+ "x": -2.278299331665039,
+ "y": -2.278299331665039,
+ "z": -2.278299331665039
+ },
+ "radiusFinish": 0.15,
+ "radiusSpread": 0.15,
+ "radiusStart": 0.15,
+ "rotation": {
+ "w": -0.7054398059844971,
+ "x": -1.52587890625e-05,
+ "y": 0.7087968587875366,
+ "z": -1.52587890625e-05
+ },
+ "speedSpread": 0,
+ localPosition: Vec3.ZERO,
+ localRotation: Quat.IDENTITY,
+ "textures": "http://hifi-content.s3.amazonaws.com/alexia/Avatars/Stormcloud/raindrop.png",
+ "type": "ParticleEffect",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ }, true);
\ No newline at end of file
diff --git a/hifi-content/alexia/Avatars/Stormcloud/raindrop.png b/hifi-content/alexia/Avatars/Stormcloud/raindrop.png
new file mode 100644
index 000000000..baccc5d3a
--- /dev/null
+++ b/hifi-content/alexia/Avatars/Stormcloud/raindrop.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a077d96d26ae05afceabb14ba686b9967b43a90f4b9a1a588b9130889dfeb3bf
+size 1613
diff --git a/hifi-content/alexia/Avatars/theHand/theHand.fst b/hifi-content/alexia/Avatars/theHand/theHand.fst
new file mode 100644
index 000000000..d3e997efc
--- /dev/null
+++ b/hifi-content/alexia/Avatars/theHand/theHand.fst
@@ -0,0 +1,89 @@
+name = theHand
+type = body+head
+scale = 1
+filename = theHand/theHand.fbx
+texdir = theHand/textures
+joint = jointEyeRight = RightEye
+joint = jointLean = Spine
+joint = jointHead = Head
+joint = jointEyeLeft = LeftEye
+joint = jointRoot = Hips
+joint = jointRightHand = RightHand
+joint = jointNeck = Neck
+joint = jointLeftHand = LeftHand
+freeJoint = LeftArm
+freeJoint = LeftForeArm
+freeJoint = RightArm
+freeJoint = RightForeArm
+jointIndex = RightFoot = 7
+jointIndex = LeftHandMiddle1 = 62
+jointIndex = Spine = 15
+jointIndex = RightHandPinky1 = 34
+jointIndex = RightHandMiddle2 = 39
+jointIndex = LeftHandIndex4 = 57
+jointIndex = RightHandThumb1 = 22
+jointIndex = RightToeBase = 8
+jointIndex = RightHandRing1 = 30
+jointIndex = Spine2 = 17
+jointIndex = RightEye = 69
+jointIndex = RightHandIndex4 = 29
+jointIndex = RightHandIndex3 = 28
+jointIndex = Head = 67
+jointIndex = RightShoulder = 18
+jointIndex = LeftArm = 43
+jointIndex = LeftForeArm = 44
+jointIndex = transform1 = 2
+jointIndex = RightHandMiddle1 = 38
+jointIndex = polySurface5 = 0
+jointIndex = LeftToeBase = 13
+jointIndex = LeftHand = 45
+jointIndex = LeftHandThumb1 = 58
+jointIndex = LeftHandThumb3 = 60
+jointIndex = LeftHandPinky3 = 48
+jointIndex = RightHandThumb4 = 25
+jointIndex = RightForeArm = 20
+jointIndex = LeftHandIndex2 = 55
+jointIndex = RightArm = 19
+jointIndex = RightHandIndex2 = 27
+jointIndex = RightHandRing4 = 33
+jointIndex = LeftHandPinky2 = 47
+jointIndex = RightHandRing3 = 32
+jointIndex = Spine1 = 16
+jointIndex = Hips = 4
+jointIndex = LeftLeg = 11
+jointIndex = LeftHandIndex3 = 56
+jointIndex = Neck = 66
+jointIndex = LeftHandIndex1 = 54
+jointIndex = RightToe_End = 9
+jointIndex = LeftToe_End = 14
+jointIndex = RightHandThumb2 = 23
+jointIndex = LeftHandPinky4 = 49
+jointIndex = RightHand = 21
+jointIndex = RightHandRing2 = 31
+jointIndex = Sun = 3
+jointIndex = LeftHandMiddle2 = 63
+jointIndex = RightHandPinky4 = 37
+jointIndex = LeftUpLeg = 10
+jointIndex = LeftShoulder = 42
+jointIndex = LeftHandRing1 = 50
+jointIndex = RightUpLeg = 5
+jointIndex = LeftHandRing3 = 52
+jointIndex = RightHandThumb3 = 24
+jointIndex = LeftHandMiddle3 = 64
+jointIndex = surface_PLY = 1
+jointIndex = RightHandMiddle4 = 41
+jointIndex = RightHandPinky3 = 36
+jointIndex = LeftHandThumb4 = 61
+jointIndex = LeftEye = 68
+jointIndex = LeftHandPinky1 = 46
+jointIndex = RightLeg = 6
+jointIndex = LeftFoot = 12
+jointIndex = RightHandPinky2 = 35
+jointIndex = LeftHandThumb2 = 59
+jointIndex = HeadTop_End = 70
+jointIndex = RightHandIndex1 = 26
+jointIndex = LeftHandRing4 = 53
+jointIndex = LeftHandRing2 = 51
+jointIndex = RightHandMiddle3 = 40
+jointIndex = LeftHandMiddle4 = 65
+jointIndex = Plane005 = 71
diff --git a/hifi-content/alexia/Avatars/theHand/theHand/theHand.fbx b/hifi-content/alexia/Avatars/theHand/theHand/theHand.fbx
new file mode 100644
index 000000000..77ae17f99
--- /dev/null
+++ b/hifi-content/alexia/Avatars/theHand/theHand/theHand.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cf0191c4c1940ec2e8c59d5bc1a541277fb562f6b196d830faf83f6b3ce71e5e
+size 3797008
diff --git a/hifi-content/alexia/Avatars/watermelonKing/FST/watermelonKing.fst b/hifi-content/alexia/Avatars/watermelonKing/FST/watermelonKing.fst
new file mode 100644
index 000000000..f6e9e6ae1
--- /dev/null
+++ b/hifi-content/alexia/Avatars/watermelonKing/FST/watermelonKing.fst
@@ -0,0 +1,42 @@
+name = watermelonKing
+type = body+head
+scale = 0.7
+filename = watermelonKing/watermelonKing.fbx
+texdir = watermelonKing/textures
+joint = jointLean = Spine
+joint = jointNeck = Neck
+joint = jointRoot = Hips
+joint = jointEyeLeft = LeftEye
+joint = jointHead = Head
+joint = jointRightHand = RightHand
+joint = jointLeftHand = LeftHand
+joint = jointEyeRight = RightEye
+freeJoint = LeftArm
+freeJoint = LeftForeArm
+freeJoint = RightArm
+freeJoint = RightForeArm
+jointIndex = LeftUpLeg = 6
+jointIndex = RightUpLeg = 3
+jointIndex = RightShoulder = 12
+jointIndex = LeftFoot = 8
+jointIndex = LeftLeg = 7
+jointIndex = RightLeg = 4
+jointIndex = Hips = 2
+jointIndex = LeftArm = 17
+jointIndex = LeftEye = 22
+jointIndex = RightArm = 13
+jointIndex = RightEye = 23
+jointIndex = LeftShoulder = 16
+jointIndex = HeadTop_End = 24
+jointIndex = LeftHand = 19
+jointIndex = Neck = 20
+jointIndex = LeftForeArm = 18
+jointIndex = Spine2 = 11
+jointIndex = RightForeArm = 14
+jointIndex = Spine = 9
+jointIndex = Head = 21
+jointIndex = group4 = 0
+jointIndex = group5 = 1
+jointIndex = RightFoot = 5
+jointIndex = Spine1 = 10
+jointIndex = RightHand = 15
diff --git a/hifi-content/alexia/Avatars/watermelonKing/FST/watermelonKing/watermelonKing.fbx b/hifi-content/alexia/Avatars/watermelonKing/FST/watermelonKing/watermelonKing.fbx
new file mode 100644
index 000000000..af1eec099
--- /dev/null
+++ b/hifi-content/alexia/Avatars/watermelonKing/FST/watermelonKing/watermelonKing.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0fb19ee24631a438efd77497298dc385d5e08a6f6c2863d3d82d97ce6734b400
+size 64384
diff --git a/hifi-content/alexia/BeachFBX/CHAHIN_ISLAND.mtl b/hifi-content/alexia/BeachFBX/CHAHIN_ISLAND.mtl
new file mode 100644
index 000000000..30d8fd004
--- /dev/null
+++ b/hifi-content/alexia/BeachFBX/CHAHIN_ISLAND.mtl
@@ -0,0 +1,13 @@
+# Blender MTL File: 'CHAHIN_ISLAND.blend'
+# Material Count: 1
+
+newmtl Material.006
+map_Kd CHAHIN_ISLAND_TEXTURE.jpg
+Ns 96.078431
+Ka 1.000000 1.000000 1.000000
+Kd 0.640000 0.640000 0.640000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.000000
+d 1.000000
+illum 2
diff --git a/hifi-content/alexia/BeachFBX/CHAHIN_ISLAND.obj b/hifi-content/alexia/BeachFBX/CHAHIN_ISLAND.obj
new file mode 100644
index 000000000..e09865121
--- /dev/null
+++ b/hifi-content/alexia/BeachFBX/CHAHIN_ISLAND.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3f32c40f5750eac42abe63b5842282348ec7525c2106eeb8631fc2f3cf29d7a
+size 82459
diff --git a/hifi-content/alexia/BeachFBX/CHAHIN_ISLAND_TEXTURE.jpg b/hifi-content/alexia/BeachFBX/CHAHIN_ISLAND_TEXTURE.jpg
new file mode 100644
index 000000000..5977514f6
--- /dev/null
+++ b/hifi-content/alexia/BeachFBX/CHAHIN_ISLAND_TEXTURE.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42f406874e27c36bc08331277158703c5de24abcc52f60fc9b1f6ef9b5cbf95a
+size 725
diff --git a/hifi-content/alexia/BookClub/Art/1.gif b/hifi-content/alexia/BookClub/Art/1.gif
new file mode 100644
index 000000000..d2843003b
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/1.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1ce69f972665734a849bd62676fe482ce62697974cc1ada006579fba34b326cc
+size 4546914
diff --git a/hifi-content/alexia/BookClub/Art/1479838617hx01_1.gif b/hifi-content/alexia/BookClub/Art/1479838617hx01_1.gif
new file mode 100644
index 000000000..8ee8d57d9
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/1479838617hx01_1.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:45d4aeaea052c41da90d262b39755c422ae783c07aa953d1ef89c968741bc7e5
+size 2493332
diff --git a/hifi-content/alexia/BookClub/Art/8.gif b/hifi-content/alexia/BookClub/Art/8.gif
new file mode 100644
index 000000000..e63190ab2
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/8.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dfcc887b6ac95fe9088d8d6d2cc54a974e9dd35882d969ec4da5b134b0786605
+size 2776031
diff --git a/hifi-content/alexia/BookClub/Art/9.gif b/hifi-content/alexia/BookClub/Art/9.gif
new file mode 100644
index 000000000..d0a440818
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/9.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:435e1399902bdc9af122219b1f1e49707a2cf28c9751343e088d5d903148558f
+size 1792641
diff --git a/hifi-content/alexia/BookClub/Art/EqXr.gif b/hifi-content/alexia/BookClub/Art/EqXr.gif
new file mode 100644
index 000000000..cfb8c7235
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/EqXr.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7d98c7123f76eba50ff53a94c8fb12f3d148b942c5d220bda5f683a095ce4863
+size 386976
diff --git a/hifi-content/alexia/BookClub/Art/Erik-Söderberg06.gif b/hifi-content/alexia/BookClub/Art/Erik-Söderberg06.gif
new file mode 100644
index 000000000..7dadb7f54
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/Erik-Söderberg06.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9aa00f6c3f0291d80d94ede469e722195b54f76d2bd2ec9165a39816a3e2b14
+size 489623
diff --git a/hifi-content/alexia/BookClub/Art/GCbN.gif b/hifi-content/alexia/BookClub/Art/GCbN.gif
new file mode 100644
index 000000000..2bf4401a9
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/GCbN.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a205f73509094fde63b1d291f18dc3fd119428d32fb3ea9eb7c30063e5c078b4
+size 385389
diff --git a/hifi-content/alexia/BookClub/Art/InfantileOffensiveGuernseycow-small.gif b/hifi-content/alexia/BookClub/Art/InfantileOffensiveGuernseycow-small.gif
new file mode 100644
index 000000000..d455a144c
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/InfantileOffensiveGuernseycow-small.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:49e3a18dc851c38d0e8b700ad9b5a257fb947d7b6e8de3c804290973769893ad
+size 390227
diff --git a/hifi-content/alexia/BookClub/Art/PalatableMiniatureBarnowl-small.gif b/hifi-content/alexia/BookClub/Art/PalatableMiniatureBarnowl-small.gif
new file mode 100644
index 000000000..0fa8fa584
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/PalatableMiniatureBarnowl-small.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28b32bdf0e369bc90d247544370d0657912f058fd87871ce770d7b8d71dfc2aa
+size 571503
diff --git a/hifi-content/alexia/BookClub/Art/cadfd1d9e5a061d6565813ffb5c3c020.gif b/hifi-content/alexia/BookClub/Art/cadfd1d9e5a061d6565813ffb5c3c020.gif
new file mode 100644
index 000000000..ee636cae0
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/cadfd1d9e5a061d6565813ffb5c3c020.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:79fb90e25fb203f8df7296aece06f33944f991f7bcf6423784507b6ffb0a2aeb
+size 1509060
diff --git a/hifi-content/alexia/BookClub/Art/florian-1gif.gif b/hifi-content/alexia/BookClub/Art/florian-1gif.gif
new file mode 100644
index 000000000..f6147c14b
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/florian-1gif.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b140dcb85c2c5d86e0d917bbc6ce4a38801f252e9b09754a71b20ff0dff871ad
+size 5827700
diff --git a/hifi-content/alexia/BookClub/Art/geometric-gif-4.gif b/hifi-content/alexia/BookClub/Art/geometric-gif-4.gif
new file mode 100644
index 000000000..71568252b
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/geometric-gif-4.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:173b08acc40ed53ddd500f99523d71cf1c15e7c691c5839ddcc99cf260f42c23
+size 441345
diff --git a/hifi-content/alexia/BookClub/Art/giphy (1).gif b/hifi-content/alexia/BookClub/Art/giphy (1).gif
new file mode 100644
index 000000000..c9fb78d77
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/giphy (1).gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a79370888b621d970b2a2a770e947bda4864d2f647f1844ad6e6672924e93666
+size 464141
diff --git a/hifi-content/alexia/BookClub/Art/giphy (2).gif b/hifi-content/alexia/BookClub/Art/giphy (2).gif
new file mode 100644
index 000000000..a398c1fe6
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/giphy (2).gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ef0e48655e8e065fd550924561b3679aa2f9541dda82df39000de3cb29c1e576
+size 1970567
diff --git a/hifi-content/alexia/BookClub/Art/giphy-downsized.gif b/hifi-content/alexia/BookClub/Art/giphy-downsized.gif
new file mode 100644
index 000000000..7828414fc
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/giphy-downsized.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f7803261e4d1040b5b8252e6c0fa2d97a89fc8bab04d076f3f63d3de6cb396cb
+size 1257890
diff --git a/hifi-content/alexia/BookClub/Art/giphy.gif b/hifi-content/alexia/BookClub/Art/giphy.gif
new file mode 100644
index 000000000..038bbc492
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/giphy.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bd98397d0a609589cb16ed75d45f87730f1cf22e7615326459471212f4fb903b
+size 580487
diff --git a/hifi-content/alexia/BookClub/Art/söderberg_gif-01.gif b/hifi-content/alexia/BookClub/Art/söderberg_gif-01.gif
new file mode 100644
index 000000000..8a7e65b2b
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/söderberg_gif-01.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2e8d892155cebd91caec3ecd41fe80ed1eab4b0d201d08200e10bf3563e2f3eb
+size 146718
diff --git a/hifi-content/alexia/BookClub/Art/tumblr_narqedjp4m1r2geqjo1_500.gif b/hifi-content/alexia/BookClub/Art/tumblr_narqedjp4m1r2geqjo1_500.gif
new file mode 100644
index 000000000..0ddde9fa8
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/tumblr_narqedjp4m1r2geqjo1_500.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:35cadd646ee0768a6b767ea0aa8cf65ab2ac31f195a41ced45c67506018a8a22
+size 1165172
diff --git a/hifi-content/alexia/BookClub/Art/tumblr_nm1m0zqAbV1tcuj64o1_400.gif b/hifi-content/alexia/BookClub/Art/tumblr_nm1m0zqAbV1tcuj64o1_400.gif
new file mode 100644
index 000000000..871ac2a84
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/tumblr_nm1m0zqAbV1tcuj64o1_400.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0efd7e73a17c5cf04a8d9b98b9d53ce462c605e41287608b75fe5e4d24e26882
+size 266082
diff --git a/hifi-content/alexia/BookClub/Art/tumblr_nnhtqmaENC1qz4vjko1_540.gif b/hifi-content/alexia/BookClub/Art/tumblr_nnhtqmaENC1qz4vjko1_540.gif
new file mode 100644
index 000000000..bff671951
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Art/tumblr_nnhtqmaENC1qz4vjko1_540.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3370a90d31da0404dde43bfdf193af4b7d31a3dcaf4ad161b25f3099e35bd256
+size 1961270
diff --git a/hifi-content/alexia/BookClub/Building/building.fbx b/hifi-content/alexia/BookClub/Building/building.fbx
new file mode 100644
index 000000000..8c1f32f03
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Building/building.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:26c31cb70168966ffbce8679c54759097f3e1d70450fe153575096eb50292d00
+size 24897824
diff --git a/hifi-content/alexia/BookClub/Chair/CHAHIN_WOODEN_CHAIR.obj b/hifi-content/alexia/BookClub/Chair/CHAHIN_WOODEN_CHAIR.obj
new file mode 100644
index 000000000..61f15d833
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Chair/CHAHIN_WOODEN_CHAIR.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e20ffef637c394e002db011d5a055da6acfd0e9aeaf4a5493961fe8cba93ee5
+size 6117
diff --git a/hifi-content/alexia/BookClub/Chair/CHAHIN_WOODEN_CHAIR_TEXTURE.jpg b/hifi-content/alexia/BookClub/Chair/CHAHIN_WOODEN_CHAIR_TEXTURE.jpg
new file mode 100644
index 000000000..2adb98503
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Chair/CHAHIN_WOODEN_CHAIR_TEXTURE.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:80746df3194a636fe04cc0dc8416b33c6ec1a29b4254765033f4e65f0d5cdca6
+size 644
diff --git a/hifi-content/alexia/BookClub/Conference+Table+S1.FBX b/hifi-content/alexia/BookClub/Conference+Table+S1.FBX
new file mode 100644
index 000000000..85811018b
--- /dev/null
+++ b/hifi-content/alexia/BookClub/Conference+Table+S1.FBX
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3954957baca648bb61187c3085e97330eacbfa1f5629d2703cdb8ab29327507
+size 85344960
diff --git a/hifi-content/alexia/BookClub/adventure-time-20.gif b/hifi-content/alexia/BookClub/adventure-time-20.gif
new file mode 100644
index 000000000..cbbd4244e
--- /dev/null
+++ b/hifi-content/alexia/BookClub/adventure-time-20.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bd1dffbe451a43df4b15a6b30bb58acef15ff3673fb9d62995b7457214bae31c
+size 674468
diff --git a/hifi-content/alexia/BookClub/bearrug.fbx b/hifi-content/alexia/BookClub/bearrug.fbx
new file mode 100644
index 000000000..f3555b92f
--- /dev/null
+++ b/hifi-content/alexia/BookClub/bearrug.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6a0588e2bb85673920faf45327c02dc8bd82f3ca5c885647f72c46e71ba6c873
+size 1592320
diff --git a/hifi-content/alexia/BookClub/bevi.fbx b/hifi-content/alexia/BookClub/bevi.fbx
new file mode 100644
index 000000000..2c7b59933
--- /dev/null
+++ b/hifi-content/alexia/BookClub/bevi.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:283b0da52e91e612db660099d871964f3a2dcf6b9019c87e47c9945dc109f04e
+size 276944
diff --git a/hifi-content/alexia/BookClub/bookBuilding.fbx b/hifi-content/alexia/BookClub/bookBuilding.fbx
new file mode 100644
index 000000000..d313b9cfd
--- /dev/null
+++ b/hifi-content/alexia/BookClub/bookBuilding.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d1b147242a540baef9f0ba799070653fec6df26c2e16cad6ada0ea6bfaa9fb31
+size 476112
diff --git a/hifi-content/alexia/BookClub/chairs.FBX b/hifi-content/alexia/BookClub/chairs.FBX
new file mode 100644
index 000000000..2db33e7bf
--- /dev/null
+++ b/hifi-content/alexia/BookClub/chairs.FBX
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1123b52e00e88d08d4874fa713a05dc0d172843867ac8209751578ec2deb6183
+size 763472
diff --git a/hifi-content/alexia/BookClub/curtain1.fbx b/hifi-content/alexia/BookClub/curtain1.fbx
new file mode 100644
index 000000000..cee390f3d
--- /dev/null
+++ b/hifi-content/alexia/BookClub/curtain1.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:35814dc01734cc1d44fa98dc56828cea1a0f7a8c542a58e594fb7d604fdc52ba
+size 7680768
diff --git a/hifi-content/alexia/BookClub/curtain2.fbx b/hifi-content/alexia/BookClub/curtain2.fbx
new file mode 100644
index 000000000..01bd48869
--- /dev/null
+++ b/hifi-content/alexia/BookClub/curtain2.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:af3def531a71ed0e286ddc8f5fc8933d515c9e1417feca6ed3ba4d54e55d20a1
+size 5981456
diff --git a/hifi-content/alexia/BookClub/hangar.fbx b/hifi-content/alexia/BookClub/hangar.fbx
new file mode 100644
index 000000000..eff8a0d3a
--- /dev/null
+++ b/hifi-content/alexia/BookClub/hangar.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6907817a0f3f21f6e81708e5562ef42c387687e77808e6a939a5a527268fcf4f
+size 6543728
diff --git a/hifi-content/alexia/BookClub/lightbulb.fbx b/hifi-content/alexia/BookClub/lightbulb.fbx
new file mode 100644
index 000000000..2339fb68c
--- /dev/null
+++ b/hifi-content/alexia/BookClub/lightbulb.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1e8256f146ab83a3af0e42e83468c9e33552d7bd0def126f89bde076199c89e0
+size 2437072
diff --git a/hifi-content/alexia/BookClub/noose.FBX b/hifi-content/alexia/BookClub/noose.FBX
new file mode 100644
index 000000000..c771f50a8
--- /dev/null
+++ b/hifi-content/alexia/BookClub/noose.FBX
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:382d731d0ee8ecc9332ef94d95f29cb1e506a4f57a5de52cfb96e5e41ed6048e
+size 2918096
diff --git a/hifi-content/alexia/BookClub/rope.fbx b/hifi-content/alexia/BookClub/rope.fbx
new file mode 100644
index 000000000..a76a34855
--- /dev/null
+++ b/hifi-content/alexia/BookClub/rope.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:148582c6f7f678d4d40df4d4e0f94b72a6c6920699ddc3f7d3a036aaf30e8a7a
+size 64080
diff --git a/hifi-content/alexia/BookClub/rope.png b/hifi-content/alexia/BookClub/rope.png
new file mode 100644
index 000000000..e63a21bfd
--- /dev/null
+++ b/hifi-content/alexia/BookClub/rope.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:41203025d00565e414da2233d2f462fd9df339f32a9750a94995e14d26115cb0
+size 12516
diff --git a/hifi-content/alexia/BookClub/rug.fbx b/hifi-content/alexia/BookClub/rug.fbx
new file mode 100644
index 000000000..f024dd2e8
--- /dev/null
+++ b/hifi-content/alexia/BookClub/rug.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:65deffea191fd879bd5108fa1b9e604395f42e8983bf1282ed4c7084ab5b1a87
+size 27211712
diff --git a/hifi-content/alexia/BookClub/skitsch_zucca_fbx_upY.fbx b/hifi-content/alexia/BookClub/skitsch_zucca_fbx_upY.fbx
new file mode 100644
index 000000000..30139ef66
--- /dev/null
+++ b/hifi-content/alexia/BookClub/skitsch_zucca_fbx_upY.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a1e10ef63ea4165820c000368c28b822f717c8399ed28a65b8c122614b2b0153
+size 11261760
diff --git a/hifi-content/alexia/BookClub/skybox.png b/hifi-content/alexia/BookClub/skybox.png
new file mode 100644
index 000000000..5649ed80c
--- /dev/null
+++ b/hifi-content/alexia/BookClub/skybox.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5dc79647b9f6b5cbdf864508e7e424244c27585b349b352fe4927c303a613555
+size 52820
diff --git a/hifi-content/alexia/BookClub/skybox_pink.png b/hifi-content/alexia/BookClub/skybox_pink.png
new file mode 100644
index 000000000..1058a1267
--- /dev/null
+++ b/hifi-content/alexia/BookClub/skybox_pink.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:daf7ffbcc3ae51c7cc68c9472efeac0b684805c626db0dc75c662dafee2ee291
+size 366108
diff --git a/hifi-content/alexia/BookClub/sofa1_final.FBX b/hifi-content/alexia/BookClub/sofa1_final.FBX
new file mode 100644
index 000000000..9102086f1
--- /dev/null
+++ b/hifi-content/alexia/BookClub/sofa1_final.FBX
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6964a742609e6d98797942545b200910c5537b87f734c6bcbfc2859b9c891b1f
+size 56216160
diff --git a/hifi-content/alexia/BookClub/table.fbx b/hifi-content/alexia/BookClub/table.fbx
new file mode 100644
index 000000000..4dbfc04c0
--- /dev/null
+++ b/hifi-content/alexia/BookClub/table.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:458830df9398c0cdf7f034f6170f61769ad68e861bcefbe635715a024a0a51da
+size 1165248
diff --git a/hifi-content/alexia/BookClub/treehouse.fbx b/hifi-content/alexia/BookClub/treehouse.fbx
new file mode 100644
index 000000000..d224d9a0e
--- /dev/null
+++ b/hifi-content/alexia/BookClub/treehouse.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8d8e9f19ece35827861b51572f98b5be88e850946e8819cae7d490e0900212b
+size 425997904
diff --git a/hifi-content/alexia/ClickToSit.png b/hifi-content/alexia/ClickToSit.png
new file mode 100644
index 000000000..17a27232a
--- /dev/null
+++ b/hifi-content/alexia/ClickToSit.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7cc3cddfd419e3c944652aca87950eba0e4ce58efe9b537d38c0f8024065a719
+size 4303
diff --git a/hifi-content/alexia/Hackathon/Fridge/fridge.obj b/hifi-content/alexia/Hackathon/Fridge/fridge.obj
new file mode 100644
index 000000000..c87e830f1
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/Fridge/fridge.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d402823e263d3d6df05d37c83f1990a85ab9768bda5689f13a027aa4ebc289e6
+size 20531
diff --git a/hifi-content/alexia/Hackathon/Fridge/materials.mtl b/hifi-content/alexia/Hackathon/Fridge/materials.mtl
new file mode 100644
index 000000000..66ee032ab
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/Fridge/materials.mtl
@@ -0,0 +1,12 @@
+newmtl mat9
+ Kd 0.55 0.76 0.29
+
+newmtl mat24
+ Ka 0.58 0.65 1.00
+ Kd 0.92 0.95 0.94
+ Ks 1 1 1
+ illum 9
+ Ns 300
+ d 0.4
+ Ni 1.5
+
diff --git a/hifi-content/alexia/Hackathon/Stove/materials.mtl b/hifi-content/alexia/Hackathon/Stove/materials.mtl
new file mode 100644
index 000000000..4248ae2d9
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/Stove/materials.mtl
@@ -0,0 +1,15 @@
+newmtl mat21
+ Kd 1.00 1.00 1.00
+
+newmtl mat10
+ Kd 0.30 0.69 0.31
+
+newmtl mat9
+ Kd 0.55 0.76 0.29
+
+newmtl mat20
+ Kd 0.47 0.33 0.28
+
+newmtl mat13
+ Kd 1.00 0.60 0.00
+
diff --git a/hifi-content/alexia/Hackathon/Stove/stove.obj b/hifi-content/alexia/Hackathon/Stove/stove.obj
new file mode 100644
index 000000000..92de07c25
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/Stove/stove.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:039371bad2d85e5446d9c28c55d6c5197a25058b8548eace9f83b476093518ab
+size 294109
diff --git a/hifi-content/alexia/Hackathon/box.fbx b/hifi-content/alexia/Hackathon/box.fbx
new file mode 100644
index 000000000..1805eae2d
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/box.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:91e3faa740e069a603437e8f015f1803df08d7d7dcb6e606a2cc5b83030203d7
+size 75040
diff --git a/hifi-content/alexia/Hackathon/button/button.obj b/hifi-content/alexia/Hackathon/button/button.obj
new file mode 100644
index 000000000..f92a10e5e
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/button/button.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:97cf61e3cbbc3d209dba8ce7fd66c40a888f940358f370064c8174187e812d42
+size 7880
diff --git a/hifi-content/alexia/Hackathon/button/materials.mtl b/hifi-content/alexia/Hackathon/button/materials.mtl
new file mode 100644
index 000000000..0e427116a
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/button/materials.mtl
@@ -0,0 +1,6 @@
+newmtl mat17
+ Kd 0.27 0.35 0.39
+
+newmtl mat8
+ Kd 0.96 0.26 0.21
+
diff --git a/hifi-content/alexia/Hackathon/cabinet_left/cabinet_left.obj b/hifi-content/alexia/Hackathon/cabinet_left/cabinet_left.obj
new file mode 100644
index 000000000..fc5138070
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/cabinet_left/cabinet_left.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:70045e55622abcc786bbba36df152cb06b85c80c6770b6ed6e95dd250f97d9d4
+size 17328
diff --git a/hifi-content/alexia/Hackathon/cabinet_left/materials.mtl b/hifi-content/alexia/Hackathon/cabinet_left/materials.mtl
new file mode 100644
index 000000000..6964f7505
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/cabinet_left/materials.mtl
@@ -0,0 +1,9 @@
+newmtl mat20
+ Kd 0.47 0.33 0.28
+
+newmtl mat21
+ Kd 1.00 1.00 1.00
+
+newmtl mat14
+ Kd 1.00 0.34 0.13
+
diff --git a/hifi-content/alexia/Hackathon/cabinet_right/cabinet_right.obj b/hifi-content/alexia/Hackathon/cabinet_right/cabinet_right.obj
new file mode 100644
index 000000000..ff9569c73
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/cabinet_right/cabinet_right.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:92a918f2a2664e0b09249d2f0b01db4927e151875e84ec966cfcd298cbbd69f1
+size 17310
diff --git a/hifi-content/alexia/Hackathon/cabinet_right/materials.mtl b/hifi-content/alexia/Hackathon/cabinet_right/materials.mtl
new file mode 120000
index 000000000..f97f6ab5e
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/cabinet_right/materials.mtl
@@ -0,0 +1 @@
+../cabinet_left/materials.mtl
\ No newline at end of file
diff --git a/hifi-content/alexia/Hackathon/diorama.js b/hifi-content/alexia/Hackathon/diorama.js
new file mode 100644
index 000000000..cc0551b9c
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/diorama.js
@@ -0,0 +1,43 @@
+//
+// diorama.js
+//
+// Created by Alexia Mandeville on 10/26/2018
+// 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
+//
+// Hackathon 2018
+// Tom, Jess, Alexia
+
+(function() {
+
+ var _entityID;
+ var _this;
+
+ var origScale;
+ var tinyScale = 0.1;
+
+ var Entity = function() {
+ _this = this;
+ };
+
+ Entity.prototype = {
+
+ preload: function(entityID) {
+ // runs when this script is refreshed or a
+ // client connects to a domain where this entity is present
+ _entityID = entityID;
+ _this = this;
+ },
+
+ clickDownOnEntity: function (entityID, pointerEvent) {
+ origScale = MyAvatar.getAvatarScale();
+ print(origScale);
+ MyAvatar.setAvatarScale(tinyScale);
+ },
+
+ };
+
+ return new Entity();
+});
\ No newline at end of file
diff --git a/hifi-content/alexia/Hackathon/dioramaTransport.js b/hifi-content/alexia/Hackathon/dioramaTransport.js
new file mode 100644
index 000000000..8166269a3
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/dioramaTransport.js
@@ -0,0 +1,48 @@
+//
+// diorama.js
+//
+// Created by Alexia Mandeville on 10/26/2018
+// 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
+//
+// Hackathon 2018
+// Tom, Jess, Alexia
+
+(function() {
+
+ var _entityID;
+ var _this;
+
+ var origScale;
+ var tinyScale = 0.1;
+
+ var Entity = function() {
+ _this = this;
+ };
+
+ Entity.prototype = {
+
+ preload: function(entityID) {
+ // runs when this script is refreshed or a
+ // client connects to a domain where this entity is present
+ _entityID = entityID;
+ _this = this;
+ },
+
+ clickDownOnEntity: function (entityID, pointerEvent) {
+ origScale = MyAvatar.getAvatarScale();
+ print(origScale);
+ MyAvatar.setAvatarScale(tinyScale);
+
+ // Need to transport
+ //var teleportTarget = Entities.findEntitiesByName("Teleport-Target", MyAvatar.position, 10, false);
+ //MyAvatar.position = Entities.getEntityProperties(teleportTarget[0], ["position"]).position;
+
+ },
+
+ };
+
+ return new Entity();
+});
\ No newline at end of file
diff --git a/hifi-content/alexia/Hackathon/kettle/kettle.obj b/hifi-content/alexia/Hackathon/kettle/kettle.obj
new file mode 100644
index 000000000..51aed87c0
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/kettle/kettle.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f8df93ceade3b6a50a57e08d8ab01eaca311005edde862b7e0c23ff1b5e92d2d
+size 68321
diff --git a/hifi-content/alexia/Hackathon/kettle/materials.mtl b/hifi-content/alexia/Hackathon/kettle/materials.mtl
new file mode 120000
index 000000000..0fb46d176
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/kettle/materials.mtl
@@ -0,0 +1 @@
+../../../DomainContent/baked/botlab/materials.mtl
\ No newline at end of file
diff --git a/hifi-content/alexia/Hackathon/lamp/lamp.obj b/hifi-content/alexia/Hackathon/lamp/lamp.obj
new file mode 100644
index 000000000..776d335c9
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/lamp/lamp.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5900f9b2217c170e22bf9f9379ff7a56e3476491ca5be8ecd83154d9d4ddb4c9
+size 290240
diff --git a/hifi-content/alexia/Hackathon/lamp/materials.mtl b/hifi-content/alexia/Hackathon/lamp/materials.mtl
new file mode 100644
index 000000000..5ecd9911f
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/lamp/materials.mtl
@@ -0,0 +1,18 @@
+newmtl mat24
+ Ka 0.58 0.65 1.00
+ Kd 0.92 0.95 0.94
+ Ks 1 1 1
+ illum 9
+ Ns 300
+ d 0.4
+ Ni 1.5
+
+newmtl mat14
+ Kd 1.00 0.34 0.13
+
+newmtl mat12
+ Kd 1.00 0.92 0.23
+
+newmtl mat21
+ Kd 1.00 1.00 1.00
+
diff --git a/hifi-content/alexia/Hackathon/rug/DefaultMaterial_Base_Color.png b/hifi-content/alexia/Hackathon/rug/DefaultMaterial_Base_Color.png
new file mode 100644
index 000000000..708c1aca5
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/rug/DefaultMaterial_Base_Color.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95b8eb2da79affd29d64b70ca71a6d5a03b5daf083285a7e600ccac0fdb9fd0c
+size 30582
diff --git a/hifi-content/alexia/Hackathon/rug/Modern_Rug.mtl b/hifi-content/alexia/Hackathon/rug/Modern_Rug.mtl
new file mode 100644
index 000000000..df3abeaf4
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/rug/Modern_Rug.mtl
@@ -0,0 +1,9 @@
+newmtl phong1SG
+illum 4
+Kd 0.00 0.00 0.00
+Ka 0.00 0.00 0.00
+Tf 1.00 1.00 1.00
+map_Kd DefaultMaterial_Base_Color.png
+Ni 1.00
+Ks 0.01 0.01 0.01
+Ns 0.00
diff --git a/hifi-content/alexia/Hackathon/rug/Modern_Rug.obj b/hifi-content/alexia/Hackathon/rug/Modern_Rug.obj
new file mode 100644
index 000000000..3c66707ec
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/rug/Modern_Rug.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:22acd696d9f984e44369f441068388025e6c7121b89bb65470b06f4f1b0459ca
+size 1030
diff --git a/hifi-content/alexia/Hackathon/sink/materials.mtl b/hifi-content/alexia/Hackathon/sink/materials.mtl
new file mode 100644
index 000000000..e1aaf5e19
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/sink/materials.mtl
@@ -0,0 +1,12 @@
+newmtl mat25
+ Ka 1.00 0.65 0.67
+ Kd 0.92 0.95 0.94
+ Ks 1 1 1
+ illum 9
+ Ns 300
+ d 0.4
+ Ni 1.5
+
+newmtl mat14
+ Kd 1.00 0.34 0.13
+
diff --git a/hifi-content/alexia/Hackathon/sink/sink.obj b/hifi-content/alexia/Hackathon/sink/sink.obj
new file mode 100644
index 000000000..22d9e17ac
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/sink/sink.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:93619ba8b6d839c7694cc53755c109ab317e521d0cec5a7cfaa572db8ef31095
+size 17266
diff --git a/hifi-content/alexia/Hackathon/teleport.js b/hifi-content/alexia/Hackathon/teleport.js
new file mode 100644
index 000000000..7e0a24e7e
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/teleport.js
@@ -0,0 +1,43 @@
+//
+// diorama.js
+//
+// Created by Alexia Mandeville on 10/26/2018
+// 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
+//
+// Hackathon 2018
+// Tom, Jess, Alexia
+
+(function() {
+
+ var _entityID;
+ var _this;
+
+ var origScale;
+ var tinyScale = 0.1;
+
+ var Entity = function() {
+ _this = this;
+ };
+
+ Entity.prototype = {
+
+ preload: function(entityID) {
+ // runs when this script is refreshed or a
+ // client connects to a domain where this entity is present
+ _entityID = entityID;
+ _this = this;
+ },
+
+ clickDownOnEntity: function (entityID, pointerEvent) {
+ var teleportTarget = Entities.findEntitiesByName("Teleport-Target", MyAvatar.position, 10, false);
+ print(Entities.getEntityProperties(teleportTarget[0], ["position"]));
+ MyAvatar.position = Entities.getEntityProperties(teleportTarget[0], ["position"]).position;
+ },
+
+ };
+
+ return new Entity();
+});
\ No newline at end of file
diff --git a/hifi-content/alexia/Hackathon/wallpaper.jpg b/hifi-content/alexia/Hackathon/wallpaper.jpg
new file mode 100644
index 000000000..b6f29b72f
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/wallpaper.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8a6ecc649afc1f2e55131fc7f8ff3fa29c0a809ddf686b33ac8afed54ebc101f
+size 98380
diff --git a/hifi-content/alexia/Hackathon/window/materials.mtl b/hifi-content/alexia/Hackathon/window/materials.mtl
new file mode 100644
index 000000000..3737fc846
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/window/materials.mtl
@@ -0,0 +1,12 @@
+newmtl mat21
+ Kd 1.00 1.00 1.00
+
+newmtl mat24
+ Ka 0.58 0.65 1.00
+ Kd 0.92 0.95 0.94
+ Ks 1 1 1
+ illum 9
+ Ns 300
+ d 0.4
+ Ni 1.5
+
diff --git a/hifi-content/alexia/Hackathon/window/window.obj b/hifi-content/alexia/Hackathon/window/window.obj
new file mode 100644
index 000000000..41109c463
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/window/window.obj
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:25bdff752b0424885e4e4ad60e69545aad6edd28516eceffc41e13e930c1965b
+size 23576
diff --git a/hifi-content/alexia/Hackathon/window/window.png b/hifi-content/alexia/Hackathon/window/window.png
new file mode 100644
index 000000000..8793968cf
--- /dev/null
+++ b/hifi-content/alexia/Hackathon/window/window.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca3794b8dbe6db586e32080225810011f8bc6adf72395d5e8dc432c2c08d5ff8
+size 329745
diff --git a/hifi-content/alexia/InvisibleAvatar/AllOrbs.fbx b/hifi-content/alexia/InvisibleAvatar/AllOrbs.fbx
new file mode 100644
index 000000000..0b74f299e
--- /dev/null
+++ b/hifi-content/alexia/InvisibleAvatar/AllOrbs.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1185b941ecf3aeb6a4e16870ea53740d80f58451187f94dbdae77cae1bfde342
+size 2474832
diff --git a/hifi-content/alexia/InvisibleAvatar/GlassOrb.fbx b/hifi-content/alexia/InvisibleAvatar/GlassOrb.fbx
new file mode 100644
index 000000000..872da1e5c
--- /dev/null
+++ b/hifi-content/alexia/InvisibleAvatar/GlassOrb.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca3a04c5720b32b32de2e338c2cee262f93c0952aa9fea64d012312b83063248
+size 2328448
diff --git a/hifi-content/alexia/Keyboard/Keys/A_key.png b/hifi-content/alexia/Keyboard/Keys/A_key.png
new file mode 100644
index 000000000..24b4fc526
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/A_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3ed42299b548e40784030f0ac2cd62b1cf05be8b7a893bac7f91c670f47b5ed2
+size 956
diff --git a/hifi-content/alexia/Keyboard/Keys/B_key.png b/hifi-content/alexia/Keyboard/Keys/B_key.png
new file mode 100644
index 000000000..8d6d03d35
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/B_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a67d032d4b0d57b5ac9e78e5c098e539d7eb6f61e49fde91e9383ad6fd169948
+size 800
diff --git a/hifi-content/alexia/Keyboard/Keys/C_key.png b/hifi-content/alexia/Keyboard/Keys/C_key.png
new file mode 100644
index 000000000..77e70840e
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/C_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f85d021cfd807f44240096de86dfa31485e36aa872d821c7545a220744deddad
+size 894
diff --git a/hifi-content/alexia/Keyboard/Keys/D_key.png b/hifi-content/alexia/Keyboard/Keys/D_key.png
new file mode 100644
index 000000000..cbbef2ea0
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/D_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aa3e5e528df336d9929dd5f2fc9a4a35d14e2972749196e3a31a08d2704d4851
+size 751
diff --git a/hifi-content/alexia/Keyboard/Keys/E_key.png b/hifi-content/alexia/Keyboard/Keys/E_key.png
new file mode 100644
index 000000000..bf8a8b766
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/E_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:98c47649a1b6b12ba8b0c216b4f9b518fcba614abc805dd3b0ea849f1fdb1a34
+size 449
diff --git a/hifi-content/alexia/Keyboard/Keys/F_key.png b/hifi-content/alexia/Keyboard/Keys/F_key.png
new file mode 100644
index 000000000..f58f882ca
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/F_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be9ebba52d7d2be0af8880e9f5f829b784bab1946c6073bc29629d56489af8a7
+size 414
diff --git a/hifi-content/alexia/Keyboard/Keys/G_key.png b/hifi-content/alexia/Keyboard/Keys/G_key.png
new file mode 100644
index 000000000..4930ccfd3
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/G_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a4e1cbd44819586afbfb223fdf6288c373b346a0ba0a61e32bcf055c06d819f
+size 888
diff --git a/hifi-content/alexia/Keyboard/Keys/H_key.png b/hifi-content/alexia/Keyboard/Keys/H_key.png
new file mode 100644
index 000000000..4b0b1af85
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/H_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f5cab2227cef2523e2a8b04501eeb186315b70b363eff999e6336a4ea12a674c
+size 392
diff --git a/hifi-content/alexia/Keyboard/Keys/I_key.png b/hifi-content/alexia/Keyboard/Keys/I_key.png
new file mode 100644
index 000000000..34da7552a
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/I_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9a40c9809b8e88742a09bb689f760b357250cf7d78f451802743d373311ce24e
+size 361
diff --git a/hifi-content/alexia/Keyboard/Keys/J_key.png b/hifi-content/alexia/Keyboard/Keys/J_key.png
new file mode 100644
index 000000000..b6ad60a72
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/J_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4a8cb627341d1d604389e520f522c58db97abfc2adb2a573a74b6653d4dac62a
+size 610
diff --git a/hifi-content/alexia/Keyboard/Keys/K_key.png b/hifi-content/alexia/Keyboard/Keys/K_key.png
new file mode 100644
index 000000000..54166f279
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/K_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8a93adc05d585bf78dce8cd54deba825a49f79682a0a1580f41f73dc2a80c2a8
+size 876
diff --git a/hifi-content/alexia/Keyboard/Keys/L_key.png b/hifi-content/alexia/Keyboard/Keys/L_key.png
new file mode 100644
index 000000000..1e2309637
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/L_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:706804f6f00a9a9900b9f4f71fd6db9aae77b977dd976d4d8b4eb86ebecbf05e
+size 391
diff --git a/hifi-content/alexia/Keyboard/Keys/M_key.png b/hifi-content/alexia/Keyboard/Keys/M_key.png
new file mode 100644
index 000000000..506a4ffb5
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/M_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:49538fe2b85cd822d4303bf18f32973eea13037ac0238d9751687ca6ede1d4f7
+size 805
diff --git a/hifi-content/alexia/Keyboard/Keys/N_key.png b/hifi-content/alexia/Keyboard/Keys/N_key.png
new file mode 100644
index 000000000..26b8e3b2d
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/N_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:49e1ceb3fc3592cb03e31586fdca6c248863ce3e7b96aef6c06d8e34d8700056
+size 692
diff --git a/hifi-content/alexia/Keyboard/Keys/O_key.png b/hifi-content/alexia/Keyboard/Keys/O_key.png
new file mode 100644
index 000000000..da51ee9ab
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/O_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b53560b52e53932b3202b7c3aa3b40ff3dc25d6089cd1b4f9a2e6b3453e96f1b
+size 1038
diff --git a/hifi-content/alexia/Keyboard/Keys/P_key.png b/hifi-content/alexia/Keyboard/Keys/P_key.png
new file mode 100644
index 000000000..63dee6457
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/P_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d2221e5c09e43796876218744b298216c049783233b973786ef0310307af4080
+size 651
diff --git a/hifi-content/alexia/Keyboard/Keys/Q_key.png b/hifi-content/alexia/Keyboard/Keys/Q_key.png
new file mode 100644
index 000000000..d7c0eebb5
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/Q_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:490b58e21bd2e57e148084e482e2bb840a0f11318ea60f5249506235fcf9a616
+size 1151
diff --git a/hifi-content/alexia/Keyboard/Keys/R_key.png b/hifi-content/alexia/Keyboard/Keys/R_key.png
new file mode 100644
index 000000000..c3ac4d136
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/R_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d209012d809fe9f616327236440fee7bec5c1808118a933a279e636fe868b2fb
+size 806
diff --git a/hifi-content/alexia/Keyboard/Keys/S_key.png b/hifi-content/alexia/Keyboard/Keys/S_key.png
new file mode 100644
index 000000000..1655c69d4
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/S_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1ec25af9e2b9b7d7b52d4a72438b6e014d29e153074b3b313d8f836024a02c0b
+size 1025
diff --git a/hifi-content/alexia/Keyboard/Keys/T_key.png b/hifi-content/alexia/Keyboard/Keys/T_key.png
new file mode 100644
index 000000000..c1afa5e42
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/T_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:da0f52d9229b3be334232e5c26c755a228221f00d57c130f927aa549a3a8b48c
+size 440
diff --git a/hifi-content/alexia/Keyboard/Keys/U_key.png b/hifi-content/alexia/Keyboard/Keys/U_key.png
new file mode 100644
index 000000000..11f3107ce
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/U_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:571e7c899a08bdb4399dfe5ba1eef3b08c66815b1c087de895505060418600da
+size 707
diff --git a/hifi-content/alexia/Keyboard/Keys/V_key.png b/hifi-content/alexia/Keyboard/Keys/V_key.png
new file mode 100644
index 000000000..b345f2e3d
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/V_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:af10ccb36c9aba2360cefacf7d5af7143fe9150e46d981935401d520550565bf
+size 970
diff --git a/hifi-content/alexia/Keyboard/Keys/W_key.png b/hifi-content/alexia/Keyboard/Keys/W_key.png
new file mode 100644
index 000000000..b5a46816b
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/W_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3a048b2f850c4a2eee775d3501fda2b639db5524b9d8a80a7f4aa6dcc8ac14b3
+size 1199
diff --git a/hifi-content/alexia/Keyboard/Keys/X_key.png b/hifi-content/alexia/Keyboard/Keys/X_key.png
new file mode 100644
index 000000000..0ee14a86e
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/X_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5586461c4fc6b002dd7e636479e6e2d13342f3004b56caa2cc408f5f0eb0f496
+size 1224
diff --git a/hifi-content/alexia/Keyboard/Keys/Y_key.png b/hifi-content/alexia/Keyboard/Keys/Y_key.png
new file mode 100644
index 000000000..6db98cd4f
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/Y_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1b8a199d22eb08a0b38a26dbd8d394e33516ee48a454bf1e88dc7bce95c939a
+size 879
diff --git a/hifi-content/alexia/Keyboard/Keys/Z_key.png b/hifi-content/alexia/Keyboard/Keys/Z_key.png
new file mode 100644
index 000000000..d427f479c
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/Z_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:01acd3d39e29c965aab7dd1c7baca9cf3cfe1679154b7e34f6ec97ceca438155
+size 755
diff --git a/hifi-content/alexia/Keyboard/Keys/back_key.png b/hifi-content/alexia/Keyboard/Keys/back_key.png
new file mode 100644
index 000000000..074da634b
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Keys/back_key.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:601f1d89cf514d25f86f621ca056f00dc49707e8d5815aaaa89b0f40b075bfec
+size 997
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/A_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/A_key_black.png
new file mode 100644
index 000000000..33eba6892
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/A_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c01969595a331fd20e91b1838a515955d09d04c08b8807222438c2eda9b7288c
+size 809
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/B_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/B_key_black.png
new file mode 100644
index 000000000..32b41f69c
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/B_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ef7798b3011fa25797df041dae52a0296a5e83eafcbf58b9e593eeaeead2f9c3
+size 717
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/C_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/C_key_black.png
new file mode 100644
index 000000000..3ef153f8b
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/C_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95ace2cefcd463aa0354a7ff6299b11a4a572733b03636e5c9bf668de8f82b9a
+size 754
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/D_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/D_key_black.png
new file mode 100644
index 000000000..7f3d0d58f
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/D_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3cc98c44a43f01f932b8af21775197daad01d2b61efa9465027ffb47fe970bc6
+size 706
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/E_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/E_key_black.png
new file mode 100644
index 000000000..6f8a92033
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/E_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20d96b7ef5bcd4866c609b2263f8b4057e2eedb8a3d1a2d999d28c2f546cbc47
+size 422
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/F_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/F_key_black.png
new file mode 100644
index 000000000..1168361ff
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/F_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6c0ddc4393017be0b7e86f5d391de3d1d6f0d87ce33be76018513f33063aefaa
+size 372
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/G_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/G_key_black.png
new file mode 100644
index 000000000..e3dee8040
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/G_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:214a5d30a5f5e189b225a93b4d9ca26704838908ccc470634542ac4fe0cedcbb
+size 825
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/H_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/H_key_black.png
new file mode 100644
index 000000000..50067ff1e
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/H_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:35ef2f72e7383e1d77cc79cd3235a005ad169b725043194e17dd7999461df28f
+size 323
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/I_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/I_key_black.png
new file mode 100644
index 000000000..1a97f0b73
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/I_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a9cb6bd484fc1be7da2a0804d1749d4bb7614c36f2bff00819478e3a8cd89e8b
+size 272
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/J_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/J_key_black.png
new file mode 100644
index 000000000..6a423dfe2
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/J_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b02541ad93f4c0a1694b9fdf4de51ede5f06c62b3796b778a3e43194022c119f
+size 510
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/K_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/K_key_black.png
new file mode 100644
index 000000000..8dfb943fa
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/K_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ef5c80967b6dc55322436a28c8474fe8d8df2402b48d9b3ae543af6e23d11e2a
+size 672
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/L_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/L_key_black.png
new file mode 100644
index 000000000..22492ce39
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/L_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ccfc924f6b753c4b5e92c86ef882e9c497d995c290b122ae2bc732a259f1f92e
+size 325
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/M_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/M_key_black.png
new file mode 100644
index 000000000..df409c996
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/M_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a2d556465cfaf4ec56578b12d56cc5dd8db8ae6268fc0ba042457f5067b382e2
+size 779
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/N_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/N_key_black.png
new file mode 100644
index 000000000..e89786d4f
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/N_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95709330378c140593f90bd7a55d874bcb3ca2fc19cc4ec71c78bf6cca0e3c18
+size 549
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/O_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/O_key_black.png
new file mode 100644
index 000000000..ab308ba35
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/O_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02731a8d38b1ae78edfa6987ce65aa32be78c06311525ae19c991d8b57c85434
+size 867
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/P_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/P_key_black.png
new file mode 100644
index 000000000..950e19db5
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/P_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8399c282d1cc26e290128ca8628d8ebdaf8329ba1216266699a7b9b5349a89c8
+size 574
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/Q_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/Q_key_black.png
new file mode 100644
index 000000000..21dac3c91
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/Q_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:37fd537e47aad1cd7aab0c5a5fdd7f2b028a54f1b0149bd68fe6531187f0657b
+size 979
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/R_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/R_key_black.png
new file mode 100644
index 000000000..db883c997
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/R_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6b0c1e649516d1cfed3949e49fbd56873291daaaea91ca314b3e133674f6798a
+size 721
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/S_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/S_key_black.png
new file mode 100644
index 000000000..23f4f93b1
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/S_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:843c66f1f9c8247c0a7b8e81b8f7264882340d4c6d0c417077d9205c36a6fc3a
+size 933
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/T_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/T_key_black.png
new file mode 100644
index 000000000..d7f7efafa
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/T_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:758ac12adfd2ade95ad50c442b62fb857276fd6b37103afebdc821f6c61672ab
+size 352
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/U_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/U_key_black.png
new file mode 100644
index 000000000..c08a051a6
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/U_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e794d5e1cf33138596af93a3832e1da46d89bb37515802ca8220323576d409b0
+size 576
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/V_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/V_key_black.png
new file mode 100644
index 000000000..db7c17d8c
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/V_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4a11f69c3b49214783c131a4795b8331f466c4e280799b657d8d02085baacb79
+size 802
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/W_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/W_key_black.png
new file mode 100644
index 000000000..10bf8eed6
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/W_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1ab83e2a83d62e819d461b9b1152636851a7e56a5851cd68076e7a1798aca538
+size 1186
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/X_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/X_key_black.png
new file mode 100644
index 000000000..97a1fb445
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/X_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:97f80dc193988d27a70513bf8486772b612dacc5383d2cca4a26ae3fdf58eb7a
+size 783
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/Y_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/Y_key_black.png
new file mode 100644
index 000000000..3231c66b3
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/Y_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf618298f70a4efae6e7ba0e8bbf42787d478a297a78b8c9c9f8250bc2b15a56
+size 561
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/Z_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/Z_key_black.png
new file mode 100644
index 000000000..2b5e8f0c2
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/Z_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d60eb505125aa93a42c1303130ffc0b9ee5decee0f6a98af5f71fa61e3067a9
+size 525
diff --git a/hifi-content/alexia/Keyboard/KeysBlack/back_key_black.png b/hifi-content/alexia/Keyboard/KeysBlack/back_key_black.png
new file mode 100644
index 000000000..c813eb2b7
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/KeysBlack/back_key_black.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b58e43deccca809f1c1746c8f49b464590f7878fc5ad4cf808f4e801eb5c627
+size 1839
diff --git a/hifi-content/alexia/Keyboard/Punchkeyboard_2.0.fbx b/hifi-content/alexia/Keyboard/Punchkeyboard_2.0.fbx
new file mode 100644
index 000000000..a63f9c6ec
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/Punchkeyboard_2.0.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:71b2b63f8b0f504b32b0a46424aa75a0133fc1c5c7bbb2bb203998f2b1648058
+size 483056
diff --git a/hifi-content/alexia/Keyboard/drumSticks.js b/hifi-content/alexia/Keyboard/drumSticks.js
new file mode 100644
index 000000000..4933f213c
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/drumSticks.js
@@ -0,0 +1,89 @@
+// drumSticks.js
+
+
+(function() {
+
+ var DRUM_STICK_MODEL = "http://hifi-content.s3.amazonaws.com/alexia/Keyboard/drumstick.fbx";
+ var DRUM_STICK_SHAFT_MODEL = "http://hifi-content.s3.amazonaws.com/alexia/Keyboard/drumstick_shaft.fbx";
+
+ function DrumSticks() {
+ var _this = this;
+ _this.entity = null;
+ _this.leftDrumStick = null;
+ _this.rightDrumStick = null;
+ _this.leftDrumStickShaft = null;
+ _this.rightDrumStickShaft = null;
+ _this.leftHandJointIndex = null;
+ _this.rightHandJointIndex = null;
+ this.preload = function(entityID) {
+ _this.entity = entityID;
+ _this.rightHandJointIndex = MyAvatar.getJointIndex("_CAMERA_RELATIVE_CONTROLLER_RIGHTHAND");
+ _this.leftHandJointIndex = MyAvatar.getJointIndex("_CAMERA_RELATIVE_CONTROLLER_LEFTHAND");
+ };
+
+ this.enterEntity = function(entity) {
+ print(_this.leftHandJointIndex);
+ _this.leftDrumStick = Entities.addEntity({
+ name: "LeftDrumStick",
+ type: "Model",
+ localPosition: {x: 0.0, y: 0.43, z: 0.04},
+ localRotation: Quat.IDENTITY,
+ collisionless: false,
+ shapeType: "sphere",
+ dynamic: true,
+ modelURL: DRUM_STICK_MODEL,
+ parentID: MyAvatar.sessionUUID,
+ parentJointIndex: _this.leftHandJointIndex
+ });
+
+ _this.leftDrumStickShaft = Entities.addEntity({
+ name: "LeftDrumStickShaft",
+ type: "Model",
+ localPosition: {x: 0.0, y: 0.3, z: 0.04},
+ localRotation: Quat.IDENTITY,
+ collisionless: true,
+ modelURL: DRUM_STICK_SHAFT_MODEL,
+ parentID: MyAvatar.sessionUUID,
+ parentJointIndex: _this.leftHandJointIndex
+ });
+
+ _this.rightDrumStick = Entities.addEntity({
+ name: "RightDrumStick",
+ type: "Model",
+ localPosition: {x: 0.0, y: 0.43, z: 0.04},
+ localRotation: Quat.IDENTITY,
+ collisionless: false,
+ shapeType: "sphere",
+ dynamic: true,
+ modelURL: DRUM_STICK_MODEL,
+ parentID: MyAvatar.sessionUUID,
+ parentJointIndex: _this.rightHandJointIndex
+ });
+
+ _this.rightDrumStickShaft = Entities.addEntity({
+ name: "LeftDrumStickShaft",
+ type: "Model",
+ localPosition: {x: 0.0, y: 0.3, z: 0.04},
+ localRotation: Quat.IDENTITY,
+ collisionless: true,
+ modelURL: DRUM_STICK_SHAFT_MODEL,
+ parentID: MyAvatar.sessionUUID,
+ parentJointIndex: _this.rightHandJointIndex
+ });
+ };
+
+ this.leaveEntity = function(enity) {
+ Entities.deleteEntity(_this.leftDrumStick);
+ Entities.deleteEntity(_this.rightDrumStick);
+ Entities.deleteEntity(_this.leftDrumStickShaft);
+ Entities.deleteEntity(_this.rightDrumStickShaft);
+ _this.leftDrumStick = null;
+ _this.rightDrumStick = null;
+ _this.leftDrumStickShaft = null;
+ _this.rightDrumStickShaft = null;
+ };
+ }
+
+
+ return new DrumSticks();
+});
diff --git a/hifi-content/alexia/Keyboard/drumstick.fbx b/hifi-content/alexia/Keyboard/drumstick.fbx
new file mode 100644
index 000000000..2ac929d80
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/drumstick.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4acec0edd7b3291951b05dfc98f5307dee9af038d10f86ddb14ff66d90028d74
+size 35152
diff --git a/hifi-content/alexia/Keyboard/drumstick_shaft.fbx b/hifi-content/alexia/Keyboard/drumstick_shaft.fbx
new file mode 100644
index 000000000..618f3245d
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/drumstick_shaft.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40d7033654de0757f1c863f9950b54bd854ce1a8197ff7eea9db4a9574eb620a
+size 29856
diff --git a/hifi-content/alexia/Keyboard/keyBoard.js b/hifi-content/alexia/Keyboard/keyBoard.js
new file mode 100644
index 000000000..30a349379
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/keyBoard.js
@@ -0,0 +1,138 @@
+//
+// pianoKey.js
+//
+// created by Alexia Mandeville on 05/25/18
+// Copyright 2018 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 _this;
+ var CHANNEL = 'HIFI_KEYBOARD_INPUT';
+ var AUDIO_VOLUME_LEVEL = 0.9;
+ var WHITE_KEY_LOCAL_Y_POSITION_UP = 0.0193;
+ var WHITE_KEY_LOCAL_Y_POSITION_DOWN = 0.0083;
+ var BLACK_KEY_LOCAL_Y_POSITION_UP = 0.0360;
+ var BLACK_KEY_LOCAL_Y_POSITION_DOWN = 0.0230;
+ var AUDIO_VOLUME = 1;
+ var BLACK = { blue: 255, green: 255, red: 255 };
+ var COLOR_PRESSED = { blue: 212, green: 212, red: 212 };
+ var KEY_INDEX = 10;
+ var COLOR_CHANGE_TIMEOUT = 250;
+ var NEGATIVE = -1;
+ var CHAR = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
+
+ var myString = "";
+ var white = true;
+ var playing = false;
+ var sound;
+ var Key = function() {
+ _this = this;
+ };
+
+ Key.prototype = {
+ preload: function(entityID){
+ _this.entityID = entityID;
+ var soundFile = "http://hifi-content.s3.amazonaws.com/alexia/Keyboard/keyboard_key.wav";
+ sound = SoundCache.getSound(Script.resolvePath(soundFile));
+ _this.setKeycolor();
+ _this.timeExpired = false;
+
+ },
+ setKeycolor: function() {
+ var colorObject = Entities.getEntityProperties(_this.entityID, 'color').color;
+ if (JSON.stringify(colorObject).indexOf("0") !== NEGATIVE) {
+ white = false;
+ }
+ },
+ collisionWithEntity: function(thisEntity, otherEntity, collision) {
+ if (collision.type === 0) { // On start of the collision
+ this.playSound();
+ this.playHaptics();
+ this.amendString();
+ this.collisionToggle();
+
+
+ }
+ // Need to amend string here continuously, after one second once the initial amend on collision enter has occurred.
+ if (collision.type === 2) { // On end of collision
+ this.resetKey();
+ }
+ },
+ amendString: function() {
+ var string;
+ if (_this.getKeyNumber() === "27") {
+ string = "delete";
+ } else if (_this.getKeyNumber() === "28") {
+ string = ' ';
+ } else {
+ string= CHAR[_this.getKeyNumber() - 1];
+ }
+ var message = {
+ key: string
+ };
+
+ Messages.sendMessage(CHANNEL, JSON.stringify(message));
+
+ print(myString);
+ },
+ playHaptics: function() {
+ Controller.triggerHapticPulse(1, 1, 1);
+ Controller.triggerHapticPulse(1, 1, 0);
+ },
+ collisionToggle: function() {
+ Entities.editEntity(_this.entityID, {
+ collisionless: true
+ });
+ },
+ playSound: function() {
+ _this.homePosition = Entities.getEntityProperties(_this.entityID, ["position"]).position;
+ _this.injector = Audio.playSound(_this.sound, {position: _this.homePos, volume: AUDIO_VOLUME});
+ if (sound.downloaded) {
+ var position = Entities.getEntityProperties(_this.entityID, 'localPosition').localPosition;
+ if (white) {
+ position.y = WHITE_KEY_LOCAL_Y_POSITION_DOWN;
+ } else {
+ position.y = BLACK_KEY_LOCAL_Y_POSITION_DOWN;
+ }
+ Entities.editEntity(_this.entityID, {
+ localPosition: position,
+ color: COLOR_PRESSED,
+ });
+ Audio.playSound(sound, {
+ position: _this.homePosition,
+ volume: AUDIO_VOLUME_LEVEL
+ });
+ Script.setTimeout(function() {
+ _this.resetKey();
+ }, COLOR_CHANGE_TIMEOUT);
+ }
+ },
+ resetKey: function() {
+ var newColor;
+ var position = Entities.getEntityProperties(_this.entityID, 'localPosition').localPosition;
+ position.y = WHITE_KEY_LOCAL_Y_POSITION_UP;
+ newColor = BLACK;
+ Entities.editEntity(_this.entityID, {
+ localPosition: position,
+ color: newColor,
+ collisionless: false
+ });
+ _this.timeExpired = false;
+ },
+ clickReleaseOnEntity: function(entityID, mouseEvent) {
+ if (mouseEvent.isLeftButton) {
+ this.playSound();
+ }
+ },
+ getKeyNumber: function(){
+ var keyName = Entities.getEntityProperties(_this.entityID, 'name').name;
+ print(keyName.substr(KEY_INDEX));
+ return keyName.substr(KEY_INDEX);
+ }
+ };
+
+ return new Key();
+});
diff --git a/hifi-content/alexia/Keyboard/keyboardInput.js b/hifi-content/alexia/Keyboard/keyboardInput.js
new file mode 100644
index 000000000..30fbd3770
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/keyboardInput.js
@@ -0,0 +1,37 @@
+
+(function() {
+ var CHANNEL = 'HIFI_KEYBOARD_INPUT';
+ var _this;
+ var text = '';
+ var KeyboardInput = function() {
+ _this = this;
+ };
+
+ KeyboardInput.prototype = {
+ preload: function(entityID){
+ _this.entityID = entityID;
+ Entities.editEntity(entityID, {text: text});
+ },
+ receiveMessage: function(channel, message, senderID, localOnly) {
+ try {
+ var data = JSON.parse(message);
+ if (channel === CHANNEL) {
+ var key = data.key;
+ if (key === "delete") {
+ text = text.substring(0, text.length - 1);
+ } else {
+ text += key;
+ }
+ print(text);
+ Entities.editEntity(_this.entityID, {text: text});
+ }
+ } catch (error) {
+ }
+ }
+ };
+ var keyboardInput = new KeyboardInput();
+
+ Messages.subscribe(CHANNEL);
+ Messages.messageReceived.connect(keyboardInput.receiveMessage);
+ return keyboardInput;
+});
diff --git a/hifi-content/alexia/Keyboard/keyboardKey2.wav b/hifi-content/alexia/Keyboard/keyboardKey2.wav
new file mode 100644
index 000000000..0110a0487
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/keyboardKey2.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:71b01f85f487ea6ae759ca8535cf4b888068098e04745b0c84f9161339464184
+size 57574
diff --git a/hifi-content/alexia/Keyboard/keyboardKey3.wav b/hifi-content/alexia/Keyboard/keyboardKey3.wav
new file mode 100644
index 000000000..555a53941
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/keyboardKey3.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e8f981bf8a21418bc655333639496aa62fb35c019422cb565b12493afdeeeabe
+size 104626
diff --git a/hifi-content/alexia/Keyboard/keyboardVR_layout.png b/hifi-content/alexia/Keyboard/keyboardVR_layout.png
new file mode 100644
index 000000000..1d9777851
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/keyboardVR_layout.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4b4eb8b2941bd88748fe9fea94b3a6d80b4287c48b2ff08ae477e2b7f0fc390
+size 134961
diff --git a/hifi-content/alexia/Keyboard/keyboard_key.mp3 b/hifi-content/alexia/Keyboard/keyboard_key.mp3
new file mode 100644
index 000000000..570c75610
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/keyboard_key.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:efb141d8a91509b0f0e214835679f99b733ec089404cf7bed943ca3cbf57548d
+size 18965
diff --git a/hifi-content/alexia/Keyboard/keyboard_key.wav b/hifi-content/alexia/Keyboard/keyboard_key.wav
new file mode 100644
index 000000000..bd9504796
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/keyboard_key.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0ac7031ec2f331ac43a4991e8b0045481c8a951cd8faa60a178e0ceb3dc511e
+size 59948
diff --git a/hifi-content/alexia/Keyboard/piano2.json b/hifi-content/alexia/Keyboard/piano2.json
new file mode 100644
index 000000000..4802a2838
--- /dev/null
+++ b/hifi-content/alexia/Keyboard/piano2.json
@@ -0,0 +1,1141 @@
+{
+ "DataVersion": 0,
+ "Entities": [
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{4e7597c4-0bed-48d5-bf98-6ba56836f6e8}",
+ "lastEdited": 1532046635164339,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 11",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.19811707735061646,
+ "green": 0.019135475158691406,
+ "red": 0.22154903411865234,
+ "x": 0.22154903411865234,
+ "y": 0.019135475158691406,
+ "z": 0.19811707735061646
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.610637664794922,
+ "y": 8.625252723693848,
+ "z": -0.8939731121063232
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00868237018585205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{dc297269-92a2-4a69-9c55-6ba3f46af236}",
+ "lastEdited": 1532046635164230,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 12",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.18829721212387085,
+ "green": 0.01921367645263672,
+ "red": 0.30159521102905273,
+ "x": 0.30159521102905273,
+ "y": 0.01921367645263672,
+ "z": 0.18829721212387085
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.691275596618652,
+ "y": 8.625324249267578,
+ "z": -0.8939828872680664
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00868237018585205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{f90f890b-fef2-4770-af31-edfe869c5a7d}",
+ "lastEdited": 1532046645681134,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 15",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.09515583515167236,
+ "green": 0.03292274475097656,
+ "red": 0.2594919204711914,
+ "x": 0.2594919204711914,
+ "y": 0.03292274475097656,
+ "z": 0.09515583515167236
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.6608428955078125,
+ "y": 8.639039039611816,
+ "z": -0.7964150905609131
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{64da0292-84a4-4c9c-a121-3b449aa1d61a}",
+ "lastEdited": 1532046645681195,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 16",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.08520352840423584,
+ "green": 0.03293800354003906,
+ "red": 0.34032392501831055,
+ "x": 0.34032392501831055,
+ "y": 0.03293800354003906,
+ "z": 0.08520352840423584
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.742276668548584,
+ "y": 8.639047622680664,
+ "z": -0.796389102935791
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "scriptTimestamp": 1516230441805,
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{b0763a18-e9c5-4453-b3ad-1f890fb7bb01}",
+ "lastEdited": 1532046635164259,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 7",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.22882121801376343,
+ "green": 0.019184112548828125,
+ "red": -0.02840423583984375,
+ "x": -0.02840423583984375,
+ "y": 0.019184112548828125,
+ "z": 0.22882121801376343
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.358832359313965,
+ "y": 8.625324249267578,
+ "z": -0.8939828872680664
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{8bd153e2-c473-4b26-b084-3d1d53ea5bb2}",
+ "lastEdited": 1532046635164162,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 8",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.21850401163101196,
+ "green": 0.019140243530273438,
+ "red": 0.055552005767822266,
+ "x": 0.055552005767822266,
+ "y": 0.019140243530273438,
+ "z": 0.21850401163101196
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.443411350250244,
+ "y": 8.625272750854492,
+ "z": -0.8939756155014038
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00868237018585205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{cdbd5c7c-e78b-47c0-9272-3b4f1603f134}",
+ "lastEdited": 1532046635164277,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 22",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.32348740100860596,
+ "green": 0.005787849426269531,
+ "red": -0.01716470718383789,
+ "x": -0.01716470718383789,
+ "y": 0.005787849426269531,
+ "z": 0.32348740100860596
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.358448505401611,
+ "y": 8.611924171447754,
+ "z": -0.9893025159835815
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{b4d45b4b-8945-455e-959d-c7f95a9f5b6b}",
+ "lastEdited": 1532046635663563,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 2",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.31350642442703247,
+ "green": 0.005797386169433594,
+ "red": 0.0641183853149414,
+ "x": 0.0641183853149414,
+ "y": 0.005797386169433594,
+ "z": 0.31350642442703247
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.440333366394043,
+ "y": 8.611927032470703,
+ "z": -0.9893031716346741
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00862133502960205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{f4330132-2e07-42ad-8037-6cc0bb7967a8}",
+ "lastEdited": 1532046645681255,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 4",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.24917811155319214,
+ "green": 0.01916790008544922,
+ "red": -0.19417572021484375,
+ "x": -0.19417572021484375,
+ "y": 0.01916790008544922,
+ "z": 0.24917811155319214
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.19183349609375,
+ "y": 8.625322341918945,
+ "z": -0.893983006477356
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{bb1918e8-d527-4735-a49a-60b5f623b1b5}",
+ "lastEdited": 1532046024612663,
+ "lastEditedBy": "{d958dd7f-eeb6-4c84-a4cf-d021b8ededf9}",
+ "name": "Piano Key 19",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.25841403007507324,
+ "green": 0.019156455993652344,
+ "red": -0.2697925567626953,
+ "x": -0.2697925567626953,
+ "y": 0.019156455993652344,
+ "z": 0.25841403007507324
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.115662574768066,
+ "y": 8.62531852722168,
+ "z": -0.8939335346221924
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00856029987335205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{7d75c0d7-9831-4d3b-967e-5b90b1ac7232}",
+ "lastEdited": 1532046635164130,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 26",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.3531069755554199,
+ "green": 0.005756378173828125,
+ "red": -0.2578110694885254,
+ "x": -0.2578110694885254,
+ "y": 0.005756378173828125,
+ "z": 0.3531069755554199
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.116012096405029,
+ "y": 8.61191463470459,
+ "z": -0.9893702268600464
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{38918241-30c8-4f1a-8c56-2968355ba65e}",
+ "lastEdited": 1532046635164321,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 24",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.34314966201782227,
+ "green": 0.0057735443115234375,
+ "red": -0.17727947235107422,
+ "x": -0.17727947235107422,
+ "y": 0.0057735443115234375,
+ "z": 0.34314966201782227
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.197148323059082,
+ "y": 8.611924171447754,
+ "z": -0.9893026947975159
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{566a4a66-2507-48cf-806f-0c737f011cfd}",
+ "lastEdited": 1532046645681215,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 5",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.15607208013534546,
+ "green": 0.032876014709472656,
+ "red": -0.23656940460205078,
+ "x": -0.23656940460205078,
+ "y": 0.032876014709472656,
+ "z": 0.15607208013534546
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.161108493804932,
+ "y": 8.639037132263184,
+ "z": -0.796414852142334
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06919968128204346,
+ "y": -7.62939453125e-05,
+ "z": -0.00892651081085205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{5d4587a2-f6ae-4a5e-9800-b98e8295e09e}",
+ "lastEdited": 1532046645681068,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 25",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.12543797492980957,
+ "green": 0.03290367126464844,
+ "red": 0.012897014617919922,
+ "x": 0.012897014617919922,
+ "y": 0.03290367126464844,
+ "z": 0.12543797492980957
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.412422180175781,
+ "y": 8.639041900634766,
+ "z": -0.7964153289794922
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{f8feae5c-7ae4-483d-b41e-8bbce78bc9d1}",
+ "lastEdited": 1532046635680541,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 20",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.13569235801696777,
+ "green": 0.03290271759033203,
+ "red": -0.07104063034057617,
+ "x": -0.07104063034057617,
+ "y": 0.03290271759033203,
+ "z": 0.13569235801696777
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.327869415283203,
+ "y": 8.63904857635498,
+ "z": -0.7963625192642212
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00868237018585205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{7decc654-5e13-4b09-8cbb-4df0e5460234}",
+ "lastEdited": 1532046645681175,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 18",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.14591515064239502,
+ "green": 0.03288555145263672,
+ "red": -0.15385675430297852,
+ "x": -0.15385675430297852,
+ "y": 0.03288555145263672,
+ "z": 0.14591515064239502
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.244433403015137,
+ "y": 8.639039039611816,
+ "z": -0.7964150905609131
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{20fbe48b-eda4-453d-be18-39439413ca8b}",
+ "lastEdited": 1532046635164241,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 21",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.11547476053237915,
+ "green": 0.032807350158691406,
+ "red": 0.09391117095947266,
+ "x": 0.09391117095947266,
+ "y": 0.032807350158691406,
+ "z": 0.11547476053237915
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.494038105010986,
+ "y": 8.638938903808594,
+ "z": -0.7964007258415222
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00868237018585205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{40d836ce-5127-4aba-a29a-a53d22d9b1fd}",
+ "lastEdited": 1532046635680603,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 3",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.333088755607605,
+ "green": 0.005780220031738281,
+ "red": -0.09535026550292969,
+ "x": -0.09535026550292969,
+ "y": 0.005780220031738281,
+ "z": 0.333088755607605
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.279684066772461,
+ "y": 8.611924171447754,
+ "z": -0.9893027544021606
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06919968128204346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{3d3a6301-c45c-44bd-9acb-f4051dfabaed}",
+ "lastEdited": 1532046635680622,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 6",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.23900985717773438,
+ "green": 0.019140243530273438,
+ "red": -0.11141395568847656,
+ "x": -0.11141395568847656,
+ "y": 0.019140243530273438,
+ "z": 0.23900985717773438
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.275208473205566,
+ "y": 8.625288009643555,
+ "z": -0.89397794008255
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00868237018585205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{f3e5054f-2ce3-43af-ba00-4acceaf63ea3}",
+ "lastEdited": 1532046635164368,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 14",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.3042827844619751,
+ "green": 0.0057048797607421875,
+ "red": 0.13855600357055664,
+ "x": 0.13855600357055664,
+ "y": 0.0057048797607421875,
+ "z": 0.3042827844619751
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.515332221984863,
+ "y": 8.611827850341797,
+ "z": -0.9892211556434631
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{0ca5b997-71bb-4b40-9739-df52850550a2}",
+ "lastEdited": 1532046645681155,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 9",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.10544002056121826,
+ "green": 0.03291511535644531,
+ "red": 0.17574548721313477,
+ "x": 0.17574548721313477,
+ "y": 0.03291511535644531,
+ "z": 0.10544002056121826
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.576476573944092,
+ "y": 8.639039039611816,
+ "z": -0.7964151501655579
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{22b006a8-773c-4f84-b31d-23cf7ea1ccfe}",
+ "lastEdited": 1532046635680478,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 13",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.2947383522987366,
+ "green": 0.005799293518066406,
+ "red": 0.21694564819335938,
+ "x": 0.21694564819335938,
+ "y": 0.005799293518066406,
+ "z": 0.2947383522987366
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.594292640686035,
+ "y": 8.61191463470459,
+ "z": -0.9893023371696472
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06916916370391846,
+ "y": -4.57763671875e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "scriptTimestamp": 1516230733912,
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{5da05492-9400-436e-bbad-7416c6bc63b7}",
+ "lastEdited": 1532046635164350,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 10",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.2082957625389099,
+ "green": 0.019196510314941406,
+ "red": 0.13874197006225586,
+ "x": 0.13874197006225586,
+ "y": 0.019196510314941406,
+ "z": 0.2082957625389099
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.52721643447876,
+ "y": 8.625321388244629,
+ "z": -0.893983006477356
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00868237018585205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{1fbbe860-da33-4232-a088-6405e9913eed}",
+ "lastEdited": 1532046645681236,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 17",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.1768612265586853,
+ "green": 0.032853126525878906,
+ "red": -0.4054269790649414,
+ "x": -0.4054269790649414,
+ "y": 0.032853126525878906,
+ "z": 0.1768612265586853
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -6.990993976593018,
+ "y": 8.639029502868652,
+ "z": -0.7964679002761841
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06923019886016846,
+ "y": -4.57763671875e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{623dcec2-f1d8-41a2-b8d8-1c645ac3d4e2}",
+ "lastEdited": 1532046645697257,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 1",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.2697030305862427,
+ "green": 0.019134521484375,
+ "red": -0.3605504035949707,
+ "x": -0.3605504035949707,
+ "y": 0.019134521484375,
+ "z": 0.2697030305862427
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.024215221405029,
+ "y": 8.625304222106934,
+ "z": -0.8940763473510742
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06919968128204346,
+ "y": -7.62939453125e-05,
+ "z": -0.00895702838897705
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "scriptTimestamp": 1516216380628,
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.07000000029802322,
+ "green": 0.029999999329447746,
+ "red": 0.07000000029802322,
+ "x": 0.07000000029802322,
+ "y": 0.029999999329447746,
+ "z": 0.07000000029802322
+ },
+ "id": "{bb4970a3-76bd-4637-80f8-e98b0dab450e}",
+ "lastEdited": 1532046645681111,
+ "lastEditedBy": "{a7a8b015-128a-4b36-9f92-d480e73b3b73}",
+ "name": "Piano Key 23",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "position": {
+ "blue": 0.1665012240409851,
+ "green": 0.03287029266357422,
+ "red": -0.32149457931518555,
+ "x": -0.32149457931518555,
+ "y": 0.03287029266357422,
+ "z": 0.1665012240409851
+ },
+ "queryAACube": {
+ "scale": 0.10344080626964569,
+ "x": -7.075554370880127,
+ "y": 8.639039039611816,
+ "z": -0.7964152097702026
+ },
+ "rotation": {
+ "w": 0.99755859375,
+ "x": 0.06913864612579346,
+ "y": -7.62939453125e-05,
+ "z": -0.00880444049835205
+ },
+ "script": "http://mpassets.highfidelity.com/a567337a-7bba-462a-b07e-feeeca26a284-v1/pianoKey.js",
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}"
+ },
+ {
+ "clientOnly": false,
+ "color": {
+ "blue": 2,
+ "green": 15,
+ "red": 28
+ },
+ "created": "2018-07-19T22:51:48Z",
+ "dimensions": {
+ "blue": 0.20000000298023224,
+ "green": 0.02449999935925007,
+ "red": 1.0364999771118164,
+ "x": 1.0364999771118164,
+ "y": 0.02449999935925007,
+ "z": 0.20000000298023224
+ },
+ "id": "{1bcd8bd3-758e-49fc-a9f5-ef7c0387ede4}",
+ "lastEdited": 1532045046435917,
+ "lastEditedBy": "{d958dd7f-eeb6-4c84-a4cf-d021b8ededf9}",
+ "name": "Piano Base Bottom",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "queryAACube": {
+ "scale": 1.0559035539627075,
+ "x": -0.5279517769813538,
+ "y": -0.5279517769813538,
+ "z": -0.5279517769813538
+ },
+ "rotation": {
+ "w": 0.061051368713378906,
+ "x": -4.57763671875e-05,
+ "y": 0.99810791015625,
+ "z": -1.52587890625e-05
+ },
+ "scriptTimestamp": 1516387996321,
+ "shape": "Cylinder",
+ "type": "Shape",
+ "userData": "{\"grabbableKey\":{\"grabbable\":false}}",
+ "visible": false
+ }
+ ],
+ "Id": "{317372fb-4937-40eb-b7f7-98704c63080a}",
+ "Version": 91
+}
diff --git a/hifi-content/alexia/LoadingScreens/404_layout.png b/hifi-content/alexia/LoadingScreens/404_layout.png
new file mode 100644
index 000000000..6f137502f
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/404_layout.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba1f262c9479620eca35b9316e8dee9ba36eacac79456b32ca1b2d71d85fc23e
+size 9983
diff --git a/hifi-content/alexia/LoadingScreens/Portals/circle.png b/hifi-content/alexia/LoadingScreens/Portals/circle.png
new file mode 100644
index 000000000..a03780ce7
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/Portals/circle.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aa1555139775a7aade31671e744b682c33d43a8866adb7ae3b65ceee65e61612
+size 667
diff --git a/hifi-content/alexia/LoadingScreens/backDialog.png b/hifi-content/alexia/LoadingScreens/backDialog.png
new file mode 100644
index 000000000..e4161e987
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/backDialog.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5807f212850ef69bdf7fb8412be8e60589835659189995e279116509f4629e95
+size 1632
diff --git a/hifi-content/alexia/LoadingScreens/black-sphere-wo-stars.fbx b/hifi-content/alexia/LoadingScreens/black-sphere-wo-stars.fbx
new file mode 100644
index 000000000..d155c454b
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/black-sphere-wo-stars.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b72f723b91bbf4903dc2acca8ed166c9bf5b33d11703ccde54cdb9cb6b5ba80d
+size 140732
diff --git a/hifi-content/alexia/LoadingScreens/black-sphere.fbx b/hifi-content/alexia/LoadingScreens/black-sphere.fbx
new file mode 100644
index 000000000..49e135678
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/black-sphere.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4f6017d9d3cf7fbe3a73f5302005142549368b1fe2bb8f00c16817bc0f4ce14b
+size 56208
diff --git a/hifi-content/alexia/LoadingScreens/black-sphere_withoutStars.fbx b/hifi-content/alexia/LoadingScreens/black-sphere_withoutStars.fbx
new file mode 100644
index 000000000..45c7b3813
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/black-sphere_withoutStars.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f08158d2981adddaef15aeb4f0503cc0424f857a8918be43132de8ec96603370
+size 54352
diff --git a/hifi-content/alexia/LoadingScreens/crystals_and_voices.wav b/hifi-content/alexia/LoadingScreens/crystals_and_voices.wav
new file mode 100644
index 000000000..aa5d8c247
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/crystals_and_voices.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42bbe810da7a3a85eb8389b6aa46293b064b26bd4db1035b3473094083d900b1
+size 3681458
diff --git a/hifi-content/alexia/LoadingScreens/floor.fbx b/hifi-content/alexia/LoadingScreens/floor.fbx
new file mode 100644
index 000000000..994adb151
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/floor.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f449331e586a13b84a0d15eecf4db343c184dfe11b2ca52c9f690a561660170b
+size 54864
diff --git a/hifi-content/alexia/LoadingScreens/floorGrid.png b/hifi-content/alexia/LoadingScreens/floorGrid.png
new file mode 100644
index 000000000..1800e2404
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/floorGrid.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2077d8d8b6d93734994e78aa9b47b112eed35eb6f8a6cede8043d1e9cb4b0678
+size 34330
diff --git a/hifi-content/alexia/LoadingScreens/go-to-button.fbx b/hifi-content/alexia/LoadingScreens/go-to-button.fbx
new file mode 100644
index 000000000..2a7454360
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/go-to-button.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c8aa403aa118f474c10e0e2893acb9069f209aaa67e8a677b3a728a4fe4ccf53
+size 27104
diff --git a/hifi-content/alexia/LoadingScreens/goTo_button.png b/hifi-content/alexia/LoadingScreens/goTo_button.png
new file mode 100644
index 000000000..1931f5c6d
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/goTo_button.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d5411f128f0f3a1172d808547221b6368810014ad18b621cb5dd68c580fe816d
+size 5217
diff --git a/hifi-content/alexia/LoadingScreens/help_label.png b/hifi-content/alexia/LoadingScreens/help_label.png
new file mode 100644
index 000000000..371f70075
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/help_label.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb3cbc45b9833818d867a7330b4cff15661a011574bc222688a735b4f904c2ea
+size 1021
diff --git a/hifi-content/alexia/LoadingScreens/loading-screen-redirect.js b/hifi-content/alexia/LoadingScreens/loading-screen-redirect.js
new file mode 100644
index 000000000..c583b72f7
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/loading-screen-redirect.js
@@ -0,0 +1,407 @@
+/* global Script, Controller, Overlays, Quat, MyAvatar, Entities, print, Vec3, AddressManager, Render, Window, Toolbars,
+ Camera, HMD*/
+var MAX_X_SIZE = 3;
+var isVisible = true;
+var defaultOffset = 1.5;
+var hifi = "HighFidelity";
+var VOLUME = 0.4;
+var tune = SoundCache.getSound("http://hifi-content.s3.amazonaws.com/alexia/LSDoadingScreens/crystals_and_voices.wav");
+var sample = null;
+var MAX_LEFT_MARGIN = 1.9;
+var INNER_CIRCLE_WIDTH = 4.7;
+var DESTINATION_CARD_Y_OFFSET = 2;
+var DEFAULT_TONE_MAPPING_EXPOSURE = 0.0;
+var MIN_TONE_MAPPING_EXPOSURE = -5.0;
+var SYSTEM_TOOL_BAR = "com.highfidelity.interface.toolbar.system";
+var MAX_REDIRECT_TIME = 3 * 1000; // time in ms
+var MAX_ELAPSED_TIME = 5 * 1000; // time in ms
+function isInFirstPerson() {
+ return (Camera.mode === "first person");
+}
+
+var toolbar = Toolbars.getToolbar(SYSTEM_TOOL_BAR);
+var renderViewTask = Render.getConfig("RenderMainView");
+
+var domainHostnameMap = {
+ eschatology: "Seth Alves",
+ blue: "Sam Cake",
+ thepines: "Roxie",
+ "dev-mobile": "HighFidelity",
+ "dev-mobile-master": "HighFidelity",
+ portalarium: "Bijou",
+ porange: "Caitlyn",
+ rust: hifi,
+ start: hifi,
+ miimusic: "Madysyn",
+ codex: "FluffyJenkins",
+ zaru: hifi,
+ help: hifi,
+ therealoasis: "Caitlyn",
+ vrmacy: "budgiebeats",
+ niccage: "OneLisa",
+ impromedia: "GeorgeDeac",
+ nest: "budgiebeats",
+ gabworld: "LeeGab",
+ vrtv: "GeoorgeDeac",
+ burrow: "budgiebeats",
+ leftcoast: "Lurks",
+ lazybones: "LazybonesJurassic",
+ skyriver: "Chamberlain",
+ chapel: "www.livin.today",
+ "hi-studio": hifi,
+ luskan: "jyoum",
+ arcadiabay: "Aitolda",
+ chime: hifi,
+ standupnow: "diva",
+ avreng: "GeorgeDeac",
+ atlas: "rocklin_guy",
+ steamedhams: "Alan_",
+ banff: hifi,
+ operahouse: hifi,
+ bankofhighfidelity: hifi,
+ tutorial: "WadeWatts",
+ nightsky: hifi,
+ garageband: hifi,
+ painting: hifi,
+ windwaker: "bijou",
+ fumbleland: "Lpasca",
+ monolith: "Nik",
+ bijou: "bijou",
+ morty: "bijou",
+ "hifiqa-rc-bots": hifi,
+ fightnight: hifi,
+ spirited: "Alan_",
+ "desert-oasis": "ryan",
+ springfield: "Alan_",
+ hall: "ryan",
+ "national-park": "ryan",
+ vector: "Nik",
+ bodymart: hifi,
+ "medievil-village": "ryan",
+ "villains-lair": "ryan",
+ "island-breeze": "ryan",
+ "classy-apartment": "ryan",
+ voxel: "FlameSoulis",
+ virtuoso: "noahglaseruc",
+ avatarisland: hifi,
+ ioab: "rocklin_guy",
+ tamait: "rocklin_guy",
+ konshulabs: "Konshu",
+ epic: "philip",
+ poopsburg: "Caitlyn",
+ east: hifi,
+ glitched: hifi,
+ calartsim: hifi,
+ calarts: hifi,
+ livin: "rocklin_guy",
+ fightclub: "philip",
+ thefactory: "whyroc",
+ wothal: "Alezia.Kurdis",
+ udacity: hifi,
+ json: "WadeWatts",
+ anonymous: "darlingnotin",
+ maker: hifi,
+ elisa: "elisahifi",
+ volxeltopia: hifi,
+ cupcake: hifi,
+ minigolf: hifi,
+ workshop: hifi,
+ vankh: "Alezia.Kurdis",
+ "the-crash-site": "WolfGang",
+ jjv360: "jjv3600",
+ distributed2: hifi,
+ anny: hifi,
+ university: hifi,
+ ludus: hifi,
+ stepford: "darlingnotin",
+ thespot: hifi
+};
+
+// Tips have a character limit of 69
+var userTips = [
+ "Tip: Visit TheSpot to explore featured domains!",
+ "Tip: Visit our docs online to learn more about scripting!",
+ "Tip: Don't want others invading your personal space? Turn on the Bubble!",
+ "Tip: Want to make a friend? Shake hands with them in VR!",
+ "Tip: Enjoy live music? Visit Rust to dance your heart out!",
+ "Tip: Have you visited BodyMart to check out the new avatars recently?",
+ "Tip: Use the Create app to import models and create custom entities.",
+ "Tip: We're open source! Feel free to contribute to our code on GitHub!",
+ "Tip: What emotes have you used in the Emote app?",
+ "Tip: Take and share your snapshots with the everyone using the Snap app.",
+ "Tip: Did you know you can show websites in-world by creating a web entity?",
+ "Tip: Find out more information about domains by visiting our website!",
+ "Tip: Did you know you can get cool new apps from the Marketplace?",
+ "Tip: Print your snapshots from the Snap app to share with others!",
+ "Tip: Log in to make friends, visit new domains, and save avatars!"
+];
+
+var loadingSphereID = Overlays.addOverlay("model", {
+ name: "Loading-Sphere",
+ position: Vec3.sum(Vec3.sum(MyAvatar.position, {x: 0.0, y: -1.0, z: 0.0}), Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.95, z: 0})),
+ orientation: Quat.multiply(Quat.fromVec3Degrees({x: 0, y: 180, z: 0}), MyAvatar.orientation),
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/black-sphere.fbx",
+ dimensions: { x: 20, y: 20, z: 20 },
+ alpha: 1,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false
+});
+
+
+var domainName = "";
+var domainNameTextID = Overlays.addOverlay("text3d", {
+ name: "Loading-Destination-Card-Text",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.8, z: 5.45 },
+ text: domainName,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.42,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var hostName = "";
+
+var domainHostname = Overlays.addOverlay("text3d", {
+ name: "Loading-Hostname",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.32, z: 5.45 },
+ text: hostName,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.13,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var toolTip = "";
+
+var domainToolTip = Overlays.addOverlay("text3d", {
+ name: "Loading-Tooltip",
+ localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 1.6, z: 5.45 },
+ text: toolTip,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.13,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var loadingToTheSpotID = Overlays.addOverlay("image3d", {
+ name: "Loading-Destination-Card-Text",
+ localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 1.8, z: 5.45 },
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/goTo_button.png",
+ alpha: 1,
+ dimensions: { x: 1.2, y: 0.6},
+ visible: isVisible,
+ emissive: true,
+ ignoreRayIntersection: false,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }),
+ parentID: loadingSphereID
+});
+
+var loadingBarPlacard = Overlays.addOverlay("image3d", {
+ name: "Loading-Bar-Placard",
+ localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.45 },
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_placard.png",
+ alpha: 1,
+ dimensions: { x: 4, y: 2.8},
+ visible: isVisible,
+ emissive: true,
+ ignoreRayIntersection: false,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }),
+ parentID: loadingSphereID
+});
+
+var loadingBarProgress = Overlays.addOverlay("image3d", {
+ name: "Loading-Bar-Progress",
+ localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.45 },
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_progress.png",
+ alpha: 1,
+ dimensions: { x: 4, y: 2.8},
+ visible: isVisible,
+ emissive: true,
+ ignoreRayIntersection: false,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }),
+ parentID: loadingSphereID
+});
+
+var TARGET_UPDATE_HZ = 60; // 50hz good enough, but we're using update
+var BASIC_TIMER_INTERVAL_MS = 1000 / TARGET_UPDATE_HZ;
+var timerset = false;
+var lastInterval = Date.now();
+var timeElapsed = 0;
+
+
+function getLeftMargin(overlayID, text) {
+ var textSize = Overlays.textSize(overlayID, text);
+ var sizeDifference = ((INNER_CIRCLE_WIDTH - textSize.width) / 2);
+ var leftMargin = -(MAX_LEFT_MARGIN - sizeDifference);
+ return leftMargin;
+}
+
+var REDIRECT = "hifi://BookClub/loading";
+
+function domainChanged(domain) {
+ var name = AddressManager.placename;
+ domainName = name.charAt(0).toUpperCase() + name.slice(1);
+ var domainNameLeftMargin = getLeftMargin(domainNameTextID, domainName);
+ var textProperties = {
+ text: domainName,
+ leftMargin: domainNameLeftMargin
+ };
+
+ var BY = "by ";
+ var host = domainHostnameMap[location.placename];
+ var text = BY + host;
+ var hostLeftMargin = getLeftMargin(domainHostname, text);
+ var hostnameProperties = {
+ text: BY + host,
+ leftMargin: hostLeftMargin
+ };
+
+ var randomIndex = Math.floor(Math.random() * userTips.length);
+ var tip = userTips[randomIndex];
+ var tipLeftMargin = getLeftMargin(domainToolTip, tip);
+ var toolTipProperties = {
+ text: tip,
+ leftMargin: tipLeftMargin
+ };
+
+ var myAvatarDirection = Vec3.UNIT_NEG_Z;
+ var cardDirectionPrime = {x: 0 , y: 0, z: 5.5};
+ var rotationDelta = Quat.rotationBetween(cardDirectionPrime, myAvatarDirection);
+ var overlayRotation = Quat.multiply(MyAvatar.orientation, rotationDelta);
+ var mainSphereProperties = {
+ orientation: overlayRotation
+ };
+
+ Overlays.editOverlay(loadingSphereID, mainSphereProperties);
+ Overlays.editOverlay(domainNameTextID, textProperties);
+ Overlays.editOverlay(domainHostname, hostnameProperties);
+ Overlays.editOverlay(domainToolTip, toolTipProperties);
+
+
+}
+
+var THE_PLACE = "hifi://TheSpot";
+function clickedOnOverlay(overlayID, event) {
+ print(overlayID + " other: " + loadingToTheSpotID);
+ print(event.button === "Primary");
+ if (loadingToTheSpotID === overlayID) {
+ if (timerset) {
+ timeElapsed = 0;
+ }
+ AddressManager.handleLookupString(THE_PLACE);
+ }
+}
+var previousCameraMode = Camera.mode;
+var previousPhysicsStatus = 99999;
+
+function updateOverlays(physicsEnabled) {
+ var properties = {
+ visible: !physicsEnabled
+ };
+
+ var myAvatarDirection = Vec3.UNIT_NEG_Z;
+ var cardDirectionPrime = {x: 0 , y: 0, z: 5.5};
+ var rotationDelta = Quat.rotationBetween(cardDirectionPrime, myAvatarDirection);
+ var overlayRotation = Quat.multiply(MyAvatar.orientation, rotationDelta);
+ var mainSphereProperties = {
+ visible: !physicsEnabled,
+ orientation: overlayRotation
+ };
+
+ if (!HMD.active) {
+ toolbar.writeProperty("visible", physicsEnabled);
+ MyAvatar.headOrientation = Quat.multiply(Quat.cancelOutRollAndPitch(MyAvatar.headOrientation), Quat.fromPitchYawRollDegrees(2.5, 0, 0));
+ }
+
+ renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = physicsEnabled;
+ renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = physicsEnabled;
+ renderViewTask.getConfig("LightingModel")["enablePointLight"] = physicsEnabled;
+ Overlays.editOverlay(loadingSphereID, mainSphereProperties);
+ Overlays.editOverlay(loadingToTheSpotID, properties);
+ Overlays.editOverlay(domainNameTextID, properties);
+ Overlays.editOverlay(domainHostname, properties);
+ Overlays.editOverlay(domainToolTip, properties);
+ Overlays.editOverlay(loadingBarPlacard, properties);
+ Overlays.editOverlay(loadingBarProgress, properties);
+}
+
+function update() {
+ var physicsEnabled = Window.isPhysicsEnabled();
+ var thisInterval = Date.now();
+ var deltaTime = (thisInterval - lastInterval);
+ lastInterval = thisInterval;
+ if (physicsEnabled !== previousPhysicsStatus) {
+ if (!physicsEnabled && !timerset) {
+ updateOverlays(physicsEnabled);
+ sample = Audio.playSound(tune, {
+ localOnly: true,
+ position: MyAvatar.headPosition,
+ volume: VOLUME
+ });
+ timeElapsed = 0;
+ timerset = true;
+ }
+ previousPhysicsStatus = physicsEnabled;
+ }
+
+ if (timerset) {
+ timeElapsed += deltaTime;
+
+ // Redirect the user if they have login, permissions, connection issues, etc.
+ if (timeElapsed >= MAX_REDIRECT_TIME) {
+ updateOverlays(true);
+ sample.stop();
+ sample = null;
+ timerset = false;
+ AddressManager.handleLookupString(REDIRECT);
+ }
+
+ }
+
+ Overlays.editOverlay(loadingSphereID, {
+ position: Vec3.sum(Vec3.sum(MyAvatar.position, {x: 0.0, y: -1.7, z: 0.0}), Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.95, z: 0}))
+ });
+ Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS);
+}
+
+Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS);
+Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay);
+Window.domainChanged.connect(domainChanged);
+
+function cleanup() {
+ Overlays.deleteOverlay(loadingSphereID);
+ Overlays.deleteOverlay(loadingToTheSpotID);
+ Overlays.deleteOverlay(domainNameTextID);
+ Overlays.deleteOverlay(domainHostname);
+ Overlays.deleteOverlay(domainToolTip);
+ Overlays.deleteOverlay(loadingBarPlacard);
+ Overlays.deleteOverlay(loadingBarProgress);
+ try {
+ } catch (e) {
+ }
+}
+
+Script.scriptEnding.connect(cleanup);
\ No newline at end of file
diff --git a/hifi-content/alexia/LoadingScreens/loading-screen-v5.js b/hifi-content/alexia/LoadingScreens/loading-screen-v5.js
new file mode 100644
index 000000000..16a4a717f
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/loading-screen-v5.js
@@ -0,0 +1,407 @@
+/* global Script, Controller, Overlays, Quat, MyAvatar, Entities, print, Vec3, AddressManager, Render, Window, Toolbars,
+ Camera, HMD*/
+var MAX_X_SIZE = 3;
+var isVisible = true;
+var defaultOffset = 1.5;
+var hifi = "HighFidelity";
+var VOLUME = 0.4;
+var tune = SoundCache.getSound("http://hifi-content.s3.amazonaws.com/dante/song/crystals_and_voices_2.wav");
+var sample = null;
+var MAX_LEFT_MARGIN = 1.9;
+var INNER_CIRCLE_WIDTH = 4.7;
+var DESTINATION_CARD_Y_OFFSET = 2;
+var DEFAULT_TONE_MAPPING_EXPOSURE = 0.0;
+var MIN_TONE_MAPPING_EXPOSURE = -5.0;
+var SYSTEM_TOOL_BAR = "com.highfidelity.interface.toolbar.system";
+var MAX_ELAPSED_TIME = 15 * 1000; // time in ms
+function isInFirstPerson() {
+ return (Camera.mode === "first person");
+}
+
+var toolbar = Toolbars.getToolbar(SYSTEM_TOOL_BAR);
+var renderViewTask = Render.getConfig("RenderMainView");
+
+var domainHostnameMap = {
+ eschatology: "Seth Alves",
+ blue: "Sam Cake",
+ thepines: "Roxie",
+ "dev-mobile": "HighFidelity",
+ "dev-mobile-master": "HighFidelity",
+ portalarium: "Bijou",
+ porange: "Caitlyn",
+ rust: hifi,
+ start: hifi,
+ miimusic: "Madysyn",
+ codex: "FluffyJenkins",
+ zaru: hifi,
+ help: hifi,
+ therealoasis: "Caitlyn",
+ vrmacy: "budgiebeats",
+ niccage: "OneLisa",
+ impromedia: "GeorgeDeac",
+ nest: "budgiebeats",
+ gabworld: "LeeGab",
+ vrtv: "GeoorgeDeac",
+ burrow: "budgiebeats",
+ leftcoast: "Lurks",
+ lazybones: "LazybonesJurassic",
+ skyriver: "Chamberlain",
+ chapel: "www.livin.today",
+ "hi-studio": hifi,
+ luskan: "jyoum",
+ arcadiabay: "Aitolda",
+ chime: hifi,
+ standupnow: "diva",
+ avreng: "GeorgeDeac",
+ atlas: "rocklin_guy",
+ steamedhams: "Alan_",
+ banff: hifi,
+ operahouse: hifi,
+ bankofhighfidelity: hifi,
+ tutorial: "WadeWatts",
+ nightsky: hifi,
+ garageband: hifi,
+ painting: hifi,
+ windwaker: "bijou",
+ fumbleland: "Lpasca",
+ monolith: "Nik",
+ bijou: "bijou",
+ morty: "bijou",
+ "hifiqa-rc-bots": hifi,
+ fightnight: hifi,
+ spirited: "Alan_",
+ "desert-oasis": "ryan",
+ springfield: "Alan_",
+ hall: "ryan",
+ "national-park": "ryan",
+ vector: "Nik",
+ bodymart: hifi,
+ "medievil-village": "ryan",
+ "villains-lair": "ryan",
+ "island-breeze": "ryan",
+ "classy-apartment": "ryan",
+ voxel: "FlameSoulis",
+ virtuoso: "noahglaseruc",
+ avatarisland: hifi,
+ ioab: "rocklin_guy",
+ tamait: "rocklin_guy",
+ konshulabs: "Konshu",
+ epic: "philip",
+ poopsburg: "Caitlyn",
+ east: hifi,
+ glitched: hifi,
+ calartsim: hifi,
+ calarts: hifi,
+ livin: "rocklin_guy",
+ fightclub: "philip",
+ thefactory: "whyroc",
+ wothal: "Alezia.Kurdis",
+ udacity: hifi,
+ json: "WadeWatts",
+ anonymous: "darlingnotin",
+ maker: hifi,
+ elisa: "elisahifi",
+ volxeltopia: hifi,
+ cupcake: hifi,
+ minigolf: hifi,
+ workshop: hifi,
+ vankh: "Alezia.Kurdis",
+ "the-crash-site": "WolfGang",
+ jjv360: "jjv3600",
+ distributed2: hifi,
+ anny: hifi,
+ university: hifi,
+ ludus: hifi,
+ stepford: "darlingnotin",
+ thespot: hifi
+};
+
+// Tips have a character limit of 69
+var userTips = [
+ "Tip: Visit TheSpot to explore featured domains!",
+ "Tip: Visit our docs online to learn more about scripting!",
+ "Tip: Don't want others invading your personal space? Turn on the Bubble!",
+ "Tip: Want to make a friend? Shake hands with them in VR!",
+ "Tip: Enjoy live music? Visit Rust to dance your heart out!",
+ "Tip: Have you visited BodyMart to check out the new avatars recently?",
+ "Tip: Use the Create app to import models and create custom entities.",
+ "Tip: We're open source! Feel free to contribute to our code on GitHub!",
+ "Tip: What emotes have you used in the Emote app?",
+ "Tip: Take and share your snapshots with the everyone using the Snap app.",
+ "Tip: Did you know you can show websites in-world by creating a web entity?",
+ "Tip: Find out more information about domains by visiting our website!",
+ "Tip: Did you know you can get cool new apps from the Marketplace?",
+ "Tip: Print your snapshots from the Snap app to share with others!",
+ "Tip: Log in to make friends, visit new domains, and save avatars!"
+];
+
+var loadingSphereID = Overlays.addOverlay("model", {
+ name: "Loading-Sphere",
+ position: Vec3.sum(Vec3.sum(MyAvatar.position, {x: 0.0, y: -1.0, z: 0.0}), Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.95, z: 0})),
+ orientation: Quat.multiply(Quat.fromVec3Degrees({x: 0, y: 180, z: 0}), MyAvatar.orientation),
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/black-sphere_withoutStars.fbx",
+ dimensions: { x: 20, y: 20, z: 20 },
+ alpha: 1,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false
+});
+
+var spinnerID = Overlays.addOverlay("model", {
+ name: "Loading-spinner",
+ localPosition: { x: 0, y: DESTINATION_CARD_Y_OFFSET, z: 5.5 },
+ dimensions: { x: 5.7, y: 0.01, z: 5.7 },
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/ring-animated.fbx",
+ alpha: 1,
+ animationSettings: {
+ fps: 30,
+ loop: true,
+ running: true,
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/ring-animated.fbx"
+ },
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: -90, y: 0, z: 180 }),
+ parentID: loadingSphereID
+});
+
+var mainLoadingText = "L O A D I N G . . .";
+var loadTextID = Overlays.addOverlay("text3d", {
+ name: "Loading-Destination-Card-Text",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.2, z: 5.45 },
+ text: mainLoadingText,
+ dimensions: { x: 1.0, y: 2.0, z: 0.01 },
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.13 ,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var domainName = "";
+var domainNameTextID = Overlays.addOverlay("text3d", {
+ name: "Loading-Destination-Card-Text",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.1, z: 5.45 },
+ text: domainName,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.45,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var hostName = "";
+
+var domainHostname = Overlays.addOverlay("text3d", {
+ name: "Loading-Hostname",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET - 0.4, z: 5.45 },
+ text: hostName,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.125,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var toolTip = "";
+
+var domainToolTip = Overlays.addOverlay("text3d", {
+ name: "Loading-Tooltip",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET - 3, z: 5.45 },
+ text: toolTip,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.2,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var loadingToTheSpotID = Overlays.addOverlay("model", {
+ name: "Loading-Destination-Card-Text",
+ localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.85, z: 5.45 },
+ url: "https://hifi-content.s3.amazonaws.com/dante/entities/go-to-button.fbx",
+ dimensions: { x: 1.8, y: 0.3, z: 0.2 },
+ alpha: 1,
+ visible: isVisible,
+ emissive: true,
+ ignoreRayIntersection: false,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }),
+ parentID: loadingSphereID
+});
+
+var TARGET_UPDATE_HZ = 60; // 50hz good enough, but we're using update
+var BASIC_TIMER_INTERVAL_MS = 1000 / TARGET_UPDATE_HZ;
+var timerset = false;
+var lastInterval = Date.now();
+var timeElapsed = 0;
+
+
+function getLeftMargin(overlayID, text) {
+ var textSize = Overlays.textSize(overlayID, text);
+ var sizeDifference = ((INNER_CIRCLE_WIDTH - textSize.width) / 2);
+ var leftMargin = -(MAX_LEFT_MARGIN - sizeDifference);
+ return leftMargin;
+}
+
+
+function domainChanged(domain) {
+ var name = AddressManager.placename;
+ domainName = name.charAt(0).toUpperCase() + name.slice(1);
+ var domainNameLeftMargin = getLeftMargin(domainNameTextID, domainName);
+ var textProperties = {
+ text: domainName,
+ leftMargin: domainNameLeftMargin
+ };
+
+
+ var BY = "by ";
+ var host = domainHostnameMap[location.placename];
+ var text = BY + host;
+ var hostLeftMargin = getLeftMargin(domainHostname, text);
+ var hostnameProperties = {
+ text: BY + host,
+ leftMargin: hostLeftMargin
+ };
+
+ var randomIndex = Math.floor(Math.random() * userTips.length);
+ var tip = userTips[randomIndex];
+ var tipLeftMargin = getLeftMargin(domainToolTip, tip);
+ var toolTipProperties = {
+ text: tip,
+ leftMargin: tipLeftMargin
+ };
+
+ var myAvatarDirection = Vec3.UNIT_NEG_Z;
+ var cardDirectionPrime = {x: 0 , y: 0, z: 5.5};
+ var rotationDelta = Quat.rotationBetween(cardDirectionPrime, myAvatarDirection);
+ var overlayRotation = Quat.multiply(MyAvatar.orientation, rotationDelta);
+ var mainSphereProperties = {
+ orientation: overlayRotation
+ };
+
+ Overlays.editOverlay(loadingSphereID, mainSphereProperties);
+ Overlays.editOverlay(domainNameTextID, textProperties);
+ Overlays.editOverlay(domainHostname, hostnameProperties);
+ Overlays.editOverlay(domainToolTip, toolTipProperties);
+}
+
+var THE_PLACE = "hifi://TheSpot";
+function clickedOnOverlay(overlayID, event) {
+ print(overlayID + " other: " + loadingToTheSpotID);
+ print(event.button === "Primary");
+ if (loadingToTheSpotID === overlayID) {
+ if (timerset) {
+ timeElapsed = 0;
+ }
+ AddressManager.handleLookupString(THE_PLACE);
+ }
+}
+var previousCameraMode = Camera.mode;
+var previousPhysicsStatus = 99999;
+
+function updateOverlays(physicsEnabled) {
+ var properties = {
+ visible: !physicsEnabled
+ };
+
+ var myAvatarDirection = Vec3.UNIT_NEG_Z;
+ var cardDirectionPrime = {x: 0 , y: 0, z: 5.5};
+ var rotationDelta = Quat.rotationBetween(cardDirectionPrime, myAvatarDirection);
+ var overlayRotation = Quat.multiply(MyAvatar.orientation, rotationDelta);
+ var mainSphereProperties = {
+ visible: !physicsEnabled,
+ orientation: overlayRotation
+ };
+
+ if (!HMD.active) {
+ toolbar.writeProperty("visible", physicsEnabled);
+ MyAvatar.headOrientation = Quat.multiply(Quat.cancelOutRollAndPitch(MyAvatar.headOrientation), Quat.fromPitchYawRollDegrees(2.5, 0, 0));
+ }
+
+ renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = physicsEnabled;
+ renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = physicsEnabled;
+ renderViewTask.getConfig("LightingModel")["enablePointLight"] = physicsEnabled;
+ Overlays.editOverlay(loadingSphereID, mainSphereProperties);
+ Overlays.editOverlay(loadingToTheSpotID, properties);
+ Overlays.editOverlay(spinnerID, properties);
+ Overlays.editOverlay(domainNameTextID, properties);
+ Overlays.editOverlay(loadTextID, properties);
+ Overlays.editOverlay(domainHostname, properties);
+ Overlays.editOverlay(domainToolTip, properties);
+}
+
+function update() {
+ var physicsEnabled = Window.isPhysicsEnabled();
+ var thisInterval = Date.now();
+ var deltaTime = (thisInterval - lastInterval);
+ lastInterval = thisInterval;
+ if (physicsEnabled !== previousPhysicsStatus) {
+ if (!physicsEnabled && !timerset) {
+ updateOverlays(physicsEnabled);
+ sample = Audio.playSound(tune, {
+ localOnly: true,
+ position: MyAvatar.headPosition,
+ volume: VOLUME
+ });
+ timeElapsed = 0;
+ timerset = true;
+ }
+ previousPhysicsStatus = physicsEnabled;
+ }
+
+ if (timerset) {
+ timeElapsed += deltaTime;
+ if (timeElapsed >= MAX_ELAPSED_TIME) {
+ updateOverlays(true);
+ sample.stop();
+ sample = null;
+ timerset = false;
+ }
+
+ }
+
+ Overlays.editOverlay(loadingSphereID, {
+ position: Vec3.sum(Vec3.sum(MyAvatar.position, {x: 0.0, y: -1.7, z: 0.0}), Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.95, z: 0}))
+ });
+ Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS);
+}
+
+Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS);
+Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay);
+Window.domainChanged.connect(domainChanged);
+
+function cleanup() {
+ Overlays.deleteOverlay(loadingSphereID);
+ Overlays.deleteOverlay(spinnerID);
+ Overlays.deleteOverlay(loadingToTheSpotID);
+ Overlays.deleteOverlay(domainNameTextID);
+ Overlays.deleteOverlay(loadTextID);
+ Overlays.deleteOverlay(domainHostname);
+ Overlays.deleteOverlay(domainToolTip);
+ try {
+ } catch (e) {
+ }
+}
+
+Script.scriptEnding.connect(cleanup);
\ No newline at end of file
diff --git a/hifi-content/alexia/LoadingScreens/loading-screen-v6.js b/hifi-content/alexia/LoadingScreens/loading-screen-v6.js
new file mode 100644
index 000000000..4a523309d
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/loading-screen-v6.js
@@ -0,0 +1,351 @@
+/* global Script, Controller, Overlays, Quat, MyAvatar, Entities, print, Vec3, AddressManager, Render, Window, Toolbars,
+ Camera, HMD*/
+var MAX_X_SIZE = 3;
+var defaultOffset = 1.5;
+var hifi = "HighFidelity";
+var VOLUME = 0.4;
+var MAX_LEFT_MARGIN = 1.9;
+var INNER_CIRCLE_WIDTH = 4.7;
+var tune = SoundCache.getSound("http://hifi-content.s3.amazonaws.com/dante/song/crystals_and_voices_2.wav");
+var sample = null;
+var domainHostnameMap = {
+ eschatology: "Seth Alves",
+ blue: "Sam Cake",
+ thepines: "Roxie",
+ "dev-mobile": "HighFidelity",
+ "dev-mobile-master": "HighFidelity",
+ portalarium: "Bijou",
+ porange: "Caitlyn",
+ rust: hifi,
+ start: hifi,
+ miimusic: "Madysyn",
+ codex: "FluffyJenkins",
+ zaru: hifi,
+ help: hifi,
+ therealoasis: "Caitlyn",
+ vrmacy: "budgiebeats",
+ niccage: "OneLisa",
+ impromedia: "GeorgeDeac",
+ nest: "budgiebeats",
+ gabworld: "LeeGab",
+ vrtv: "GeoorgeDeac",
+ burrow: "budgiebeats",
+ leftcoast: "Lurks",
+ lazybones: "LazybonesJurassic",
+ skyriver: "Chamberlain",
+ chapel: "www.livin.today",
+ "hi-studio": hifi,
+ luskan: "jyoum",
+ arcadiabay: "Aitolda",
+ chime: hifi,
+ standupnow: "diva",
+ avreng: "GeorgeDeac",
+ atlas: "rocklin_guy",
+ steamedhams: "Alan_",
+ banff: hifi,
+ operahouse: hifi,
+ bankofhighfidelity: hifi,
+ tutorial: "WadeWatts",
+ nightsky: hifi,
+ garageband: hifi,
+ painting: hifi,
+ windwaker: "bijou",
+ fumbleland: "Lpasca",
+ monolith: "Nik",
+ bijou: "bijou",
+ morty: "bijou",
+ "hifiqa-rc-bots": hifi,
+ fightnight: hifi,
+ spirited: "Alan_",
+ "desert-oasis": "ryan",
+ springfield: "Alan_",
+ hall: "ryan",
+ "national-park": "ryan",
+ vector: "Nik",
+ bodymart: hifi,
+ "medievil-village": "ryan",
+ "villains-lair": "ryan",
+ "island-breeze": "ryan",
+ "classy-apartment": "ryan",
+ voxel: "FlameSoulis",
+ virtuoso: "noahglaseruc",
+ avatarisland: hifi,
+ ioab: "rocklin_guy",
+ tamait: "rocklin_guy",
+ konshulabs: "Konshu",
+ epic: "philip",
+ poopsburg: "Caitlyn",
+ east: hifi,
+ glitched: hifi,
+ calartsim: hifi,
+ calarts: hifi,
+ livin: "rocklin_guy",
+ fightclub: "philip",
+ thefactory: "whyroc",
+ wothal: "Alezia.Kurdis",
+ udacity: hifi,
+ json: "WadeWatts",
+ anonymous: "darlingnotin",
+ maker: hifi,
+ elisa: "elisahifi",
+ volxeltopia: hifi,
+ cupcake: hifi,
+ minigolf: hifi,
+ workshop: hifi,
+ vankh: "Alezia.Kurdis",
+ "the-crash-site": "WolfGang",
+ jjv360: "jjv3600",
+ distributed2: hifi,
+ anny: hifi,
+ university: hifi,
+ ludus: hifi,
+ stepford: "darlingnotin",
+ thespot: hifi
+};
+var DESTINATION_CARD_Y_OFFSET = 2;
+var DEFAULT_TONE_MAPPING_EXPOSURE = 0.0;
+var MIN_TONE_MAPPING_EXPOSURE = -5.0;
+var SYSTEM_TOOL_BAR = "com.highfidelity.interface.toolbar.system";
+var MAX_ELAPSED_TIME = 15 * 1000; // time in ms
+function isInFirstPerson() {
+ return (Camera.mode === "first person");
+}
+
+var toolbar = Toolbars.getToolbar(SYSTEM_TOOL_BAR);
+var renderViewTask = Render.getConfig("RenderMainView");
+var loadingSphereID = Overlays.addOverlay("model", {
+ name: "Loading-Sphere",
+ position: Vec3.sum(Vec3.sum(MyAvatar.position, {x: 0.0, y: -1.0, z: 0.0}), Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.95, z: 0})),
+ orientation: Quat.multiply(Quat.fromVec3Degrees({x: 0, y: 180, z: 0}), MyAvatar.orientation),
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/black-sphere_withoutStars.fbx",
+ dimensions: { x: 12.408, y: 15.731, z: 12.408 },
+ alpha: 1,
+ visible: false,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false
+});
+
+var spinnerID = Overlays.addOverlay("model", {
+ name: "Loading-spinner",
+ localPosition: { x: 0, y: DESTINATION_CARD_Y_OFFSET, z: 5.5 },
+ dimensions: { x: 5.7, y: 0.01, z: 5.7 },
+ url: "http://hifi-content.s3.amazonaws.com/dante/entities/ring-w-glow.fbx",
+ alpha: 1,
+ visible: false,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: -90, y: 0, z: 180 }),
+ parentID: loadingSphereID
+});
+
+var mainLoadingText = "L O A D I N G . . .";
+var loadTextID = Overlays.addOverlay("text3d", {
+ name: "Loading-Destination-Card-Text",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.2, z: 5.45 },
+ text: mainLoadingText,
+ dimensions: { x: 1.0, y: 2.0, z: 0.01 },
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.13 ,
+ visible: false,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var domainName = "";
+var domainNameTextID = Overlays.addOverlay("text3d", {
+ name: "Loading-Destination-Card-Text",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.1, z: 5.45 },
+ text: domainName,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.45,
+ visible: false,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var hostName = "";
+
+var domainHostname = Overlays.addOverlay("text3d", {
+ name: "Loading-Hostname",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET - 0.4, z: 5.45 },
+ leftMargin: 0.20,
+ text: hostName,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.125,
+ visible: false,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var loadingToTheSpotID = Overlays.addOverlay("model", {
+ name: "Loading-Destination-Card-Text",
+ localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.85, z: 5.45 },
+ url: "https://hifi-content.s3.amazonaws.com/dante/entities/go-to-button.fbx",
+ dimensions: { x: 1.8, y: 0.3, z: 0.2 },
+ alpha: 1,
+ visible: false,
+ emissive: true,
+ ignoreRayIntersection: false,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }),
+ parentID: loadingSphereID
+});
+
+var TARGET_UPDATE_HZ = 60; // 50hz good enough, but we're using update
+var BASIC_TIMER_INTERVAL_MS = 1000 / TARGET_UPDATE_HZ;
+var timerset = false;
+var lastInterval = Date.now();
+var timeElapsed = 0;
+
+
+function getLeftMargin(overlayID, text) {
+ var textSize = Overlays.textSize(overlayID, text);
+ var sizeDifference = ((INNER_CIRCLE_WIDTH - textSize.width) / 2);
+ var leftMargin = -(MAX_LEFT_MARGIN - sizeDifference);
+ return leftMargin;
+}
+
+function domainChanged(domain) {
+ var name = AddressManager.placename;
+ domainName = name.charAt(0).toUpperCase() + name.slice(1);
+ var domainLeftMargin = getLeftMargin(domainNameTextID, domainName);
+ var textProperties = {
+ text: domainName,
+ leftMargin: domainLeftMargin
+ };
+
+ var BY = "by ";
+ var host = domainHostnameMap[location.placename];
+ var text = BY + host;
+ var hostLeftMargin = getLeftMargin(domainHostname, text);
+ var hostnameProperties = {
+ text: BY + host,
+ leftMargin: hostLeftMargin
+ };
+
+ var myAvatarDirection = Vec3.UNIT_NEG_Z;
+ var cardDirectionPrime = {x: 0 , y: 0, z: 5.5};
+ var rotationDelta = Quat.rotationBetween(cardDirectionPrime, myAvatarDirection);
+ var overlayRotation = Quat.multiply(MyAvatar.orientation, rotationDelta);
+ var mainSphereProperties = {
+ orientation: overlayRotation
+ };
+
+ Overlays.editOverlay(loadingSphereID, mainSphereProperties);
+ Overlays.editOverlay(domainNameTextID, textProperties);
+ Overlays.editOverlay(domainHostname, hostnameProperties);
+}
+
+var THE_PLACE = "hifi://TheSpot";
+function clickedOnOverlay(overlayID, event) {
+ print(overlayID + " other: " + loadingToTheSpotID);
+ print(event.button === "Primary");
+ if (loadingToTheSpotID === overlayID) {
+ if (timerset) {
+ timeElapsed = 0;
+ }
+ AddressManager.handleLookupString(THE_PLACE);
+ }
+}
+var previousCameraMode = Camera.mode;
+var previousPhysicsStatus = 99999;
+
+function updateOverlays(physicsEnabled) {
+ var properties = {
+ visible: !physicsEnabled
+ };
+
+ var myAvatarDirection = Vec3.UNIT_NEG_Z;
+ var cardDirectionPrime = {x: 0 , y: 0, z: 5.5};
+ var rotationDelta = Quat.rotationBetween(cardDirectionPrime, myAvatarDirection);
+ var overlayRotation = Quat.multiply(MyAvatar.orientation, rotationDelta);
+ var mainSphereProperties = {
+ visible: !physicsEnabled,
+ orientation: overlayRotation
+ };
+
+ if (!HMD.active) {
+ toolbar.writeProperty("visible", physicsEnabled);
+ MyAvatar.headOrientation = Quat.multiply(Quat.cancelOutRollAndPitch(MyAvatar.headOrientation), Quat.fromPitchYawRollDegrees(2.5, 0, 0));
+ }
+
+ renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = physicsEnabled;
+ renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = physicsEnabled;
+ renderViewTask.getConfig("LightingModel")["enablePointLight"] = physicsEnabled;
+ Overlays.editOverlay(loadingSphereID, mainSphereProperties);
+ Overlays.editOverlay(loadingToTheSpotID, properties);
+ Overlays.editOverlay(spinnerID, properties);
+ Overlays.editOverlay(domainNameTextID, properties);
+ Overlays.editOverlay(loadTextID, properties);
+ Overlays.editOverlay(domainHostname, properties);
+}
+
+function update() {
+ var physicsEnabled = Window.isPhysicsEnabled();
+ var thisInterval = Date.now();
+ var deltaTime = (thisInterval - lastInterval);
+ lastInterval = thisInterval;
+ if (physicsEnabled !== previousPhysicsStatus) {
+ if (!physicsEnabled && !timerset) {
+ updateOverlays(physicsEnabled);
+ sample = Audio.playSound(tune, {
+ localOnly: true,
+ position: MyAvatar.headPosition,
+ volume: VOLUME
+ });
+ timeElapsed = 0;
+ timerset = true;
+ }
+ previousPhysicsStatus = physicsEnabled;
+ }
+
+ if (timerset) {
+ timeElapsed += deltaTime;
+ print(timeElapsed);
+ if (timeElapsed >= MAX_ELAPSED_TIME) {
+ updateOverlays(true);
+ sample.stop();
+ sample = null;
+ timerset = false;
+ }
+
+ }
+
+ Overlays.editOverlay(loadingSphereID, {
+ position: Vec3.sum(Vec3.sum(MyAvatar.position, {x: 0.0, y: -1.0, z: 0.0}), Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.95, z: 0}))
+ });
+ Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS);
+}
+
+Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS);
+Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay);
+Window.domainChanged.connect(domainChanged);
+
+function cleanup() {
+ Overlays.deleteOverlay(loadingSphereID);
+ Overlays.deleteOverlay(spinnerID);
+ Overlays.deleteOverlay(loadingToTheSpotID);
+ Overlays.deleteOverlay(domainNameTextID);
+ Overlays.deleteOverlay(loadTextID);
+ Overlays.deleteOverlay(domainHostname);
+ try {
+ } catch (e) {
+ }
+}
+
+Script.scriptEnding.connect(cleanup);
\ No newline at end of file
diff --git a/hifi-content/alexia/LoadingScreens/loading-screen-v7.js b/hifi-content/alexia/LoadingScreens/loading-screen-v7.js
new file mode 100644
index 000000000..9de9fc9cc
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/loading-screen-v7.js
@@ -0,0 +1,400 @@
+/* global Script, Controller, Overlays, Quat, MyAvatar, Entities, print, Vec3, AddressManager, Render, Window, Toolbars,
+ Camera, HMD*/
+var MAX_X_SIZE = 3;
+var isVisible = true;
+var defaultOffset = 1.5;
+var hifi = "HighFidelity";
+var VOLUME = 0.4;
+var tune = SoundCache.getSound("http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/crystals_and_voices.wav");
+var sample = null;
+var MAX_LEFT_MARGIN = 1.9;
+var INNER_CIRCLE_WIDTH = 4.7;
+var DESTINATION_CARD_Y_OFFSET = 2;
+var DEFAULT_TONE_MAPPING_EXPOSURE = 0.0;
+var MIN_TONE_MAPPING_EXPOSURE = -5.0;
+var SYSTEM_TOOL_BAR = "com.highfidelity.interface.toolbar.system";
+var MAX_ELAPSED_TIME = 5 * 1000; // time in ms
+function isInFirstPerson() {
+ return (Camera.mode === "first person");
+}
+
+var toolbar = Toolbars.getToolbar(SYSTEM_TOOL_BAR);
+var renderViewTask = Render.getConfig("RenderMainView");
+
+var domainHostnameMap = {
+ eschatology: "Seth Alves",
+ blue: "Sam Cake",
+ thepines: "Roxie",
+ "dev-mobile": "HighFidelity",
+ "dev-mobile-master": "HighFidelity",
+ portalarium: "Bijou",
+ porange: "Caitlyn",
+ rust: hifi,
+ start: hifi,
+ miimusic: "Madysyn",
+ codex: "FluffyJenkins",
+ zaru: hifi,
+ help: hifi,
+ therealoasis: "Caitlyn",
+ vrmacy: "budgiebeats",
+ niccage: "OneLisa",
+ impromedia: "GeorgeDeac",
+ nest: "budgiebeats",
+ gabworld: "LeeGab",
+ vrtv: "GeoorgeDeac",
+ burrow: "budgiebeats",
+ leftcoast: "Lurks",
+ lazybones: "LazybonesJurassic",
+ skyriver: "Chamberlain",
+ chapel: "www.livin.today",
+ "hi-studio": hifi,
+ luskan: "jyoum",
+ arcadiabay: "Aitolda",
+ chime: hifi,
+ standupnow: "diva",
+ avreng: "GeorgeDeac",
+ atlas: "rocklin_guy",
+ steamedhams: "Alan_",
+ banff: hifi,
+ operahouse: hifi,
+ bankofhighfidelity: hifi,
+ tutorial: "WadeWatts",
+ nightsky: hifi,
+ garageband: hifi,
+ painting: hifi,
+ windwaker: "bijou",
+ fumbleland: "Lpasca",
+ monolith: "Nik",
+ bijou: "bijou",
+ morty: "bijou",
+ "hifiqa-rc-bots": hifi,
+ fightnight: hifi,
+ spirited: "Alan_",
+ "desert-oasis": "ryan",
+ springfield: "Alan_",
+ hall: "ryan",
+ "national-park": "ryan",
+ vector: "Nik",
+ bodymart: hifi,
+ "medievil-village": "ryan",
+ "villains-lair": "ryan",
+ "island-breeze": "ryan",
+ "classy-apartment": "ryan",
+ voxel: "FlameSoulis",
+ virtuoso: "noahglaseruc",
+ avatarisland: hifi,
+ ioab: "rocklin_guy",
+ tamait: "rocklin_guy",
+ konshulabs: "Konshu",
+ epic: "philip",
+ poopsburg: "Caitlyn",
+ east: hifi,
+ glitched: hifi,
+ calartsim: hifi,
+ calarts: hifi,
+ livin: "rocklin_guy",
+ fightclub: "philip",
+ thefactory: "whyroc",
+ wothal: "Alezia.Kurdis",
+ udacity: hifi,
+ json: "WadeWatts",
+ anonymous: "darlingnotin",
+ maker: hifi,
+ elisa: "elisahifi",
+ volxeltopia: hifi,
+ cupcake: hifi,
+ minigolf: hifi,
+ workshop: hifi,
+ vankh: "Alezia.Kurdis",
+ "the-crash-site": "WolfGang",
+ jjv360: "jjv3600",
+ distributed2: hifi,
+ anny: hifi,
+ university: hifi,
+ ludus: hifi,
+ stepford: "darlingnotin",
+ thespot: hifi
+};
+
+// Tips have a character limit of 69
+var userTips = [
+ "Tip: Visit TheSpot to explore featured domains!",
+ "Tip: Visit our docs online to learn more about scripting!",
+ "Tip: Don't want others invading your personal space? Turn on the Bubble!",
+ "Tip: Want to make a friend? Shake hands with them in VR!",
+ "Tip: Enjoy live music? Visit Rust to dance your heart out!",
+ "Tip: Have you visited BodyMart to check out the new avatars recently?",
+ "Tip: Use the Create app to import models and create custom entities.",
+ "Tip: We're open source! Feel free to contribute to our code on GitHub!",
+ "Tip: What emotes have you used in the Emote app?",
+ "Tip: Take and share your snapshots with the everyone using the Snap app.",
+ "Tip: Did you know you can show websites in-world by creating a web entity?",
+ "Tip: Find out more information about domains by visiting our website!",
+ "Tip: Did you know you can get cool new apps from the Marketplace?",
+ "Tip: Print your snapshots from the Snap app to share with others!",
+ "Tip: Log in to make friends, visit new domains, and save avatars!"
+];
+
+var loadingSphereID = Overlays.addOverlay("model", {
+ name: "Loading-Sphere",
+ position: Vec3.sum(Vec3.sum(MyAvatar.position, {x: 0.0, y: -1.0, z: 0.0}), Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.95, z: 0})),
+ orientation: Quat.multiply(Quat.fromVec3Degrees({x: 0, y: 180, z: 0}), MyAvatar.orientation),
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/black-sphere.fbx",
+ dimensions: { x: 20, y: 20, z: 20 },
+ alpha: 1,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false
+});
+
+
+var domainName = "";
+var domainNameTextID = Overlays.addOverlay("text3d", {
+ name: "Loading-Destination-Card-Text",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.8, z: 5.45 },
+ text: domainName,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.42,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var hostName = "";
+
+var domainHostname = Overlays.addOverlay("text3d", {
+ name: "Loading-Hostname",
+ localPosition: { x: 0.0, y: DESTINATION_CARD_Y_OFFSET + 0.32, z: 5.45 },
+ text: hostName,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.13,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var toolTip = "";
+
+var domainToolTip = Overlays.addOverlay("text3d", {
+ name: "Loading-Tooltip",
+ localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 1.6, z: 5.45 },
+ text: toolTip,
+ textAlpha: 1,
+ backgroundAlpha: 0,
+ lineHeight: 0.13,
+ visible: isVisible,
+ ignoreRayIntersection: true,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ parentID: loadingSphereID
+});
+
+var loadingToTheSpotID = Overlays.addOverlay("image3d", {
+ name: "Loading-Destination-Card-Text",
+ localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 1.8, z: 5.45 },
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/goTo_button.png",
+ alpha: 1,
+ dimensions: { x: 1.2, y: 0.6},
+ visible: isVisible,
+ emissive: true,
+ ignoreRayIntersection: false,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }),
+ parentID: loadingSphereID
+});
+
+var loadingBarPlacard = Overlays.addOverlay("image3d", {
+ name: "Loading-Bar-Placard",
+ localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.45 },
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_placard.png",
+ alpha: 1,
+ dimensions: { x: 4, y: 2.8},
+ visible: isVisible,
+ emissive: true,
+ ignoreRayIntersection: false,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }),
+ parentID: loadingSphereID
+});
+
+var loadingBarProgress = Overlays.addOverlay("image3d", {
+ name: "Loading-Bar-Progress",
+ localPosition: { x: 0.0 , y: DESTINATION_CARD_Y_OFFSET - 0.99, z: 5.45 },
+ url: "http://hifi-content.s3.amazonaws.com/alexia/LoadingScreens/loadingBar_progress.png",
+ alpha: 1,
+ dimensions: { x: 4, y: 2.8},
+ visible: isVisible,
+ emissive: true,
+ ignoreRayIntersection: false,
+ drawInFront: true,
+ grabbable: false,
+ localOrientation: Quat.fromVec3Degrees({ x: 0.0, y: 180.0, z: 0.0 }),
+ parentID: loadingSphereID
+});
+
+var TARGET_UPDATE_HZ = 60; // 50hz good enough, but we're using update
+var BASIC_TIMER_INTERVAL_MS = 1000 / TARGET_UPDATE_HZ;
+var timerset = false;
+var lastInterval = Date.now();
+var timeElapsed = 0;
+
+
+function getLeftMargin(overlayID, text) {
+ var textSize = Overlays.textSize(overlayID, text);
+ var sizeDifference = ((INNER_CIRCLE_WIDTH - textSize.width) / 2);
+ var leftMargin = -(MAX_LEFT_MARGIN - sizeDifference);
+ return leftMargin;
+}
+
+
+function domainChanged(domain) {
+ var name = AddressManager.placename;
+ domainName = name.charAt(0).toUpperCase() + name.slice(1);
+ var domainNameLeftMargin = getLeftMargin(domainNameTextID, domainName);
+ var textProperties = {
+ text: domainName,
+ leftMargin: domainNameLeftMargin
+ };
+
+ var BY = "by ";
+ var host = domainHostnameMap[location.placename];
+ var text = BY + host;
+ var hostLeftMargin = getLeftMargin(domainHostname, text);
+ var hostnameProperties = {
+ text: BY + host,
+ leftMargin: hostLeftMargin
+ };
+
+ var randomIndex = Math.floor(Math.random() * userTips.length);
+ var tip = userTips[randomIndex];
+ var tipLeftMargin = getLeftMargin(domainToolTip, tip);
+ var toolTipProperties = {
+ text: tip,
+ leftMargin: tipLeftMargin
+ };
+
+ var myAvatarDirection = Vec3.UNIT_NEG_Z;
+ var cardDirectionPrime = {x: 0 , y: 0, z: 5.5};
+ var rotationDelta = Quat.rotationBetween(cardDirectionPrime, myAvatarDirection);
+ var overlayRotation = Quat.multiply(MyAvatar.orientation, rotationDelta);
+ var mainSphereProperties = {
+ orientation: overlayRotation
+ };
+
+ Overlays.editOverlay(loadingSphereID, mainSphereProperties);
+ Overlays.editOverlay(domainNameTextID, textProperties);
+ Overlays.editOverlay(domainHostname, hostnameProperties);
+ Overlays.editOverlay(domainToolTip, toolTipProperties);
+}
+
+var THE_PLACE = "hifi://TheSpot";
+function clickedOnOverlay(overlayID, event) {
+ print(overlayID + " other: " + loadingToTheSpotID);
+ print(event.button === "Primary");
+ if (loadingToTheSpotID === overlayID) {
+ if (timerset) {
+ timeElapsed = 0;
+ }
+ AddressManager.handleLookupString(THE_PLACE);
+ }
+}
+var previousCameraMode = Camera.mode;
+var previousPhysicsStatus = 99999;
+
+function updateOverlays(physicsEnabled) {
+ var properties = {
+ visible: !physicsEnabled
+ };
+
+ var myAvatarDirection = Vec3.UNIT_NEG_Z;
+ var cardDirectionPrime = {x: 0 , y: 0, z: 5.5};
+ var rotationDelta = Quat.rotationBetween(cardDirectionPrime, myAvatarDirection);
+ var overlayRotation = Quat.multiply(MyAvatar.orientation, rotationDelta);
+ var mainSphereProperties = {
+ visible: !physicsEnabled,
+ orientation: overlayRotation
+ };
+
+ if (!HMD.active) {
+ toolbar.writeProperty("visible", physicsEnabled);
+ MyAvatar.headOrientation = Quat.multiply(Quat.cancelOutRollAndPitch(MyAvatar.headOrientation), Quat.fromPitchYawRollDegrees(2.5, 0, 0));
+ }
+
+ renderViewTask.getConfig("LightingModel")["enableAmbientLight"] = physicsEnabled;
+ renderViewTask.getConfig("LightingModel")["enableDirectionalLight"] = physicsEnabled;
+ renderViewTask.getConfig("LightingModel")["enablePointLight"] = physicsEnabled;
+ Overlays.editOverlay(loadingSphereID, mainSphereProperties);
+ Overlays.editOverlay(loadingToTheSpotID, properties);
+ Overlays.editOverlay(domainNameTextID, properties);
+ Overlays.editOverlay(domainHostname, properties);
+ Overlays.editOverlay(domainToolTip, properties);
+ Overlays.editOverlay(loadingBarPlacard, properties);
+ Overlays.editOverlay(loadingBarProgress, properties);
+}
+
+function update() {
+ var physicsEnabled = Window.isPhysicsEnabled();
+ var thisInterval = Date.now();
+ var deltaTime = (thisInterval - lastInterval);
+ lastInterval = thisInterval;
+ if (physicsEnabled !== previousPhysicsStatus) {
+ if (!physicsEnabled && !timerset) {
+ updateOverlays(physicsEnabled);
+ sample = Audio.playSound(tune, {
+ localOnly: true,
+ position: MyAvatar.headPosition,
+ volume: VOLUME
+ });
+ timeElapsed = 0;
+ timerset = true;
+ }
+ previousPhysicsStatus = physicsEnabled;
+ }
+
+ if (timerset) {
+ timeElapsed += deltaTime;
+ if (timeElapsed >= MAX_ELAPSED_TIME) {
+ updateOverlays(true);
+ sample.stop();
+ sample = null;
+ timerset = false;
+ }
+
+ }
+
+ Overlays.editOverlay(loadingSphereID, {
+ position: Vec3.sum(Vec3.sum(MyAvatar.position, {x: 0.0, y: -1.7, z: 0.0}), Vec3.multiplyQbyV(MyAvatar.orientation, {x: 0, y: 0.95, z: 0}))
+ });
+ Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS);
+}
+
+Script.setTimeout(update, BASIC_TIMER_INTERVAL_MS);
+Overlays.mouseReleaseOnOverlay.connect(clickedOnOverlay);
+Window.domainChanged.connect(domainChanged);
+
+function cleanup() {
+ Overlays.deleteOverlay(loadingSphereID);
+ Overlays.deleteOverlay(loadingToTheSpotID);
+ Overlays.deleteOverlay(domainNameTextID);
+ Overlays.deleteOverlay(domainHostname);
+ Overlays.deleteOverlay(domainToolTip);
+ Overlays.deleteOverlay(loadingBarPlacard);
+ Overlays.deleteOverlay(loadingBarProgress);
+ try {
+ } catch (e) {
+ }
+}
+
+Script.scriptEnding.connect(cleanup);
\ No newline at end of file
diff --git a/hifi-content/alexia/LoadingScreens/loadingBar_placard.png b/hifi-content/alexia/LoadingScreens/loadingBar_placard.png
new file mode 100644
index 000000000..f3d41ec40
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/loadingBar_placard.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c184a5d565a11e1ce7565b0908ca2a3d9658647ccef358f63c15462d3e64d184
+size 2737
diff --git a/hifi-content/alexia/LoadingScreens/loadingBar_progress.png b/hifi-content/alexia/LoadingScreens/loadingBar_progress.png
new file mode 100644
index 000000000..2aa68e230
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/loadingBar_progress.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dd04ccfe413573d27ccf9161b17152065bc36989d1193d7daa70798ae0c42fb8
+size 20396
diff --git a/hifi-content/alexia/LoadingScreens/mexico_label.png b/hifi-content/alexia/LoadingScreens/mexico_label.png
new file mode 100644
index 000000000..d74dbff0d
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/mexico_label.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5cdcd9979e30c5099a9a0478b338b223d4673bf30d80a43f4c36575405ed155c
+size 1892
diff --git a/hifi-content/alexia/LoadingScreens/rust_label.png b/hifi-content/alexia/LoadingScreens/rust_label.png
new file mode 100644
index 000000000..7fc77b10f
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/rust_label.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e61b8a65d4008c55381bf0cc15f6b7d3cf2abd84db841ac4d140ace55625750f
+size 1360
diff --git a/hifi-content/alexia/LoadingScreens/signIn.PNG b/hifi-content/alexia/LoadingScreens/signIn.PNG
new file mode 100644
index 000000000..ff01a3dfa
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/signIn.PNG
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:343eb8064a92e5adee9a89de77330d85a00da89f03ecfe76118a7901d89753fc
+size 26963
diff --git a/hifi-content/alexia/LoadingScreens/theSpot_label.png b/hifi-content/alexia/LoadingScreens/theSpot_label.png
new file mode 100644
index 000000000..f313f3136
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/theSpot_label.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20035718a5b12ec04efac494a50ca252000202d0bbcfb60da871f57aef0da8ff
+size 1905
diff --git a/hifi-content/alexia/LoadingScreens/tryAgainDialog.png b/hifi-content/alexia/LoadingScreens/tryAgainDialog.png
new file mode 100644
index 000000000..c58179896
--- /dev/null
+++ b/hifi-content/alexia/LoadingScreens/tryAgainDialog.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0535df36915e8f5a606c729fd8e3e625f91f700888532d682c93af17f2bbcb30
+size 2432
diff --git a/hifi-content/alexia/Login/loginVR.png b/hifi-content/alexia/Login/loginVR.png
new file mode 100644
index 000000000..f7beda397
--- /dev/null
+++ b/hifi-content/alexia/Login/loginVR.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d819e69b5bacaa49f987e6aa23f15f549756bda906f9347b88052204cc37711
+size 880830
diff --git a/hifi-content/alexia/LudumDare/skybox.png b/hifi-content/alexia/LudumDare/skybox.png
new file mode 100644
index 000000000..4a1c2d8ad
--- /dev/null
+++ b/hifi-content/alexia/LudumDare/skybox.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba48e83349ff59b257166f6850d3740034fd5771ccbe56a4c797a577e1aee044
+size 29750
diff --git a/hifi-content/alexia/MetaverseGuide/.DS_Store b/hifi-content/alexia/MetaverseGuide/.DS_Store
new file mode 100644
index 000000000..d466c2afa
Binary files /dev/null and b/hifi-content/alexia/MetaverseGuide/.DS_Store differ
diff --git a/hifi-content/alexia/MetaverseGuide/Logo-HighFidelity-Line-PrimaryBlue.svg b/hifi-content/alexia/MetaverseGuide/Logo-HighFidelity-Line-PrimaryBlue.svg
new file mode 100644
index 000000000..6d4f14097
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/Logo-HighFidelity-Line-PrimaryBlue.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hifi-content/alexia/MetaverseGuide/css/default.css b/hifi-content/alexia/MetaverseGuide/css/default.css
new file mode 100644
index 000000000..10bab7b25
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/css/default.css
@@ -0,0 +1,159 @@
+/* Default Demo Style */
+@import url(https://fonts.googleapis.com/css?family=Raleway);
+
+/* HTML from Bootstrap */
+.clearfix {
+ *zoom: 1;
+}
+
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.clearfix:after {
+ clear: both;
+}
+
+body, html {
+ padding: 0;
+ margin: 0;
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+/* Font Icons */
+@font-face {
+ font-family: 'Raleway';
+ font-weight: normal;
+ font-style: normal;
+}
+
+[class^="icon-"]:before, [class*=" icon-"]:before {
+ font-family: 'Raleway';
+ margin: 0 4px;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+ speak: none;
+ text-align: center;
+}
+
+.icon-th:before { content: '\e800'; }
+.icon-left:before { content: '\e803'; }
+
+/* Main Style */
+body {
+ font-family: 'Raleway',Arial,sans-serif;
+ color: #fff;
+ background: #f8d135;
+}
+
+h1, h2, h3 {
+ font-family: 'Roboto',Arial,sans-serif;
+}
+
+h1 {
+ font-size: 2.5em;
+ font-weight: 300;
+}
+
+h2 {
+ font-size: 1.5em;
+ font-weight: 300;
+}
+
+h3 {
+ font-size: 1.2em;
+ font-weight: 400;
+}
+
+/* Header Style */
+.container .header {
+ margin: 0 auto;
+ padding: 5px;
+ text-align: center;
+ background: rgba(0,0,0,0.01);
+}
+
+.container .header span {
+ display: block;
+ font-size: 60%;
+ opacity: 0.8;
+ padding-bottom: 0.6em;
+}
+
+/* To Navigation Style */
+
+.logo {
+ width: 80%;
+ margin: 20px 20px 0px 20px;
+}
+
+.subheader {
+ letter-spacing: 3px;
+ font-size: 15px;
+ font-weight: bold;
+ line-height:4.5;
+ text-transform: uppercase;
+}
+
+.nav-side {
+ background: rgba(0, 0, 0, 1);
+ border-right: 1px solid;
+ border-image: linear-gradient(#FFC49C, #00B4EF) 30;
+ width: 17%;
+ font-size: 13px;
+ height: 100%;
+ line-height: 1.6;
+ padding: 20px;
+}
+
+.nav-side a {
+ padding: 0.41em 1em;
+ letter-spacing: 0.1em;
+ display: inline-block;
+ color: #00B4EF;
+}
+
+.nav-side a:hover {
+ color: #FFC49C;
+}
+
+/* Responsive */
+@media screen and (max-width: 25em) {
+ .nav-icon span { display: none; }
+}
+
+/* Places */
+
+.placeSidebar {
+ border: .5px solid white;
+ padding: 0.6em 0.6em 0 0.6em;
+ line-height: 1.6;
+ padding: 20px;
+ text-transform: uppercase;
+ margin: 10px;
+}
+
+.placeSidebar:hover {
+ box-shadow: 0px 0px 18px white;
+}
+
+.place {
+ transition: all .4s ease-in-out;
+ position: absolute;
+}
+
+.place:hover {
+ transform: scale(1.2);
+}
+
+.placeInfo {
+ position: absolute;
+}
diff --git a/hifi-content/alexia/MetaverseGuide/css/style.css b/hifi-content/alexia/MetaverseGuide/css/style.css
new file mode 100644
index 000000000..ffd5cea87
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/css/style.css
@@ -0,0 +1,86 @@
+/* Custom Stylesheet */
+body, html {
+ margin: 0;
+ -webkit-font-smoothing: antialiased;
+ background:#000;
+ text-align: center;
+ -webkit-transition: opacity 400ms;
+ -moz-transition: opacity 400ms;
+ transition: opacity 400ms;
+}
+
+body .header{
+ color: #000;
+}
+html {
+min-height: 100%;
+ }
+body {
+ padding: 0;
+ position: relative;
+ margin: 0;
+ min-height: 100%;
+}
+.main {
+ margin: 25px auto;
+ max-width: 980px;
+}
+.main p {
+ color: #FFF;
+ text-align: left;
+ font-size: 18px;
+ line-height: 180%;
+ font-weight: 100;
+}
+
+/* ALL DEMO */
+.demo5 body {
+ width: 100%;
+ min-height: 100%;
+ position: absolute;
+}
+
+.demo2 .bg {
+ width: 800px;
+ height: 500px;
+ margin: auto;
+}
+
+.demo3 .bg {
+ width: 800px;
+ height: 500px;
+ margin: auto;
+}
+
+.demo4 .container {
+ text-align: center;
+}
+
+.demo4 .bg {
+ width: 400px;
+ height: 400px;
+ display: inline-block;
+}
+
+.demo1 .bg {
+ width: 800px;
+ height: 500px;
+ margin: auto;
+}
+
+.demo5 .bg {
+ position: absolute;
+ height: 100%;
+ width: 100%;
+ z-index: 0;
+}
+
+.demo5 .nav-side, .demo5 .header, .demo5 .menu {
+ position: relative;
+}
+.demo5 .header {
+ color: white;
+}
+.demo5 .ibg-bg {
+ position: absolute;
+}
\ No newline at end of file
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Black.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Black.ttf
new file mode 100644
index 000000000..1f59f2e29
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Black.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5d2aec83bf60483dc15a92e393a12be3f19245e82fa913c3a55df4dd810c405c
+size 180592
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-BlackItalic.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-BlackItalic.ttf
new file mode 100644
index 000000000..e6fdc990d
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-BlackItalic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0f379b4e2f8d735fa6b189a1d095c17a11e5ab9fd755c87fc6bb64f3779b801
+size 148368
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Bold.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Bold.ttf
new file mode 100644
index 000000000..62e34fdf8
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Bold.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca9de8b3be7ccd4b80774a9c7dd56a98c49c276771c5957729b5958d1d579112
+size 179244
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-BoldItalic.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-BoldItalic.ttf
new file mode 100644
index 000000000..7adc29543
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-BoldItalic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:647fb029a65c0cd0b5a64a1d178ee4e118731e963cb1ef62cf24427b8b251c2a
+size 148184
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraBold.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraBold.ttf
new file mode 100644
index 000000000..25683cd74
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraBold.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a89c06c1793eb0b173c2101744cf53ea66f8b24b360f5aef7649f6f2b7120e9e
+size 178128
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraBoldItalic.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraBoldItalic.ttf
new file mode 100644
index 000000000..1da78a365
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraBoldItalic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:43ee1a9aabfef25012cdfd38d683760f7e9c9e5d90adfb02125b4e1b602c7e6c
+size 148100
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraLight.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraLight.ttf
new file mode 100644
index 000000000..0d2416950
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraLight.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2620b63bff6f16fb1fa5e28209777cfdfc51a0c8aa1d54ea24a590541e2fd54f
+size 176344
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraLightItalic.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraLightItalic.ttf
new file mode 100644
index 000000000..816fddba6
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ExtraLightItalic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02e952d32fc8fe96cddd4c3350d4a809f151e105de14d935974c9a19f3b6bac5
+size 142192
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Italic.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Italic.ttf
new file mode 100644
index 000000000..d88208b8e
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Italic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f9c5e089b4bb57662171cc7120e1dcae8d66432b4447dd7a7babb0c5e06aa93e
+size 145920
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Light.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Light.ttf
new file mode 100644
index 000000000..b02a73979
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Light.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3d8986142d28fd27c5158b5d24b072bbed301b1763fe0bfe3076a631e8ea0ca
+size 182376
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-LightItalic.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-LightItalic.ttf
new file mode 100644
index 000000000..4a6964c0b
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-LightItalic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c767a43c0012cdcb76e32f2f3b5005e054ba60fcf52653f7c456f0044e14f1d3
+size 148368
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Medium.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Medium.ttf
new file mode 100644
index 000000000..3f1e3a897
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Medium.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3d8a045b2c853ee51e5d734d3b53eacf3f5f5290d6b5b862134af53b29dd6818
+size 179444
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-MediumItalic.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-MediumItalic.ttf
new file mode 100644
index 000000000..2304dafa3
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-MediumItalic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f7ac99eee53833254c89097c36ec68c0de390377cd31b4c1c082ec3b0132862e
+size 147568
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Regular.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Regular.ttf
new file mode 100644
index 000000000..b07fa98f7
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Regular.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20e4ae409ffbe8bfd2af14d7f717398408ae8b481005beccb83d62ef4052b681
+size 178520
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-SemiBold.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-SemiBold.ttf
new file mode 100644
index 000000000..4846345ab
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-SemiBold.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b7680f30199f65ce3b2620713f7cb27a175560ea7402e0b4cba01c5d54508a17
+size 180492
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-SemiBoldItalic.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-SemiBoldItalic.ttf
new file mode 100644
index 000000000..7cc1c1235
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-SemiBoldItalic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b8d486395fa65b66cb63321cb4a277d51035fe4d0bd9b49edf8322ea9d55c42c
+size 146584
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Thin.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Thin.ttf
new file mode 100644
index 000000000..7c6fdfacb
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-Thin.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:59ee38a0d6f119171f896098603246f2bfc5780d75d23c3298b66a03b45d32db
+size 177572
diff --git a/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ThinItalic.ttf b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ThinItalic.ttf
new file mode 100644
index 000000000..b3c71aa50
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/fonts/Raleway-ThinItalic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:961a831acb582dbc3ed7d79dc991118d60238c8683c50584e126a293a881264f
+size 141884
diff --git a/hifi-content/alexia/MetaverseGuide/index.html b/hifi-content/alexia/MetaverseGuide/index.html
new file mode 100644
index 000000000..ff28baf66
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/index.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+ High Fidelity Metaverse Guide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SVVR - 49 People
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hifi-content/alexia/MetaverseGuide/js/jquery.interactive_bg.js b/hifi-content/alexia/MetaverseGuide/js/jquery.interactive_bg.js
new file mode 100644
index 000000000..1dec32e27
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/js/jquery.interactive_bg.js
@@ -0,0 +1,152 @@
+/* ===========================================================
+ * jquery-interactive_bg.js v1.0
+ * ===========================================================
+ * Copyright 2014 Pete Rojwongsuriya.
+ * http://www.thepetedesign.com
+ *
+ * Create an interactive moving background
+ * that reacts to viewer's cursor
+ *
+ * https://github.com/peachananr/interactive_bg
+ *
+ * License: GPL v3
+ *
+ * ========================================================== */
+
+!function($){
+
+ var defaults = {
+ strength: 15,
+ scale: 1.05,
+ animationSpeed: "400ms",
+ contain: true,
+ wrapContent: false
+ };
+
+ $.fn.interactive_bg = function(options){
+ return this.each(function(){
+ var settings = $.extend({}, defaults, options),
+ el = $(this),
+ h = el.outerHeight(),
+ w = el.outerWidth(),
+ sh = settings.strength / h,
+ sw = settings.strength / w,
+ has_touch = 'ontouchstart' in document.documentElement;
+
+ if (settings.contain == true) {
+ el.css({
+ overflow: "hidden"
+ });
+ }
+ // Insert new container so that the background can be contained when scaled.
+
+ if (settings.wrapContent == false) {
+ el.prepend("
")
+ } else {
+ el.wrapInner("
")
+ }
+
+
+
+ // Set background to the newly added container.
+
+ if (el.data("ibg-bg") !== undefined) {
+ el.find("> .ibg-bg").css({
+ background: "url('" + el.data("ibg-bg") + "') no-repeat center center",
+ "background-size": "cover",
+ });
+ }
+
+ el.find("> .ibg-bg").css({
+ width: w,
+ height: h
+ })
+
+
+
+ if(has_touch || screen.width <= 699) {
+ // For Mobile
+ // Add support for accelerometer on mobile
+ window.addEventListener('devicemotion', deviceMotionHandler, false);
+
+ function deviceMotionHandler(eventData) {
+ var accX = Math.round(event.accelerationIncludingGravity.x*10) / 10,
+ accY = Math.round(event.accelerationIncludingGravity.y*10) / 10,
+ xA = -(accX / 10) * settings.strength,
+ yA = -(accY / 10) * settings.strength,
+ newX = -(xA*2),
+ newY = -(yA*2);
+
+ el.find("> .ibg-bg").css({
+ "-webkit-transform": "matrix(" + settings.scale + ",0,0," + settings.scale + "," + newX + "," + newY + ")",
+ "-moz-transform": "matrix(" + settings.scale + ",0,0," + settings.scale + "," + newX + "," + newY + ")",
+ "-o-transform": "matrix(" + settings.scale + ",0,0," + settings.scale + "," + newX + "," + newY + ")",
+ "transform": "matrix(" + settings.scale + ",0,0," + settings.scale + "," + newX + "," + newY + ")"
+ });
+
+ }
+
+ } else {
+ // For Desktop
+ // Animate only scaling when mouse enter
+ el.mouseenter(function(e) {
+ if (settings.scale != 1) el.addClass("ibg-entering")
+ el.find("> .ibg-bg").css({
+ "-webkit-transform": "matrix(" + settings.scale + ",0,0," + settings.scale + ",0,0)",
+ "-moz-transform": "matrix(" + settings.scale + ",0,0," + settings.scale + ",0,0)",
+ "-o-transform": "matrix(" + settings.scale + ",0,0," + settings.scale + ",0,0)",
+ "transform": "matrix(" + settings.scale + ",0,0," + settings.scale + ",0,0)",
+ "-webkit-transition": "-webkit-transform " + settings.animationSpeed + " linear",
+ "-moz-transition": "-moz-transform " + settings.animationSpeed + " linear",
+ "-o-transition": "-o-transform " + settings.animationSpeed + " linear",
+ "transition": "transform " + settings.animationSpeed + " linear"
+ }).on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function(){
+
+ // This will signal the mousemove below to execute when the scaling animation stops
+ el.removeClass("ibg-entering")
+ });
+ }).mousemove(function(e){
+ // This condition prevents transition from causing the movement of the background to lag
+ if (!el.hasClass("ibg-entering") && !el.hasClass("exiting")) {
+ var pageX = e.pageX || e.clientX,
+ pageY = e.pageY || e.clientY,
+ pageX = (pageX - el.offset().left) - (w / 2),
+ pageY = (pageY - el.offset().top) - (h / 2),
+ newX = ((sw * pageX)) * - 1,
+ newY = ((sh * pageY)) * - 1;
+ // Use matrix to move the background from its origin
+ // Also, disable transition to prevent lag
+ el.find("> .ibg-bg").css({
+ "-webkit-transform": "matrix(" + settings.scale + ",0,0," + settings.scale + "," + newX + "," + newY + ")",
+ "-moz-transform": "matrix(" + settings.scale + ",0,0," + settings.scale + "," + newX + "," + newY + ")",
+ "-o-transform": "matrix(" + settings.scale + ",0,0," + settings.scale + "," + newX + "," + newY + ")",
+ "transform": "matrix(" + settings.scale + ",0,0," + settings.scale + "," + newX + "," + newY + ")",
+ "-webkit-transition": "none",
+ "-moz-transition": "none",
+ "-o-transition": "none",
+ "transition": "none"
+ });
+ }
+ }).mouseleave(function(e) {
+ if (settings.scale != 1) el.addClass("ibg-exiting")
+ // Same condition applies as mouseenter. Rescale the background back to its original scale
+ el.addClass("ibg-exiting").find("> .ibg-bg").css({
+ "-webkit-transform": "matrix(1,0,0,1,0,0)",
+ "-moz-transform": "matrix(1,0,0,1,0,0)",
+ "-o-transform": "matrix(1,0,0,1,0,0)",
+ "transform": "matrix(1,0,0,1,0,0)",
+ "-webkit-transition": "-webkit-transform " + settings.animationSpeed + " linear",
+ "-moz-transition": "-moz-transform " + settings.animationSpeed + " linear",
+ "-o-transition": "-o-transform " + settings.animationSpeed + " linear",
+ "transition": "transform " + settings.animationSpeed + " linear"
+ }).on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function(){
+ el.removeClass("ibg-exiting")
+ });
+ });
+ }
+ });
+
+ }
+
+
+}(window.jQuery);
\ No newline at end of file
diff --git a/hifi-content/alexia/MetaverseGuide/metaverseBackground.png b/hifi-content/alexia/MetaverseGuide/metaverseBackground.png
new file mode 100644
index 000000000..b857c9966
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/metaverseBackground.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:17c2e352bd727a3235999a0fce4e1d9be20a08a755761aae479633bae21ad928
+size 608724
diff --git a/hifi-content/alexia/MetaverseGuide/placeIcon.svg b/hifi-content/alexia/MetaverseGuide/placeIcon.svg
new file mode 100644
index 000000000..ef0fbf04d
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/placeIcon.svg
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hifi-content/alexia/MetaverseGuide/placeLine.svg b/hifi-content/alexia/MetaverseGuide/placeLine.svg
new file mode 100644
index 000000000..60de3ba64
--- /dev/null
+++ b/hifi-content/alexia/MetaverseGuide/placeLine.svg
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hifi-content/alexia/Models/ControllerTutorial/drive.png b/hifi-content/alexia/Models/ControllerTutorial/drive.png
new file mode 100644
index 000000000..26cec8588
--- /dev/null
+++ b/hifi-content/alexia/Models/ControllerTutorial/drive.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:84797f10400d7c67ac4dc24dd716d88a085f633d5f58c7835657e7537006f9bc
+size 3410
diff --git a/hifi-content/alexia/Models/ControllerTutorial/driveTurn.png b/hifi-content/alexia/Models/ControllerTutorial/driveTurn.png
new file mode 100644
index 000000000..51dc5963a
--- /dev/null
+++ b/hifi-content/alexia/Models/ControllerTutorial/driveTurn.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6c89300ef08f8feee7bc51da3f2a86de7bf8a2eb0ca3cf1483e0cd9fa8afe2a5
+size 5031
diff --git a/hifi-content/alexia/Models/ControllerTutorial/farGrab.png b/hifi-content/alexia/Models/ControllerTutorial/farGrab.png
new file mode 100644
index 000000000..866167ccc
--- /dev/null
+++ b/hifi-content/alexia/Models/ControllerTutorial/farGrab.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e015c8a96ab94a488fee1aab983c0f8c43d5b94a114f1990414bb4d209597734
+size 3502
diff --git a/hifi-content/alexia/Models/ControllerTutorial/target.png b/hifi-content/alexia/Models/ControllerTutorial/target.png
new file mode 100644
index 000000000..f582d2166
--- /dev/null
+++ b/hifi-content/alexia/Models/ControllerTutorial/target.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:52cd6dc626918c90036c22f54b7b519aff14dbeb77be476be2c2d902ebced461
+size 4093
diff --git a/hifi-content/alexia/Models/ControllerTutorial/teleport.png b/hifi-content/alexia/Models/ControllerTutorial/teleport.png
new file mode 100644
index 000000000..fdbf36ab4
--- /dev/null
+++ b/hifi-content/alexia/Models/ControllerTutorial/teleport.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e764c01908745e4b2b48f7e39ba4cb8ff4a12ef410a15f259131bafa779f2c03
+size 4768
diff --git a/hifi-content/alexia/Models/Portal/circle.png b/hifi-content/alexia/Models/Portal/circle.png
new file mode 100644
index 000000000..2d36a6a54
--- /dev/null
+++ b/hifi-content/alexia/Models/Portal/circle.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3052f808a130c9da26ee127aff9e633f59bf1e3ec019ceae1af34c00ed2dc6dc
+size 3992
diff --git a/hifi-content/alexia/Models/Portal/ground.png b/hifi-content/alexia/Models/Portal/ground.png
new file mode 100644
index 000000000..59b7ae561
--- /dev/null
+++ b/hifi-content/alexia/Models/Portal/ground.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6789a29db113094b40ee373b15f801eb5dd896eae6fa1cf0c56a9086817bed9a
+size 12288
diff --git a/hifi-content/alexia/Models/Portal/hitSpace.png b/hifi-content/alexia/Models/Portal/hitSpace.png
new file mode 100644
index 000000000..cc0d27849
--- /dev/null
+++ b/hifi-content/alexia/Models/Portal/hitSpace.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:962629b3929cd0e89f014d159855759f18d7ed359feac94cb7a54c28bad700a7
+size 594
diff --git a/hifi-content/alexia/Models/Portal/portal1.fbx b/hifi-content/alexia/Models/Portal/portal1.fbx
new file mode 100644
index 000000000..b6fcaf387
--- /dev/null
+++ b/hifi-content/alexia/Models/Portal/portal1.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a8014a8c0bf24a34d4b8420f17db34fdfd802fe32c6296ac3214fd73c9f611b3
+size 2426816
diff --git a/hifi-content/alexia/Models/Portal/portal2.fbx b/hifi-content/alexia/Models/Portal/portal2.fbx
new file mode 100644
index 000000000..e262289f2
--- /dev/null
+++ b/hifi-content/alexia/Models/Portal/portal2.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cdf79ff14a893c84c8a72168120bd770c66002f34e58249ba84faf2f0879ffda
+size 2535968
diff --git a/hifi-content/alexia/Models/Portal/rotate.js b/hifi-content/alexia/Models/Portal/rotate.js
new file mode 100644
index 000000000..34568e3c7
--- /dev/null
+++ b/hifi-content/alexia/Models/Portal/rotate.js
@@ -0,0 +1,3 @@
+Entities.editEntity({2381d3d4-640a-400e-aba0-c6d355cc5dba}, {
+ angularVelocity: { x: 0, y: 10, z: 0 }
+});
\ No newline at end of file
diff --git a/hifi-content/alexia/Models/Portal/star.png b/hifi-content/alexia/Models/Portal/star.png
new file mode 100644
index 000000000..e8a8f133d
--- /dev/null
+++ b/hifi-content/alexia/Models/Portal/star.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9d0616decce7d6ef4bb5814dad8fee3158dabadc0c71b0837f12924dc7a4840
+size 1975
diff --git a/hifi-content/alexia/Models/Portal/stripe.png b/hifi-content/alexia/Models/Portal/stripe.png
new file mode 100644
index 000000000..8f7605109
--- /dev/null
+++ b/hifi-content/alexia/Models/Portal/stripe.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fd79606d97302969b39d11aa28a30489e5f7e1895fedadc7003bca9f784f7722
+size 4515
diff --git a/hifi-content/alexia/Models/PressBadge/PressBadge.js b/hifi-content/alexia/Models/PressBadge/PressBadge.js
new file mode 100644
index 000000000..a3b94e766
--- /dev/null
+++ b/hifi-content/alexia/Models/PressBadge/PressBadge.js
@@ -0,0 +1,38 @@
+Entities.addEntity({
+ "age": 24.102115631103516,
+ "ageAsText": "0 hours 0 minutes 24 seconds",
+ "clientOnly": 1,
+ "collidesWith": "",
+ "created": "2017-10-13T21:33:26Z",
+ "dimensions": {
+ "x": 0.208173930644989,
+ "y": 0.23141217231750488,
+ "z": 0.24746361374855042
+ },
+ "id": "{858c0c20-f500-4702-bf27-b01ebb222187}",
+ "lastEdited": 1507930345103568,
+ "lastEditedBy": "{be5d5141-b41b-441f-8cc1-e4520d546c42}",
+"modelURL": "https://hifi-content.s3.amazonaws.com/jimi/avatar/photo-real/Clothes/Accessories/Beanie.fbx",
+ "owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
+ "parentID": "{00000000-0000-0000-0000-000000000001}",
+ "queryAACube": {
+ "scale": 0.3976508677005768,
+ "x": -0.1988254338502884,
+ "y": -0.1988254338502884,
+ "z": -0.1988254338502884
+ },
+ "rotation": {
+ "w": -0.3166559636592865,
+ "x": 0.27402493357658386,
+ "y": 0.8842571973800659,
+ "z": -0.20657777786254883
+ },
+ "shapeType": "box",
+ "type": "Model",
+ "userData": "{\"Attachment\":{\"action\":\"attach\",\"joint\":\"HeadTop_End\",\"attached\":false,\"options\":{\"translation\":{\"x\":0,\"y\":0,\"z\":0},\"scale\":1}},\"grabbableKey\":{\"cloneable\":false,\"grabbable\":true},\"marketplaceID\":\"47b6ff9a-4f34-45a2-a7b1-9059876212e5\"}",
+ "marketplaceID" : "47b6ff9a-4f34-45a2-a7b1-9059876212e5",
+ "visible": 1
+ }
+ ],
+ "Version": 74
+}, true);
\ No newline at end of file
diff --git a/hifi-content/alexia/Models/PressBadge/badgeClip.png b/hifi-content/alexia/Models/PressBadge/badgeClip.png
new file mode 100644
index 000000000..804f7146d
--- /dev/null
+++ b/hifi-content/alexia/Models/PressBadge/badgeClip.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:645615afabf58545e6a7e1629b8642a71bf6e09f34330f77bc496422993ee3d7
+size 21568
diff --git a/hifi-content/alexia/Models/PressBadge/pressBadge.fbx b/hifi-content/alexia/Models/PressBadge/pressBadge.fbx
new file mode 100644
index 000000000..428bddd86
--- /dev/null
+++ b/hifi-content/alexia/Models/PressBadge/pressBadge.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e3a662eb55d1953b6bf0f541cc639b4c8cf5ca78b265ffd29627962be06cadee
+size 123312
diff --git a/hifi-content/alexia/Models/PressBadge/pressBadge.png b/hifi-content/alexia/Models/PressBadge/pressBadge.png
new file mode 100644
index 000000000..2c82554e2
--- /dev/null
+++ b/hifi-content/alexia/Models/PressBadge/pressBadge.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bfaadf086e746d50cce4c4c2c14656d1a91bdc8341e01a4c0636b395fc38421e
+size 7254
diff --git a/hifi-content/alexia/Models/bratwurstTxt.png b/hifi-content/alexia/Models/bratwurstTxt.png
new file mode 100644
index 000000000..e90eeef51
--- /dev/null
+++ b/hifi-content/alexia/Models/bratwurstTxt.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bd71f4b0598fe0d5b47558d5d37b268b01c386b80ee0cf0d614ea2dc545eb1d5
+size 1291308
diff --git a/hifi-content/alexia/Models/button.fbx b/hifi-content/alexia/Models/button.fbx
new file mode 100644
index 000000000..84ddfb93b
--- /dev/null
+++ b/hifi-content/alexia/Models/button.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9a217c30a0867a8a30ae8774e7cbfebead4703cd9393563f9a5dd8a4c05ddb89
+size 28608
diff --git a/hifi-content/alexia/Models/sausage.fbx b/hifi-content/alexia/Models/sausage.fbx
new file mode 100644
index 000000000..99886aca4
--- /dev/null
+++ b/hifi-content/alexia/Models/sausage.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f8212784f529d1978ead44abf4790624e3476b504d8c93a6e78626aef76d71a6
+size 1368544
diff --git a/hifi-content/alexia/Models/tablet-with-home-button-small-bezel.fbx b/hifi-content/alexia/Models/tablet-with-home-button-small-bezel.fbx
new file mode 100644
index 000000000..5b77e4b0e
--- /dev/null
+++ b/hifi-content/alexia/Models/tablet-with-home-button-small-bezel.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:39f704fbee023b605967da1ff078a899863c8324c1e4e5b90fcc902fa2aea83b
+size 400016
diff --git a/hifi-content/alexia/Models/tinyTablet.fbx b/hifi-content/alexia/Models/tinyTablet.fbx
new file mode 100644
index 000000000..fa8e4d884
--- /dev/null
+++ b/hifi-content/alexia/Models/tinyTablet.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7fcd58f9805a76b9477b6acbbe68ee9e982eaf3bac4fe0831babf70623d5fa9b
+size 411536
diff --git a/hifi-content/alexia/Particles/blob.png b/hifi-content/alexia/Particles/blob.png
new file mode 100644
index 000000000..5481f4698
--- /dev/null
+++ b/hifi-content/alexia/Particles/blob.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0e21169d912627fe8de2128f06dd588ac94a51ba860bc1822a160a7fff4c22fe
+size 10977
diff --git a/hifi-content/alexia/Particles/circle.png b/hifi-content/alexia/Particles/circle.png
new file mode 100644
index 000000000..11e11e591
--- /dev/null
+++ b/hifi-content/alexia/Particles/circle.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:00f7e5dca5ce0d4c81a01e8f7e361e831c296247b9598a1f452be31c2efe6642
+size 1530
diff --git a/hifi-content/alexia/Particles/emoji.png b/hifi-content/alexia/Particles/emoji.png
new file mode 100644
index 000000000..7f8c60886
--- /dev/null
+++ b/hifi-content/alexia/Particles/emoji.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:062a92a3671fc3b557da5bdef2899ae69c046730674919d602a94d68ac81fdd3
+size 30311
diff --git a/hifi-content/alexia/Particles/fade.png b/hifi-content/alexia/Particles/fade.png
new file mode 100644
index 000000000..4438ec870
--- /dev/null
+++ b/hifi-content/alexia/Particles/fade.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5977e8b01264d014b79f538aa1a6047e8774381afd8d55b1fb2e4b3eff5999ee
+size 811
diff --git a/hifi-content/alexia/Particles/flame.jpg b/hifi-content/alexia/Particles/flame.jpg
new file mode 100644
index 000000000..4f35b5f12
--- /dev/null
+++ b/hifi-content/alexia/Particles/flame.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:852dbfef0ac1eec033c87d547d5b9970b7216ead93805d33e821f09b81c678b8
+size 82936
diff --git a/hifi-content/alexia/Particles/heart.png b/hifi-content/alexia/Particles/heart.png
new file mode 100644
index 000000000..6fe9c05b6
--- /dev/null
+++ b/hifi-content/alexia/Particles/heart.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e94e08473fb9debd9ff9ef333eda18e1ca3e8d445eda4fd1f0501cd4fd516c22
+size 13203
diff --git a/hifi-content/alexia/Particles/hifi.png b/hifi-content/alexia/Particles/hifi.png
new file mode 100644
index 000000000..52ddce6e3
--- /dev/null
+++ b/hifi-content/alexia/Particles/hifi.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6f6509aa26f5f2a320e66f291900ae55bbb9275e360117167739ae93ab77a27c
+size 16288
diff --git a/hifi-content/alexia/Particles/leaf.png b/hifi-content/alexia/Particles/leaf.png
new file mode 100644
index 000000000..80aa14320
--- /dev/null
+++ b/hifi-content/alexia/Particles/leaf.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4921d25b3a2c544062c0fbb08cc6ed8e1476abc4240b2f7c8b392f032f9260cc
+size 11202
diff --git a/hifi-content/alexia/Particles/smoke.png b/hifi-content/alexia/Particles/smoke.png
new file mode 100644
index 000000000..409c96004
--- /dev/null
+++ b/hifi-content/alexia/Particles/smoke.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eba059e3a4803c1336bb7f08e825ad57da2205b5a39c43879b1586bf8637d066
+size 216199
diff --git a/hifi-content/alexia/Particles/snowflake.png b/hifi-content/alexia/Particles/snowflake.png
new file mode 100644
index 000000000..913dddbe1
--- /dev/null
+++ b/hifi-content/alexia/Particles/snowflake.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1034f3af458d8e236cf8da8f0599cec0e2f61dc4e0c1e36716224b84da18f331
+size 108540
diff --git a/hifi-content/alexia/Particles/spark.png b/hifi-content/alexia/Particles/spark.png
new file mode 100644
index 000000000..5e5c6498f
--- /dev/null
+++ b/hifi-content/alexia/Particles/spark.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3a235f7cec18cf261387801978a5ff38e88313df55073488745a786df9b2ac86
+size 5986
diff --git a/hifi-content/alexia/Particles/twinkle.png b/hifi-content/alexia/Particles/twinkle.png
new file mode 100644
index 000000000..3982f0dc1
--- /dev/null
+++ b/hifi-content/alexia/Particles/twinkle.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bfc4a1ed2a15adc8e80c1766b36713c7cdde7d133e1b5d40cc04b6a0d9820141
+size 13113
diff --git a/hifi-content/alexia/Sitting_Idle.fbx b/hifi-content/alexia/Sitting_Idle.fbx
new file mode 100644
index 000000000..aee493b38
--- /dev/null
+++ b/hifi-content/alexia/Sitting_Idle.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8283f14a4049ad6e0b48134fcf43289d2d6ba225122a466ef673d3a92031f20a
+size 364608
diff --git a/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/Tree4-9-17_1_58_PM1Leaf.png b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/Tree4-9-17_1_58_PM1Leaf.png
new file mode 100644
index 000000000..1e5629e45
--- /dev/null
+++ b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/Tree4-9-17_1_58_PM1Leaf.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f880e7eb599108c22b9f7d094e7978fd1b4fb0115c5c5438fe94b7f064dda8d1
+size 26798
diff --git a/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/diffuse_cube.dds b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/diffuse_cube.dds
new file mode 120000
index 000000000..78d32b3b4
--- /dev/null
+++ b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/diffuse_cube.dds
@@ -0,0 +1 @@
+../../../DomainContent/production/cupcake/diffuse_cube.dds
\ No newline at end of file
diff --git a/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/ibl_brdf_lut.dds b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/ibl_brdf_lut.dds
new file mode 100644
index 000000000..efad67dee
Binary files /dev/null and b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/ibl_brdf_lut.dds differ
diff --git a/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/leaf256.png b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/leaf256.png
new file mode 100644
index 000000000..0f961550b
--- /dev/null
+++ b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/leaf256.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac5bcf1cb407205c6f73512f74a561b749ed0b470b8dc2494bfe6d852fb8e68a
+size 26886
diff --git a/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/specular_cube.dds b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/specular_cube.dds
new file mode 120000
index 000000000..40997e8ea
--- /dev/null
+++ b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/specular_cube.dds
@@ -0,0 +1 @@
+../../../DomainContent/production/cupcake/specular_cube.dds
\ No newline at end of file
diff --git a/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/trunkSG_Base_Color.png b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/trunkSG_Base_Color.png
new file mode 100644
index 000000000..789e18538
--- /dev/null
+++ b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/trunkSG_Base_Color.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:da5ef5640702ee457572389696e71c0347bcc53aa89f99031e2641d41eba0fc3
+size 1425267
diff --git a/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/upperBranchesSG_Base_Color.png b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/upperBranchesSG_Base_Color.png
new file mode 100644
index 000000000..d03884613
--- /dev/null
+++ b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbm/upperBranchesSG_Base_Color.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a854f08690a90d507907ab86a781b1341c2620b8c58eec63772da1a2753cdf25
+size 91192
diff --git a/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbx b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbx
new file mode 100644
index 000000000..80a96564b
--- /dev/null
+++ b/hifi-content/alexia/Tree/heroTree_dk2_96K-2048-wBush-animated.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a256b4e8fbc9348f27dcbeda9311329f32e6327b87af6ab44682d796a8688e33
+size 18790208
diff --git a/hifi-content/alexia/TriggerToSit.png b/hifi-content/alexia/TriggerToSit.png
new file mode 100644
index 000000000..bd39914db
--- /dev/null
+++ b/hifi-content/alexia/TriggerToSit.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:837961873c222ab414f78f9e33e8e00e91f70e1fffd31fa0936bdc7494c19bd8
+size 4656
diff --git a/hifi-content/alexia/idleState.png b/hifi-content/alexia/idleState.png
new file mode 100644
index 000000000..0b8bce05e
--- /dev/null
+++ b/hifi-content/alexia/idleState.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:80cdef274696dc80a725c463295e4a53a9290ec9a2603828e58dfac809e1cc15
+size 28304
diff --git a/hifi-content/alexia/loadingIcon.png b/hifi-content/alexia/loadingIcon.png
new file mode 100644
index 000000000..c03f3aff8
--- /dev/null
+++ b/hifi-content/alexia/loadingIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:af2c124d4062bdc5b835e4acd5cc0826a743cf0dc045785beb3ea34014629775
+size 113037
diff --git a/hifi-content/alexia/remapGameControls.js b/hifi-content/alexia/remapGameControls.js
new file mode 100644
index 000000000..ed5bbe714
--- /dev/null
+++ b/hifi-content/alexia/remapGameControls.js
@@ -0,0 +1,43 @@
+//
+// remapGameControls.js
+//
+// Created by Alexia Mandeville on 3/6/2018
+// Copyright 2018 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
+//
+
+// This script updates the control scheme for keyboard navigation.
+// If you want to change any of the mappings, you can use our API reference for input devices here:
+// https://docs.highfidelity.com/api-reference/namespaces/controller
+
+// The name of the new mapping
+var MAPPING_NAME = "com.highfidelity.controllers.remapGameControls";
+
+// Create a new mapping object
+var mapping = Controller.newMapping(MAPPING_NAME);
+
+// *Remap* //
+
+// Let's put jump and upfly on E...
+mapping.from(Controller.Hardware.Keyboard.E).to(Controller.Actions.Up);
+
+// and map downfly to C.
+mapping.from(Controller.Hardware.Keyboard.C).to(Controller.Actions.Down);
+
+// *The next two mappings include modifiers!* //
+
+// Remap Shift + W to pitch the camera up.
+mapping.from(Controller.Hardware.Keyboard.W).when(Controller.Hardware.Keyboard.Shift).to(Controller.Actions.PitchUp);
+
+// Remap Shift + S to pitch the camera down.
+mapping.from(Controller.Hardware.Keyboard.S).when(Controller.Hardware.Keyboard.Shift).to(Controller.Actions.PitchDown);
+
+// Enable the new mapping.
+Controller.enableMapping(MAPPING_NAME);
+
+// Disable the new mapping when the script ends.
+Script.scriptEnding.connect(function () {
+ Controller.disableMapping(MAPPING_NAME);
+});
\ No newline at end of file
diff --git a/hifi-content/alexia/sit.js b/hifi-content/alexia/sit.js
new file mode 100644
index 000000000..7e947268a
--- /dev/null
+++ b/hifi-content/alexia/sit.js
@@ -0,0 +1,415 @@
+//
+// sit.js
+//
+// Created by Clement Brisset on 3/3/17
+// 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() {
+ Script.include("/~/system/libraries/utils.js");
+ if (!String.prototype.startsWith) {
+ String.prototype.startsWith = function(searchString, position){
+ position = position || 0;
+ return this.substr(position, searchString.length) === searchString;
+ };
+ }
+
+ var SETTING_KEY = "com.highfidelity.avatar.isSitting";
+ var ANIMATION_URL = "http://hifi-content.s3.amazonaws.com/alexia/Sitting_Idle.fbx";
+ var ANIMATION_FPS = 30;
+ var ANIMATION_FIRST_FRAME = 1;
+ var ANIMATION_LAST_FRAME = 350;
+ var RELEASE_TIME = 500; // ms
+ var RELEASE_DISTANCE = 0.2; // meters
+ var MAX_IK_ERROR = 30;
+ var IK_SETTLE_TIME = 250; // ms
+ var DESKTOP_UI_CHECK_INTERVAL = 500;
+ var DESKTOP_MAX_DISTANCE = 2.8;
+ var SIT_DELAY = 25;
+ var ALPHA_START = 0.7; //for overlays
+ var MAX_RESET_DISTANCE = 0.5; // meters
+ var OVERRIDEN_DRIVE_KEYS = [
+ DriveKeys.TRANSLATE_X,
+ DriveKeys.TRANSLATE_Y,
+ DriveKeys.TRANSLATE_Z,
+ DriveKeys.STEP_TRANSLATE_X,
+ DriveKeys.STEP_TRANSLATE_Y,
+ DriveKeys.STEP_TRANSLATE_Z,
+ ];
+ this.transparencyInterval = null;
+ this.entityID = null;
+ this.animStateHandlerID = null;
+ this.interval = null;
+ this.sitDownSettlePeriod = null;
+ this.lastTimeNoDriveKeys = null;
+ this.sittingDown = false;
+
+ var checkForHover;
+
+ // Preload the animation file
+ this.animation = AnimationCache.prefetch(ANIMATION_URL);
+
+ this.preload = function(entityID) {
+ this.entityID = entityID;
+ }
+ this.unload = function() {
+ if (Settings.getValue(SETTING_KEY) === this.entityID) {
+ this.standUp();
+ }
+ if (this.interval !== null) {
+ Script.clearInterval(this.interval);
+ this.interval = null;
+ }
+
+ if (this.transparencyInterval !== null) {
+ Script.clearInterval(this.transparencyInterval);
+ this.transparencyInterval = null;
+ }
+
+ if (checkForHover !== null) {
+ Script.clearInterval(checkForHover);
+ checkForHover = null;
+ }
+
+ this.cleanupOverlay();
+ }
+
+ this.setSeatUser = function(user) {
+ try {
+ var userData = Entities.getEntityProperties(this.entityID, ["userData"]).userData;
+ userData = JSON.parse(userData);
+
+ if (user !== null) {
+ userData.seat.user = user;
+ } else {
+ delete userData.seat.user;
+ }
+
+ Entities.editEntity(this.entityID, {
+ userData: JSON.stringify(userData)
+ });
+ } catch (e) {
+ // Do Nothing
+ }
+ }
+ this.getSeatUser = function() {
+ try {
+ var properties = Entities.getEntityProperties(this.entityID, ["userData", "position"]);
+ var userData = JSON.parse(properties.userData);
+
+ // If MyAvatar return my uuid
+ if (userData.seat.user === MyAvatar.sessionUUID) {
+ return userData.seat.user;
+ }
+
+
+ // If Avatar appears to be sitting
+ if (userData.seat.user) {
+ var avatar = AvatarList.getAvatar(userData.seat.user);
+ if (avatar && (Vec3.distance(avatar.position, properties.position) < RELEASE_DISTANCE)) {
+ return userData.seat.user;
+ }
+ }
+ } catch (e) {
+ // Do nothing
+ }
+
+ // Nobody on the seat
+ return null;
+ }
+
+ // Is the seat used
+ this.checkSeatForAvatar = function() {
+ var seatUser = this.getSeatUser();
+
+ // If MyAvatar appears to be sitting
+ if (seatUser === MyAvatar.sessionUUID) {
+ var properties = Entities.getEntityProperties(this.entityID, ["position"]);
+ return Vec3.distance(MyAvatar.position, properties.position) < RELEASE_DISTANCE;
+ }
+
+ return seatUser !== null;
+ }
+
+ this.rolesToOverride = function() {
+ return MyAvatar.getAnimationRoles().filter(function(role) {
+ return !(role.startsWith("right") || role.startsWith("left"));
+ });
+ }
+
+ // Handler for user changing the avatar model while sitting. There's currently an issue with changing avatar models while override role animations are applied,
+ // so to avoid that problem, re-apply the role overrides once the model has finished changing.
+ this.modelURLChangeFinished = function () {
+ print("Sitter's model has FINISHED changing. Reapply anim role overrides.");
+ var roles = this.rolesToOverride();
+ for (i in roles) {
+ MyAvatar.overrideRoleAnimation(roles[i], ANIMATION_URL, ANIMATION_FPS, true, ANIMATION_FIRST_FRAME, ANIMATION_LAST_FRAME);
+ }
+ }
+
+ this.sitDown = function() {
+ if (this.checkSeatForAvatar()) {
+ print("Someone is already sitting in that chair.");
+ return;
+ }
+
+
+ print("Sitting down (" + this.entityID + ")");
+ this.sittingDown = true;
+
+ var now = Date.now();
+ this.sitDownSettlePeriod = now + IK_SETTLE_TIME;
+ this.lastTimeNoDriveKeys = now;
+
+ var previousValue = Settings.getValue(SETTING_KEY);
+ Settings.setValue(SETTING_KEY, this.entityID);
+ this.setSeatUser(MyAvatar.sessionUUID);
+ if (previousValue === "") {
+ MyAvatar.characterControllerEnabled = false;
+ MyAvatar.hmdLeanRecenterEnabled = false;
+ var roles = this.rolesToOverride();
+ for (i in roles) {
+ MyAvatar.overrideRoleAnimation(roles[i], ANIMATION_URL, ANIMATION_FPS, true, ANIMATION_FIRST_FRAME, ANIMATION_LAST_FRAME);
+ }
+
+ for (var i in OVERRIDEN_DRIVE_KEYS) {
+ MyAvatar.disableDriveKey(OVERRIDEN_DRIVE_KEYS[i]);
+ }
+
+ MyAvatar.resetSensorsAndBody();
+ }
+
+ var properties = Entities.getEntityProperties(this.entityID, ["position", "rotation"]);
+ var index = MyAvatar.getJointIndex("Hips");
+ MyAvatar.pinJoint(index, properties.position, properties.rotation);
+
+ this.animStateHandlerID = MyAvatar.addAnimationStateHandler(function(properties) {
+ return { headType: 0 };
+ }, ["headType"]);
+ Script.update.connect(this, this.update);
+ MyAvatar.onLoadComplete.connect(this, this.modelURLChangeFinished);
+ }
+
+ this.standUp = function() {
+
+ print("Standing up (" + this.entityID + ")");
+ MyAvatar.removeAnimationStateHandler(this.animStateHandlerID);
+ Script.update.disconnect(this, this.update);
+ MyAvatar.onLoadComplete.disconnect(this, this.modelURLChangeFinished);
+
+ if (MyAvatar.sessionUUID === this.getSeatUser()) {
+ this.setSeatUser(null);
+ }
+
+ if (Settings.getValue(SETTING_KEY) === this.entityID) {
+ Settings.setValue(SETTING_KEY, "");
+
+ for (var i in OVERRIDEN_DRIVE_KEYS) {
+ MyAvatar.enableDriveKey(OVERRIDEN_DRIVE_KEYS[i]);
+ }
+
+
+ var roles = this.rolesToOverride();
+ for (i in roles) {
+ MyAvatar.restoreRoleAnimation(roles[i]);
+ }
+ MyAvatar.characterControllerEnabled = true;
+ MyAvatar.hmdLeanRecenterEnabled = true;
+
+ var index = MyAvatar.getJointIndex("Hips");
+ MyAvatar.clearPinOnJoint(index);
+
+ MyAvatar.resetSensorsAndBody();
+
+ Script.setTimeout(function() {
+ MyAvatar.bodyPitch = 0.0;
+ MyAvatar.bodyRoll = 0.0;
+ }, SIT_DELAY);
+ }
+ this.sittingDown = false;
+ }
+
+ //on trigger at a certain distance, sit in the chair (VR)
+ this.startNearTrigger = function() {
+ this.sitDown();
+ };
+
+ //on trigger at a certain distance, sit in the chair (VR)
+ this.startFarTrigger = function() {
+ var properties = Entities.getEntityProperties(this.entityID, ["position"]);
+ if(Vec3.distance(MyAvatar.position, properties.position) < DESKTOP_MAX_DISTANCE){
+ this.sitDown();
+ }
+ };
+
+ this.createOverlay = function() {
+ var url;
+
+ if(HMD.active){ //change the image based on what modality the user is in
+ url = "http://hifi-content.s3.amazonaws.com/alexia/TriggerToSit.png";
+ } else {
+ url = "http://hifi-content.s3.amazonaws.com/alexia/ClickToSit.png";
+ }
+
+ this.overlay = Overlays.addOverlay("image3d", {
+ position: { x: 0.0, y: 0.0, z: 0.0},
+ dimensions: { x: 0.1, y: 0.1 },
+ url: url,
+ ignoreRayIntersection: false,
+ alpha: ALPHA_START,
+ visible: true,
+ isFacingAvatar: true,
+ emissive: true
+ });
+
+ var overlayDimensions = {
+ x: 0.3,
+ y: 0.3
+ }
+
+ var properties = Entities.getEntityProperties(this.entityID, ["position", "registrationPoint", "dimensions", "rotation"]);
+ var yOffset = (0.8 - properties.registrationPoint.y) * properties.dimensions.y + (overlayDimensions.y / 2.0);
+ var overlayPosition = Vec3.sum(properties.position, { x: 0, y: yOffset, z: 0 });
+ Overlays.editOverlay(this.overlay, {
+ position: overlayPosition,
+ dimensions: overlayDimensions,
+ });
+
+ }
+
+ // User can also click on overlay to sit down
+ var that = this;
+ this.mousePressOnOverlay = function (overlayID, pointerEvent) {
+ if (overlayID === that.overlay && pointerEvent.isLeftButton) {
+ that.sitDown();
+ }
+ };
+
+ Overlays.mousePressOnOverlay.connect(this.mousePressOnOverlay);
+
+ this.cleanupOverlay = function() {
+ if (this.overlay !== null) {
+ Overlays.deleteOverlay(this.overlay);
+ this.overlay = null;
+ }
+ }
+
+ this.update = function(dt) {
+
+ if (this.sittingDown === true) {
+ var properties = Entities.getEntityProperties(this.entityID);
+ var avatarDistance = Vec3.distance(MyAvatar.position, properties.position);
+ var ikError = MyAvatar.getIKErrorOnLastSolve();
+ var now = Date.now();
+ var shouldStandUp = false;
+
+ // Check if a drive key is pressed
+ var hasActiveDriveKey = false;
+ for (var i in OVERRIDEN_DRIVE_KEYS) {
+ if (MyAvatar.getRawDriveKey(OVERRIDEN_DRIVE_KEYS[i]) != 0.0) {
+ hasActiveDriveKey = true;
+ break;
+ }
+ }
+
+
+ // Only standup if user has been pushing a drive key for RELEASE_TIME
+ if (hasActiveDriveKey) {
+ var elapsed = now - this.lastTimeNoDriveKeys;
+ shouldStandUp = elapsed > RELEASE_TIME;
+ } else {
+ this.lastTimeNoDriveKeys = Date.now();
+ }
+
+ // Allow some time for the IK to settle
+ if (ikError > MAX_IK_ERROR && now > this.sitDownSettlePeriod) {
+ shouldStandUp = true;
+ }
+
+ if (MyAvatar.sessionUUID !== this.getSeatUser()) {
+ shouldStandUp = true;
+ }
+
+ if (shouldStandUp || avatarDistance > RELEASE_DISTANCE) {
+ print("IK error: " + ikError + ", distance from chair: " + avatarDistance);
+
+ // Move avatar in front of the chair to avoid getting stuck in collision hulls
+ if (avatarDistance < MAX_RESET_DISTANCE) {
+ var offset = { x: 0, y: 1.0, z: -0.5 - properties.dimensions.z * properties.registrationPoint.z };
+ var position = Vec3.sum(properties.position, Vec3.multiplyQbyV(properties.rotation, offset));
+ MyAvatar.position = position;
+ print("Moving Avatar in front of the chair.");
+ // Delay standing up by 1 cycle.
+ // This leaves times for the avatar to actually move since a lot
+ // of the stand up operations are threaded
+ return;
+ }
+
+ this.standUp();
+ }
+
+ }
+ }
+
+
+ this.canSitDesktop = function() {
+ var properties = Entities.getEntityProperties(this.entityID, ["position"]);
+ var distanceFromSeat = Vec3.distance(MyAvatar.position, properties.position);
+ return distanceFromSeat < DESKTOP_MAX_DISTANCE && !this.checkSeatForAvatar();
+ }
+
+ // This part is used to fade out the overlay over time
+ this.lerpTransparency = function() {
+ var startAlpha = ALPHA_START;
+ var changeAlpha = 0.01;
+ var that = this;
+ this.transparencyInterval = Script.setInterval(function(){
+ startAlpha = startAlpha - changeAlpha; // My new alpha
+ Overlays.editOverlay(that.overlay, {alpha : startAlpha}); // Edit the existing overlay
+ if(startAlpha <= 0){
+ Script.clearInterval(that.transparencyInterval); // Stop my interval when it's faded out
+ that.transparencyInterval = null;
+
+ Overlays.editOverlay(that.overlay, {
+ ignoreRayIntersection: true
+ });
+ }
+ }, 50);
+ }
+
+ this.showOverlays = function() { // Show overlays when I'm close to the seat
+ if (isInEditMode() || this.interval !== null) {
+ return;
+ }
+
+
+ if (this.overlay === null) { // Make an overlay if there isn't one
+ if (this.canSitDesktop()) {
+ this.createOverlay();
+ if(this.transparencyInterval === null){
+ this.lerpTransparency();
+ }
+ }
+ } else if (!this.canSitDesktop()) {
+ this.cleanupOverlay();
+ }
+ }
+
+ var that = this; // Run my method to check if we've encountered a chair
+ checkForHover = Script.setInterval(function(){
+ that.showOverlays();
+ }, DESKTOP_UI_CHECK_INTERVAL);
+
+ this.clickDownOnEntity = function (id, event) {
+ if (isInEditMode()) {
+ return;
+ }
+ if (event.isPrimaryButton && this.canSitDesktop()) {
+ this.sitDown();
+ }
+ }
+
+});
\ No newline at end of file
diff --git a/hifi-content/alexia/sit_withoutOverlayClick.js b/hifi-content/alexia/sit_withoutOverlayClick.js
new file mode 100644
index 000000000..579b0cb60
--- /dev/null
+++ b/hifi-content/alexia/sit_withoutOverlayClick.js
@@ -0,0 +1,399 @@
+//
+// sit.js
+//
+// Created by Clement Brisset on 3/3/17
+// 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() {
+ Script.include("/~/system/libraries/utils.js");
+ if (!String.prototype.startsWith) {
+ String.prototype.startsWith = function(searchString, position){
+ position = position || 0;
+ return this.substr(position, searchString.length) === searchString;
+ };
+ }
+
+ var SETTING_KEY = "com.highfidelity.avatar.isSitting";
+ var ANIMATION_URL = "http://hifi-content.s3.amazonaws.com/alexia/Sitting_Idle.fbx";
+ var ANIMATION_FPS = 30;
+ var ANIMATION_FIRST_FRAME = 1;
+ var ANIMATION_LAST_FRAME = 350;
+ var RELEASE_TIME = 500; // ms
+ var RELEASE_DISTANCE = 0.2; // meters
+ var MAX_IK_ERROR = 30;
+ var IK_SETTLE_TIME = 250; // ms
+ var DESKTOP_UI_CHECK_INTERVAL = 500;
+ var DESKTOP_MAX_DISTANCE = 2.8;
+ var SIT_DELAY = 25;
+ var ALPHA_START = 0.7; //for overlays
+ var MAX_RESET_DISTANCE = 0.5; // meters
+ var OVERRIDEN_DRIVE_KEYS = [
+ DriveKeys.TRANSLATE_X,
+ DriveKeys.TRANSLATE_Y,
+ DriveKeys.TRANSLATE_Z,
+ DriveKeys.STEP_TRANSLATE_X,
+ DriveKeys.STEP_TRANSLATE_Y,
+ DriveKeys.STEP_TRANSLATE_Z,
+ ];
+ this.transparencyInterval = null;
+ this.entityID = null;
+ this.animStateHandlerID = null;
+ this.interval = null;
+ this.sitDownSettlePeriod = null;
+ this.lastTimeNoDriveKeys = null;
+ this.sittingDown = false;
+
+ var checkForHover;
+
+ // Preload the animation file
+ this.animation = AnimationCache.prefetch(ANIMATION_URL);
+
+ this.preload = function(entityID) {
+ this.entityID = entityID;
+ }
+ this.unload = function() {
+ if (Settings.getValue(SETTING_KEY) === this.entityID) {
+ this.standUp();
+ }
+ if (this.interval !== null) {
+ Script.clearInterval(this.interval);
+ this.interval = null;
+ }
+
+ if (this.transparencyInterval !== null) {
+ Script.clearInterval(this.transparencyInterval);
+ this.transparencyInterval = null;
+ }
+
+ if (checkForHover !== null) {
+ Script.clearInterval(checkForHover);
+ checkForHover = null;
+ }
+
+ this.cleanupOverlay();
+ }
+
+ this.setSeatUser = function(user) {
+ try {
+ var userData = Entities.getEntityProperties(this.entityID, ["userData"]).userData;
+ userData = JSON.parse(userData);
+
+ if (user !== null) {
+ userData.seat.user = user;
+ } else {
+ delete userData.seat.user;
+ }
+
+ Entities.editEntity(this.entityID, {
+ userData: JSON.stringify(userData)
+ });
+ } catch (e) {
+ // Do Nothing
+ }
+ }
+ this.getSeatUser = function() {
+ try {
+ var properties = Entities.getEntityProperties(this.entityID, ["userData", "position"]);
+ var userData = JSON.parse(properties.userData);
+
+ // If MyAvatar return my uuid
+ if (userData.seat.user === MyAvatar.sessionUUID) {
+ return userData.seat.user;
+ }
+
+
+ // If Avatar appears to be sitting
+ if (userData.seat.user) {
+ var avatar = AvatarList.getAvatar(userData.seat.user);
+ if (avatar && (Vec3.distance(avatar.position, properties.position) < RELEASE_DISTANCE)) {
+ return userData.seat.user;
+ }
+ }
+ } catch (e) {
+ // Do nothing
+ }
+
+ // Nobody on the seat
+ return null;
+ }
+
+ // Is the seat used
+ this.checkSeatForAvatar = function() {
+ var seatUser = this.getSeatUser();
+
+ // If MyAvatar appears to be sitting
+ if (seatUser === MyAvatar.sessionUUID) {
+ var properties = Entities.getEntityProperties(this.entityID, ["position"]);
+ return Vec3.distance(MyAvatar.position, properties.position) < RELEASE_DISTANCE;
+ }
+
+ return seatUser !== null;
+ }
+
+ this.rolesToOverride = function() {
+ return MyAvatar.getAnimationRoles().filter(function(role) {
+ return !(role.startsWith("right") || role.startsWith("left"));
+ });
+ }
+
+ // Handler for user changing the avatar model while sitting. There's currently an issue with changing avatar models while override role animations are applied,
+ // so to avoid that problem, re-apply the role overrides once the model has finished changing.
+ this.modelURLChangeFinished = function () {
+ print("Sitter's model has FINISHED changing. Reapply anim role overrides.");
+ var roles = this.rolesToOverride();
+ for (i in roles) {
+ MyAvatar.overrideRoleAnimation(roles[i], ANIMATION_URL, ANIMATION_FPS, true, ANIMATION_FIRST_FRAME, ANIMATION_LAST_FRAME);
+ }
+ }
+
+ this.sitDown = function() {
+ if (this.checkSeatForAvatar()) {
+ print("Someone is already sitting in that chair.");
+ return;
+ }
+
+
+ print("Sitting down (" + this.entityID + ")");
+ this.sittingDown = true;
+
+ var now = Date.now();
+ this.sitDownSettlePeriod = now + IK_SETTLE_TIME;
+ this.lastTimeNoDriveKeys = now;
+
+ var previousValue = Settings.getValue(SETTING_KEY);
+ Settings.setValue(SETTING_KEY, this.entityID);
+ this.setSeatUser(MyAvatar.sessionUUID);
+ if (previousValue === "") {
+ MyAvatar.characterControllerEnabled = false;
+ MyAvatar.hmdLeanRecenterEnabled = false;
+ var roles = this.rolesToOverride();
+ for (i in roles) {
+ MyAvatar.overrideRoleAnimation(roles[i], ANIMATION_URL, ANIMATION_FPS, true, ANIMATION_FIRST_FRAME, ANIMATION_LAST_FRAME);
+ }
+
+ for (var i in OVERRIDEN_DRIVE_KEYS) {
+ MyAvatar.disableDriveKey(OVERRIDEN_DRIVE_KEYS[i]);
+ }
+
+ MyAvatar.resetSensorsAndBody();
+ }
+
+ var properties = Entities.getEntityProperties(this.entityID, ["position", "rotation"]);
+ var index = MyAvatar.getJointIndex("Hips");
+ MyAvatar.pinJoint(index, properties.position, properties.rotation);
+
+ this.animStateHandlerID = MyAvatar.addAnimationStateHandler(function(properties) {
+ return { headType: 0 };
+ }, ["headType"]);
+ Script.update.connect(this, this.update);
+ MyAvatar.onLoadComplete.connect(this, this.modelURLChangeFinished);
+ }
+
+ this.standUp = function() {
+
+ print("Standing up (" + this.entityID + ")");
+ MyAvatar.removeAnimationStateHandler(this.animStateHandlerID);
+ Script.update.disconnect(this, this.update);
+ MyAvatar.onLoadComplete.disconnect(this, this.modelURLChangeFinished);
+
+ if (MyAvatar.sessionUUID === this.getSeatUser()) {
+ this.setSeatUser(null);
+ }
+
+ if (Settings.getValue(SETTING_KEY) === this.entityID) {
+ Settings.setValue(SETTING_KEY, "");
+
+ for (var i in OVERRIDEN_DRIVE_KEYS) {
+ MyAvatar.enableDriveKey(OVERRIDEN_DRIVE_KEYS[i]);
+ }
+
+
+ var roles = this.rolesToOverride();
+ for (i in roles) {
+ MyAvatar.restoreRoleAnimation(roles[i]);
+ }
+ MyAvatar.characterControllerEnabled = true;
+ MyAvatar.hmdLeanRecenterEnabled = true;
+
+ var index = MyAvatar.getJointIndex("Hips");
+ MyAvatar.clearPinOnJoint(index);
+
+ MyAvatar.resetSensorsAndBody();
+
+ Script.setTimeout(function() {
+ MyAvatar.bodyPitch = 0.0;
+ MyAvatar.bodyRoll = 0.0;
+ }, SIT_DELAY);
+ }
+ this.sittingDown = false;
+ }
+
+ //on trigger at a certain distance, sit in the chair (VR)
+ this.startNearTrigger = function() {
+ this.sitDown();
+ };
+
+ //on trigger at a certain distance, sit in the chair (VR)
+ this.startFarTrigger = function() {
+ var properties = Entities.getEntityProperties(this.entityID, ["position"]);
+ if(Vec3.distance(MyAvatar.position, properties.position) < DESKTOP_MAX_DISTANCE){
+ this.sitDown();
+ }
+ };
+
+ this.createOverlay = function() {
+ var url;
+ var text = "Grab to sit";
+ var textMargin = 0.05;
+ var lineHeight = 0.15;
+
+ if(HMD.active){ //change the image based on what modality the user is in
+ url = "http://hifi-content.s3.amazonaws.com/alexia/TriggerToSit.png";
+ } else {
+ url = "http://hifi-content.s3.amazonaws.com/alexia/ClickToSit.png";
+ }
+
+ this.overlay = Overlays.addOverlay("image3d", {
+ position: { x: 0.0, y: 0.0, z: 0.0},
+ dimensions: { x: 0.1, y: 0.1 },
+ url: url,
+ ignoreRayIntersection: false,
+ alpha: ALPHA_START,
+ visible: true,
+ isFacingAvatar: true,
+ emissive: true
+ });
+
+ var overlayDimensions = {
+ x: 0.3,
+ y: 0.3
+ }
+
+ var properties = Entities.getEntityProperties(this.entityID, ["position", "registrationPoint", "dimensions", "rotation"]);
+ var yOffset = (0.8 - properties.registrationPoint.y) * properties.dimensions.y + (overlayDimensions.y / 2.0);
+ var overlayPosition = Vec3.sum(properties.position, { x: 0, y: yOffset, z: 0 });
+ Overlays.editOverlay(this.overlay, {
+ position: overlayPosition,
+ dimensions: overlayDimensions,
+ });
+
+ }
+
+ this.cleanupOverlay = function() {
+ if (this.overlay !== null) {
+ Overlays.deleteOverlay(this.overlay);
+ this.overlay = null;
+ }
+ }
+
+ this.update = function(dt) {
+
+ if (this.sittingDown === true) {
+ var properties = Entities.getEntityProperties(this.entityID);
+ var avatarDistance = Vec3.distance(MyAvatar.position, properties.position);
+ var ikError = MyAvatar.getIKErrorOnLastSolve();
+ var now = Date.now();
+ var shouldStandUp = false;
+
+ // Check if a drive key is pressed
+ var hasActiveDriveKey = false;
+ for (var i in OVERRIDEN_DRIVE_KEYS) {
+ if (MyAvatar.getRawDriveKey(OVERRIDEN_DRIVE_KEYS[i]) != 0.0) {
+ hasActiveDriveKey = true;
+ break;
+ }
+ }
+
+
+ // Only standup if user has been pushing a drive key for RELEASE_TIME
+ if (hasActiveDriveKey) {
+ var elapsed = now - this.lastTimeNoDriveKeys;
+ shouldStandUp = elapsed > RELEASE_TIME;
+ } else {
+ this.lastTimeNoDriveKeys = Date.now();
+ }
+
+ // Allow some time for the IK to settle
+ if (ikError > MAX_IK_ERROR && now > this.sitDownSettlePeriod) {
+ shouldStandUp = true;
+ }
+
+ if (MyAvatar.sessionUUID !== this.getSeatUser()) {
+ shouldStandUp = true;
+ }
+
+ if (shouldStandUp || avatarDistance > RELEASE_DISTANCE) {
+ print("IK error: " + ikError + ", distance from chair: " + avatarDistance);
+
+ // Move avatar in front of the chair to avoid getting stuck in collision hulls
+ if (avatarDistance < MAX_RESET_DISTANCE) {
+ var offset = { x: 0, y: 1.0, z: -0.5 - properties.dimensions.z * properties.registrationPoint.z };
+ var position = Vec3.sum(properties.position, Vec3.multiplyQbyV(properties.rotation, offset));
+ MyAvatar.position = position;
+ print("Moving Avatar in front of the chair.");
+ // Delay standing up by 1 cycle.
+ // This leaves times for the avatar to actually move since a lot
+ // of the stand up operations are threaded
+ return;
+ }
+
+ this.standUp();
+ }
+ }
+ }
+
+ this.canSitDesktop = function() {
+ var properties = Entities.getEntityProperties(this.entityID, ["position"]);
+ var distanceFromSeat = Vec3.distance(MyAvatar.position, properties.position);
+ return distanceFromSeat < DESKTOP_MAX_DISTANCE && !this.checkSeatForAvatar();
+ }
+
+ // This part is used to fade out the overlay over time
+ this.lerpTransparency = function() {
+ var startAlpha = ALPHA_START;
+ var changeAlpha = 0.01;
+ var that = this;
+ this.transparencyInterval = Script.setInterval(function(){
+ startAlpha = startAlpha - changeAlpha; // My new alpha
+ Overlays.editOverlay(that.overlay, {alpha : startAlpha}); // Edit the existing overlay
+ if(startAlpha <= 0){
+ Script.clearInterval(that.transparencyInterval); // Stop my interval when it's faded out
+ that.transparencyInterval = null;
+ }
+ }, 50);
+ }
+
+ this.showOverlays = function() { // Show overlays when I'm close to the seat
+ if (isInEditMode() || this.interval !== null) {
+ return;
+ }
+ if (this.overlay === null) { // Make and overlay if there isn't one
+ if (this.canSitDesktop()) {
+ this.createOverlay();
+ if(this.transparencyInterval === null){
+ this.lerpTransparency();
+ }
+ }
+ } else if (!this.canSitDesktop()) {
+ this.cleanupOverlay();
+ }
+ }
+
+ var that = this; // Run my method to check if we've encountered a chair
+ checkForHover = Script.setInterval(function(){
+ that.showOverlays();
+ }, DESKTOP_UI_CHECK_INTERVAL);
+
+ this.clickDownOnEntity = function (id, event) {
+ if (isInEditMode()) {
+ return;
+ }
+ if (event.isPrimaryButton && this.canSitDesktop()) {
+ this.sitDown();
+ }
+ }
+});
diff --git a/hifi-content/alexia/test.fbx b/hifi-content/alexia/test.fbx
new file mode 100644
index 000000000..b8d15240e
--- /dev/null
+++ b/hifi-content/alexia/test.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c0346b15977d3f97b9d58a794808ae5ed7827e3322ce772aa3aa74834ec05513
+size 2306768
diff --git a/hifi-content/alexia/unityScriptStructure.js b/hifi-content/alexia/unityScriptStructure.js
new file mode 100644
index 000000000..0233f1e39
--- /dev/null
+++ b/hifi-content/alexia/unityScriptStructure.js
@@ -0,0 +1,91 @@
+// unityScriptStructure.js
+//
+// Created by Alexia Mandeville on 3 May 2018
+// Copyright 2018 High Fidelity, Inc.
+//
+// A script for people familiar with Unity's methods to get started in High Fidelity
+// Throughout the script I write about 'Entities' - think of these as 'GameObjects'
+// This script would be attached to an entity, just like how you would add a script to a gameObject in the hierarchy
+// You might also want to check out our Unity to High Fidelity exporter! https://github.com/highfidelity/unity-to-hifi-exporter
+//
+// High Fidelity docs: https://docs.highfidelity.com/
+//
+// Distributed under the Apache License, Version 2.0.
+// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
+
+(function() { // For entity scripts, we wrap it in an anon function
+
+
+ /* Start() (kind of) */
+
+ this.preload = function(entityID) { // This runs the first time an avatar encounters the entity over the network
+ print("start" + entityID);
+ };
+
+ /* Update() */
+
+ /*function update(dt) { // This runs update at a rate of 60hz, but isn't synced on a frame
+ print("Called until disconnected @", dt, "ms");
+ }
+ Script.update.connect(update);*/
+
+ /* Input.GetKeyDown() */
+
+ Controller.keyPressEvent.connect(function (event) { // Do something on key input
+
+ if (event.text === "x") {
+ print(JSON.stringify(event.text));
+ }
+
+ });
+
+ /* Input.GetMouseButtonDown() */
+
+ Controller.mousePressEvent.connect(function (event) { // Do something on mousepress (any button)
+ print(JSON.stringify(event));
+ });
+
+ /* Coroutines */
+
+ /*
+ var coroutine = Script.setInterval(function() { // This acts like 'yield return new WaitForSeconds(1)' does in a coroutine
+ print("coroutine");
+ }, 1000); //ms
+
+ /* Stop the coroutine */
+ // Script.clearInterval(coroutine);
+
+ /* OnCollisionEnter() */
+
+ MyAvatar.collisionWithEntity.connect(function (collision) { // Do something when my avatar collides with an entity
+ print("Your avatar collided with an entity.");
+ });
+
+ this.collisionWithEntity = function (myID, otherID, collision) { // When another object collides with this object
+ print("Collision of " + myID + " and " + otherID);
+ };
+
+ /* Instantiate() */
+
+ /*
+ var entityID = Entities.addEntity({
+ type: "Box",
+ position: Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, { x: 0, y: 0, z: -5 })),
+ dimensions: { x: 0.5, y: 0.5, z: 0.5 },
+ color: { red: 128, green: 128, blue: 128 },
+ gravity: { x: 0, y: -9.8, z: 0 },
+ velocity: { x: 0, y: 0.1, z: 0 }, // Kick off physics.
+ dynamic: true,
+ collisionless: false, // So that collision events are generated.
+ script: "(" + entityScript + ")", // Could host the script on a Web server instead.
+ lifetime: 300 // Delete after 5 minutes.
+ });
+ */
+
+ function onEnding () {
+ Script.update.disconnect(update);
+ // And other bindings here
+ }
+ Script.scriptEnding.connect(onEnding);
+
+});
\ No newline at end of file
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_Flag.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_Flag.FBX
index 8e2d4792b..22001842f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_Flag.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_Flag.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleArch_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleArch_01.FBX
index 7247b3984..24e80383f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleArch_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleArch_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleArch_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleArch_02.FBX
index bccabd136..fcb8fc5f5 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleArch_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleArch_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleBox.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleBox.FBX
index cdbde0289..a3e0414ab 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleBox.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleBox.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleHill.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleHill.FBX
index cdb34f65e..43e1fd4b8 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleHill.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleHill.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleLooping.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleLooping.FBX
index 6b8bcb25a..5e4ce6f6d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleLooping.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleLooping.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleBig.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleBig.FBX
index 4670a36b5..423771af8 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleBig.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleBig.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleCornerBig.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleCornerBig.FBX
index c8c1f165c..8a0efaa77 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleCornerBig.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleCornerBig.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleCornerSmall.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleCornerSmall.FBX
index fdcb7f07d..d15ccae55 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleCornerSmall.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleCornerSmall.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleSmall.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleSmall.FBX
index 64ed5ee01..6a63121ca 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleSmall.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTriangleSmall.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTunnel_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTunnel_01.FBX
index c6bb42891..d40ed85f1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTunnel_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTunnel_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTunnel_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTunnel_02.FBX
index 5d935b822..e5fe665ea 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTunnel_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_ObstacleTunnel_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCrossing_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCrossing_01.FBX
index 15e29281f..6830578a2 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCrossing_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCrossing_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCrossing_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCrossing_02.FBX
index f4ad95471..a4694b82c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCrossing_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCrossing_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_01.FBX
index 8389fa6f0..16cfddad3 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_02.FBX
index 3c81554d2..5798c463d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_03.FBX
index eebc14103..b242d5e7d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_04.FBX
index 9450a21d6..51af896e0 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackCurve_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_01.FBX
index 7bd293ed0..1a2622e53 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_02.FBX
index ffc2400be..5563c7b52 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_03.FBX
index 81802caa2..682adaf73 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_04.FBX
index 6accdda26..fc6ca9d5a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevationCurve_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_01.FBX
index 369f35e4a..f79a52c52 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_02.FBX
index e043e3237..d85b25a5d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_03.FBX
index 0ab801e64..34c92e3c0 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_04.FBX
index e2d5ccff0..916142e96 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackElevation_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackEnd.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackEnd.FBX
index bde1e25f6..ae4dcf19a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackEnd.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackEnd.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHillCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHillCurve_01.FBX
index b8e235b70..10408c852 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHillCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHillCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHillCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHillCurve_02.FBX
index 8c92005b5..bf0493087 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHillCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHillCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_01.FBX
index b5a62c6e7..e8d229432 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_02.FBX
index b58b28f8e..463fa9132 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_03.FBX
index 45b6d9bd3..bce47496a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_04.FBX
index 3de1fb6c9..b0af7ec46 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_05.FBX
index d20612e0b..47701569a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_06.FBX
index ff3c00fff..dab06b477 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHill_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_01.FBX
index 278a2a209..52ebddb91 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_01_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_01_Hole.FBX
index 5f0261e3e..fc6f33ed2 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_01_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_01_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_02.FBX
index 86b8d0e5a..e045e5451 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_02_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_02_Hole.FBX
index 086753e48..61ba6eb25 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_02_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_02_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_03.FBX
index 0bb8f4f63..ba68bfb0c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_03_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_03_Hole.FBX
index a0395749c..04294ea46 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_03_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_03_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_04.FBX
index 5655dde61..d0e1e5f5e 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_04_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_04_Hole.FBX
index 6fe5202c1..7ee4ad4e7 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_04_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_04_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_05.FBX
index 50ca2c790..980692c23 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_05_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_05_Hole.FBX
index e03770f35..3d70ae4dc 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_05_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_05_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_06.FBX
index 0accdacac..e5cb3f2fb 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_06_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_06_Hole.FBX
index f109d7c42..5ff7da490 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_06_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_06_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_07.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_07.FBX
index d00475e3d..d3e75ab43 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_07.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_07.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_07_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_07_Hole.FBX
index 7b301502d..dad380830 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_07_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_07_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_08.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_08.FBX
index 799a9ba1a..60618b4a9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_08.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_08.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_08_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_08_Hole.FBX
index 2d0a8cc4b..301715c14 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_08_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_08_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_09.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_09.FBX
index b0c40a472..b7f953398 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_09.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_09.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_09_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_09_Hole.FBX
index 747372c80..4f6843d18 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_09_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_09_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_10.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_10.FBX
index 30577b5b5..70bb8afd6 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_10.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_10.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_10_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_10_Hole.FBX
index 816bfa899..569e8989e 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_10_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_10_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_11.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_11.FBX
index 0efc0bffb..5f42226a0 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_11.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_11.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_11_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_11_Hole.FBX
index e2b7f32be..5a88ed0b9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_11_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_11_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_12.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_12.FBX
index 0833c0330..155b2e067 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_12.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_12.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_12_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_12_Hole.FBX
index 8cfe9eff4..10ece94d7 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_12_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackHole_12_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_01.FBX
index 422ca5bc7..9f1eb3f62 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_02.FBX
index 450a7cc1e..d03e30802 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_03.FBX
index b75c7fd65..58628de9a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackRamp_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStart.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStart.FBX
index 6e0b33f47..3aa0f4016 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStart.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStart.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_01.FBX
index 100a93ec8..d49fc56c8 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_02.FBX
index a6b11dc0f..ce1ddc3fb 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_03.FBX
index 3d5d164b9..68b641ef3 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackStraight_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_01.FBX
index 55feaae2b..dde61fbe5 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_02.FBX
index 7c2fb75af..bff029b3c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_03.FBX
index c1f72a401..cd2402969 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_04.FBX
index 1934b38ba..b1793c437 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_05.FBX
index f68d6b130..e85d4462c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_06.FBX
index 370d60cc5..69898b83b 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_07.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_07.FBX
index 8dcaf4795..f661bf5d0 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_07.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_07.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_08.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_08.FBX
index f6316af0f..85be9000a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_08.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Collisions/col_TrackZigzag_08.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_01.FBX
index 33eefcb19..ed59dc5a1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_02.FBX
index d1ec47527..11ccc89b1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_03.FBX
index ee41a5efc..7f3dc411d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Flags/mesh_Flag_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_01.FBX
index 08d5b6c73..a19a44f89 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_02.FBX
index e38afa11a..02fec027f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_03.FBX
index 5fb7a9994..bd3ac03c6 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_04.FBX
index 8db791e68..b820d7f6e 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_05.FBX
index 7c41988b1..418b3f291 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_06.FBX
index c9b859c14..b0600cc9c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_07.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_07.FBX
index afd33038b..7e9e52302 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_07.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_07.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_08.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_08.FBX
index d592f19df..017214589 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_08.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_08.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_09.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_09.FBX
index aa326747e..154c400ab 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_09.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_09.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_10.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_10.FBX
index 8630e2188..b277665e5 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_10.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_Golfballs/mesh_Golfball_10.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachArch_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachArch_01.FBX
index 6e9dbaac7..60d919398 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachArch_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachArch_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachArch_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachArch_02.FBX
index 2837e165b..415de8c2a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachArch_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachArch_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachBox.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachBox.FBX
index e9709f001..228215766 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachBox.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachBox.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachHill.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachHill.FBX
index 51452f615..a2aa4c76e 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachHill.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachHill.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachLooping.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachLooping.FBX
index 9ffd44155..87a3f31fe 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachLooping.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachLooping.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleBig.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleBig.FBX
index cc2369f75..f5abfac92 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleBig.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleBig.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleCornerBig.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleCornerBig.FBX
index 3c082be90..dfc8ce7ee 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleCornerBig.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleCornerBig.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleCornerSmall.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleCornerSmall.FBX
index 50c6dfe38..a9d05ad39 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleCornerSmall.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleCornerSmall.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleSmall.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleSmall.FBX
index ce66448af..e0c42288c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleSmall.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTriangleSmall.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTunnel_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTunnel_01.FBX
index b2c169aae..6f8852959 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTunnel_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTunnel_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTunnel_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTunnel_02.FBX
index c5913ced9..0eb8cbcee 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTunnel_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesBeach/mesh_ObstacleBeachTunnel_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassArch_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassArch_01.FBX
index 7fab2f37b..3af204e41 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassArch_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassArch_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassArch_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassArch_02.FBX
index c001ab349..94ffcca15 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassArch_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassArch_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassBox.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassBox.FBX
index a2d87a6b3..557d220a4 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassBox.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassBox.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassHill.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassHill.FBX
index 39cf5f8d0..8bc72a5f1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassHill.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassHill.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassLooping.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassLooping.FBX
index a20d76066..2021665ed 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassLooping.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassLooping.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleBig.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleBig.FBX
index 8a96eed52..7316d006a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleBig.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleBig.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleCornerBig.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleCornerBig.FBX
index dea1226df..5944a3056 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleCornerBig.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleCornerBig.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleCornerSmall.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleCornerSmall.FBX
index 6a050cfdd..091a88bb5 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleCornerSmall.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleCornerSmall.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleSmall.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleSmall.FBX
index 0b4fc4075..5da5b2986 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleSmall.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTriangleSmall.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTunnel_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTunnel_01.FBX
index a36a06c13..bd1e0ba1b 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTunnel_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTunnel_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTunnel_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTunnel_02.FBX
index d918c755d..db337a998 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTunnel_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesGrass/mesh_ObstacleGrassTunnel_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadArch_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadArch_01.FBX
index 00aaab597..fa353f27c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadArch_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadArch_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadArch_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadArch_02.FBX
index 37f07c52b..e8c45059b 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadArch_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadArch_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadBox.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadBox.FBX
index 44f7fd597..e08d0b689 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadBox.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadBox.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadHill.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadHill.FBX
index db7a9b86f..06b9e4c8d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadHill.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadHill.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadLooping.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadLooping.FBX
index 48955e115..95ce5c83c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadLooping.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadLooping.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleBig.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleBig.FBX
index 7d1001c5d..7ecc43654 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleBig.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleBig.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleCornerBig.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleCornerBig.FBX
index d9fb11964..b25a86e67 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleCornerBig.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleCornerBig.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleCornerSmall.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleCornerSmall.FBX
index 942d47f55..626193581 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleCornerSmall.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleCornerSmall.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleSmall.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleSmall.FBX
index 06d24bef7..9d13af8f1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleSmall.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTriangleSmall.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTunnel_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTunnel_01.FBX
index ed1c8abfa..f8910b21a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTunnel_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTunnel_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTunnel_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTunnel_02.FBX
index 10626af64..b68301988 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTunnel_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_ObstaclesRoad/mesh_ObstacleRoadTunnel_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCrossing_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCrossing_01.FBX
index f7c7d7a4f..c9573a5e2 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCrossing_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCrossing_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCrossing_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCrossing_02.FBX
index d0da4bb30..bbb897487 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCrossing_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCrossing_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_01.FBX
index d20fae120..e0966dde9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_02.FBX
index b12885cec..f1cbd34d7 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_03.FBX
index 1db253c21..5e5f3bfdf 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_04.FBX
index f29dca46e..a68a54b86 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachCurve_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_01.FBX
index 50534e868..aec6207b7 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_02.FBX
index 4d67576f3..cbf274d95 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_03.FBX
index 4873febfe..5a0848643 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_04.FBX
index f681d7772..0c4ae2785 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevationCurve_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_01.FBX
index cff836860..991c3e8cc 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_02.FBX
index a972ec52c..9543bc07c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_03.FBX
index bd419ba8e..eeec9cf6b 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_04.FBX
index cc8396fc0..781374ada 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachElevation_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachEnd.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachEnd.FBX
index 0b1acca36..014ded4a0 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachEnd.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachEnd.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHillCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHillCurve_01.FBX
index e2ff088bb..21219b54f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHillCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHillCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHillCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHillCurve_02.FBX
index 3d1ec92a1..f8863ecbf 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHillCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHillCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_01.FBX
index ad0000c81..bdfdcf5ff 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_02.FBX
index f2d0d616b..68a88b9a7 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_03.FBX
index 2a32540d8..9b9a19772 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_04.FBX
index b790ce5b8..be2e11dc2 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_05.FBX
index 0ac1a9fca..5dd7c6906 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_06.FBX
index 10ccd1473..e25cb039f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHill_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_01.FBX
index 2e8c8e276..2ab96b5cc 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_01_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_01_Hole.FBX
index f1ddb340d..d74a7ef7d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_01_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_01_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_02.FBX
index b37dacb64..f66941325 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_02_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_02_Hole.FBX
index ece1a30d7..287f2ed31 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_02_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_02_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_03.FBX
index ea2036945..c5328bfd4 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_03_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_03_Hole.FBX
index fee9a644d..dcec567d2 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_03_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_03_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_04.FBX
index 98419c644..3b644cdf1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_04_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_04_Hole.FBX
index 51ed6367e..1fe76c35b 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_04_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_04_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_05.FBX
index 730e36797..0d43f0e06 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_05_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_05_Hole.FBX
index 915107c36..2048d3487 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_05_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_05_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_06.FBX
index 45160db29..9b5d989d9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_06_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_06_Hole.FBX
index 3188bab8d..ec7b6c5d2 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_06_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_06_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_07.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_07.FBX
index e515ae12a..37c56b143 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_07.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_07.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_07_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_07_Hole.FBX
index 06d0e565a..7c9af056c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_07_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_07_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_08.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_08.FBX
index 4cacf5bef..96ac9da66 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_08.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_08.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_08_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_08_Hole.FBX
index a5d25c5f9..63ce8fe74 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_08_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_08_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_09.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_09.FBX
index 38d5af5f1..a0ca3ba79 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_09.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_09.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_09_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_09_Hole.FBX
index 78f72796f..d1794deab 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_09_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_09_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_10.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_10.FBX
index 13918bbae..447e30f0c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_10.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_10.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_10_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_10_Hole.FBX
index 708136d71..bffd2b4c7 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_10_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_10_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_11.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_11.FBX
index 6b76b9990..9a55c0566 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_11.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_11.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_11_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_11_Hole.FBX
index 6875aecec..ddad09d28 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_11_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_11_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_12.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_12.FBX
index 2bc6f2c5c..d1ea240ba 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_12.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_12.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_12_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_12_Hole.FBX
index c81536fd4..60346f45b 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_12_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachHole_12_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_01.FBX
index 8a82e8252..03ef63e90 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_02.FBX
index 7a98c9ed1..fe858323a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_03.FBX
index e64e51e27..132a92a6a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachRamp_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStart.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStart.FBX
index 7f3b26a6f..ded5bd37a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStart.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStart.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_01.FBX
index 15f254d0b..b60b58b09 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_02.FBX
index 4b4803b04..d71227809 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_03.FBX
index 8e55c9e66..c0960edc4 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachStraight_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_01.FBX
index e4bc0147a..6c645383c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_02.FBX
index ed54c5115..28f88e547 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_03.FBX
index c30a1d9ff..d24f376a4 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_04.FBX
index 29ee7677f..0e00e8664 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_05.FBX
index 288e2eb92..c894450a7 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_06.FBX
index 498ff5e84..b3cc0deee 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_07.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_07.FBX
index c0055cb71..b981b7dc3 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_07.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_07.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_08.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_08.FBX
index c2c4edc7e..30a15a43e 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_08.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksBeach/mesh_TrackBeachZigzag_08.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCrossing_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCrossing_01.FBX
index afc39fdd6..ad846af65 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCrossing_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCrossing_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCrossing_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCrossing_02.FBX
index 24d2ae990..f3c45161d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCrossing_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCrossing_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_01.FBX
index 98157c53d..7d48b6a39 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_02.FBX
index 5b010a35f..268436bcc 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_03.FBX
index 9206bb14c..15200aa34 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_04.FBX
index 1e6c48c36..c68aed55c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassCurve_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_01.FBX
index 70060459a..4a3dc0339 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_02.FBX
index cedf8f072..d47bce480 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_03.FBX
index e2b07ac91..35fbc0151 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_04.FBX
index b98cf2a19..9af0770b9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevationCurve_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_01.FBX
index 6c67bcb56..1efd7250a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_02.FBX
index d968c3ff5..fb6f18ac7 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_03.FBX
index ff9ddabc7..dc4efb90e 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_04.FBX
index 7e7516499..5c094be95 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassElevation_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassEnd.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassEnd.FBX
index 8c343c068..fda1b32b9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassEnd.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassEnd.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHillCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHillCurve_01.FBX
index fc3daca31..d29dc5bc7 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHillCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHillCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHillCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHillCurve_02.FBX
index d79515b1c..c9083532d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHillCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHillCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_01.FBX
index 7305bf4a0..7caca5ddf 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_02.FBX
index 27d79e6b4..1dbda4385 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_03.FBX
index d67636786..c9299445f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_04.FBX
index d8787c485..c97a17af1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_05.FBX
index 50144823e..699076237 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_06.FBX
index 081166ccc..d0a725bbd 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHill_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_01.FBX
index 70135c0a3..65089ab75 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_01_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_01_Hole.FBX
index 8e948b203..3dd42df01 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_01_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_01_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_02.FBX
index c89f199e3..1e13aadc2 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_02_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_02_Hole.FBX
index 022b7fed7..32c3284d8 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_02_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_02_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_03.FBX
index f43aaf5c8..eb819b285 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_03_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_03_Hole.FBX
index 977b36d7e..b57adcdb9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_03_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_03_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_04.FBX
index 01898edb6..89a9805bf 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_04_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_04_Hole.FBX
index 0f2715559..601d47d8c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_04_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_04_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_05.FBX
index be74a0dd3..adfac8624 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_05_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_05_Hole.FBX
index f226d5270..c261eb684 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_05_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_05_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_06.FBX
index 744a088ca..fb15aef2d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_06_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_06_Hole.FBX
index e0d853247..ed288c88f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_06_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_06_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_07.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_07.FBX
index f9c27fcad..901a007f1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_07.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_07.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_07_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_07_Hole.FBX
index 00b4229f9..ff12b5e6d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_07_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_07_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_08.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_08.FBX
index 51159fe87..f7ed451bd 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_08.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_08.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_08_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_08_Hole.FBX
index df0be86bf..a81605da5 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_08_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_08_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_09.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_09.FBX
index 6a4b01010..76a558126 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_09.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_09.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_09_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_09_Hole.FBX
index 4b296ae24..f6a05ba45 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_09_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_09_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_10.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_10.FBX
index 635be6bb4..07e759d57 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_10.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_10.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_10_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_10_Hole.FBX
index 0eafb1ad0..ffbb15765 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_10_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_10_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_11.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_11.FBX
index c434b7bef..d041eb82d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_11.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_11.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_11_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_11_Hole.FBX
index 55fe055e3..178c3cf7d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_11_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_11_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_12.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_12.FBX
index d21043acf..e96df68a2 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_12.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_12.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_12_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_12_Hole.FBX
index cdfcc0332..714173b62 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_12_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassHole_12_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_01.FBX
index 1046a0fe7..85cf672c5 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_02.FBX
index 92d393e6b..5f5a80033 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_03.FBX
index 1d8f51d60..a97426cf1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassRamp_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStart.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStart.FBX
index 001c8fa1a..f3b17e995 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStart.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStart.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_01.FBX
index bee7717ab..95ef84082 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_02.FBX
index 20704d2b7..c6c95d6d3 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_03.FBX
index 2830cff17..3001d86c0 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassStraight_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_01.FBX
index 3b77cdbf1..66853fb1c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_02.FBX
index e355858f9..33793943d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_03.FBX
index c96690032..32b25a591 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_04.FBX
index 514ed17c2..8e0e25c55 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_05.FBX
index 2d2c3cabc..2a2cd225e 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_06.FBX
index 5e24f9cba..55bb53d98 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_07.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_07.FBX
index fa2e26d99..d0f4c7049 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_07.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_07.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_08.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_08.FBX
index a22c520d0..8a6eba25b 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_08.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksGrass/mesh_TrackGrassZigzag_08.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCrossing_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCrossing_01.FBX
index f1325b92b..b52b4c7fc 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCrossing_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCrossing_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCrossing_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCrossing_02.FBX
index 0a6169709..bba10a718 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCrossing_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCrossing_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_01.FBX
index 43e2a5a32..7517ecc07 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_02.FBX
index f7fb61b9f..e06e70446 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_03.FBX
index 2cb1ee8ab..b8315a425 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_04.FBX
index 7e2f117c6..c486fcb1c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadCurve_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_01.FBX
index a3eca59e8..a99f72778 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_02.FBX
index 04d71adc7..f38ff5f19 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_03.FBX
index f9d58e5b8..634e329b9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_04.FBX
index 14befb933..55686c911 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevationCurve_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_01.FBX
index 472dc40d4..c4bff6a70 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_02.FBX
index 13af35123..488eed6f9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_03.FBX
index 305ab3172..087332bad 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_04.FBX
index 4f2940506..6f2e2f55b 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadElevation_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadEnd.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadEnd.FBX
index 981e2e3f6..28d6f38c9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadEnd.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadEnd.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHillCurve_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHillCurve_01.FBX
index 1eb676217..d42eda687 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHillCurve_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHillCurve_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHillCurve_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHillCurve_02.FBX
index 240b7cf33..8ed9cc729 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHillCurve_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHillCurve_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_01.FBX
index 646f242cf..eddf5d287 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_02.FBX
index cfd0d0432..3a8973028 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_03.FBX
index a666c47c2..548fe73b9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_04.FBX
index cdef3ca70..91453ecca 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_05.FBX
index abdcb45be..927573a06 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_06.FBX
index de997131e..dc67620c6 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHill_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_01.FBX
index e79072092..5484fbe21 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_01_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_01_Hole.FBX
index 587c615e7..274b60c6a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_01_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_01_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_02.FBX
index e160782f5..2be66af28 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_02_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_02_Hole.FBX
index bc4714744..712ceb86f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_02_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_02_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_03.FBX
index 027f6d488..f5befa5a4 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_03_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_03_Hole.FBX
index ad2ac0454..886e39a81 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_03_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_03_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_04.FBX
index 6e66e6179..b6917612f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_04_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_04_Hole.FBX
index a63260d7b..2f4f3a26a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_04_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_04_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_05.FBX
index d7f9fed93..1d8745c6f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_05_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_05_Hole.FBX
index 6bc5ef24a..546ca0701 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_05_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_05_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_06.FBX
index 2d9d04db6..8e331b6bd 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_06_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_06_Hole.FBX
index 4a88b6a3c..2966a7584 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_06_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_06_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_07.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_07.FBX
index 932bf12db..e52135074 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_07.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_07.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_07_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_07_Hole.FBX
index 4f7eb721e..f9a902c4f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_07_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_07_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_08.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_08.FBX
index ccb108601..e3fbca575 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_08.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_08.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_08_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_08_Hole.FBX
index 53c084497..0901418a1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_08_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_08_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_09.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_09.FBX
index 5af50a2de..c58931ac8 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_09.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_09.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_09_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_09_Hole.FBX
index 7a241f00b..2e168db58 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_09_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_09_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_10.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_10.FBX
index ad28cd4ce..e9a4cdff9 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_10.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_10.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_10_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_10_Hole.FBX
index 351d296aa..ee4054c9d 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_10_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_10_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_11.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_11.FBX
index 53510a747..28c936fbf 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_11.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_11.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_11_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_11_Hole.FBX
index 0c304e1fa..2964fd143 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_11_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_11_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_12.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_12.FBX
index f8bdf3bea..c19b06bdc 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_12.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_12.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_12_Hole.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_12_Hole.FBX
index 576f3c956..87df59da7 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_12_Hole.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadHole_12_Hole.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_01.FBX
index e3d891448..3269dfdaa 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_02.FBX
index 91a97a52a..22a158f8a 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_03.FBX
index b03509b2f..e41f7715f 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadRamp_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStart.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStart.FBX
index 2e0a77e97..ad914c0c5 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStart.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStart.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_01.FBX
index 1ca1a467f..8f6cfb2b0 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_02.FBX
index 39e0ef42a..2e12261c4 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_03.FBX
index a8741a82f..d7ba6bf25 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadStraight_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_01.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_01.FBX
index 333ce36b1..3ea3277c0 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_01.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_01.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_02.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_02.FBX
index 24cc8a70b..017f43da1 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_02.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_02.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_03.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_03.FBX
index d237a4bea..b44b9c592 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_03.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_03.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_04.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_04.FBX
index 33330a3c2..d22237fba 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_04.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_04.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_05.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_05.FBX
index 0381dd7a5..19904d14c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_05.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_05.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_06.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_06.FBX
index e17e1b0c3..0a9d2cf3c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_06.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_06.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_07.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_07.FBX
index 188303bdb..5ad5007ff 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_07.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_07.FBX differ
diff --git a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_08.FBX b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_08.FBX
index 51e4849f2..9286d318c 100644
Binary files a/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_08.FBX and b/hifi-public/Hackathon/Minigolf Graphics Pack/Meshes/Meshes_TracksRoad/mesh_TrackRoadZigzag_08.FBX differ
diff --git a/hifi-public/baked-welcome-win/BrithdayCakeCookieDoughBites/original/BrithdayCakeCookieDoughBites.FBX b/hifi-public/baked-welcome-win/BrithdayCakeCookieDoughBites/original/BrithdayCakeCookieDoughBites.FBX
index 36b8df9f9..f0d9dcfb7 100644
Binary files a/hifi-public/baked-welcome-win/BrithdayCakeCookieDoughBites/original/BrithdayCakeCookieDoughBites.FBX and b/hifi-public/baked-welcome-win/BrithdayCakeCookieDoughBites/original/BrithdayCakeCookieDoughBites.FBX differ
diff --git a/hifi-public/baked-welcome-win/Chuckles/original/Chuckles.FBX b/hifi-public/baked-welcome-win/Chuckles/original/Chuckles.FBX
index 75a1c4652..a257c3afe 100644
Binary files a/hifi-public/baked-welcome-win/Chuckles/original/Chuckles.FBX and b/hifi-public/baked-welcome-win/Chuckles/original/Chuckles.FBX differ
diff --git a/hifi-public/baked-welcome-win/KaempePalaegMorkChokolade/original/KaempePalaegMorkChokolade.FBX b/hifi-public/baked-welcome-win/KaempePalaegMorkChokolade/original/KaempePalaegMorkChokolade.FBX
index 7cf19b69f..49f9802b2 100644
Binary files a/hifi-public/baked-welcome-win/KaempePalaegMorkChokolade/original/KaempePalaegMorkChokolade.FBX and b/hifi-public/baked-welcome-win/KaempePalaegMorkChokolade/original/KaempePalaegMorkChokolade.FBX differ
diff --git a/hifi-public/baked-welcome-win/MaryJane/original/MaryJane.FBX b/hifi-public/baked-welcome-win/MaryJane/original/MaryJane.FBX
index ad9cf1413..4738b8a93 100644
Binary files a/hifi-public/baked-welcome-win/MaryJane/original/MaryJane.FBX and b/hifi-public/baked-welcome-win/MaryJane/original/MaryJane.FBX differ
diff --git a/hifi-public/baked-welcome-win/MikeAndIkeCottonCandy/original/MikeAndIkeCottonCandy.FBX b/hifi-public/baked-welcome-win/MikeAndIkeCottonCandy/original/MikeAndIkeCottonCandy.FBX
index bb6709547..95080a61d 100644
Binary files a/hifi-public/baked-welcome-win/MikeAndIkeCottonCandy/original/MikeAndIkeCottonCandy.FBX and b/hifi-public/baked-welcome-win/MikeAndIkeCottonCandy/original/MikeAndIkeCottonCandy.FBX differ
diff --git a/hifi-public/baked-welcome-win/MikeAndIkeRootBeer/original/MikeAndIkeRootBeer.FBX b/hifi-public/baked-welcome-win/MikeAndIkeRootBeer/original/MikeAndIkeRootBeer.FBX
index 01c9763dd..bb8a69683 100644
Binary files a/hifi-public/baked-welcome-win/MikeAndIkeRootBeer/original/MikeAndIkeRootBeer.FBX and b/hifi-public/baked-welcome-win/MikeAndIkeRootBeer/original/MikeAndIkeRootBeer.FBX differ
diff --git a/hifi-public/baked-welcome-win/MuddyBears/original/MuddyBears.FBX b/hifi-public/baked-welcome-win/MuddyBears/original/MuddyBears.FBX
index 414dd73eb..90569988f 100644
Binary files a/hifi-public/baked-welcome-win/MuddyBears/original/MuddyBears.FBX and b/hifi-public/baked-welcome-win/MuddyBears/original/MuddyBears.FBX differ
diff --git a/hifi-public/baked-welcome-win/Smarties/original/Smarties.FBX b/hifi-public/baked-welcome-win/Smarties/original/Smarties.FBX
index 949053ada..6d93969db 100644
Binary files a/hifi-public/baked-welcome-win/Smarties/original/Smarties.FBX and b/hifi-public/baked-welcome-win/Smarties/original/Smarties.FBX differ
diff --git a/hifi-public/cozza13/mansion/dio.FBX b/hifi-public/cozza13/mansion/dio.FBX
index bd3ba1ebb..90643d59b 100644
Binary files a/hifi-public/cozza13/mansion/dio.FBX and b/hifi-public/cozza13/mansion/dio.FBX differ
diff --git a/hifi-public/cozza13/wave/wave.FBX b/hifi-public/cozza13/wave/wave.FBX
index 6254a6da3..a4469faf3 100644
Binary files a/hifi-public/cozza13/wave/wave.FBX and b/hifi-public/cozza13/wave/wave.FBX differ
diff --git a/hifi-public/huffman/hq-baked/ModernDesk/original/ModernDesk.FBX b/hifi-public/huffman/hq-baked/ModernDesk/original/ModernDesk.FBX
index bda4f6c0e..cd34602b0 100644
Binary files a/hifi-public/huffman/hq-baked/ModernDesk/original/ModernDesk.FBX and b/hifi-public/huffman/hq-baked/ModernDesk/original/ModernDesk.FBX differ
diff --git a/hifi-public/metaverse/font/hf-metaverse.ttf b/hifi-public/metaverse/font/hf-metaverse.ttf
index 1e43bcbb0..7a4c4c1d4 100644
Binary files a/hifi-public/metaverse/font/hf-metaverse.ttf and b/hifi-public/metaverse/font/hf-metaverse.ttf differ
diff --git a/hifi-public/sam/2018-oct/models/Fence.FBX b/hifi-public/sam/2018-oct/models/Fence.FBX
index 2cdd393a9..36e1fb637 100644
Binary files a/hifi-public/sam/2018-oct/models/Fence.FBX and b/hifi-public/sam/2018-oct/models/Fence.FBX differ
diff --git a/hifi-public/sam/2018-oct/models/Hare.FBX b/hifi-public/sam/2018-oct/models/Hare.FBX
index cb92980a8..0bab1bc72 100644
Binary files a/hifi-public/sam/2018-oct/models/Hare.FBX and b/hifi-public/sam/2018-oct/models/Hare.FBX differ
diff --git a/hifi-public/test_scene_data/temp.atp/Castletest4.FBX b/hifi-public/test_scene_data/temp.atp/Castletest4.FBX
index 8cc4cedd1..5f5d13145 100644
Binary files a/hifi-public/test_scene_data/temp.atp/Castletest4.FBX and b/hifi-public/test_scene_data/temp.atp/Castletest4.FBX differ