model swapping

This commit is contained in:
ericrius1 2015-11-06 13:53:25 -08:00
parent 94c5637024
commit a432a62dee
2 changed files with 91 additions and 18 deletions

View file

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

View file

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