mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-07 20:22:27 +02:00
First version, popcorn machine
This commit is contained in:
parent
1048c9cda3
commit
901044fc53
4 changed files with 201 additions and 13 deletions
|
@ -304,10 +304,12 @@ function makePlatform(gravity, scale, size) {
|
|||
}
|
||||
|
||||
function entityCollisionWithEntity(entity1, entity2, collision) {
|
||||
|
||||
cTime = new Date().getTime();
|
||||
//print("Collision at " + cTime);
|
||||
if (((entity1.id == bulletID.id) || (entity1.id == targetID.id)) &&
|
||||
((entity2.id == bulletID.id) || (entity2.id == targetID.id))) {
|
||||
score++;
|
||||
print("Hit Target!");
|
||||
if (showScore) {
|
||||
Overlays.editOverlay(text, { text: "Score: " + score } );
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
// 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/entityPropertyDialogBox.js");
|
||||
Script.include("../../libraries/entityPropertyDialogBox.js");
|
||||
var entityPropertyDialogBox = EntityPropertyDialogBox;
|
||||
|
||||
var LASER_WIDTH = 4;
|
||||
|
@ -23,8 +23,8 @@ var LASER_LENGTH_FACTOR = 500;
|
|||
|
||||
var MIN_ANGULAR_SIZE = 2;
|
||||
var MAX_ANGULAR_SIZE = 45;
|
||||
var allowLargeModels = false;
|
||||
var allowSmallModels = false;
|
||||
var allowLargeModels = true;
|
||||
var allowSmallModels = true;
|
||||
var wantEntityGlow = false;
|
||||
|
||||
var LEFT = 0;
|
||||
|
@ -152,7 +152,7 @@ function controller(wichSide) {
|
|||
this.release = function () {
|
||||
if (this.grabbing) {
|
||||
|
||||
Entities.editEntity(entityID, { gravity: this.gravityAtGrab });
|
||||
Entities.editEntity(this.entityID, { gravity: this.gravityAtGrab });
|
||||
|
||||
jointList = MyAvatar.getJointNames();
|
||||
|
||||
|
|
|
@ -16,12 +16,14 @@ var PADDLE_THICKNESS = 0.06;
|
|||
var PADDLE_COLOR = { red: 184, green: 134, blue: 11 };
|
||||
var BALL_COLOR = { red: 255, green: 0, blue: 0 };
|
||||
var LINE_COLOR = { red: 255, green: 255, blue: 0 };
|
||||
var PADDLE_OFFSET = { x: 0.05, y: 0.0, z: 0.0 };
|
||||
var PADDLE_BOX_OFFSET = { x: 0.05, y: 0.0, z: 0.0 };
|
||||
var HOLD_POSITION_OFFSET = { x: -0.2, y: 0.0, z: -0.25 };
|
||||
var PADDLE_ORIENTATION = Quat.fromPitchYawRollDegrees(0,0,0);
|
||||
var GRAVITY = 0.0;
|
||||
var SPRING_FORCE = 15.0;
|
||||
var lastSoundTime = 0;
|
||||
var gameOn = false;
|
||||
var leftHanded = false;
|
||||
var leftHanded = true;
|
||||
var controllerID;
|
||||
|
||||
if (leftHanded) {
|
||||
|
@ -73,7 +75,7 @@ function createEntities() {
|
|||
modelURL = "http://public.highfidelity.io/models/attachments/pong_paddle.fbx";
|
||||
paddleModel = Entities.addEntity(
|
||||
{ type: "Model",
|
||||
position: Vec3.sum(Controller.getSpatialControlPosition(controllerID), PADDLE_OFFSET),
|
||||
position: Vec3.sum(Controller.getSpatialControlPosition(controllerID), PADDLE_BOX_OFFSET),
|
||||
dimensions: { x: PADDLE_SIZE * 1.5, y: PADDLE_THICKNESS, z: PADDLE_SIZE * 1.25 },
|
||||
color: PADDLE_COLOR,
|
||||
gravity: { x: 0, y: 0, z: 0 },
|
||||
|
@ -120,18 +122,20 @@ function update(deltaTime) {
|
|||
if (!ball.isKnownID) {
|
||||
ball = Entities.identifyEntity(ball);
|
||||
} else {
|
||||
var paddleWorldOrientation = Quat.multiply(Quat.multiply(MyAvatar.orientation, Controller.getSpatialControlRawRotation(controllerID)), PADDLE_ORIENTATION);
|
||||
var holdPosition = Vec3.sum(palmPosition, Vec3.multiplyQbyV(paddleWorldOrientation, HOLD_POSITION_OFFSET));
|
||||
var props = Entities.getEntityProperties(ball);
|
||||
var spring = Vec3.subtract(palmPosition, props.position);
|
||||
var paddleWorldOrientation = Quat.multiply(MyAvatar.orientation, Controller.getSpatialControlRawRotation(controllerID));
|
||||
var spring = Vec3.subtract(holdPosition, props.position);
|
||||
var springLength = Vec3.length(spring);
|
||||
|
||||
spring = Vec3.normalize(spring);
|
||||
var ballVelocity = Vec3.sum(props.velocity, Vec3.multiply(springLength * SPRING_FORCE * deltaTime, spring));
|
||||
Entities.editEntity(ball, { velocity: ballVelocity });
|
||||
Overlays.editOverlay(line, { start: props.position, end: palmPosition });
|
||||
Entities.editEntity(paddle, { position: palmPosition,
|
||||
Overlays.editOverlay(line, { start: props.position, end: holdPosition });
|
||||
Entities.editEntity(paddle, { position: holdPosition,
|
||||
velocity: Controller.getSpatialControlVelocity(controllerID),
|
||||
rotation: paddleWorldOrientation });
|
||||
Entities.editEntity(paddleModel, { position: Vec3.sum(palmPosition, Vec3.multiplyQbyV(paddleWorldOrientation, PADDLE_OFFSET)),
|
||||
Entities.editEntity(paddleModel, { position: Vec3.sum(holdPosition, Vec3.multiplyQbyV(paddleWorldOrientation, PADDLE_BOX_OFFSET)),
|
||||
velocity: Controller.getSpatialControlVelocity(controllerID),
|
||||
rotation: paddleWorldOrientation });
|
||||
}
|
||||
|
|
182
examples/popcorn.js
Normal file
182
examples/popcorn.js
Normal file
|
@ -0,0 +1,182 @@
|
|||
//
|
||||
// popcorn.js
|
||||
// examples
|
||||
//
|
||||
// Created by Philip Rosedale on January 25, 2014
|
||||
// Copyright 2015 High Fidelity, Inc.
|
||||
//
|
||||
// Creates a bunch of physical balls trapped in a box with a rotating wall in the middle that smacks them around,
|
||||
// and a periodic 'pop' force that shoots them into the air.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
var BALL_SIZE = 0.07;
|
||||
var WALL_THICKNESS = 0.10;
|
||||
var SCALE = 1.0;
|
||||
|
||||
var GRAVITY = -1.0;
|
||||
var LIFETIME = 600;
|
||||
var DAMPING = 0.50;
|
||||
|
||||
var center = Vec3.sum(MyAvatar.position, Vec3.multiply(SCALE * 3.0, Quat.getFront(Camera.getOrientation())));
|
||||
|
||||
var floor = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: Vec3.subtract(center, { x: 0, y: SCALE / 2.0, z: 0 }),
|
||||
dimensions: { x: SCALE, y: WALL_THICKNESS, z: SCALE },
|
||||
color: { red: 0, green: 255, blue: 0 },
|
||||
gravity: { x: 0, y: 0, z: 0 },
|
||||
ignoreCollisions: false,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var ceiling = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: Vec3.sum(center, { x: 0, y: SCALE / 2.0, z: 0 }),
|
||||
dimensions: { x: SCALE, y: WALL_THICKNESS, z: SCALE },
|
||||
color: { red: 128, green: 128, blue: 128 },
|
||||
gravity: { x: 0, y: 0, z: 0 },
|
||||
ignoreCollisions: false,
|
||||
visible: true,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var wall1 = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: Vec3.sum(center, { x: SCALE / 2.0, y: 0, z: 0 }),
|
||||
dimensions: { x: WALL_THICKNESS, y: SCALE, z: SCALE },
|
||||
color: { red: 0, green: 255, blue: 0 },
|
||||
gravity: { x: 0, y: 0, z: 0 },
|
||||
ignoreCollisions: false,
|
||||
visible: false,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var wall2 = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: Vec3.subtract(center, { x: SCALE / 2.0, y: 0, z: 0 }),
|
||||
dimensions: { x: WALL_THICKNESS, y: SCALE, z: SCALE },
|
||||
color: { red: 0, green: 255, blue: 0 },
|
||||
gravity: { x: 0, y: 0, z: 0 },
|
||||
ignoreCollisions: false,
|
||||
visible: false,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var wall3 = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: Vec3.subtract(center, { x: 0, y: 0, z: SCALE / 2.0 }),
|
||||
dimensions: { x: SCALE, y: SCALE, z: WALL_THICKNESS },
|
||||
color: { red: 0, green: 255, blue: 0 },
|
||||
gravity: { x: 0, y: 0, z: 0 },
|
||||
ignoreCollisions: false,
|
||||
visible: false,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var wall4 = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: Vec3.sum(center, { x: 0, y: 0, z: SCALE / 2.0 }),
|
||||
dimensions: { x: SCALE, y: SCALE, z: WALL_THICKNESS },
|
||||
color: { red: 0, green: 255, blue: 0 },
|
||||
gravity: { x: 0, y: 0, z: 0 },
|
||||
ignoreCollisions: false,
|
||||
visible: false,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var corner1 = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: Vec3.sum(center, { x: -SCALE / 2.0, y: 0, z: SCALE / 2.0 }),
|
||||
dimensions: { x: WALL_THICKNESS, y: SCALE, z: WALL_THICKNESS },
|
||||
color: { red: 128, green: 128, blue: 128 },
|
||||
ignoreCollisions: false,
|
||||
visible: true,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var corner2 = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: Vec3.sum(center, { x: -SCALE / 2.0, y: 0, z: -SCALE / 2.0 }),
|
||||
dimensions: { x: WALL_THICKNESS, y: SCALE, z: WALL_THICKNESS },
|
||||
color: { red: 128, green: 128, blue: 128 },
|
||||
ignoreCollisions: false,
|
||||
visible: true,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var corner3 = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: Vec3.sum(center, { x: SCALE / 2.0, y: 0, z: SCALE / 2.0 }),
|
||||
dimensions: { x: WALL_THICKNESS, y: SCALE, z: WALL_THICKNESS },
|
||||
color: { red: 128, green: 128, blue: 128 },
|
||||
ignoreCollisions: false,
|
||||
visible: true,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var corner4 = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: Vec3.sum(center, { x: SCALE / 2.0, y: 0, z: -SCALE / 2.0 }),
|
||||
dimensions: { x: WALL_THICKNESS, y: SCALE, z: WALL_THICKNESS },
|
||||
color: { red: 128, green: 128, blue: 128 },
|
||||
ignoreCollisions: false,
|
||||
visible: true,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var spinner = Entities.addEntity(
|
||||
{ type: "Box",
|
||||
position: center,
|
||||
dimensions: { x: SCALE / 1.5, y: SCALE / 3.0, z: SCALE / 8.0 },
|
||||
color: { red: 255, green: 0, blue: 0 },
|
||||
angularVelocity: { x: 0, y: 360, z: 0 },
|
||||
angularDamping: 0.0,
|
||||
gravity: { x: 0, y: 0, z: 0 },
|
||||
ignoreCollisions: false,
|
||||
visible: true,
|
||||
lifetime: LIFETIME });
|
||||
|
||||
var NUM_BALLS = 70;
|
||||
|
||||
balls = [];
|
||||
|
||||
for (var i = 0; i < NUM_BALLS; i++) {
|
||||
balls.push(Entities.addEntity(
|
||||
{ type: "Sphere",
|
||||
position: { x: center.x + (Math.random() - 0.5) * (SCALE - BALL_SIZE - WALL_THICKNESS),
|
||||
y: center.y + (Math.random() - 0.5) * (SCALE - BALL_SIZE - WALL_THICKNESS) ,
|
||||
z: center.z + (Math.random() - 0.5) * (SCALE - BALL_SIZE - WALL_THICKNESS) },
|
||||
dimensions: { x: BALL_SIZE, y: BALL_SIZE, z: BALL_SIZE },
|
||||
color: { red: Math.random() * 255, green: Math.random() * 255, blue: Math.random() * 255 },
|
||||
gravity: { x: 0, y: GRAVITY, z: 0 },
|
||||
ignoreCollisions: false,
|
||||
damping: DAMPING,
|
||||
lifetime: LIFETIME,
|
||||
collisionsWillMove: true }));
|
||||
}
|
||||
|
||||
var VEL_MAG = 2.0;
|
||||
var CHANCE_OF_POP = 0.007; // 0.01;
|
||||
function update(deltaTime) {
|
||||
for (var i = 0; i < NUM_BALLS; i++) {
|
||||
if (Math.random() < CHANCE_OF_POP) {
|
||||
Entities.editEntity(balls[i], { velocity: { x: (Math.random() - 0.5) * VEL_MAG, y: Math.random() * VEL_MAG, z: (Math.random() - 0.5) * VEL_MAG }});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function scriptEnding() {
|
||||
Entities.deleteEntity(wall1);
|
||||
Entities.deleteEntity(wall2);
|
||||
Entities.deleteEntity(wall3);
|
||||
Entities.deleteEntity(wall4);
|
||||
Entities.deleteEntity(corner1);
|
||||
Entities.deleteEntity(corner2);
|
||||
Entities.deleteEntity(corner3);
|
||||
Entities.deleteEntity(corner4);
|
||||
Entities.deleteEntity(floor);
|
||||
Entities.deleteEntity(ceiling);
|
||||
Entities.deleteEntity(spinner);
|
||||
|
||||
for (var i = 0; i < NUM_BALLS; i++) {
|
||||
Entities.deleteEntity(balls[i]);
|
||||
}
|
||||
}
|
||||
|
||||
Script.scriptEnding.connect(scriptEnding);
|
||||
Script.update.connect(update);
|
Loading…
Reference in a new issue