make collision callbacks work

This commit is contained in:
ZappoMan 2014-12-08 14:15:03 -08:00
parent 27bc394bed
commit 0592b74a06
5 changed files with 56 additions and 19 deletions

View file

@ -22,11 +22,6 @@ var velocity = {
y: 0,
z: 1 };
var gravity = {
x: 0,
y: 0,
z: 0 };
var damping = 0.1;
var color = {
@ -45,25 +40,20 @@ function draw(deltaTime) {
y: 1,
z: 2 };
var largeRadius = 0.5;
var verySlow = {
x: 0.01,
y: 0,
z: 0.01 };
var properties = {
type: "Sphere",
script: "file:///Users/zappoman/Development/HiFi/hifi/examples/entityScripts/changeColorOnCollision.js",
collisionsWillMove: true,
position: startPosition,
dimensions: {x: largeRadius, y: largeRadius, z: largeRadius},
registrationPoint: { x: 0.5, y: 0.5, z: 0.5 },
color: colorGreen,
//velocity: verySlow,
//gravity: gravity,
damping: damping,
lifetime: 20
};
Entities.addEntity(properties);
//Entities.addEntity(properties);
numberEntitiesAdded++;
}
@ -95,13 +85,13 @@ function draw(deltaTime) {
if (numberEntitiesAdded <= MAX_ENTITIES) {
var properties = {
type: "Sphere",
script: "file:///Users/zappoman/Development/HiFi/hifi/examples/entityScripts/changeColorOnCollision.js",
collisionsWillMove: true,
position: center,
dimensions: {x: entitySize, y: entitySize, z: entitySize},
registrationPoint: { x: 0.5, y: 0.5, z: 0.5 },
color: color,
velocity: velocity,
//gravity: gravity,
damping: damping,
lifetime: 20
};

View file

@ -0,0 +1,27 @@
//
// changeColorOnCollision.js
// examples/entityScripts
//
// Created by Brad Hefta-Gaub on 12/8/14.
// Copyright 2014 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
print("changeColorOnCollision.js");
(function(){
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
this.preload = function(myID) {
print("changeColorOnCollision.js--- preload!!!");
};
this.collisionWithEntity = function(myID, otherID, collisionInfo) {
print("collisionWithEntity");
Entities.editEntity(myID, { color: { red: getRandomInt(128,255), green: getRandomInt(128,255), blue: getRandomInt(128,255)} });
};
})

View file

@ -886,13 +886,33 @@ void EntityTreeRenderer::changingEntityID(const EntityItemID& oldEntityID, const
void EntityTreeRenderer::entityCollisionWithVoxel(const EntityItemID& entityID, const VoxelDetail& voxel,
const Collision& collision) {
qDebug() << "EntityTreeRenderer::entityCollisionWithVoxel()... ";
QScriptValue entityScript = getPreviouslyLoadedEntityScript(entityID);
if (entityScript.property("collisionWithVoxel").isValid()) {
QScriptValueList args;
args << entityID.toScriptValue(_entitiesScriptEngine);
args << collisionToScriptValue(_entitiesScriptEngine, collision);
entityScript.property("collisionWithVoxel").call(entityScript, args);
}
}
void EntityTreeRenderer::entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB,
const Collision& collision) {
qDebug() << "EntityTreeRenderer::entityCollisionWithEntity()... ";
qDebug() << " idA:" << idA;
qDebug() << " idB:" << idB;
QScriptValue entityScriptA = loadEntityScript(idA);
if (entityScriptA.property("collisionWithEntity").isValid()) {
QScriptValueList args;
args << idA.toScriptValue(_entitiesScriptEngine);
args << idB.toScriptValue(_entitiesScriptEngine);
args << collisionToScriptValue(_entitiesScriptEngine, collision);
entityScriptA.property("collisionWithEntity").call(entityScriptA, args);
}
QScriptValue entityScriptB = loadEntityScript(idB);
if (entityScriptB.property("collisionWithEntity").isValid()) {
QScriptValueList args;
args << idB.toScriptValue(_entitiesScriptEngine);
args << idA.toScriptValue(_entitiesScriptEngine);
args << collisionToScriptValue(_entitiesScriptEngine, collision);
entityScriptB.property("collisionWithEntity").call(entityScriptA, args);
}
}

View file

@ -54,7 +54,7 @@ void EntityCollisionSystem::updateCollisions() {
PerformanceTimer perfTimer("collisions");
assert(_entityTree);
// update all Entities
if (_entityTree->tryLockForRead()) {
if (_entityTree->tryLockForWrite()) {
foreach (EntityItem* entity, _movingEntities) {
checkEntity(entity);
}

View file

@ -46,7 +46,7 @@ Octree::Octree(bool shouldReaverage) :
_isDirty(true),
_shouldReaverage(shouldReaverage),
_stopImport(false),
_lock(),
_lock(QReadWriteLock::Recursive),
_isViewing(false),
_isServer(false)
{