From a432a62deecf405ad1f53911a479feb07d3a0001 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 6 Nov 2015 13:53:25 -0800 Subject: [PATCH] model swapping --- examples/marketplace/marketplaceSpawner.js | 68 ++++++++++++++++------ examples/marketplace/modelSwap.js | 41 +++++++++++++ 2 files changed, 91 insertions(+), 18 deletions(-) create mode 100644 examples/marketplace/modelSwap.js diff --git a/examples/marketplace/marketplaceSpawner.js b/examples/marketplace/marketplaceSpawner.js index 3e655e3e74..6799ed63a3 100644 --- a/examples/marketplace/marketplaceSpawner.js +++ b/examples/marketplace/marketplaceSpawner.js @@ -1,12 +1,17 @@ var floorPosition = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(Camera.getOrientation())));; floorPosition.y = MyAvatar.position.y - 5; -var modelsToLoad = [ - { - lowURL: "https://s3.amazonaws.com/hifi-public/ozan/3d_marketplace/sets/tuscany/tuscany_low.fbx", - highURL: "https://s3.amazonaws.com/hifi-public/ozan/3d_marketplace/sets/tuscany/tuscany_hi.fbx" - } -]; +Script.include('../libraries/utils.js'); + +var entityScriptURL = Script.resolvePath("modelSwap.js"); + +var modelsToLoad = [{ + lowURL: "https://s3.amazonaws.com/hifi-public/ozan/3d_marketplace/sets/dojo/dojo_low.fbx", + highURL: "https://s3.amazonaws.com/hifi-public/ozan/3d_marketplace/sets/dojo/dojo_hi.fbx" +}, { + lowURL: "https://s3.amazonaws.com/hifi-public/ozan/3d_marketplace/sets/tuscany/tuscany_low.fbx", + highURL: "https://s3.amazonaws.com/hifi-public/ozan/3d_marketplace/sets/tuscany/tuscany_hi.fbx" +}]; var models = []; @@ -15,35 +20,62 @@ var floor = Entities.addEntity({ modelURL: "https://hifi-public.s3.amazonaws.com/ozan/3d_marketplace/props/floor/3d_mp_floor.fbx", position: floorPosition, shapeType: 'box', - dimensions: {x: 1000, y: 9, z: 1000} + dimensions: { + x: 1000, + y: 9, + z: 1000 + } }); //Create grid var modelParams = { type: "Model", - shapeType: "box", - dimensions: {x: 53, y: 15.7, z: 44.8}, - velocity: {x: 0, y: -1, z: 0}, - gravity: {x: 0, y: -1, z: 0}, - collisionsWillMove: true + dimensions: { + x: 31.85, + y: 7.75, + z: 54.51 + }, + script: entityScriptURL, + userData: JSON.stringify({ + grabbableKey: { + wantsTrigger: true + } + }) + }; -var modelPosition = {x: floorPosition.x + 10, y: floorPosition.y + 15, z: floorPosition.z}; +var modelPosition = { + x: floorPosition.x + 10, + y: floorPosition.y + 8.5, + z: floorPosition.z - 30 +}; for (var i = 0; i < modelsToLoad.length; i++) { modelParams.modelURL = modelsToLoad[i].lowURL; - modelPosition.z -= 10; modelParams.position = modelPosition; - var model = Entities.addEntity(modelParams); - models.push(model); -} + var lowModel = Entities.addEntity(modelParams); + modelParams.modelURL = modelsToLoad[i].highURL; + modelParams.visible = false; + modelParams.dimensions = Vec3.multiply(modelParams.dimensions, 0.5); + var highModel = Entities.addEntity(modelParams); + models.push({ + low: lowModel, + high: highModel + }); + // customKey, id, data + setEntityCustomData('modelCounterpart', lowModel, {modelCounterpartId: highModel}); + setEntityCustomData('modelCounterpart', highModel, {modelCounterpartId: lowModel}); + + modelPosition.z -= 60; +} function cleanup() { Entities.deleteEntity(floor); models.forEach(function(model) { - Entities.deleteEntity(model); + Entities.deleteEntity(model.low); + Entities.deleteEntity(model.high); }); } diff --git a/examples/marketplace/modelSwap.js b/examples/marketplace/modelSwap.js new file mode 100644 index 0000000000..29dbc84e98 --- /dev/null +++ b/examples/marketplace/modelSwap.js @@ -0,0 +1,41 @@ +// When user holds down trigger on model for enough time, the model with do a cool animation and swap out with the low or high version of it + + + +(function() { + + var _this; + ModelSwaper = function() { + _this = this; + }; + + ModelSwaper.prototype = { + + startFarTrigger: function() { + print("START TRIGGER") + + //make self invisible and make the model's counterpart visible! + var dimensions = Entities.getEntityProperties(this.entityID, "dimensions").dimensions; + Entities.editEntity(this.entityID, { + visible: false, + dimensions: Vec3.multiply(dimensions, 0.5) + }); + dimensions = Entities.getEntityProperties(this.modelCounterpartId, "dimensions").dimensions; + Entities.editEntity(this.modelCounterpartId, { + visible: true, + dimensions: Vec3.multiply(dimensions, 2) + }); + + }, + + preload: function(entityID) { + this.entityID = entityID; + var props = Entities.getEntityProperties(this.entityID, ["userData"]); + this.modelCounterpartId = JSON.parse(props.userData).modelCounterpart.modelCounterpartId; + } + + }; + + // entity scripts always need to return a newly constructed object of our type + return new ModelSwaper(); +}); \ No newline at end of file