From 6d4abca0c122d855825fdb2cf3212ab89ba8220f Mon Sep 17 00:00:00 2001 From: Menithal Date: Sat, 4 Mar 2017 11:12:19 +0200 Subject: [PATCH] Base line progress --- .../tutorials/entity_scripts/magneticBlock.js | 68 +++++++++++++++++++ scripts/tutorials/makeBlocks.js | 0 2 files changed, 68 insertions(+) create mode 100644 scripts/tutorials/entity_scripts/magneticBlock.js create mode 100644 scripts/tutorials/makeBlocks.js diff --git a/scripts/tutorials/entity_scripts/magneticBlock.js b/scripts/tutorials/entity_scripts/magneticBlock.js new file mode 100644 index 0000000000..6eb0900db5 --- /dev/null +++ b/scripts/tutorials/entity_scripts/magneticBlock.js @@ -0,0 +1,68 @@ +(function(){ + + // Helper for detecting nearby objects + function findEntitiesInRange(releasedProperties) { + var dimensions = releasedProperties.dimensions; + return Entities.findEntities(releasedProperties.position, ((dimensions.x + dimensions.y + dimensions.z) / 3) *1.5); + } + function getNearestValidEntityProperties(id) { + var releasedProperties = Entities.getEntityProperties(id,["position", "rotation", "dimensions"]); + var entities = findEntitiesInRange(releasedProperties); + var nearestEntity = null; + var nearest = -1; + var releaseSize = Vec3.length(releasedProperties.dimensions); + entities.forEach(function(entityId) { + print('ftest ' + entityId); + var entity = Entities.getEntityProperties(entityId, ['position', 'rotation', 'dimensions']); + var distance = Vec3.distance(releasedProperties.position, entity.position); + var scale = releaseSize/Vec3.length(entity.dimensions); + if ((nearest === -1 || distance < nearest && scale >= 0.5 && scale <= 2 ) && entity.id !== entityId) { + nearestEntity = entity; + dnearest = distance; + } + }) + return nearestEntity; + + } + + // Create the 'class' + function MagneticBlock () { } + // Bind pre-emptive events + MagneticBlock.prototype = { + // When script is bound to an entity, preload is the first callback called with the entityID. It will behave as the constructor + preload: function (id) { + /* + We will now override any existing userdata with the grabbable property. + Only retrieving userData + */ + var val = Entities.getEntityProperties(id, ['userData']) + var userData = {}; + if (val.userData && val.userData.length > 0 ) { + try { + userData = JSON.parse(val.userData); + } catch (e) {} + } + // Object must be triggerable inorder to bind events. + userData.grabbableKey = {grabbable: true}; + // Apply the new properties to entity of id + Entities.editEntity(id, {userData: JSON.stringify(userData)}); + this.held = false; + + // We will now create a custom binding, to keep the 'current' context as these are callbacks called without context + var t = this; + this.callbacks = {}; + this.callbacks["releaseGrab"] = function () { + var nearest = getNearestValidEntityProperties(id); + + print(JSON.stringify(nearest)); + } + + this.releaseGrab = this.callbacks["releaseGrab"]; + + Script.scriptEnding.connect( function () { + Script.removeEventHandler(id, "releaseGrab", this.callbacks["releaseGrab"]); //continueNearGrab + }) + } + } + return new MagneticBlock(); +}) diff --git a/scripts/tutorials/makeBlocks.js b/scripts/tutorials/makeBlocks.js new file mode 100644 index 0000000000..e69de29bb2