content/hifi-content/james/grandcentral/gametable-dev/seatSpawner.js
2022-02-13 23:57:50 +01:00

152 lines
No EOL
4.7 KiB
JavaScript

(function() {
var _this;
function Seat(spawnLocation, spawnRotation) {
print('CREATE SEAT');
var created = [];
function create() {
print('CREATE - inside of create')
var BASE_PATH = "http://mpassets.highfidelity.com/875bcd3b-7b7d-45a1-a429-c0c6eefad95d-v1/";
var CHAIR_SCRIPT_URL = BASE_PATH + "chair.js?v=1";
var COLLIDER_SCRIPT_URL = BASE_PATH + "chairCollider.js?v=1";
var MODEL_URL = BASE_PATH + "tempo_noCubemaps.fbx?v=1";
var HULL_URL = BASE_PATH + "tempo_col.obj?v=1";
var DIST_INFRONT = 1.0;
var DIST_ABOVE = 1.0;
var spawnPosition = spawnLocation;
// raycast down from above the chair
spawnLocation.y += DIST_ABOVE;
var intersectionDown = Entities.findRayIntersection({
direction: Vec3.UNIT_NEG_Y,
origin: startPosition
}, true);
if (intersectionDown.intersects) {
spawnPosition = intersectionDown.intersection;
}
var chair = Entities.addEntity({
type: "Model",
name: "Chair",
modelURL: MODEL_URL,
position: spawnPosition,
dimensions: {
x: 0.65,
y: 1.0,
z: 0.65
},
gravity: {
x: 0.0,
y: -9.8,
z: 0.0
},
// a registration point of 0 is enforced in y
registrationPoint: {
x: 0.5,
y: 0.0,
z: 0.5
},
dynamic: true,
velocity:{
x:0,
y:-0.1,
z:0
},
lifetime: -1,
collisionsWillMove: false,
friction: 1.0,
grabbable: false,
damping: 0.2,
angularDamping: 1.0,
shapeType: "compound",
compoundShapeURL: HULL_URL,
script: CHAIR_SCRIPT_URL,
userData: JSON.stringify({
allowScaling: false,
manualSitTarget: {
x: 0.0,
y: 0.0,
z: 0.0
},
grabbableKey: {
grabbable: true
}
})
});
chairProperties = Entities.getEntityProperties(chair, ["position", "rotation"]);
var startPosition = Vec3.sum(chairProperties.position, Vec3.multiply(-0.25, Quat.getFront(chairProperties.rotation)));
var triggerVolume = Entities.addEntity({
type: "Box",
name: "Chair Collider",
position: startPosition,
dimensions: {
x: 0.65,
y: 1.5,
z: 0.65
},
// a registration point of 0 is enforced in y
registrationPoint: {
x: 0.5,
y: 0.0,
z: 0.5
},
dynamic: false,
parentID: chair,
visible: false,
script: COLLIDER_SCRIPT_URL,
collisionless: true,
collisionsWillMove: false,
friction: 1.0,
grabbable: false,
damping: 0.2,
lifetime: -1,
angularDamping: 1.0,
shapeType: "box",
userData: JSON.stringify({
grabbableKey: {
grabbable: false
}
})
});
created.push(chair);
created.push(triggerVolume);
print('chair spawner created: ' + JSON.stringify(created))
};
function cleanup() {
created.forEach(function(obj) {
Entities.deleteEntity(obj);
})
};
create();
this.cleanup = cleanup;
};
function SeatSpawner() {
_this = this;
};
SeatSpawner.prototype = {
preload: function(id) {
_this.entityID = id;
},
createSeat: function() {
print('create seat function called');
var props = Entities.getEntityProperties(_this.entityID);
var seat = new Seat(props.position);
},
}
return new SeatSpawner();
});