mirror of
https://github.com/lubosz/overte.git
synced 2025-04-23 23:33:48 +02:00
Merge branch 'master' of github.com:highfidelity/hifi into polyvox
This commit is contained in:
commit
4b564e2eee
7 changed files with 130 additions and 98 deletions
|
@ -153,6 +153,26 @@ if (showScore) {
|
|||
|
||||
var BULLET_VELOCITY = 10.0;
|
||||
|
||||
function entityCollisionWithEntity(entity1, entity2, collision) {
|
||||
if (entity2 === targetID) {
|
||||
score++;
|
||||
if (showScore) {
|
||||
Overlays.editOverlay(text, { text: "Score: " + score } );
|
||||
}
|
||||
|
||||
// We will delete the bullet and target in 1/2 sec, but for now we can see them bounce!
|
||||
Script.setTimeout(deleteBulletAndTarget, 500);
|
||||
|
||||
// Turn the target and the bullet white
|
||||
Entities.editEntity(entity1, { color: { red: 255, green: 255, blue: 255 }});
|
||||
Entities.editEntity(entity2, { color: { red: 255, green: 255, blue: 255 }});
|
||||
|
||||
// play the sound near the camera so the shooter can hear it
|
||||
audioOptions.position = Vec3.sum(Camera.getPosition(), Quat.getFront(Camera.getOrientation()));
|
||||
Audio.playSound(targetHitSound, audioOptions);
|
||||
}
|
||||
}
|
||||
|
||||
function shootBullet(position, velocity, grenade) {
|
||||
var BULLET_SIZE = 0.10;
|
||||
var BULLET_LIFETIME = 10.0;
|
||||
|
@ -178,6 +198,7 @@ function shootBullet(position, velocity, grenade) {
|
|||
ignoreCollisions: false,
|
||||
collisionsWillMove: true
|
||||
});
|
||||
Script.addEventHandler(bulletID, "collisionWithEntity", entityCollisionWithEntity);
|
||||
|
||||
// Play firing sounds
|
||||
audioOptions.position = position;
|
||||
|
@ -310,27 +331,6 @@ function makePlatform(gravity, scale, size) {
|
|||
|
||||
}
|
||||
|
||||
function entityCollisionWithEntity(entity1, entity2, collision) {
|
||||
if (((entity1.id == bulletID.id) || (entity1.id == targetID.id)) &&
|
||||
((entity2.id == bulletID.id) || (entity2.id == targetID.id))) {
|
||||
score++;
|
||||
if (showScore) {
|
||||
Overlays.editOverlay(text, { text: "Score: " + score } );
|
||||
}
|
||||
|
||||
// We will delete the bullet and target in 1/2 sec, but for now we can see them bounce!
|
||||
Script.setTimeout(deleteBulletAndTarget, 500);
|
||||
|
||||
// Turn the target and the bullet white
|
||||
Entities.editEntity(entity1, { color: { red: 255, green: 255, blue: 255 }});
|
||||
Entities.editEntity(entity2, { color: { red: 255, green: 255, blue: 255 }});
|
||||
|
||||
// play the sound near the camera so the shooter can hear it
|
||||
audioOptions.position = Vec3.sum(Camera.getPosition(), Quat.getFront(Camera.getOrientation()));
|
||||
Audio.playSound(targetHitSound, audioOptions);
|
||||
}
|
||||
}
|
||||
|
||||
function keyPressEvent(event) {
|
||||
// if our tools are off, then don't do anything
|
||||
if (event.text == "t") {
|
||||
|
@ -505,7 +505,6 @@ function scriptEnding() {
|
|||
clearPose();
|
||||
}
|
||||
|
||||
Entities.entityCollisionWithEntity.connect(entityCollisionWithEntity);
|
||||
Script.scriptEnding.connect(scriptEnding);
|
||||
Script.update.connect(update);
|
||||
Controller.mouseReleaseEvent.connect(mouseReleaseEvent);
|
||||
|
|
53
examples/example/entityCollisionExample.js
Normal file
53
examples/example/entityCollisionExample.js
Normal file
|
@ -0,0 +1,53 @@
|
|||
//
|
||||
// entityCollisionExample.js
|
||||
// examples
|
||||
//
|
||||
// Created by Howard Stearns on 5/25/15.
|
||||
// Copyright 2015 High Fidelity, Inc.
|
||||
//
|
||||
// This is an example script that demonstrates use of the per-entity event handlers.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
function someCollisionFunction(entityA, entityB, collision) {
|
||||
print("collision: " + JSON.stringify({a: entityA, b: entityB, c: collision}));
|
||||
}
|
||||
|
||||
var position = Vec3.sum(MyAvatar.position, Quat.getFront(MyAvatar.orientation));
|
||||
var properties = {
|
||||
type: "Box",
|
||||
position: position,
|
||||
collisionsWillMove: true,
|
||||
color: { red: 200, green: 0, blue: 0 }
|
||||
};
|
||||
var collider = Entities.addEntity(properties);
|
||||
var armed = false;
|
||||
function togglePrinting() {
|
||||
print('togglePrinting from ' + armed + ' on ' + collider);
|
||||
if (armed) {
|
||||
Script.removeEventHandler(collider, "collisionWithEntity", someCollisionFunction);
|
||||
} else {
|
||||
Script.addEventHandler(collider, "collisionWithEntity", someCollisionFunction);
|
||||
}
|
||||
armed = !armed;
|
||||
print("Red box " + (armed ? "will" : "will not") + " print on collision.");
|
||||
}
|
||||
togglePrinting();
|
||||
|
||||
properties.position.y += 0.2;
|
||||
properties.color.blue += 200;
|
||||
// A handy target for the collider to hit.
|
||||
var target = Entities.addEntity(properties);
|
||||
|
||||
properties.position.y += 0.2;
|
||||
properties.color.green += 200;
|
||||
var button = Entities.addEntity(properties);
|
||||
Script.addEventHandler(button, "clickReleaseOnEntity", togglePrinting);
|
||||
|
||||
Script.scriptEnding.connect(function () {
|
||||
Entities.deleteEntity(collider);
|
||||
Entities.deleteEntity(target);
|
||||
Entities.deleteEntity(button);
|
||||
});
|
|
@ -33,8 +33,8 @@ var cuePosition;
|
|||
var startStroke = 0;
|
||||
|
||||
// Sounds to use
|
||||
hitSounds = [];
|
||||
hitSounds.push(SoundCache.getSound(HIFI_PUBLIC_BUCKET + "Collisions-ballhitsandcatches/billiards/collision1.wav"));
|
||||
var hitSound = HIFI_PUBLIC_BUCKET + "sounds/Collisions-ballhitsandcatches/billiards/collision1.wav";
|
||||
SoundCache.getSound(hitSound);
|
||||
|
||||
HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/";
|
||||
var screenSize = Controller.getViewportDimensions();
|
||||
|
@ -127,6 +127,7 @@ function makeBalls(pos) {
|
|||
ignoreCollisions: false,
|
||||
damping: 0.50,
|
||||
shapeType: "sphere",
|
||||
collisionSoundURL: hitSound,
|
||||
collisionsWillMove: true }));
|
||||
ballPosition.z += (BALL_SIZE + BALL_GAP) * SCALE;
|
||||
ballNumber++;
|
||||
|
@ -225,26 +226,11 @@ function update(deltaTime) {
|
|||
}
|
||||
}
|
||||
|
||||
function entityCollisionWithEntity(entity1, entity2, collision) {
|
||||
/*
|
||||
NOT WORKING YET
|
||||
if ((entity1.id == cueBall.id) || (entity2.id == cueBall.id)) {
|
||||
print("Cue ball collision!");
|
||||
//audioOptions.position = Vec3.sum(Camera.getPosition(), Quat.getFront(Camera.getOrientation()));
|
||||
//Audio.playSound(hitSounds[0], { position: Vec3.sum(Camera.getPosition(), Quat.getFront(Camera.getOrientation())) });
|
||||
}
|
||||
|
||||
else if (isObjectBall(entity1.id) || isObjectBall(entity2.id)) {
|
||||
print("Object ball collision");
|
||||
} */
|
||||
}
|
||||
|
||||
tableCenter = Vec3.sum(MyAvatar.position, Vec3.multiply(4.0, Quat.getFront(Camera.getOrientation())));
|
||||
|
||||
makeTable(tableCenter);
|
||||
makeBalls(tableCenter);
|
||||
|
||||
Entities.entityCollisionWithEntity.connect(entityCollisionWithEntity);
|
||||
Script.scriptEnding.connect(cleanup);
|
||||
Controller.keyPressEvent.connect(keyPressEvent);
|
||||
Controller.keyReleaseEvent.connect(keyReleaseEvent);
|
||||
|
|
|
@ -21,6 +21,16 @@ var gameOver = false;
|
|||
var invaderStepsPerCycle = 120; // the number of update steps it takes then invaders to move one column to the right
|
||||
var invaderStepOfCycle = 0; // current iteration in the cycle
|
||||
var invaderMoveDirection = 1; // 1 for moving to right, -1 for moving to left
|
||||
var LEFT = ",";
|
||||
var RIGHT = ".";
|
||||
var FIRE = "SPACE";
|
||||
var QUIT = "q";
|
||||
|
||||
print("Use:");
|
||||
print(LEFT + " to move left");
|
||||
print(RIGHT + " to move right");
|
||||
print(FIRE + " to fire");
|
||||
print(QUIT + " to quit");
|
||||
|
||||
// game length...
|
||||
var itemLifetimes = 60; // 1 minute
|
||||
|
@ -65,8 +75,8 @@ var myShipProperties;
|
|||
|
||||
// create the rows of space invaders
|
||||
var invaders = new Array();
|
||||
var numberOfRows = 5;
|
||||
var invadersPerRow = 8;
|
||||
var numberOfRows = 3 // FIXME 5;
|
||||
var invadersPerRow = 3 // FIXME 8;
|
||||
var emptyColumns = 2; // number of invader width columns not filled with invaders
|
||||
var invadersBottomCorner = { x: gameAt.x, y: middleY , z: gameAt.z };
|
||||
var rowHeight = ((gameAt.y + gameSize.y) - invadersBottomCorner.y) / numberOfRows;
|
||||
|
@ -80,7 +90,6 @@ var stepsToGround = (middleY - gameAt.y) / yPerStep;
|
|||
var maxInvaderRowOffset=stepsToGround;
|
||||
|
||||
// missile related items
|
||||
var missileFired = false;
|
||||
var myMissile;
|
||||
|
||||
// sounds
|
||||
|
@ -174,6 +183,7 @@ function initializeInvaders() {
|
|||
invaderPosition = getInvaderPosition(row, column);
|
||||
invaders[row][column] = Entities.addEntity({
|
||||
type: "Model",
|
||||
shapeType: "box",
|
||||
position: invaderPosition,
|
||||
velocity: { x: 0, y: 0, z: 0 },
|
||||
gravity: { x: 0, y: 0, z: 0 },
|
||||
|
@ -181,6 +191,7 @@ function initializeInvaders() {
|
|||
dimensions: { x: invaderSize * 2, y: invaderSize * 2, z: invaderSize * 2 },
|
||||
color: { red: 255, green: 0, blue: 0 },
|
||||
modelURL: invaderModels[row].modelURL,
|
||||
collisionsWillMove: true,
|
||||
lifetime: itemLifetimes
|
||||
});
|
||||
}
|
||||
|
@ -264,17 +275,17 @@ Script.update.connect(update);
|
|||
function cleanupGame() {
|
||||
print("cleaning up game...");
|
||||
Entities.deleteEntity(myShip);
|
||||
print("cleanupGame() ... Entities.deleteEntity(myShip)... myShip.id="+myShip.id);
|
||||
print("cleanupGame() ... Entities.deleteEntity(myShip)... myShip="+myShip);
|
||||
for (var row = 0; row < numberOfRows; row++) {
|
||||
for (var column = 0; column < invadersPerRow; column++) {
|
||||
Entities.deleteEntity(invaders[row][column]);
|
||||
print("cleanupGame() ... Entities.deleteEntity(invaders[row][column])... invaders[row][column].id="
|
||||
+invaders[row][column].id);
|
||||
print("cleanupGame() ... Entities.deleteEntity(invaders[row][column])... invaders[row][column]="
|
||||
+invaders[row][column]);
|
||||
}
|
||||
}
|
||||
|
||||
// clean up our missile
|
||||
if (missileFired) {
|
||||
if (myMissile) {
|
||||
Entities.deleteEntity(myMissile);
|
||||
}
|
||||
|
||||
|
@ -293,15 +304,23 @@ function moveShipTo(position) {
|
|||
Entities.editEntity(myShip, { position: position });
|
||||
}
|
||||
|
||||
function entityCollisionWithEntity(entityA, entityB, collision) {
|
||||
print("entityCollisionWithEntity() a="+entityA + " b=" + entityB);
|
||||
Vec3.print('entityCollisionWithEntity() penetration=', collision.penetration);
|
||||
Vec3.print('entityCollisionWithEntity() contactPoint=', collision.contactPoint);
|
||||
|
||||
deleteIfInvader(entityB);
|
||||
}
|
||||
|
||||
function fireMissile() {
|
||||
// we only allow one missile at a time...
|
||||
var canFire = false;
|
||||
|
||||
// If we've fired a missile, then check to see if it's still alive
|
||||
if (missileFired) {
|
||||
if (myMissile) {
|
||||
var missileProperties = Entities.getEntityProperties(myMissile);
|
||||
|
||||
if (!missileProperties) {
|
||||
if (!missileProperties || (missileProperties.type === 'Unknown')) {
|
||||
print("canFire = true");
|
||||
canFire = true;
|
||||
}
|
||||
|
@ -322,11 +341,12 @@ function fireMissile() {
|
|||
velocity: { x: 0, y: 5, z: 0},
|
||||
gravity: { x: 0, y: 0, z: 0 },
|
||||
damping: 0,
|
||||
dimensions: { x: missileSize * 2, y: missileSize * 2, z: missileSize * 2 },
|
||||
collisionsWillMove: true,
|
||||
dimensions: { x: missileSize, y: missileSize, z: missileSize },
|
||||
color: { red: 0, green: 0, blue: 255 },
|
||||
lifetime: 5
|
||||
});
|
||||
|
||||
Script.addEventHandler(myMissile, "collisionWithEntity", entityCollisionWithEntity);
|
||||
var options = {}
|
||||
if (soundInMyHead) {
|
||||
options.position = { x: MyAvatar.position.x + 0.0,
|
||||
|
@ -335,30 +355,30 @@ function fireMissile() {
|
|||
} else {
|
||||
options.position = missilePosition;
|
||||
}
|
||||
|
||||
|
||||
Audio.playSound(shootSound, options);
|
||||
|
||||
missileFired = true;
|
||||
}
|
||||
}
|
||||
|
||||
function keyPressEvent(key) {
|
||||
//print("keyPressEvent key.text="+key.text);
|
||||
if (key.text == ",") {
|
||||
|
||||
if (key.text == LEFT) {
|
||||
myShipProperties.position.x -= 0.1;
|
||||
if (myShipProperties.position.x < gameAt.x) {
|
||||
myShipProperties.position.x = gameAt.x;
|
||||
}
|
||||
moveShipTo(myShipProperties.position);
|
||||
} else if (key.text == ".") {
|
||||
} else if (key.text == RIGHT) {
|
||||
myShipProperties.position.x += 0.1;
|
||||
if (myShipProperties.position.x > gameAt.x + gameSize.x) {
|
||||
myShipProperties.position.x = gameAt.x + gameSize.x;
|
||||
}
|
||||
moveShipTo(myShipProperties.position);
|
||||
} else if (key.text == "f") {
|
||||
} else if (key.text == FIRE) {
|
||||
fireMissile();
|
||||
} else if (key.text == "q") {
|
||||
} else if (key.text == QUIT) {
|
||||
endGame();
|
||||
}
|
||||
}
|
||||
|
@ -370,7 +390,7 @@ Controller.captureKeyEvents({text: " "});
|
|||
function deleteIfInvader(possibleInvaderEntity) {
|
||||
for (var row = 0; row < numberOfRows; row++) {
|
||||
for (var column = 0; column < invadersPerRow; column++) {
|
||||
if (invaders[row][column].id && invaders[row][column].id == possibleInvaderEntity.id) {
|
||||
if (invaders[row][column] == possibleInvaderEntity) {
|
||||
Entities.deleteEntity(possibleInvaderEntity);
|
||||
Entities.deleteEntity(myMissile);
|
||||
|
||||
|
@ -390,20 +410,6 @@ function deleteIfInvader(possibleInvaderEntity) {
|
|||
}
|
||||
}
|
||||
|
||||
function entityCollisionWithEntity(entityA, entityB, collision) {
|
||||
print("entityCollisionWithEntity() a.id="+entityA.id + " b.id=" + entityB.id);
|
||||
Vec3.print('entityCollisionWithEntity() penetration=', collision.penetration);
|
||||
Vec3.print('entityCollisionWithEntity() contactPoint=', collision.contactPoint);
|
||||
if (missileFired) {
|
||||
if (myMissile.id == entityA.id) {
|
||||
deleteIfInvader(entityB);
|
||||
} else if (myMissile.id == entityB.id) {
|
||||
deleteIfInvader(entityA);
|
||||
}
|
||||
}
|
||||
}
|
||||
Entities.entityCollisionWithEntity.connect(entityCollisionWithEntity);
|
||||
|
||||
|
||||
// initialize the game...
|
||||
initializeMyShip();
|
||||
|
|
|
@ -12,17 +12,6 @@
|
|||
//
|
||||
|
||||
|
||||
print("hello...");
|
||||
|
||||
|
||||
function entityCollisionWithEntity(entityA, entityB, collision) {
|
||||
print("entityCollisionWithParticle()..");
|
||||
print(" entityA.getID()=" + entityA.id);
|
||||
print(" entityB.getID()=" + entityB.id);
|
||||
Vec3.print('penetration=', collision.penetration);
|
||||
Vec3.print('contactPoint=', collision.contactPoint);
|
||||
}
|
||||
|
||||
Entities.entityCollisionWithEntity.connect(entityCollisionWithEntity);
|
||||
|
||||
print("here... hello...");
|
||||
print("The global collision event is obsolete. Please instead use:");
|
||||
print(" the collisionSoundURL property on entities, or");
|
||||
print(" entityCollisionExample.js");
|
||||
|
|
|
@ -2161,9 +2161,6 @@ void Application::init() {
|
|||
|
||||
auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>();
|
||||
|
||||
connect(&_entitySimulation, &EntitySimulation::entityCollisionWithEntity,
|
||||
entityScriptingInterface.data(), &EntityScriptingInterface::entityCollisionWithEntity);
|
||||
|
||||
// connect the _entityCollisionSystem to our EntityTreeRenderer since that's what handles running entity scripts
|
||||
connect(&_entitySimulation, &EntitySimulation::entityCollisionWithEntity,
|
||||
&_entities, &EntityTreeRenderer::entityCollisionWithEntity);
|
||||
|
|
|
@ -490,19 +490,21 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) {
|
|||
}
|
||||
|
||||
void ParticleEffectEntityItem::setMaxParticles(quint32 maxParticles) {
|
||||
_maxParticles = maxParticles;
|
||||
if (_maxParticles != maxParticles) {
|
||||
_maxParticles = maxParticles;
|
||||
|
||||
// TODO: try to do something smart here and preserve the state of existing particles.
|
||||
// TODO: try to do something smart here and preserve the state of existing particles.
|
||||
|
||||
// resize vectors
|
||||
_particleLifetimes.resize(_maxParticles);
|
||||
_particlePositions.resize(_maxParticles);
|
||||
_particleVelocities.resize(_maxParticles);
|
||||
// resize vectors
|
||||
_particleLifetimes.resize(_maxParticles);
|
||||
_particlePositions.resize(_maxParticles);
|
||||
_particleVelocities.resize(_maxParticles);
|
||||
|
||||
// effectivly clear all particles and start emitting new ones from scratch.
|
||||
_particleHeadIndex = 0;
|
||||
_particleTailIndex = 0;
|
||||
_timeUntilNextEmit = 0.0f;
|
||||
// effectivly clear all particles and start emitting new ones from scratch.
|
||||
_particleHeadIndex = 0;
|
||||
_particleTailIndex = 0;
|
||||
_timeUntilNextEmit = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
// because particles are in a ring buffer, this isn't trivial
|
||||
|
|
Loading…
Reference in a new issue