mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-12 10:43:13 +02:00
130 lines
No EOL
3.9 KiB
JavaScript
130 lines
No EOL
3.9 KiB
JavaScript
//
|
|
// createRack.js
|
|
//
|
|
// Created by James B. Pollack @imgntn on 10/5/2015
|
|
// Copyright 2015 High Fidelity, Inc.
|
|
//
|
|
// This is a script that creates a persistent basketball rack.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
/*global MyAvatar, Entities, AnimationCache, SoundCache, Scene, Camera, Overlays, HMD, AvatarList, AvatarManager, Controller, UndoStack, Window, Account, GlobalServices, Script, ScriptDiscoveryService, LODManager, Menu, Vec3, Quat, AudioDevice, Paths, Clipboard, Settings, XMLHttpRequest, randFloat, randInt */
|
|
var HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/";
|
|
|
|
var basketballURL = HIFI_PUBLIC_BUCKET + "models/content/basketball2.fbx";
|
|
var collisionSoundURL = HIFI_PUBLIC_BUCKET + "sounds/basketball/basketball.wav";
|
|
var rackURL = HIFI_PUBLIC_BUCKET + "models/basketball_hoop/basketball_rack.fbx";
|
|
var rackCollisionHullURL = HIFI_PUBLIC_BUCKET + "models/basketball_hoop/basketball_hoop_collision_hull.obj";
|
|
var basketballSwitcherURL= Script.resolvePath('basketballSwitcher.js');
|
|
|
|
var DIAMETER = 0.30;
|
|
|
|
var rackStartPosition =
|
|
Vec3.sum(MyAvatar.position,
|
|
Vec3.multiplyQbyV(MyAvatar.orientation, {
|
|
x: 0,
|
|
y: 0.0,
|
|
z: -2
|
|
}));
|
|
|
|
var rack = Entities.addEntity({
|
|
type: "Model",
|
|
modelURL: rackURL,
|
|
position: rackStartPosition,
|
|
shapeType: 'compound',
|
|
// gravity: {
|
|
// x: 0,
|
|
// y: -9.8,
|
|
// z: 0
|
|
// },
|
|
dimensions: {
|
|
x: 0.4,
|
|
y: 1.37,
|
|
z: 1.73
|
|
},
|
|
collisionsWillMove: false,
|
|
ignoreForCollisions: false,
|
|
compoundShapeURL: rackCollisionHullURL
|
|
});
|
|
|
|
var nonCollidingBalls = [];
|
|
var collidingBalls = [];
|
|
|
|
function createNonCollidingBalls() {
|
|
var i;
|
|
var position = rackStartPosition;
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
var nonCollidingBall = Entities.addEntity({
|
|
type: "Model",
|
|
name: 'Static Basketball',
|
|
position: {
|
|
x: position.x,
|
|
y: position.y,
|
|
z: position.z + (DIAMETER) - (DIAMETER * i)
|
|
},
|
|
dimensions: {
|
|
x: DIAMETER,
|
|
y: DIAMETER,
|
|
z: DIAMETER
|
|
},
|
|
collisionsWillMove: false,
|
|
ignoreForCollisions: true,
|
|
modelURL: basketballURL
|
|
});
|
|
nonCollidingBalls.push(nonCollidingBall);
|
|
}
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
var nonCollidingBall = Entities.addEntity({
|
|
type: "Model",
|
|
name: 'Static Basketball',
|
|
position: {
|
|
x: position.x,
|
|
y: position.y + DIAMETER,
|
|
z: position.z + (DIAMETER) - (DIAMETER * i)
|
|
},
|
|
dimensions: {
|
|
x: DIAMETER,
|
|
y: DIAMETER,
|
|
z: DIAMETER
|
|
},
|
|
collisionsWillMove: false,
|
|
ignoreForCollisions: false,
|
|
modelURL: basketballURL
|
|
});
|
|
nonCollidingBalls.push(nonCollidingBall);
|
|
}
|
|
}
|
|
|
|
function createCollidingBalls() {
|
|
var position = rackStartPosition;
|
|
var i;
|
|
for (i = 0; i < 4; i++) {
|
|
var collidingBall = Entities.addEntity({
|
|
type: "Model",
|
|
name: 'Colliding Basketball',
|
|
shapeType:'Sphere',
|
|
position: {
|
|
x: position.x,
|
|
y: position.y + DIAMETER * 2,
|
|
z: position.z + (DIAMETER) - (DIAMETER * i)
|
|
},
|
|
dimensions: {
|
|
x: DIAMETER,
|
|
y: DIAMETER,
|
|
z: DIAMETER
|
|
},
|
|
restitution: 1.0,
|
|
linearDamping: 1,
|
|
collisionsWillMove: true,
|
|
ignoreForCollisions: false,
|
|
modelURL: basketballURL,
|
|
script:basketballSwitcherURL
|
|
});
|
|
collidingBalls.push(collidingBall);
|
|
}
|
|
}
|
|
|
|
createNonCollidingBalls();
|
|
createCollidingBalls(); |