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, y: 0,
z: 1 }; z: 1 };
var gravity = {
x: 0,
y: 0,
z: 0 };
var damping = 0.1; var damping = 0.1;
var color = { var color = {
@ -45,25 +40,20 @@ function draw(deltaTime) {
y: 1, y: 1,
z: 2 }; z: 2 };
var largeRadius = 0.5; var largeRadius = 0.5;
var verySlow = {
x: 0.01,
y: 0,
z: 0.01 };
var properties = { var properties = {
type: "Sphere", type: "Sphere",
script: "file:///Users/zappoman/Development/HiFi/hifi/examples/entityScripts/changeColorOnCollision.js",
collisionsWillMove: true, collisionsWillMove: true,
position: startPosition, position: startPosition,
dimensions: {x: largeRadius, y: largeRadius, z: largeRadius}, dimensions: {x: largeRadius, y: largeRadius, z: largeRadius},
registrationPoint: { x: 0.5, y: 0.5, z: 0.5 }, registrationPoint: { x: 0.5, y: 0.5, z: 0.5 },
color: colorGreen, color: colorGreen,
//velocity: verySlow,
//gravity: gravity,
damping: damping, damping: damping,
lifetime: 20 lifetime: 20
}; };
Entities.addEntity(properties); //Entities.addEntity(properties);
numberEntitiesAdded++; numberEntitiesAdded++;
} }
@ -95,13 +85,13 @@ function draw(deltaTime) {
if (numberEntitiesAdded <= MAX_ENTITIES) { if (numberEntitiesAdded <= MAX_ENTITIES) {
var properties = { var properties = {
type: "Sphere", type: "Sphere",
script: "file:///Users/zappoman/Development/HiFi/hifi/examples/entityScripts/changeColorOnCollision.js",
collisionsWillMove: true, collisionsWillMove: true,
position: center, position: center,
dimensions: {x: entitySize, y: entitySize, z: entitySize}, dimensions: {x: entitySize, y: entitySize, z: entitySize},
registrationPoint: { x: 0.5, y: 0.5, z: 0.5 }, registrationPoint: { x: 0.5, y: 0.5, z: 0.5 },
color: color, color: color,
velocity: velocity, velocity: velocity,
//gravity: gravity,
damping: damping, damping: damping,
lifetime: 20 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, void EntityTreeRenderer::entityCollisionWithVoxel(const EntityItemID& entityID, const VoxelDetail& voxel,
const Collision& collision) { 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, void EntityTreeRenderer::entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB,
const Collision& collision) { const Collision& collision) {
qDebug() << "EntityTreeRenderer::entityCollisionWithEntity()... "; QScriptValue entityScriptA = loadEntityScript(idA);
qDebug() << " idA:" << idA; if (entityScriptA.property("collisionWithEntity").isValid()) {
qDebug() << " idB:" << idB; 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"); PerformanceTimer perfTimer("collisions");
assert(_entityTree); assert(_entityTree);
// update all Entities // update all Entities
if (_entityTree->tryLockForRead()) { if (_entityTree->tryLockForWrite()) {
foreach (EntityItem* entity, _movingEntities) { foreach (EntityItem* entity, _movingEntities) {
checkEntity(entity); checkEntity(entity);
} }

View file

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