From 71d361ed3bc7f31cec1d2d09d2cf674a90432877 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 30 Nov 2015 17:06:35 -0800 Subject: [PATCH 01/62] fixed hydra paint, adding more interactive brushes --- examples/example/painting/hydraPaint.js | 12 +++---- .../src/RenderablePolyLineEntityItem.cpp | 32 ++++++++++++++----- .../src/RenderablePolyLineEntityItem.h | 4 +++ .../entities-renderer/src/paintStroke.slf | 14 +++++--- .../entities-renderer/src/paintStroke.slv | 2 ++ libraries/entities/src/PolyLineEntityItem.cpp | 2 ++ libraries/entities/src/PolyLineEntityItem.h | 4 ++- 7 files changed, 51 insertions(+), 19 deletions(-) diff --git a/examples/example/painting/hydraPaint.js b/examples/example/painting/hydraPaint.js index 36137945cc..14ea256369 100644 --- a/examples/example/painting/hydraPaint.js +++ b/examples/example/painting/hydraPaint.js @@ -67,12 +67,12 @@ var colorPalette = [{ var MIN_STROKE_WIDTH = 0.002; var MAX_STROKE_WIDTH = 0.05; -function controller(side, cycleColorButton) { +function controller(side, triggerAction) { this.triggerHeld = false; this.triggerThreshold = 0.9; this.side = side; - this.trigger = side == LEFT ? Controller.Stantard.LT : Controller.Standard.RT; - this.cycleColorButton = side == LEFT ? Controller.Stantard.LeftPrimaryThumb : Controller.Standard.RightPrimaryThumb; + this.triggerAction = triggerAction; + this.cycleColorButton = side == LEFT ? Controller.Standard.LeftPrimaryThumb : Controller.Standard.RightPrimaryThumb; this.points = []; this.normals = []; @@ -174,7 +174,7 @@ function controller(side, cycleColorButton) { this.cycleColorButtonPressed = Controller.getValue(this.cycleColorButton); this.palmPosition = this.side == RIGHT ? MyAvatar.rightHandPose.translation : MyAvatar.leftHandPose.translation; this.tipPosition = this.side == RIGHT ? MyAvatar.rightHandTipPose.translation : MyAvatar.leftHandTipPose.translation; - this.triggerValue = Controller.getValue(this.trigger); + this.triggerValue = Controller.getActionValue(this.triggerAction); if (this.prevCycleColorButtonPressed === true && this.cycleColorButtonPressed === false) { @@ -212,8 +212,8 @@ function vectorIsZero(v) { } -var rightController = new controller(RIGHT); -var leftController = new controller(LEFT); +var rightController = new controller(RIGHT, Controller.findAction("RIGHT_HAND_CLICK")); +var leftController = new controller(LEFT, Controller.findAction("LEFT_HAND_CLICK")); Script.update.connect(update); Script.scriptEnding.connect(scriptEnding); diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index 036d37a95b..63a03bb8e7 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -24,14 +24,22 @@ +struct PolyLineUniforms { + float time; +}; + EntityItemPointer RenderablePolyLineEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { return EntityItemPointer(new RenderablePolyLineEntityItem(entityID, properties)); } RenderablePolyLineEntityItem::RenderablePolyLineEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : -PolyLineEntityItem(entityItemID, properties) { - _numVertices = 0; +PolyLineEntityItem(entityItemID, properties), +_counter(0.0f), +_numVertices(0) +{ _vertices = QVector(0.0f); + PolyLineUniforms uniforms; + _uniformBuffer = std::make_shared(sizeof(PolyLineUniforms), (const gpu::Byte*) &uniforms); } @@ -161,6 +169,18 @@ void RenderablePolyLineEntityItem::updateVertices() { } +void RenderablePolyLineEntityItem::update(const quint64& now) { + PolyLineUniforms uniforms; + _counter += 0.01; + uniforms.time = _counter; + memcpy(&_uniformBuffer.edit(), &uniforms, sizeof(PolyLineUniforms)); + + if (_pointsChanged || _strokeWidthsChanged || _normalsChanged) { + updateVertices(); + updateGeometry(); + } + +} void RenderablePolyLineEntityItem::render(RenderArgs* args) { QWriteLocker lock(&_quadReadWriteLock); @@ -181,17 +201,13 @@ void RenderablePolyLineEntityItem::render(RenderArgs* args) { PerformanceTimer perfTimer("RenderablePolyLineEntityItem::render"); Q_ASSERT(getType() == EntityTypes::PolyLine); - Q_ASSERT(args->_batch); - if (_pointsChanged || _strokeWidthsChanged || _normalsChanged) { - updateVertices(); - updateGeometry(); - } gpu::Batch& batch = *args->_batch; Transform transform = Transform(); transform.setTranslation(getPosition()); transform.setRotation(getRotation()); + batch.setUniformBuffer(0, _uniformBuffer); batch.setModelTransform(transform); batch.setPipeline(_pipeline); @@ -200,7 +216,7 @@ void RenderablePolyLineEntityItem::render(RenderArgs* args) { } else { batch.setResourceTexture(PAINTSTROKE_GPU_SLOT, args->_whiteTexture); } - + batch.setInputFormat(_format); batch.setInputBuffer(0, _verticesBuffer, 0, _format->getChannels().at(0)._stride); diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h index c49777cfa3..658614e72e 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h @@ -29,6 +29,8 @@ public: RenderablePolyLineEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties); virtual void render(RenderArgs* args); + virtual void update(const quint64& now) override; + virtual bool needsToCallUpdate() const { return true; }; SIMPLE_RENDERABLE(); @@ -42,8 +44,10 @@ protected: void updateGeometry(); void updateVertices(); gpu::BufferPointer _verticesBuffer; + gpu::BufferView _uniformBuffer; unsigned int _numVertices; QVector _vertices; + float _counter; }; diff --git a/libraries/entities-renderer/src/paintStroke.slf b/libraries/entities-renderer/src/paintStroke.slf index 4e2bc8d097..48de1274f4 100644 --- a/libraries/entities-renderer/src/paintStroke.slf +++ b/libraries/entities-renderer/src/paintStroke.slf @@ -23,11 +23,15 @@ in vec3 interpolatedNormal; in vec2 varTexcoord; in vec4 varColor; -float rand(vec2 point){ - return fract(sin(dot(point.xy ,vec2(12.9898,78.233))) * 43758.5453); -} +flat in int varVertexId; +struct PolyLineUniforms { + float time; +}; +uniform polyLineBuffer { + PolyLineUniforms polyline; +}; void main(void) { @@ -35,11 +39,13 @@ void main(void) { vec4 texel = texture(originalTexture, varTexcoord); int frontCondition = 1 -int(gl_FrontFacing) * 2; vec3 color = varColor.rgb; + color.g = 1.0 + sin(polyline.time) * 0.5; + //texel.a = varVertexId / 20.0; //vec3 normal, float alpha, vec3 diffuse, vec3 specular, float shininess packDeferredFragmentTranslucent( interpolatedNormal * frontCondition, texel.a, - color *texel.rgb, + color * texel.rgb, vec3(0.01, 0.01, 0.01), 10.0); } diff --git a/libraries/entities-renderer/src/paintStroke.slv b/libraries/entities-renderer/src/paintStroke.slv index 7d7523deb9..25f046456a 100644 --- a/libraries/entities-renderer/src/paintStroke.slv +++ b/libraries/entities-renderer/src/paintStroke.slv @@ -24,6 +24,7 @@ out vec3 interpolatedNormal; out vec2 varTexcoord; out vec4 varColor; +flat out int varVertexId; void main(void) { @@ -31,6 +32,7 @@ void main(void) { // pass along the diffuse color varColor = inColor; + varVertexId = gl_VertexID; // standard transform TransformCamera cam = getTransformCamera(); diff --git a/libraries/entities/src/PolyLineEntityItem.cpp b/libraries/entities/src/PolyLineEntityItem.cpp index 012ec3ca4a..f2cdd6c1c1 100644 --- a/libraries/entities/src/PolyLineEntityItem.cpp +++ b/libraries/entities/src/PolyLineEntityItem.cpp @@ -90,6 +90,7 @@ bool PolyLineEntityItem::setProperties(const EntityItemProperties& properties) { return somethingChanged; } + bool PolyLineEntityItem::appendPoint(const glm::vec3& point) { if (_points.size() > MAX_POINTS_PER_LINE - 1) { qDebug() << "MAX POINTS REACHED!"; @@ -105,6 +106,7 @@ bool PolyLineEntityItem::appendPoint(const glm::vec3& point) { return true; } + bool PolyLineEntityItem::setStrokeWidths(const QVector& strokeWidths) { _strokeWidths = strokeWidths; _strokeWidthsChanged = true; diff --git a/libraries/entities/src/PolyLineEntityItem.h b/libraries/entities/src/PolyLineEntityItem.h index 4da52f3f21..1610bf87b5 100644 --- a/libraries/entities/src/PolyLineEntityItem.h +++ b/libraries/entities/src/PolyLineEntityItem.h @@ -75,7 +75,9 @@ class PolyLineEntityItem : public EntityItem { _texturesChangedFlag = true; } } - + + virtual bool needsToCallUpdate() const { return true; } + virtual ShapeType getShapeType() const { return SHAPE_TYPE_LINE; } // never have a ray intersection pick a PolyLineEntityItem. From 191cab2e5f5fd60f40c5310cb8c35d564b1a4157 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 1 Dec 2015 10:15:47 -0800 Subject: [PATCH 02/62] adding light trail app --- examples/flowArts/lightTrails.js | 223 ++++++++++++++++++++++++++++++ examples/lightTrails.js | 224 +++++++++++++++++++++++++++++++ 2 files changed, 447 insertions(+) create mode 100644 examples/flowArts/lightTrails.js create mode 100644 examples/lightTrails.js diff --git a/examples/flowArts/lightTrails.js b/examples/flowArts/lightTrails.js new file mode 100644 index 0000000000..60754f42a8 --- /dev/null +++ b/examples/flowArts/lightTrails.js @@ -0,0 +1,223 @@ +// +// hydraPaint.js +// examples +// +// Created by Eric Levin on 5/14/15. +// Copyright 2014 High Fidelity, Inc. +// +// This script allows you to paint with the hydra! +// +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +var LEFT = 0; +var RIGHT = 1; +var LASER_WIDTH = 3; +var LASER_COLOR = { + red: 50, + green: 150, + blue: 200 +}; +var TRIGGER_THRESHOLD = .1; + +var MAX_POINTS_PER_LINE = 40; + +var LIFETIME = 6000; +var DRAWING_DEPTH = 1; +var LINE_DIMENSIONS = 20; + + +var MIN_POINT_DISTANCE = 0.01; + +var MIN_BRUSH_RADIUS = 0.08; +var MAX_BRUSH_RADIUS = 0.1; + +var RIGHT_BUTTON_1 = 7 +var RIGHT_BUTTON_2 = 8 +var RIGHT_BUTTON_3 = 9; +var RIGHT_BUTTON_4 = 10 +var LEFT_BUTTON_1 = 1; +var LEFT_BUTTON_2 = 2; +var LEFT_BUTTON_3 = 3; +var LEFT_BUTTON_4 = 4; + +var colorPalette = [{ + red: 250, + green: 0, + blue: 0 +}, { + red: 214, + green: 91, + blue: 67 +}, { + red: 192, + green: 41, + blue: 66 +}, { + red: 84, + green: 36, + blue: 55 +}, { + red: 83, + green: 119, + blue: 122 +}]; + +var MIN_STROKE_WIDTH = 0.002; +var MAX_STROKE_WIDTH = 0.05; + +function controller(side, triggerAction) { + this.triggerHeld = false; + this.triggerThreshold = 0.9; + this.side = side; + this.triggerAction = triggerAction; + this.cycleColorButton = side == LEFT ? Controller.Standard.LeftPrimaryThumb : Controller.Standard.RightPrimaryThumb; + + this.points = []; + this.normals = []; + this.strokeWidths = []; + + this.currentColorIndex = 0; + this.currentColor = colorPalette[this.currentColorIndex]; + + var self = this; + + + this.brush = Entities.addEntity({ + type: 'Sphere', + position: { + x: 0, + y: 0, + z: 0 + }, + color: this.currentColor, + dimensions: { + x: MIN_BRUSH_RADIUS, + y: MIN_BRUSH_RADIUS, + z: MIN_BRUSH_RADIUS + } + }); + + this.cycleColor = function() { + this.currentColor = colorPalette[++this.currentColorIndex]; + if (this.currentColorIndex === colorPalette.length - 1) { + this.currentColorIndex = -1; + } + } + this.newLine = function(position) { + this.linePosition = position; + this.line = Entities.addEntity({ + position: position, + type: "PolyLine", + color: this.currentColor, + dimensions: { + x: LINE_DIMENSIONS, + y: LINE_DIMENSIONS, + z: LINE_DIMENSIONS + }, + textures: "http://localhost:8080/trails.png", + lifetime: LIFETIME + }); + this.points = []; + this.normals = [] + this.strokeWidths = []; + } + + this.update = function(deltaTime) { + this.updateControllerState(); + var newBrushPosOffset = Vec3.multiply(Vec3.normalize(Vec3.subtract(this.tipPosition, this.palmPosition)), DRAWING_DEPTH); + var newBrushPos = Vec3.sum(this.palmPosition, newBrushPosOffset); + var brushRadius = map(this.triggerValue, TRIGGER_THRESHOLD, 1, MIN_BRUSH_RADIUS, MAX_BRUSH_RADIUS) + Entities.editEntity(this.brush, { + position: newBrushPos, + color: this.currentColor, + dimensions: { + x: brushRadius, + y: brushRadius, + z: brushRadius + } + }); + + + if (this.triggerValue > TRIGGER_THRESHOLD && !this.drawing) { + this.newLine(newBrushPos); + this.drawing = true; + } else if (this.drawing && this.triggerValue < TRIGGER_THRESHOLD) { + this.drawing = false; + } + + if (this.drawing && this.points.length < MAX_POINTS_PER_LINE) { + var localPoint = Vec3.subtract(newBrushPos, this.linePosition); + if (Vec3.distance(localPoint, this.points[this.points.length - 1]) < MIN_POINT_DISTANCE) { + //Need a minimum distance to avoid binormal NANs + return; + } + + this.points.push(localPoint); + var normal = computeNormal(newBrushPos, Camera.getPosition()); + + this.normals.push(normal); + var strokeWidth = map(this.triggerValue, TRIGGER_THRESHOLD, 1, MIN_STROKE_WIDTH, MAX_STROKE_WIDTH); + this.strokeWidths.push(strokeWidth); + Entities.editEntity(this.line, { + linePoints: this.points, + normals: this.normals, + strokeWidths: this.strokeWidths, + color: this.currentColor + }); + + } + } + + + this.updateControllerState = function() { + this.cycleColorButtonPressed = Controller.getValue(this.cycleColorButton); + this.palmPosition = this.side == RIGHT ? MyAvatar.rightHandPose.translation : MyAvatar.leftHandPose.translation; + this.tipPosition = this.side == RIGHT ? MyAvatar.rightHandTipPose.translation : MyAvatar.leftHandTipPose.translation; + this.triggerValue = Controller.getActionValue(this.triggerAction); + + + if (this.prevCycleColorButtonPressed === true && this.cycleColorButtonPressed === false) { + this.cycleColor(); + Entities.editEntity(this.brush, { + // color: this.currentColor + }); + } + + this.prevCycleColorButtonPressed = this.cycleColorButtonPressed; + + } + + this.cleanup = function() { + Entities.deleteEntity(self.brush); + } +} + +function computeNormal(p1, p2) { + return Vec3.normalize(Vec3.subtract(p2, p1)); +} + +function update(deltaTime) { + leftController.update(deltaTime); + rightController.update(deltaTime); +} + +function scriptEnding() { + leftController.cleanup(); + rightController.cleanup(); +} + +function vectorIsZero(v) { + return v.x === 0 && v.y === 0 && v.z === 0; +} + + +var rightController = new controller(RIGHT, Controller.findAction("RIGHT_HAND_CLICK")); +var leftController = new controller(LEFT, Controller.findAction("LEFT_HAND_CLICK")); +Script.update.connect(update); +Script.scriptEnding.connect(scriptEnding); + +function map(value, min1, max1, min2, max2) { + return min2 + (max2 - min2) * ((value - min1) / (max1 - min1)); +} \ No newline at end of file diff --git a/examples/lightTrails.js b/examples/lightTrails.js new file mode 100644 index 0000000000..fc8d7082e4 --- /dev/null +++ b/examples/lightTrails.js @@ -0,0 +1,224 @@ +// +// hydraPaint.js +// examples +// +// Created by Eric Levin on 5/14/15. +// Copyright 2014 High Fidelity, Inc. +// +// This script allows you to paint with the hydra! +// +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +var LEFT = 0; +var RIGHT = 1; +var LASER_WIDTH = 3; +var LASER_COLOR = { + red: 50, + green: 150, + blue: 200 +}; +var TRIGGER_THRESHOLD = .1; + +var MAX_POINTS_PER_LINE = 40; + +var LIFETIME = 6000; +var DRAWING_DEPTH = 1; +var LINE_DIMENSIONS = 20; + + +var MIN_POINT_DISTANCE = 0.01; + +var MIN_BRUSH_RADIUS = 0.08; +var MAX_BRUSH_RADIUS = 0.1; + +var RIGHT_BUTTON_1 = 7 +var RIGHT_BUTTON_2 = 8 +var RIGHT_BUTTON_3 = 9; +var RIGHT_BUTTON_4 = 10 +var LEFT_BUTTON_1 = 1; +var LEFT_BUTTON_2 = 2; +var LEFT_BUTTON_3 = 3; +var LEFT_BUTTON_4 = 4; + +var colorPalette = [{ + red: 250, + green: 0, + blue: 0 +}, { + red: 214, + green: 91, + blue: 67 +}, { + red: 192, + green: 41, + blue: 66 +}, { + red: 84, + green: 36, + blue: 55 +}, { + red: 83, + green: 119, + blue: 122 +}]; + +var MIN_STROKE_WIDTH = 0.002; +var MAX_STROKE_WIDTH = 0.05; + +function controller(side, triggerAction) { + this.triggerHeld = false; + this.triggerThreshold = 0.9; + this.side = side; + this.triggerAction = triggerAction; + this.cycleColorButton = side == LEFT ? Controller.Standard.LeftPrimaryThumb : Controller.Standard.RightPrimaryThumb; + + this.points = []; + this.normals = []; + this.strokeWidths = []; + + this.currentColorIndex = 0; + this.currentColor = colorPalette[this.currentColorIndex]; + + var self = this; + + + this.brush = Entities.addEntity({ + type: 'Sphere', + position: { + x: 0, + y: 0, + z: 0 + }, + color: this.currentColor, + dimensions: { + x: MIN_BRUSH_RADIUS, + y: MIN_BRUSH_RADIUS, + z: MIN_BRUSH_RADIUS + } + }); + + this.cycleColor = function() { + this.currentColor = colorPalette[++this.currentColorIndex]; + if (this.currentColorIndex === colorPalette.length - 1) { + this.currentColorIndex = -1; + } + } + this.newLine = function(position) { + this.linePosition = position; + this.line = Entities.addEntity({ + position: position, + type: "PolyLine", + color: this.currentColor, + dimensions: { + x: LINE_DIMENSIONS, + y: LINE_DIMENSIONS, + z: LINE_DIMENSIONS + }, + textures: "http://localhost:8080/trails.png", + lifetime: LIFETIME + }); + this.points = []; + this.normals = [] + this.strokeWidths = []; + } + + this.update = function(deltaTime) { + this.updateControllerState(); + var newBrushPosOffset = Vec3.multiply(Vec3.normalize(Vec3.subtract(this.tipPosition, this.palmPosition)), DRAWING_DEPTH); + var newBrushPos = Vec3.sum(this.palmPosition, newBrushPosOffset); + var brushRadius = map(this.triggerValue, TRIGGER_THRESHOLD, 1, MIN_BRUSH_RADIUS, MAX_BRUSH_RADIUS) + Entities.editEntity(this.brush, { + position: newBrushPos, + color: this.currentColor, + dimensions: { + x: brushRadius, + y: brushRadius, + z: brushRadius + } + }); + + + if (this.triggerValue > TRIGGER_THRESHOLD && !this.drawing) { + this.newLine(newBrushPos); + this.drawing = true; + } else if (this.drawing && this.triggerValue < TRIGGER_THRESHOLD) { + this.drawing = false; + } + + if (this.drawing && this.points.length < MAX_POINTS_PER_LINE) { + var localPoint = Vec3.subtract(newBrushPos, this.linePosition); + if (Vec3.distance(localPoint, this.points[this.points.length - 1]) < MIN_POINT_DISTANCE) { + //Need a minimum distance to avoid binormal NANs + return; + } + + this.points.push(localPoint); + var normal = computeNormal(newBrushPos, Camera.getPosition()); + + this.normals.push(normal); + var strokeWidth = map(this.triggerValue, TRIGGER_THRESHOLD, 1, MIN_STROKE_WIDTH, MAX_STROKE_WIDTH); + this.strokeWidths.push(strokeWidth); + Entities.editEntity(this.line, { + linePoints: this.points, + normals: this.normals, + strokeWidths: this.strokeWidths, + color: this.currentColor + }); + } + + // Once we get to max points + } + + + this.updateControllerState = function() { + this.cycleColorButtonPressed = Controller.getValue(this.cycleColorButton); + this.palmPosition = this.side == RIGHT ? MyAvatar.rightHandPose.translation : MyAvatar.leftHandPose.translation; + this.tipPosition = this.side == RIGHT ? MyAvatar.rightHandTipPose.translation : MyAvatar.leftHandTipPose.translation; + this.triggerValue = Controller.getActionValue(this.triggerAction); + + + if (this.prevCycleColorButtonPressed === true && this.cycleColorButtonPressed === false) { + this.cycleColor(); + Entities.editEntity(this.brush, { + // color: this.currentColor + }); + } + + this.prevCycleColorButtonPressed = this.cycleColorButtonPressed; + + } + + this.cleanup = function() { + Entities.deleteEntity(self.brush); + } +} + +function computeNormal(p1, p2) { + return Vec3.normalize(Vec3.subtract(p2, p1)); +} + +function update(deltaTime) { + leftController.update(deltaTime); + rightController.update(deltaTime); +} + +function scriptEnding() { + leftController.cleanup(); + rightController.cleanup(); +} + +function vectorIsZero(v) { + return v.x === 0 && v.y === 0 && v.z === 0; +} + + +var rightController = new controller(RIGHT, Controller.findAction("RIGHT_HAND_CLICK")); +var leftController = new controller(LEFT, Controller.findAction("LEFT_HAND_CLICK")); +Script.update.connect(update); +Script.scriptEnding.connect(scriptEnding); + +function map(value, min1, max1, min2, max2) { + return min2 + (max2 - min2) * ((value - min1) / (max1 - min1)); +} \ No newline at end of file From a83f374036727eab11afe3616f5f8299814c1e97 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 1 Dec 2015 10:50:25 -0800 Subject: [PATCH 03/62] tweaking light trail --- examples/flowArts/lightTrails.js | 103 +++++++++++-------------------- 1 file changed, 36 insertions(+), 67 deletions(-) diff --git a/examples/flowArts/lightTrails.js b/examples/flowArts/lightTrails.js index 60754f42a8..c01fc1c4d3 100644 --- a/examples/flowArts/lightTrails.js +++ b/examples/flowArts/lightTrails.js @@ -33,14 +33,6 @@ var MIN_POINT_DISTANCE = 0.01; var MIN_BRUSH_RADIUS = 0.08; var MAX_BRUSH_RADIUS = 0.1; -var RIGHT_BUTTON_1 = 7 -var RIGHT_BUTTON_2 = 8 -var RIGHT_BUTTON_3 = 9; -var RIGHT_BUTTON_4 = 10 -var LEFT_BUTTON_1 = 1; -var LEFT_BUTTON_2 = 2; -var LEFT_BUTTON_3 = 3; -var LEFT_BUTTON_4 = 4; var colorPalette = [{ red: 250, @@ -73,94 +65,73 @@ function controller(side, triggerAction) { this.side = side; this.triggerAction = triggerAction; this.cycleColorButton = side == LEFT ? Controller.Standard.LeftPrimaryThumb : Controller.Standard.RightPrimaryThumb; - + this.currentColorIndex = 0; + this.currentColor = colorPalette[this.currentColorIndex]; + this.trail = Entities.addEntity({ + type: "PolyLine", + color: this.currentColor, + dimensions: { + x: LINE_DIMENSIONS, + y: LINE_DIMENSIONS, + z: LINE_DIMENSIONS + }, + textures: "http://localhost:8080/trails.png", + lifetime: LIFETIME + }); this.points = []; this.normals = []; this.strokeWidths = []; - - this.currentColorIndex = 0; - this.currentColor = colorPalette[this.currentColorIndex]; - var self = this; - this.brush = Entities.addEntity({ - type: 'Sphere', - position: { - x: 0, - y: 0, - z: 0 - }, - color: this.currentColor, - dimensions: { - x: MIN_BRUSH_RADIUS, - y: MIN_BRUSH_RADIUS, - z: MIN_BRUSH_RADIUS - } - }); - this.cycleColor = function() { this.currentColor = colorPalette[++this.currentColorIndex]; if (this.currentColorIndex === colorPalette.length - 1) { this.currentColorIndex = -1; } } - this.newLine = function(position) { - this.linePosition = position; - this.line = Entities.addEntity({ - position: position, - type: "PolyLine", - color: this.currentColor, - dimensions: { - x: LINE_DIMENSIONS, - y: LINE_DIMENSIONS, - z: LINE_DIMENSIONS - }, - textures: "http://localhost:8080/trails.png", - lifetime: LIFETIME + + this.setTrailPosition = function(position) { + this.trailPosition = position; + Entities.editEntity(this.trail, { + position: this.trailPosition }); - this.points = []; - this.normals = [] - this.strokeWidths = []; } + this.update = function(deltaTime) { this.updateControllerState(); - var newBrushPosOffset = Vec3.multiply(Vec3.normalize(Vec3.subtract(this.tipPosition, this.palmPosition)), DRAWING_DEPTH); - var newBrushPos = Vec3.sum(this.palmPosition, newBrushPosOffset); - var brushRadius = map(this.triggerValue, TRIGGER_THRESHOLD, 1, MIN_BRUSH_RADIUS, MAX_BRUSH_RADIUS) - Entities.editEntity(this.brush, { - position: newBrushPos, - color: this.currentColor, - dimensions: { - x: brushRadius, - y: brushRadius, - z: brushRadius - } - }); + var newTrailPosOffset = Vec3.multiply(Vec3.normalize(Vec3.subtract(this.tipPosition, this.palmPosition)), DRAWING_DEPTH); + var newTrailPos = Vec3.sum(this.palmPosition, newTrailPosOffset); if (this.triggerValue > TRIGGER_THRESHOLD && !this.drawing) { - this.newLine(newBrushPos); + this.setTrailPosition(newTrailPos); this.drawing = true; } else if (this.drawing && this.triggerValue < TRIGGER_THRESHOLD) { this.drawing = false; } - if (this.drawing && this.points.length < MAX_POINTS_PER_LINE) { - var localPoint = Vec3.subtract(newBrushPos, this.linePosition); + if (this.drawing) { + var localPoint = Vec3.subtract(newTrailPos, this.trailPosition); if (Vec3.distance(localPoint, this.points[this.points.length - 1]) < MIN_POINT_DISTANCE) { //Need a minimum distance to avoid binormal NANs return; } + if (this.points.length === MAX_POINTS_PER_LINE) { + this.points.shift(); + this.normals.shift(); + this.strokeWidths.shift(); + } + this.points.push(localPoint); - var normal = computeNormal(newBrushPos, Camera.getPosition()); + var normal = computeNormal(newTrailPos, Camera.getPosition()); this.normals.push(normal); var strokeWidth = map(this.triggerValue, TRIGGER_THRESHOLD, 1, MIN_STROKE_WIDTH, MAX_STROKE_WIDTH); this.strokeWidths.push(strokeWidth); - Entities.editEntity(this.line, { + Entities.editEntity(this.trail, { linePoints: this.points, normals: this.normals, strokeWidths: this.strokeWidths, @@ -175,9 +146,9 @@ function controller(side, triggerAction) { this.cycleColorButtonPressed = Controller.getValue(this.cycleColorButton); this.palmPosition = this.side == RIGHT ? MyAvatar.rightHandPose.translation : MyAvatar.leftHandPose.translation; this.tipPosition = this.side == RIGHT ? MyAvatar.rightHandTipPose.translation : MyAvatar.leftHandTipPose.translation; - this.triggerValue = Controller.getActionValue(this.triggerAction); + this.triggerValue = Controller.getActionValue(this.triggerAction); + - if (this.prevCycleColorButtonPressed === true && this.cycleColorButtonPressed === false) { this.cycleColor(); Entities.editEntity(this.brush, { @@ -189,9 +160,7 @@ function controller(side, triggerAction) { } - this.cleanup = function() { - Entities.deleteEntity(self.brush); - } + this.cleanup = function() {} } function computeNormal(p1, p2) { @@ -204,7 +173,7 @@ function update(deltaTime) { } function scriptEnding() { - leftController.cleanup(); + leftController.cleanup(); rightController.cleanup(); } From 191f7f2c228771d55c544d2fb497ae34e2d0527e Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 1 Dec 2015 16:22:11 -0800 Subject: [PATCH 04/62] no audio for now --- examples/flowArts/lightTrails.js | 22 ++++++++-------- .../src/RenderablePolyLineEntityItem.cpp | 25 +++---------------- .../entities-renderer/src/paintStroke.slf | 7 ++---- 3 files changed, 16 insertions(+), 38 deletions(-) diff --git a/examples/flowArts/lightTrails.js b/examples/flowArts/lightTrails.js index c01fc1c4d3..8251803a5f 100644 --- a/examples/flowArts/lightTrails.js +++ b/examples/flowArts/lightTrails.js @@ -19,19 +19,17 @@ var LASER_COLOR = { green: 150, blue: 200 }; -var TRIGGER_THRESHOLD = .1; -var MAX_POINTS_PER_LINE = 40; +var MAX_POINTS_PER_LINE = 50; var LIFETIME = 6000; -var DRAWING_DEPTH = 1; +var DRAWING_DEPTH = 0.3; var LINE_DIMENSIONS = 20; -var MIN_POINT_DISTANCE = 0.01; +var MIN_POINT_DISTANCE = 0.03; + -var MIN_BRUSH_RADIUS = 0.08; -var MAX_BRUSH_RADIUS = 0.1; var colorPalette = [{ @@ -75,7 +73,7 @@ function controller(side, triggerAction) { y: LINE_DIMENSIONS, z: LINE_DIMENSIONS }, - textures: "http://localhost:8080/trails.png", + textures: "http://localhost:8080/trails.png?v1" + Math.random(), lifetime: LIFETIME }); this.points = []; @@ -105,11 +103,9 @@ function controller(side, triggerAction) { var newTrailPos = Vec3.sum(this.palmPosition, newTrailPosOffset); - if (this.triggerValue > TRIGGER_THRESHOLD && !this.drawing) { + if (!this.drawing) { this.setTrailPosition(newTrailPos); this.drawing = true; - } else if (this.drawing && this.triggerValue < TRIGGER_THRESHOLD) { - this.drawing = false; } if (this.drawing) { @@ -129,7 +125,7 @@ function controller(side, triggerAction) { var normal = computeNormal(newTrailPos, Camera.getPosition()); this.normals.push(normal); - var strokeWidth = map(this.triggerValue, TRIGGER_THRESHOLD, 1, MIN_STROKE_WIDTH, MAX_STROKE_WIDTH); + var strokeWidth = MAX_STROKE_WIDTH; this.strokeWidths.push(strokeWidth); Entities.editEntity(this.trail, { linePoints: this.points, @@ -160,7 +156,9 @@ function controller(side, triggerAction) { } - this.cleanup = function() {} + this.cleanup = function() { + Entities.deleteEntity(this.trail); + } } function computeNormal(p1, p2) { diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index 63a03bb8e7..bfb27a93b9 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -80,30 +80,12 @@ void RenderablePolyLineEntityItem::updateGeometry() { _verticesBuffer.reset(new gpu::Buffer()); int vertexIndex = 0; vec2 uv; - float tailStart = 0.0f; - float tailEnd = 0.25f; - float tailLength = tailEnd - tailStart; - - float headStart = 0.76f; - float headEnd = 1.0f; - float headLength = headEnd - headStart; float uCoord, vCoord; - - int numTailStrips = 5; - int numHeadStrips = 10; - int startHeadIndex = _vertices.size() / 2 - numHeadStrips; + uCoord = 0.0f; + float uCoordInc = 1.0 / (_vertices.size() / 2); for (int i = 0; i < _vertices.size() / 2; i++) { - uCoord = 0.26f; vCoord = 0.0f; - //tail - if (i < numTailStrips) { - uCoord = float(i) / numTailStrips * tailLength + tailStart; - } - - //head - if (i > startHeadIndex) { - uCoord = float((i + 1) - startHeadIndex) / numHeadStrips * headLength + headStart; - } + uv = vec2(uCoord, vCoord); @@ -121,6 +103,7 @@ void RenderablePolyLineEntityItem::updateGeometry() { vertexIndex++; _numVertices += 2; + uCoord += uCoordInc; } _pointsChanged = false; _normalsChanged = false; diff --git a/libraries/entities-renderer/src/paintStroke.slf b/libraries/entities-renderer/src/paintStroke.slf index 48de1274f4..6c51b4c979 100644 --- a/libraries/entities-renderer/src/paintStroke.slf +++ b/libraries/entities-renderer/src/paintStroke.slf @@ -38,14 +38,11 @@ void main(void) { vec4 texel = texture(originalTexture, varTexcoord); int frontCondition = 1 -int(gl_FrontFacing) * 2; - vec3 color = varColor.rgb; - color.g = 1.0 + sin(polyline.time) * 0.5; - //texel.a = varVertexId / 20.0; - //vec3 normal, float alpha, vec3 diffuse, vec3 specular, float shininess + vec3 color = varColor.rgb; packDeferredFragmentTranslucent( interpolatedNormal * frontCondition, texel.a, - color * texel.rgb, + texel.rgb, vec3(0.01, 0.01, 0.01), 10.0); } From 8aeb5598488905b7b47bca4db686874ec1ad51fa Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 2 Dec 2015 15:58:30 -0800 Subject: [PATCH 05/62] flowy --- examples/flowArts/lightTrails.js | 45 +++++-- examples/lightTrails.js | 224 ------------------------------- 2 files changed, 36 insertions(+), 233 deletions(-) delete mode 100644 examples/lightTrails.js diff --git a/examples/flowArts/lightTrails.js b/examples/flowArts/lightTrails.js index 8251803a5f..8d88957f03 100644 --- a/examples/flowArts/lightTrails.js +++ b/examples/flowArts/lightTrails.js @@ -11,6 +11,10 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // + +var eraseTrail = true; +var ugLSD = 25; +// var eraseTrail = false; var LEFT = 0; var RIGHT = 1; var LASER_WIDTH = 3; @@ -23,13 +27,11 @@ var LASER_COLOR = { var MAX_POINTS_PER_LINE = 50; var LIFETIME = 6000; -var DRAWING_DEPTH = 0.3; +var DRAWING_DEPTH = 0.2; var LINE_DIMENSIONS = 20; -var MIN_POINT_DISTANCE = 0.03; - - +var MIN_POINT_DISTANCE = 0.02; var colorPalette = [{ @@ -54,8 +56,7 @@ var colorPalette = [{ blue: 122 }]; -var MIN_STROKE_WIDTH = 0.002; -var MAX_STROKE_WIDTH = 0.05; +var STROKE_WIDTH = 0.05; function controller(side, triggerAction) { this.triggerHeld = false; @@ -65,6 +66,16 @@ function controller(side, triggerAction) { this.cycleColorButton = side == LEFT ? Controller.Standard.LeftPrimaryThumb : Controller.Standard.RightPrimaryThumb; this.currentColorIndex = 0; this.currentColor = colorPalette[this.currentColorIndex]; + var textures = "http://localhost:8080/trails.png?v2" + Math.random(); + + // this.light = Entities.addEntity({ + // type: 'Light', + // position: MyAvatar.position, + // dimensions: {x: 20, y: 20, z: 20}, + // color: {red: 60, green: 10, blue: 100}, + // intensity: 10 + // }); + this.trail = Entities.addEntity({ type: "PolyLine", color: this.currentColor, @@ -73,7 +84,7 @@ function controller(side, triggerAction) { y: LINE_DIMENSIONS, z: LINE_DIMENSIONS }, - textures: "http://localhost:8080/trails.png?v1" + Math.random(), + textures: textures, lifetime: LIFETIME }); this.points = []; @@ -81,6 +92,18 @@ function controller(side, triggerAction) { this.strokeWidths = []; var self = this; + this.trailEraseInterval = Script.setInterval(function() { + if (self.points.length > 0 && eraseTrail) { + self.points.shift(); + self.normals.shift(); + self.strokeWidths.shift(); + Entities.editEntity(self.trail, { + linePoints: self.points, + strokeWidths: self.strokeWidths, + normals: self.normals + }); + } + }, ugLSD); this.cycleColor = function() { this.currentColor = colorPalette[++this.currentColorIndex]; @@ -101,6 +124,9 @@ function controller(side, triggerAction) { this.updateControllerState(); var newTrailPosOffset = Vec3.multiply(Vec3.normalize(Vec3.subtract(this.tipPosition, this.palmPosition)), DRAWING_DEPTH); var newTrailPos = Vec3.sum(this.palmPosition, newTrailPosOffset); + // Entities.editEntity(this.light, { + // position: newTrailPos + // }); if (!this.drawing) { @@ -125,8 +151,7 @@ function controller(side, triggerAction) { var normal = computeNormal(newTrailPos, Camera.getPosition()); this.normals.push(normal); - var strokeWidth = MAX_STROKE_WIDTH; - this.strokeWidths.push(strokeWidth); + this.strokeWidths.push(STROKE_WIDTH); Entities.editEntity(this.trail, { linePoints: this.points, normals: this.normals, @@ -158,6 +183,8 @@ function controller(side, triggerAction) { this.cleanup = function() { Entities.deleteEntity(this.trail); + // Entities.deleteEntity(this.light); + Script.clearInterval(this.trailEraseInterval); } } diff --git a/examples/lightTrails.js b/examples/lightTrails.js deleted file mode 100644 index fc8d7082e4..0000000000 --- a/examples/lightTrails.js +++ /dev/null @@ -1,224 +0,0 @@ -// -// hydraPaint.js -// examples -// -// Created by Eric Levin on 5/14/15. -// Copyright 2014 High Fidelity, Inc. -// -// This script allows you to paint with the hydra! -// -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// -var LEFT = 0; -var RIGHT = 1; -var LASER_WIDTH = 3; -var LASER_COLOR = { - red: 50, - green: 150, - blue: 200 -}; -var TRIGGER_THRESHOLD = .1; - -var MAX_POINTS_PER_LINE = 40; - -var LIFETIME = 6000; -var DRAWING_DEPTH = 1; -var LINE_DIMENSIONS = 20; - - -var MIN_POINT_DISTANCE = 0.01; - -var MIN_BRUSH_RADIUS = 0.08; -var MAX_BRUSH_RADIUS = 0.1; - -var RIGHT_BUTTON_1 = 7 -var RIGHT_BUTTON_2 = 8 -var RIGHT_BUTTON_3 = 9; -var RIGHT_BUTTON_4 = 10 -var LEFT_BUTTON_1 = 1; -var LEFT_BUTTON_2 = 2; -var LEFT_BUTTON_3 = 3; -var LEFT_BUTTON_4 = 4; - -var colorPalette = [{ - red: 250, - green: 0, - blue: 0 -}, { - red: 214, - green: 91, - blue: 67 -}, { - red: 192, - green: 41, - blue: 66 -}, { - red: 84, - green: 36, - blue: 55 -}, { - red: 83, - green: 119, - blue: 122 -}]; - -var MIN_STROKE_WIDTH = 0.002; -var MAX_STROKE_WIDTH = 0.05; - -function controller(side, triggerAction) { - this.triggerHeld = false; - this.triggerThreshold = 0.9; - this.side = side; - this.triggerAction = triggerAction; - this.cycleColorButton = side == LEFT ? Controller.Standard.LeftPrimaryThumb : Controller.Standard.RightPrimaryThumb; - - this.points = []; - this.normals = []; - this.strokeWidths = []; - - this.currentColorIndex = 0; - this.currentColor = colorPalette[this.currentColorIndex]; - - var self = this; - - - this.brush = Entities.addEntity({ - type: 'Sphere', - position: { - x: 0, - y: 0, - z: 0 - }, - color: this.currentColor, - dimensions: { - x: MIN_BRUSH_RADIUS, - y: MIN_BRUSH_RADIUS, - z: MIN_BRUSH_RADIUS - } - }); - - this.cycleColor = function() { - this.currentColor = colorPalette[++this.currentColorIndex]; - if (this.currentColorIndex === colorPalette.length - 1) { - this.currentColorIndex = -1; - } - } - this.newLine = function(position) { - this.linePosition = position; - this.line = Entities.addEntity({ - position: position, - type: "PolyLine", - color: this.currentColor, - dimensions: { - x: LINE_DIMENSIONS, - y: LINE_DIMENSIONS, - z: LINE_DIMENSIONS - }, - textures: "http://localhost:8080/trails.png", - lifetime: LIFETIME - }); - this.points = []; - this.normals = [] - this.strokeWidths = []; - } - - this.update = function(deltaTime) { - this.updateControllerState(); - var newBrushPosOffset = Vec3.multiply(Vec3.normalize(Vec3.subtract(this.tipPosition, this.palmPosition)), DRAWING_DEPTH); - var newBrushPos = Vec3.sum(this.palmPosition, newBrushPosOffset); - var brushRadius = map(this.triggerValue, TRIGGER_THRESHOLD, 1, MIN_BRUSH_RADIUS, MAX_BRUSH_RADIUS) - Entities.editEntity(this.brush, { - position: newBrushPos, - color: this.currentColor, - dimensions: { - x: brushRadius, - y: brushRadius, - z: brushRadius - } - }); - - - if (this.triggerValue > TRIGGER_THRESHOLD && !this.drawing) { - this.newLine(newBrushPos); - this.drawing = true; - } else if (this.drawing && this.triggerValue < TRIGGER_THRESHOLD) { - this.drawing = false; - } - - if (this.drawing && this.points.length < MAX_POINTS_PER_LINE) { - var localPoint = Vec3.subtract(newBrushPos, this.linePosition); - if (Vec3.distance(localPoint, this.points[this.points.length - 1]) < MIN_POINT_DISTANCE) { - //Need a minimum distance to avoid binormal NANs - return; - } - - this.points.push(localPoint); - var normal = computeNormal(newBrushPos, Camera.getPosition()); - - this.normals.push(normal); - var strokeWidth = map(this.triggerValue, TRIGGER_THRESHOLD, 1, MIN_STROKE_WIDTH, MAX_STROKE_WIDTH); - this.strokeWidths.push(strokeWidth); - Entities.editEntity(this.line, { - linePoints: this.points, - normals: this.normals, - strokeWidths: this.strokeWidths, - color: this.currentColor - }); - } - - // Once we get to max points - } - - - this.updateControllerState = function() { - this.cycleColorButtonPressed = Controller.getValue(this.cycleColorButton); - this.palmPosition = this.side == RIGHT ? MyAvatar.rightHandPose.translation : MyAvatar.leftHandPose.translation; - this.tipPosition = this.side == RIGHT ? MyAvatar.rightHandTipPose.translation : MyAvatar.leftHandTipPose.translation; - this.triggerValue = Controller.getActionValue(this.triggerAction); - - - if (this.prevCycleColorButtonPressed === true && this.cycleColorButtonPressed === false) { - this.cycleColor(); - Entities.editEntity(this.brush, { - // color: this.currentColor - }); - } - - this.prevCycleColorButtonPressed = this.cycleColorButtonPressed; - - } - - this.cleanup = function() { - Entities.deleteEntity(self.brush); - } -} - -function computeNormal(p1, p2) { - return Vec3.normalize(Vec3.subtract(p2, p1)); -} - -function update(deltaTime) { - leftController.update(deltaTime); - rightController.update(deltaTime); -} - -function scriptEnding() { - leftController.cleanup(); - rightController.cleanup(); -} - -function vectorIsZero(v) { - return v.x === 0 && v.y === 0 && v.z === 0; -} - - -var rightController = new controller(RIGHT, Controller.findAction("RIGHT_HAND_CLICK")); -var leftController = new controller(LEFT, Controller.findAction("LEFT_HAND_CLICK")); -Script.update.connect(update); -Script.scriptEnding.connect(scriptEnding); - -function map(value, min1, max1, min2, max2) { - return min2 + (max2 - min2) * ((value - min1) / (max1 - min1)); -} \ No newline at end of file From d2d0326c02268b4cf8cd496de12d5e23888910b9 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 2 Dec 2015 16:44:47 -0800 Subject: [PATCH 06/62] using deployed texture --- examples/flowArts/lightTrails.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flowArts/lightTrails.js b/examples/flowArts/lightTrails.js index 8d88957f03..a494f9a810 100644 --- a/examples/flowArts/lightTrails.js +++ b/examples/flowArts/lightTrails.js @@ -66,7 +66,7 @@ function controller(side, triggerAction) { this.cycleColorButton = side == LEFT ? Controller.Standard.LeftPrimaryThumb : Controller.Standard.RightPrimaryThumb; this.currentColorIndex = 0; this.currentColor = colorPalette[this.currentColorIndex]; - var textures = "http://localhost:8080/trails.png?v2" + Math.random(); + var texture = "https://s3.amazonaws.com/hifi-public/eric/textures/paintStrokes/trails.png"; // this.light = Entities.addEntity({ // type: 'Light', @@ -84,7 +84,7 @@ function controller(side, triggerAction) { y: LINE_DIMENSIONS, z: LINE_DIMENSIONS }, - textures: textures, + textures: texture, lifetime: LIFETIME }); this.points = []; From 2336dd96dd934f5efc1832db5815bf2dc87f3c21 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 2 Dec 2015 18:10:45 -0800 Subject: [PATCH 07/62] lights --- examples/flowArts/lightTrails.js | 108 ++++++++++++++----------------- 1 file changed, 50 insertions(+), 58 deletions(-) diff --git a/examples/flowArts/lightTrails.js b/examples/flowArts/lightTrails.js index a494f9a810..4a7f9de277 100644 --- a/examples/flowArts/lightTrails.js +++ b/examples/flowArts/lightTrails.js @@ -12,73 +12,82 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +Script.include("../libraries/utils.js"); + var eraseTrail = true; var ugLSD = 25; // var eraseTrail = false; var LEFT = 0; var RIGHT = 1; -var LASER_WIDTH = 3; -var LASER_COLOR = { - red: 50, - green: 150, - blue: 200 -}; - var MAX_POINTS_PER_LINE = 50; var LIFETIME = 6000; -var DRAWING_DEPTH = 0.2; +var DRAWING_DEPTH = 0.6; var LINE_DIMENSIONS = 20; +var lightZone = Entities.addEntity({ + type: "Zone", + shapeType: 'box', + keyLightIntensity: 0.02, + keyLightColor: { + red: 5, + green: 0, + blue: 5 + }, + keyLightAmbientIntensity: .05, + position: MyAvatar.position, + dimensions: { + x: 100, + y: 100, + z: 100 + } +}); + var MIN_POINT_DISTANCE = 0.02; var colorPalette = [{ red: 250, - green: 0, - blue: 0 + green: 137, + blue: 162 }, { - red: 214, - green: 91, - blue: 67 + red: 204, + green: 244, + blue: 249 }, { - red: 192, - green: 41, - blue: 66 + red: 146, + green: 206, + blue: 116 }, { - red: 84, - green: 36, - blue: 55 -}, { - red: 83, - green: 119, - blue: 122 + red: 240, + green: 87, + blue: 129 }]; -var STROKE_WIDTH = 0.05; +var STROKE_WIDTH = 0.03; function controller(side, triggerAction) { this.triggerHeld = false; this.triggerThreshold = 0.9; this.side = side; this.triggerAction = triggerAction; - this.cycleColorButton = side == LEFT ? Controller.Standard.LeftPrimaryThumb : Controller.Standard.RightPrimaryThumb; - this.currentColorIndex = 0; - this.currentColor = colorPalette[this.currentColorIndex]; var texture = "https://s3.amazonaws.com/hifi-public/eric/textures/paintStrokes/trails.png"; - // this.light = Entities.addEntity({ - // type: 'Light', - // position: MyAvatar.position, - // dimensions: {x: 20, y: 20, z: 20}, - // color: {red: 60, green: 10, blue: 100}, - // intensity: 10 - // }); + this.light = Entities.addEntity({ + type: 'Light', + position: MyAvatar.position, + dimensions: { + x: 20, + y: 20, + z: 20 + }, + color: colorPalette[randInt(0, colorPalette.length)], + intensity: 20 + }); this.trail = Entities.addEntity({ type: "PolyLine", - color: this.currentColor, dimensions: { x: LINE_DIMENSIONS, y: LINE_DIMENSIONS, @@ -105,12 +114,6 @@ function controller(side, triggerAction) { } }, ugLSD); - this.cycleColor = function() { - this.currentColor = colorPalette[++this.currentColorIndex]; - if (this.currentColorIndex === colorPalette.length - 1) { - this.currentColorIndex = -1; - } - } this.setTrailPosition = function(position) { this.trailPosition = position; @@ -124,9 +127,9 @@ function controller(side, triggerAction) { this.updateControllerState(); var newTrailPosOffset = Vec3.multiply(Vec3.normalize(Vec3.subtract(this.tipPosition, this.palmPosition)), DRAWING_DEPTH); var newTrailPos = Vec3.sum(this.palmPosition, newTrailPosOffset); - // Entities.editEntity(this.light, { - // position: newTrailPos - // }); + Entities.editEntity(this.light, { + position: newTrailPos + }); if (!this.drawing) { @@ -151,12 +154,11 @@ function controller(side, triggerAction) { var normal = computeNormal(newTrailPos, Camera.getPosition()); this.normals.push(normal); - this.strokeWidths.push(STROKE_WIDTH); + this.strokeWidths.push(STROKE_WIDTH + Math.random() * 0.01); Entities.editEntity(this.trail, { linePoints: this.points, normals: this.normals, strokeWidths: this.strokeWidths, - color: this.currentColor }); } @@ -164,26 +166,15 @@ function controller(side, triggerAction) { this.updateControllerState = function() { - this.cycleColorButtonPressed = Controller.getValue(this.cycleColorButton); this.palmPosition = this.side == RIGHT ? MyAvatar.rightHandPose.translation : MyAvatar.leftHandPose.translation; this.tipPosition = this.side == RIGHT ? MyAvatar.rightHandTipPose.translation : MyAvatar.leftHandTipPose.translation; this.triggerValue = Controller.getActionValue(this.triggerAction); - - if (this.prevCycleColorButtonPressed === true && this.cycleColorButtonPressed === false) { - this.cycleColor(); - Entities.editEntity(this.brush, { - // color: this.currentColor - }); - } - - this.prevCycleColorButtonPressed = this.cycleColorButtonPressed; - } this.cleanup = function() { Entities.deleteEntity(this.trail); - // Entities.deleteEntity(this.light); + Entities.deleteEntity(this.light); Script.clearInterval(this.trailEraseInterval); } } @@ -200,6 +191,7 @@ function update(deltaTime) { function scriptEnding() { leftController.cleanup(); rightController.cleanup(); + Entities.deleteEntity(lightZone); } function vectorIsZero(v) { From 5f881e765093d62d9ecc0031b3883ff31acb5505 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 3 Dec 2015 13:46:29 -0800 Subject: [PATCH 08/62] polylines now take color as a uniform --- examples/flowArts/lightTrails.js | 7 ++++--- examples/painting/closePaint.js | 5 ++++- .../painting/whiteboard/whiteboardEntityScript.js | 3 +++ .../src/RenderablePolyLineEntityItem.cpp | 13 +++---------- .../src/RenderablePolyLineEntityItem.h | 1 - libraries/entities-renderer/src/paintStroke.slf | 6 ++---- libraries/entities-renderer/src/paintStroke.slv | 3 --- libraries/entities/src/PolyLineEntityItem.h | 2 +- 8 files changed, 17 insertions(+), 23 deletions(-) diff --git a/examples/flowArts/lightTrails.js b/examples/flowArts/lightTrails.js index 4a7f9de277..e063897eb8 100644 --- a/examples/flowArts/lightTrails.js +++ b/examples/flowArts/lightTrails.js @@ -22,7 +22,7 @@ var RIGHT = 1; var MAX_POINTS_PER_LINE = 50; var LIFETIME = 6000; -var DRAWING_DEPTH = 0.6; +var DRAWING_DEPTH = 0.8; var LINE_DIMENSIONS = 20; var lightZone = Entities.addEntity({ @@ -65,7 +65,7 @@ var colorPalette = [{ blue: 129 }]; -var STROKE_WIDTH = 0.03; +var STROKE_WIDTH = 0.04; function controller(side, triggerAction) { this.triggerHeld = false; @@ -83,7 +83,7 @@ function controller(side, triggerAction) { z: 20 }, color: colorPalette[randInt(0, colorPalette.length)], - intensity: 20 + intensity: 5 }); this.trail = Entities.addEntity({ @@ -93,6 +93,7 @@ function controller(side, triggerAction) { y: LINE_DIMENSIONS, z: LINE_DIMENSIONS }, + color: {red: 255, green: 255, blue: 255}, textures: texture, lifetime: LIFETIME }); diff --git a/examples/painting/closePaint.js b/examples/painting/closePaint.js index 60b4ac2e25..bea4d9c9aa 100644 --- a/examples/painting/closePaint.js +++ b/examples/painting/closePaint.js @@ -43,6 +43,8 @@ var MAX_STROKE_WIDTH = 0.04; var center = Vec3.sum(MyAvatar.position, Vec3.multiply(2, Quat.getFront(Camera.getOrientation()))); +var textureURL = "https://s3.amazonaws.com/hifi-public/eric/textures/paintStrokes/paintStroke.png"; + function MyController(hand, triggerAction) { @@ -148,7 +150,8 @@ function MyController(hand, triggerAction) { y: 50, z: 50 }, - lifetime: 200 + lifetime: 200, + textures: textureURL }); this.strokePoints = []; this.strokeNormals = []; diff --git a/examples/painting/whiteboard/whiteboardEntityScript.js b/examples/painting/whiteboard/whiteboardEntityScript.js index 61d7291e11..374ec8b873 100644 --- a/examples/painting/whiteboard/whiteboardEntityScript.js +++ b/examples/painting/whiteboard/whiteboardEntityScript.js @@ -29,6 +29,8 @@ var MIN_STROKE_WIDTH = 0.0005; var MAX_STROKE_WIDTH = 0.03; + var textureURL = "https://s3.amazonaws.com/hifi-public/eric/textures/paintStrokes/paintStroke.png"; + var TRIGGER_CONTROLS = [ Controller.Standard.LT, Controller.Standard.RT, @@ -168,6 +170,7 @@ type: "PolyLine", name: "paintStroke", color: this.strokeColor, + textures: "https://s3.amazonaws.com/hifi-public/eric/textures/paintStrokes/paintStroke.png", dimensions: { x: 50, y: 50, diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index bfb27a93b9..d38da0d3f7 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -25,7 +25,7 @@ struct PolyLineUniforms { - float time; + glm::vec3 color; }; EntityItemPointer RenderablePolyLineEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { @@ -34,7 +34,6 @@ EntityItemPointer RenderablePolyLineEntityItem::factory(const EntityItemID& enti RenderablePolyLineEntityItem::RenderablePolyLineEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : PolyLineEntityItem(entityItemID, properties), -_counter(0.0f), _numVertices(0) { _vertices = QVector(0.0f); @@ -49,13 +48,11 @@ int32_t RenderablePolyLineEntityItem::PAINTSTROKE_GPU_SLOT; void RenderablePolyLineEntityItem::createPipeline() { static const int NORMAL_OFFSET = 12; - static const int COLOR_OFFSET = 24; - static const int TEXTURE_OFFSET = 28; + static const int TEXTURE_OFFSET = 24; _format.reset(new gpu::Stream::Format()); _format->setAttribute(gpu::Stream::POSITION, 0, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ), 0); _format->setAttribute(gpu::Stream::NORMAL, 0, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ), NORMAL_OFFSET); - _format->setAttribute(gpu::Stream::COLOR, 0, gpu::Element::COLOR_RGBA_32, COLOR_OFFSET); _format->setAttribute(gpu::Stream::TEXCOORD, 0, gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV), TEXTURE_OFFSET); auto VS = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(paintStroke_vert))); @@ -91,14 +88,12 @@ void RenderablePolyLineEntityItem::updateGeometry() { _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_vertices.at(vertexIndex)); _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_normals.at(i)); - _verticesBuffer->append(sizeof(int), (gpu::Byte*)&_color); _verticesBuffer->append(sizeof(glm::vec2), (gpu::Byte*)&uv); vertexIndex++; uv.y = 1.0f; _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_vertices.at(vertexIndex)); _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_normals.at(i)); - _verticesBuffer->append(sizeof(int), (gpu::Byte*)_color); _verticesBuffer->append(sizeof(glm::vec2), (const gpu::Byte*)&uv); vertexIndex++; @@ -154,10 +149,8 @@ void RenderablePolyLineEntityItem::updateVertices() { void RenderablePolyLineEntityItem::update(const quint64& now) { PolyLineUniforms uniforms; - _counter += 0.01; - uniforms.time = _counter; + uniforms.color = toGlm(getXColor()); memcpy(&_uniformBuffer.edit(), &uniforms, sizeof(PolyLineUniforms)); - if (_pointsChanged || _strokeWidthsChanged || _normalsChanged) { updateVertices(); updateGeometry(); diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h index 658614e72e..411b856d91 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h @@ -47,7 +47,6 @@ protected: gpu::BufferView _uniformBuffer; unsigned int _numVertices; QVector _vertices; - float _counter; }; diff --git a/libraries/entities-renderer/src/paintStroke.slf b/libraries/entities-renderer/src/paintStroke.slf index 6c51b4c979..1a87f84bfd 100644 --- a/libraries/entities-renderer/src/paintStroke.slf +++ b/libraries/entities-renderer/src/paintStroke.slf @@ -21,12 +21,11 @@ uniform sampler2D originalTexture; // the interpolated normal in vec3 interpolatedNormal; in vec2 varTexcoord; -in vec4 varColor; flat in int varVertexId; struct PolyLineUniforms { - float time; + vec3 color; }; uniform polyLineBuffer { @@ -38,11 +37,10 @@ void main(void) { vec4 texel = texture(originalTexture, varTexcoord); int frontCondition = 1 -int(gl_FrontFacing) * 2; - vec3 color = varColor.rgb; packDeferredFragmentTranslucent( interpolatedNormal * frontCondition, texel.a, - texel.rgb, + polyline.color * texel.rgb, vec3(0.01, 0.01, 0.01), 10.0); } diff --git a/libraries/entities-renderer/src/paintStroke.slv b/libraries/entities-renderer/src/paintStroke.slv index 25f046456a..5c368f9c0f 100644 --- a/libraries/entities-renderer/src/paintStroke.slv +++ b/libraries/entities-renderer/src/paintStroke.slv @@ -23,15 +23,12 @@ out vec3 interpolatedNormal; //the diffuse texture out vec2 varTexcoord; -out vec4 varColor; flat out int varVertexId; void main(void) { varTexcoord = inTexCoord0.st; - // pass along the diffuse color - varColor = inColor; varVertexId = gl_VertexID; // standard transform diff --git a/libraries/entities/src/PolyLineEntityItem.h b/libraries/entities/src/PolyLineEntityItem.h index 1610bf87b5..20549d1bbd 100644 --- a/libraries/entities/src/PolyLineEntityItem.h +++ b/libraries/entities/src/PolyLineEntityItem.h @@ -49,7 +49,7 @@ class PolyLineEntityItem : public EntityItem { memcpy(_color, value, sizeof(_color)); } void setColor(const xColor& value) { - + _color[RED_INDEX] = value.red; _color[GREEN_INDEX] = value.green; _color[BLUE_INDEX] = value.blue; From ab5b783cb7dbb3bf6f1878bf2f2e134ef331406e Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 14 Dec 2015 09:01:45 -0800 Subject: [PATCH 09/62] zone tweal --- examples/flowArts/lightTrails.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/flowArts/lightTrails.js b/examples/flowArts/lightTrails.js index e063897eb8..8e0dc98bbb 100644 --- a/examples/flowArts/lightTrails.js +++ b/examples/flowArts/lightTrails.js @@ -23,7 +23,7 @@ var MAX_POINTS_PER_LINE = 50; var LIFETIME = 6000; var DRAWING_DEPTH = 0.8; -var LINE_DIMENSIONS = 20; +var LINE_DIMENSIONS = 100; var lightZone = Entities.addEntity({ type: "Zone", @@ -78,9 +78,9 @@ function controller(side, triggerAction) { type: 'Light', position: MyAvatar.position, dimensions: { - x: 20, - y: 20, - z: 20 + x: 30, + y: 30, + z: 30 }, color: colorPalette[randInt(0, colorPalette.length)], intensity: 5 From 8d691f2132f4acdeb7f98692d1ec97236b77b086 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 14 Dec 2015 11:44:42 -0800 Subject: [PATCH 10/62] light ball --- examples/flowArts/lightBall/lightBall.js | 0 .../flowArts/lightBall/lightBallSpawner.js | 51 +++++++++++++++++++ .../entities/src/ParticleEffectEntityItem.cpp | 4 +- 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 examples/flowArts/lightBall/lightBall.js create mode 100644 examples/flowArts/lightBall/lightBallSpawner.js diff --git a/examples/flowArts/lightBall/lightBall.js b/examples/flowArts/lightBall/lightBall.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/flowArts/lightBall/lightBallSpawner.js b/examples/flowArts/lightBall/lightBallSpawner.js new file mode 100644 index 0000000000..f758c26bbe --- /dev/null +++ b/examples/flowArts/lightBall/lightBallSpawner.js @@ -0,0 +1,51 @@ +var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(Camera.getOrientation()))); + +var lightBall = Entities.addEntity({ + position: center, + type: "ParticleEffect", + isEmitting: true, + "name": "ParticlesTest Emitter", + "colorStart": {red: 20, green: 20, blue: 255}, + color: {red: 10, green: 0, blue: 255}, + "colorFinish": {red: 250, green: 200, blue:255}, + // "maxParticles": 100000, + "lifespan": 1, + "emitRate": 1000, + "emitSpeed": .1, + "speedSpread": .01, + "emitDimensions": { + "x": 0, + "y": 0, + "z": 0 + }, + "polarStart": 0, + "polarFinish": 3, + "azimuthStart": -3.1415927410125732, + "azimuthFinish": 3.1415927410125732, + "emitAcceleration": { + "x": 0, + "y": 0, + "z": 0 + }, + "accelerationSpread": { + "x": .01, + "y": .01, + "z": .01 + }, + "particleRadius": 0.04, + "radiusSpread": 0, + "radiusStart": 0.05, + "radiusFinish": 0.0003, + "alpha": 0, + "alphaSpread": .5, + "alphaStart": 0, + "alphaFinish": 0.5, + "additiveBlending": 0, + "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png" +}) + +function cleanup() { + Entities.deleteEntity(lightBall); +} + +Script.scriptEnding.connect(cleanup); \ No newline at end of file diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 5600c85650..f4210f4486 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -52,13 +52,13 @@ const float ParticleEffectEntityItem::MINIMUM_ALPHA = 0.0f; const float ParticleEffectEntityItem::MAXIMUM_ALPHA = 1.0f; const quint32 ParticleEffectEntityItem::DEFAULT_MAX_PARTICLES = 1000; const quint32 ParticleEffectEntityItem::MINIMUM_MAX_PARTICLES = 1; -const quint32 ParticleEffectEntityItem::MAXIMUM_MAX_PARTICLES = 10000; +const quint32 ParticleEffectEntityItem::MAXIMUM_MAX_PARTICLES = 100000; const float ParticleEffectEntityItem::DEFAULT_LIFESPAN = 3.0f; const float ParticleEffectEntityItem::MINIMUM_LIFESPAN = 0.0f; const float ParticleEffectEntityItem::MAXIMUM_LIFESPAN = 86400.0f; // 1 day const float ParticleEffectEntityItem::DEFAULT_EMIT_RATE = 15.0f; const float ParticleEffectEntityItem::MINIMUM_EMIT_RATE = 0.0f; -const float ParticleEffectEntityItem::MAXIMUM_EMIT_RATE = 1000.0f; +const float ParticleEffectEntityItem::MAXIMUM_EMIT_RATE = 100000.0f; const float ParticleEffectEntityItem::DEFAULT_EMIT_SPEED = 5.0f; const float ParticleEffectEntityItem::MINIMUM_EMIT_SPEED = 0.0f; const float ParticleEffectEntityItem::MAXIMUM_EMIT_SPEED = 1000.0f; // Approx mach 3 From 761dfeaccd72edbd4cd79ce66bb9d9f517b229d1 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 14 Dec 2015 14:53:08 -0800 Subject: [PATCH 11/62] 2 balls --- .../flowArts/lightBall/lightBallSpawner.js | 73 ++++++++++++++++++- 1 file changed, 70 insertions(+), 3 deletions(-) diff --git a/examples/flowArts/lightBall/lightBallSpawner.js b/examples/flowArts/lightBall/lightBallSpawner.js index f758c26bbe..da09829257 100644 --- a/examples/flowArts/lightBall/lightBallSpawner.js +++ b/examples/flowArts/lightBall/lightBallSpawner.js @@ -1,16 +1,80 @@ -var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(Camera.getOrientation()))); +var center = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Camera.getOrientation()))); + +var containerBall = Entities.addEntity({ + type: "Sphere", + position: center, + dimensions: {x: .1, y: .1, z: .1}, + color: {red: 50, green: 10, blue: 50}, + collisionsWillMove: true, + gravity: {x: 0, y: -.1, z: 0} +}); var lightBall = Entities.addEntity({ position: center, type: "ParticleEffect", + parentID: containerBall, isEmitting: true, "name": "ParticlesTest Emitter", "colorStart": {red: 20, green: 20, blue: 255}, color: {red: 10, green: 0, blue: 255}, "colorFinish": {red: 250, green: 200, blue:255}, - // "maxParticles": 100000, + "maxParticles": 20000, "lifespan": 1, - "emitRate": 1000, + "emitRate": 10000, + "emitSpeed": .1, + "speedSpread": .01, + "emitDimensions": { + "x": 0, + "y": 0, + "z": 0 + }, + "polarStart": 0, + "polarFinish": 3, + "azimuthStart": -3.1415927410125732, + "azimuthFinish": 3.1415927410125732, + "emitAcceleration": { + "x": 0, + "y": 0, + "z": 0 + }, + "accelerationSpread": { + "x": .01, + "y": .01, + "z": .01 + }, + "particleRadius": 0.04, + "radiusSpread": 0, + "radiusStart": 0.05, + "radiusFinish": 0.0003, + "alpha": 0, + "alphaSpread": .5, + "alphaStart": 0, + "alphaFinish": 0.5, + "additiveBlending": 0, + "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png" +}) + +var containerBall2 = Entities.addEntity({ + type: "Sphere", + position: Vec3.sum(center, {x: 0.5, y: 0, z: 0}), + dimensions: {x: .1, y: .1, z: .1}, + color: {red: 200, green: 10, blue: 50}, + collisionsWillMove: true, + gravity: {x: 0, y: -.1, z: 0} +}); + +var lightBall2 = Entities.addEntity({ + position: Vec3.sum(center, {x: 0.5, y: 0, z: 0}), + type: "ParticleEffect", + parentID: containerBall2, + isEmitting: true, + "name": "ParticlesTest Emitter", + "colorStart": {red: 200, green: 20, blue: 0}, + color: {red: 255, green: 0, blue: 10}, + "colorFinish": {red: 250, green: 200, blue:255}, + "maxParticles": 100000, + "lifespan": 1, + "emitRate": 10000, "emitSpeed": .1, "speedSpread": .01, "emitDimensions": { @@ -46,6 +110,9 @@ var lightBall = Entities.addEntity({ function cleanup() { Entities.deleteEntity(lightBall); + Entities.deleteEntity(lightBall2); + Entities.deleteEntity(containerBall); + Entities.deleteEntity(containerBall2); } Script.scriptEnding.connect(cleanup); \ No newline at end of file From c561a53f7c283a7c80e7aa7d921409f73a4971d7 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 15 Dec 2015 09:56:28 -0800 Subject: [PATCH 12/62] Going to change additive blending to world position prop --- .../flowArts/lightBall/lightBallSpawner.js | 151 ++++++++++-------- .../RenderableParticleEffectEntityItem.cpp | 4 +- .../entities/src/ParticleEffectEntityItem.cpp | 17 +- 3 files changed, 102 insertions(+), 70 deletions(-) diff --git a/examples/flowArts/lightBall/lightBallSpawner.js b/examples/flowArts/lightBall/lightBallSpawner.js index da09829257..8f220129b2 100644 --- a/examples/flowArts/lightBall/lightBallSpawner.js +++ b/examples/flowArts/lightBall/lightBallSpawner.js @@ -1,81 +1,101 @@ + +Script.include("../../libraries/utils.js"); + var center = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Camera.getOrientation()))); +var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); + +var raveRoom = Entities.addEntity({ + type: "Model", + modelURL: modelURL, + position: center, + visible:false +}); + +var colorPalette = [{ + red: 250, + green: 137, + blue: 162 +}, { + red: 204, + green: 244, + blue: 249 +}, { + red: 146, + green: 206, + blue: 116 +}, { + red: 240, + green: 87, + blue: 129 +}]; + var containerBall = Entities.addEntity({ type: "Sphere", position: center, dimensions: {x: .1, y: .1, z: .1}, - color: {red: 50, green: 10, blue: 50}, + color: {red: 1500, green: 10, blue: 50}, collisionsWillMove: true, - gravity: {x: 0, y: -.1, z: 0} + userData: JSON.stringify({ + grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: 2, + z: 0 + } + }, + invertSolidWhileHeld: true + } + }) + // gravity: {x: 0, y: -.1, z: 0} }); +var lightZone = Entities.addEntity({ + type: "Zone", + shapeType: 'box', + keyLightIntensity: 0.2, + keyLightColor: { + red: 50, + green: 0, + blue: 50 + }, + keyLightAmbientIntensity: .2, + position: MyAvatar.position, + dimensions: { + x: 100, + y: 100, + z: 100 + } +}); + +var light = Entities.addEntity({ + type: 'Light', + position: center, + parentID: containerBall, + dimensions: { + x: 30, + y: 30, + z: 30 + }, + color: colorPalette[randInt(0, colorPalette.length)], + intensity: 5 + }); + + var lightBall = Entities.addEntity({ position: center, type: "ParticleEffect", parentID: containerBall, isEmitting: true, "name": "ParticlesTest Emitter", - "colorStart": {red: 20, green: 20, blue: 255}, + "colorStart": {red: 200, green: 20, blue: 40}, color: {red: 10, green: 0, blue: 255}, "colorFinish": {red: 250, green: 200, blue:255}, - "maxParticles": 20000, - "lifespan": 1, - "emitRate": 10000, - "emitSpeed": .1, - "speedSpread": .01, - "emitDimensions": { - "x": 0, - "y": 0, - "z": 0 - }, - "polarStart": 0, - "polarFinish": 3, - "azimuthStart": -3.1415927410125732, - "azimuthFinish": 3.1415927410125732, - "emitAcceleration": { - "x": 0, - "y": 0, - "z": 0 - }, - "accelerationSpread": { - "x": .01, - "y": .01, - "z": .01 - }, - "particleRadius": 0.04, - "radiusSpread": 0, - "radiusStart": 0.05, - "radiusFinish": 0.0003, - "alpha": 0, - "alphaSpread": .5, - "alphaStart": 0, - "alphaFinish": 0.5, - "additiveBlending": 0, - "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png" -}) - -var containerBall2 = Entities.addEntity({ - type: "Sphere", - position: Vec3.sum(center, {x: 0.5, y: 0, z: 0}), - dimensions: {x: .1, y: .1, z: .1}, - color: {red: 200, green: 10, blue: 50}, - collisionsWillMove: true, - gravity: {x: 0, y: -.1, z: 0} -}); - -var lightBall2 = Entities.addEntity({ - position: Vec3.sum(center, {x: 0.5, y: 0, z: 0}), - type: "ParticleEffect", - parentID: containerBall2, - isEmitting: true, - "name": "ParticlesTest Emitter", - "colorStart": {red: 200, green: 20, blue: 0}, - color: {red: 255, green: 0, blue: 10}, - "colorFinish": {red: 250, green: 200, blue:255}, "maxParticles": 100000, - "lifespan": 1, + "lifespan": 7, "emitRate": 10000, - "emitSpeed": .1, + "emitSpeed": .02, "speedSpread": .01, "emitDimensions": { "x": 0, @@ -83,9 +103,9 @@ var lightBall2 = Entities.addEntity({ "z": 0 }, "polarStart": 0, - "polarFinish": 3, - "azimuthStart": -3.1415927410125732, - "azimuthFinish": 3.1415927410125732, + "polarFinish": Math.PI, + "azimuthStart": -Math.PI, + "azimuthFinish": Math.PI, "emitAcceleration": { "x": 0, "y": 0, @@ -108,11 +128,14 @@ var lightBall2 = Entities.addEntity({ "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png" }) + + function cleanup() { Entities.deleteEntity(lightBall); - Entities.deleteEntity(lightBall2); Entities.deleteEntity(containerBall); - Entities.deleteEntity(containerBall2); + Entities.deleteEntity(raveRoom); + Entities.deleteEntity(lightZone) + Entities.deleteEntity(light); } Script.scriptEnding.connect(cleanup); \ No newline at end of file diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 4abd8dbafd..42e9fa446c 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -240,8 +240,8 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { auto position = getPosition(); auto rotation = getRotation(); Transform transform; - transform.setTranslation(position); - transform.setRotation(rotation); + //transform.setTranslation(position); + // transform.setRotation(rotation); render::PendingChanges pendingChanges; pendingChanges.updateItem(_renderItemId, [=](ParticlePayloadData& payload) { diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index f4210f4486..8f6f60fa26 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -33,6 +33,8 @@ #include #include #include +#include +#include #include "EntityTree.h" #include "EntityTreeElement.h" @@ -640,12 +642,18 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle() { Particle particle; - particle.seed = randFloatInRange(0.0f, 1.0f); - + std::random_device rd; + + std::mt19937_64 el(rd()); + std::uniform_real_distribution uniform_dist(-1.0, 1.0); + + particle.seed = randFloatInRange(-1.0f, 1.0f); + particle.position = getPosition(); // Position, velocity, and acceleration if (_polarStart == 0.0f && _polarFinish == 0.0f && _emitDimensions.z == 0.0f) { // Emit along z-axis from position - particle.velocity = (_emitSpeed + randFloatInRange(-1.0f, 1.0f) * _speedSpread) * (_emitOrientation * Vectors::UNIT_Z); + + particle.velocity = (_emitSpeed + 0.2f * _speedSpread) * (_emitOrientation * Vectors::UNIT_Z); particle.acceleration = _emitAcceleration + randFloatInRange(-1.0f, 1.0f) * _accelerationSpread; } else { @@ -691,10 +699,11 @@ ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle() { radii.z > 0.0f ? z / (radii.z * radii.z) : 0.0f )); - particle.position = _emitOrientation * emitPosition; + particle.position += _emitOrientation * emitPosition; } particle.velocity = (_emitSpeed + randFloatInRange(-1.0f, 1.0f) * _speedSpread) * (_emitOrientation * emitDirection); + // particle.velocity = (_emitSpeed + uniform_dist(el) * _speedSpread) * (_emitOrientation * emitDirection); particle.acceleration = _emitAcceleration + randFloatInRange(-1.0f, 1.0f) * _accelerationSpread; } From dca83a054ea3b278e1ca2a8f1c1cb23e1740ff19 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 15 Dec 2015 10:30:57 -0800 Subject: [PATCH 13/62] Changed additiveBlending to emitterShouldTrail --- .../flowArts/lightBall/lightBallSpawner.js | 9 ++++---- .../RenderableParticleEffectEntityItem.cpp | 6 +++-- .../entities/src/EntityItemProperties.cpp | 16 ++++++------- libraries/entities/src/EntityItemProperties.h | 2 +- libraries/entities/src/EntityPropertyFlags.h | 2 +- .../entities/src/ParticleEffectEntityItem.cpp | 23 ++++++++++++------- .../entities/src/ParticleEffectEntityItem.h | 10 ++++---- 7 files changed, 39 insertions(+), 29 deletions(-) diff --git a/examples/flowArts/lightBall/lightBallSpawner.js b/examples/flowArts/lightBall/lightBallSpawner.js index 8f220129b2..7744c1210e 100644 --- a/examples/flowArts/lightBall/lightBallSpawner.js +++ b/examples/flowArts/lightBall/lightBallSpawner.js @@ -41,7 +41,7 @@ var containerBall = Entities.addEntity({ spatialKey: { relativePosition: { x: 0, - y: 2, + y: 1, z: 0 } }, @@ -93,9 +93,9 @@ var lightBall = Entities.addEntity({ color: {red: 10, green: 0, blue: 255}, "colorFinish": {red: 250, green: 200, blue:255}, "maxParticles": 100000, - "lifespan": 7, + "lifespan": 2, "emitRate": 10000, - "emitSpeed": .02, + "emitSpeed": .2, "speedSpread": .01, "emitDimensions": { "x": 0, @@ -125,7 +125,8 @@ var lightBall = Entities.addEntity({ "alphaStart": 0, "alphaFinish": 0.5, "additiveBlending": 0, - "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png" + "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", + emitterShouldTrail: false }) diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 42e9fa446c..91a4811011 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -240,8 +240,10 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { auto position = getPosition(); auto rotation = getRotation(); Transform transform; - //transform.setTranslation(position); - // transform.setRotation(rotation); + if (!getEmitterShouldTrail()) { + transform.setTranslation(position); + transform.setRotation(rotation); + } render::PendingChanges pendingChanges; pendingChanges.updateItem(_renderItemId, [=](ParticlePayloadData& payload) { diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 98a099fcaa..3a2fdf55d4 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -195,7 +195,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_ALPHA_SPREAD, alphaSpread); CHECK_PROPERTY_CHANGE(PROP_ALPHA_START, alphaStart); CHECK_PROPERTY_CHANGE(PROP_ALPHA_FINISH, alphaFinish); - CHECK_PROPERTY_CHANGE(PROP_ADDITIVE_BLENDING, additiveBlending); + CHECK_PROPERTY_CHANGE(PROP_EMITTER_SHOULD_TRAIL, emitterShouldTrail); CHECK_PROPERTY_CHANGE(PROP_MODEL_URL, modelURL); CHECK_PROPERTY_CHANGE(PROP_COMPOUND_SHAPE_URL, compoundShapeURL); CHECK_PROPERTY_CHANGE(PROP_VISIBLE, visible); @@ -354,7 +354,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ALPHA_SPREAD, alphaSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ALPHA_START, alphaStart); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ALPHA_FINISH, alphaFinish); - COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_ADDITIVE_BLENDING, additiveBlending); + COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_EMITTER_SHOULD_TRAIL, emitterShouldTrail); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_LOCAL_POSITION, localPosition); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_LOCAL_ROTATION, localRotation); } @@ -515,7 +515,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaSpread, float, setAlphaSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaStart, float, setAlphaStart); COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaFinish, float, setAlphaFinish); - COPY_PROPERTY_FROM_QSCRIPTVALUE(additiveBlending, bool, setAdditiveBlending); + COPY_PROPERTY_FROM_QSCRIPTVALUE(emitterShouldTrail , bool, setEmitterShouldTrail); COPY_PROPERTY_FROM_QSCRIPTVALUE(modelURL, QString, setModelURL); COPY_PROPERTY_FROM_QSCRIPTVALUE(compoundShapeURL, QString, setCompoundShapeURL); COPY_PROPERTY_FROM_QSCRIPTVALUE(glowLevel, float, setGlowLevel); @@ -670,7 +670,7 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue ADD_PROPERTY_TO_MAP(PROP_ALPHA_SPREAD, AlphaSpread, alphaSpread, float); ADD_PROPERTY_TO_MAP(PROP_ALPHA_START, AlphaStart, alphaStart, float); ADD_PROPERTY_TO_MAP(PROP_ALPHA_FINISH, AlphaFinish, alphaFinish, float); - ADD_PROPERTY_TO_MAP(PROP_ADDITIVE_BLENDING, AdditiveBlending, additiveBlending, bool); + ADD_PROPERTY_TO_MAP(PROP_EMITTER_SHOULD_TRAIL, EmitterShouldTrail, emitterShouldTrail, bool); ADD_PROPERTY_TO_MAP(PROP_MODEL_URL, ModelURL, modelURL, QString); ADD_PROPERTY_TO_MAP(PROP_COMPOUND_SHAPE_URL, CompoundShapeURL, compoundShapeURL, QString); ADD_PROPERTY_TO_MAP(PROP_REGISTRATION_POINT, RegistrationPoint, registrationPoint, glm::vec3); @@ -980,7 +980,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, properties.getAlphaSpread()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, properties.getAlphaStart()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_FINISH, properties.getAlphaFinish()); - APPEND_ENTITY_PROPERTY(PROP_ADDITIVE_BLENDING, properties.getAdditiveBlending()); + APPEND_ENTITY_PROPERTY(PROP_EMITTER_SHOULD_TRAIL, properties.getEmitterShouldTrail()); } if (properties.getType() == EntityTypes::Zone) { @@ -1265,7 +1265,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_SPREAD, float, setAlphaSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_START, float, setAlphaStart); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_FINISH, float, setAlphaFinish); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ADDITIVE_BLENDING, bool, setAdditiveBlending); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMITTER_SHOULD_TRAIL, bool, setEmitterShouldTrail); } if (properties.getType() == EntityTypes::Zone) { @@ -1608,8 +1608,8 @@ QList EntityItemProperties::listChangedProperties() { if (alphaFinishChanged()) { out += "alphaFinish"; } - if (additiveBlendingChanged()) { - out += "additiveBlending"; + if (emitterShouldTrailChanged()) { + out += "emitterShouldTrail"; } if (modelURLChanged()) { out += "modelURL"; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index c13519996a..5420e75aed 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -161,7 +161,7 @@ public: DEFINE_PROPERTY(PROP_RADIUS_SPREAD, RadiusSpread, radiusSpread, float, ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD); DEFINE_PROPERTY(PROP_RADIUS_START, RadiusStart, radiusStart, float, ParticleEffectEntityItem::DEFAULT_RADIUS_START); DEFINE_PROPERTY(PROP_RADIUS_FINISH, RadiusFinish, radiusFinish, float, ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH); - DEFINE_PROPERTY(PROP_ADDITIVE_BLENDING, AdditiveBlending, additiveBlending, bool, ParticleEffectEntityItem::DEFAULT_ADDITIVE_BLENDING); + DEFINE_PROPERTY(PROP_EMITTER_SHOULD_TRAIL, EmitterShouldTrail, emitterShouldTrail, bool, ParticleEffectEntityItem::DEFAULT_EMITTER_SHOULD_TRAIL); DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID); DEFINE_PROPERTY_GROUP(KeyLight, keyLight, KeyLightPropertyGroup); DEFINE_PROPERTY_REF(PROP_VOXEL_VOLUME_SIZE, VoxelVolumeSize, voxelVolumeSize, glm::vec3, PolyVoxEntityItem::DEFAULT_VOXEL_VOLUME_SIZE); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 3bca911a56..2ba86a491e 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -149,7 +149,7 @@ enum EntityPropertyList { PROP_ANIMATION_HOLD, PROP_ANIMATION_START_AUTOMATICALLY, - PROP_ADDITIVE_BLENDING, + PROP_EMITTER_SHOULD_TRAIL, PROP_PARENT_ID, PROP_PARENT_JOINT_INDEX, diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 8f6f60fa26..7d9af11862 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -93,7 +93,7 @@ const float ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD = 0.0f; const float ParticleEffectEntityItem::DEFAULT_RADIUS_START = DEFAULT_PARTICLE_RADIUS; const float ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH = DEFAULT_PARTICLE_RADIUS; const QString ParticleEffectEntityItem::DEFAULT_TEXTURES = ""; -const bool ParticleEffectEntityItem::DEFAULT_ADDITIVE_BLENDING = false; +const bool ParticleEffectEntityItem::DEFAULT_EMITTER_SHOULD_TRAIL = false; EntityItemPointer ParticleEffectEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { @@ -333,7 +333,7 @@ EntityItemProperties ParticleEffectEntityItem::getProperties(EntityPropertyFlags COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaStart, getAlphaStart); COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaFinish, getAlphaFinish); COPY_ENTITY_PROPERTY_TO_PROPERTIES(textures, getTextures); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(additiveBlending, getAdditiveBlending); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitterShouldTrail, getEmitterShouldTrail); return properties; @@ -372,7 +372,7 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaStart, setAlphaStart); SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaFinish, setAlphaFinish); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(additiveBlending, setAdditiveBlending); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitterShouldTrail, setEmitterShouldTrail); if (somethingChanged) { bool wantDebug = false; @@ -465,7 +465,7 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch } if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLES_ADDITIVE_BLENDING) { - READ_ENTITY_PROPERTY(PROP_ADDITIVE_BLENDING, bool, setAdditiveBlending); + READ_ENTITY_PROPERTY(PROP_EMITTER_SHOULD_TRAIL, bool, setEmitterShouldTrail); } return bytesRead; @@ -505,7 +505,7 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_POLAR_FINISH; requestedProperties += PROP_AZIMUTH_START; requestedProperties += PROP_AZIMUTH_FINISH; - requestedProperties += PROP_ADDITIVE_BLENDING; + requestedProperties += PROP_EMITTER_SHOULD_TRAIL; return requestedProperties; } @@ -548,7 +548,7 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_POLAR_FINISH, getPolarFinish()); APPEND_ENTITY_PROPERTY(PROP_AZIMUTH_START, getAzimuthStart()); APPEND_ENTITY_PROPERTY(PROP_AZIMUTH_FINISH, getAzimuthFinish()); - APPEND_ENTITY_PROPERTY(PROP_ADDITIVE_BLENDING, getAdditiveBlending()); + APPEND_ENTITY_PROPERTY(PROP_EMITTER_SHOULD_TRAIL, getEmitterShouldTrail()); } bool ParticleEffectEntityItem::isEmittingParticles() const { @@ -648,7 +648,9 @@ ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle() { std::uniform_real_distribution uniform_dist(-1.0, 1.0); particle.seed = randFloatInRange(-1.0f, 1.0f); - particle.position = getPosition(); + if (getEmitterShouldTrail()) { + particle.position = getPosition(); + } // Position, velocity, and acceleration if (_polarStart == 0.0f && _polarFinish == 0.0f && _emitDimensions.z == 0.0f) { // Emit along z-axis from position @@ -699,7 +701,12 @@ ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle() { radii.z > 0.0f ? z / (radii.z * radii.z) : 0.0f )); - particle.position += _emitOrientation * emitPosition; + if (getEmitterShouldTrail()) { + particle.position += _emitOrientation * emitPosition; + } + else { + particle.position = _emitOrientation * emitPosition; + } } particle.velocity = (_emitSpeed + randFloatInRange(-1.0f, 1.0f) * _speedSpread) * (_emitOrientation * emitDirection); diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index c35a45baeb..7bedbde6d8 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -207,10 +207,10 @@ public: } } - static const bool DEFAULT_ADDITIVE_BLENDING; - bool getAdditiveBlending() const { return _additiveBlending; } - void setAdditiveBlending(bool additiveBlending) { - _additiveBlending = additiveBlending; + static const bool DEFAULT_EMITTER_SHOULD_TRAIL; + bool getEmitterShouldTrail() const { return _emitterShouldTrail; } + void setEmitterShouldTrail(bool emitterShouldTrail) { + _emitterShouldTrail = emitterShouldTrail; } virtual bool supportsDetailedRayIntersection() const { return false; } @@ -280,7 +280,7 @@ protected: float _timeUntilNextEmit { 0.0f }; - bool _additiveBlending { DEFAULT_ADDITIVE_BLENDING }; + bool _emitterShouldTrail { DEFAULT_EMITTER_SHOULD_TRAIL }; }; #endif // hifi_ParticleEffectEntityItem_h From d9c93130e5a148a2758e9c7016a16467cbd7b5b3 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 15 Dec 2015 18:02:11 -0800 Subject: [PATCH 14/62] In a state where non uniform random vals are clear --- .../flowArts/lightBall/lightBallSpawner.js | 39 +++++++------------ .../entities/src/ParticleEffectEntityItem.cpp | 2 +- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/examples/flowArts/lightBall/lightBallSpawner.js b/examples/flowArts/lightBall/lightBallSpawner.js index 7744c1210e..dd521b4fd4 100644 --- a/examples/flowArts/lightBall/lightBallSpawner.js +++ b/examples/flowArts/lightBall/lightBallSpawner.js @@ -12,21 +12,9 @@ var raveRoom = Entities.addEntity({ }); var colorPalette = [{ - red: 250, - green: 137, + red: 25, + green: 20, blue: 162 -}, { - red: 204, - green: 244, - blue: 249 -}, { - red: 146, - green: 206, - blue: 116 -}, { - red: 240, - green: 87, - blue: 129 }]; @@ -34,7 +22,7 @@ var containerBall = Entities.addEntity({ type: "Sphere", position: center, dimensions: {x: .1, y: .1, z: .1}, - color: {red: 1500, green: 10, blue: 50}, + color: {red: 15, green: 10, blue: 150}, collisionsWillMove: true, userData: JSON.stringify({ grabbableKey: { @@ -90,13 +78,13 @@ var lightBall = Entities.addEntity({ isEmitting: true, "name": "ParticlesTest Emitter", "colorStart": {red: 200, green: 20, blue: 40}, - color: {red: 10, green: 0, blue: 255}, - "colorFinish": {red: 250, green: 200, blue:255}, + color: {red: 200, green: 200, blue: 255}, + "colorFinish": {red: 25, green: 20, blue:255}, "maxParticles": 100000, - "lifespan": 2, - "emitRate": 10000, - "emitSpeed": .2, - "speedSpread": .01, + "lifespan": 5, + "emitRate": 500, + "emitSpeed": .02, + "speedSpread": .0, "emitDimensions": { "x": 0, "y": 0, @@ -112,9 +100,9 @@ var lightBall = Entities.addEntity({ "z": 0 }, "accelerationSpread": { - "x": .01, - "y": .01, - "z": .01 + "x": .00, + "y": .00, + "z": .00 }, "particleRadius": 0.04, "radiusSpread": 0, @@ -124,9 +112,8 @@ var lightBall = Entities.addEntity({ "alphaSpread": .5, "alphaStart": 0, "alphaFinish": 0.5, - "additiveBlending": 0, "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", - emitterShouldTrail: false + emitterShouldTrail: true }) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 7d9af11862..954074ec17 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -645,7 +645,7 @@ ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle() { std::random_device rd; std::mt19937_64 el(rd()); - std::uniform_real_distribution uniform_dist(-1.0, 1.0); + std::uniform_real_distribution uniform_dist(0.0, 1.0); particle.seed = randFloatInRange(-1.0f, 1.0f); if (getEmitterShouldTrail()) { From 61bad36d5c1b0a0ad40747724372c121040e60d5 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 15 Dec 2015 18:49:04 -0800 Subject: [PATCH 15/62] tweaks --- examples/flowArts/lightBall/lightBallSpawner.js | 5 +++-- libraries/entities/src/ParticleEffectEntityItem.cpp | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/examples/flowArts/lightBall/lightBallSpawner.js b/examples/flowArts/lightBall/lightBallSpawner.js index dd521b4fd4..505df7d83b 100644 --- a/examples/flowArts/lightBall/lightBallSpawner.js +++ b/examples/flowArts/lightBall/lightBallSpawner.js @@ -24,6 +24,7 @@ var containerBall = Entities.addEntity({ dimensions: {x: .1, y: .1, z: .1}, color: {red: 15, green: 10, blue: 150}, collisionsWillMove: true, + visible: false, userData: JSON.stringify({ grabbableKey: { spatialKey: { @@ -82,8 +83,8 @@ var lightBall = Entities.addEntity({ "colorFinish": {red: 25, green: 20, blue:255}, "maxParticles": 100000, "lifespan": 5, - "emitRate": 500, - "emitSpeed": .02, + "emitRate": 5000, + "emitSpeed": .1, "speedSpread": .0, "emitDimensions": { "x": 0, diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 954074ec17..4d46439554 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -666,13 +666,14 @@ ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle() { float elevationMinZ = sin(PI_OVER_TWO - _polarFinish); float elevationMaxZ = sin(PI_OVER_TWO - _polarStart); - float elevation = asin(elevationMinZ + (elevationMaxZ - elevationMinZ) * randFloat()); + // float elevation = asin(elevationMinZ + (elevationMaxZ - elevationMinZ) * randFloat()); + float elevation = asin(elevationMinZ + (elevationMaxZ - elevationMinZ) * uniform_dist(el)); float azimuth; if (_azimuthFinish >= _azimuthStart) { - azimuth = _azimuthStart + (_azimuthFinish - _azimuthStart) * randFloat(); + azimuth = _azimuthStart + (_azimuthFinish - _azimuthStart) * uniform_dist(el); } else { - azimuth = _azimuthStart + (TWO_PI + _azimuthFinish - _azimuthStart) * randFloat(); + azimuth = _azimuthStart + (TWO_PI + _azimuthFinish - _azimuthStart) * uniform_dist(el); } glm::vec3 emitDirection; From fcfa3969125e956b983401983a5964a86721968a Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 16 Dec 2015 13:58:55 -0800 Subject: [PATCH 16/62] syntax tweak --- examples/flowArts/lightBall/lightBallSpawner.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/flowArts/lightBall/lightBallSpawner.js b/examples/flowArts/lightBall/lightBallSpawner.js index 505df7d83b..20a9c312fc 100644 --- a/examples/flowArts/lightBall/lightBallSpawner.js +++ b/examples/flowArts/lightBall/lightBallSpawner.js @@ -24,7 +24,6 @@ var containerBall = Entities.addEntity({ dimensions: {x: .1, y: .1, z: .1}, color: {red: 15, green: 10, blue: 150}, collisionsWillMove: true, - visible: false, userData: JSON.stringify({ grabbableKey: { spatialKey: { @@ -85,7 +84,7 @@ var lightBall = Entities.addEntity({ "lifespan": 5, "emitRate": 5000, "emitSpeed": .1, - "speedSpread": .0, + "speedSpread": 0.0, "emitDimensions": { "x": 0, "y": 0, From b29a6b16a954f4e5427fdbe96517c65153d355ed Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 16 Dec 2015 14:40:56 -0800 Subject: [PATCH 17/62] modularizing flow art tools --- examples/flowArts/flowArtsHutSpawner.js | 77 ++++++ .../flowArts/lightBall/lightBallSpawner.js | 239 +++++++++--------- 2 files changed, 194 insertions(+), 122 deletions(-) create mode 100644 examples/flowArts/flowArtsHutSpawner.js diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js new file mode 100644 index 0000000000..d3c60548ea --- /dev/null +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -0,0 +1,77 @@ +// +// flowArtsHutSpawner.js +// examples +// +// Created by Eric Levin on 5/14/15. +// Copyright 2014 High Fidelity, Inc. +// +// This script creates a special flow arts hut with a numch of flow art toys people can go in and play with +// +// +// 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/utils.js"); +Script.include("lightBall/lightBallSpawner.js"); + +var basePosition = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Camera.getOrientation()))); +basePosition.y = MyAvatar.position.y + 1 +var lightBall = LightBallSpawner(basePosition); +var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); + +var roomDimensions = {x: 30.58, y: 15.29, z: 30.58}; + +var raveRoom = Entities.addEntity({ + type: "Model", + modelURL: modelURL, + position: basePosition, + dimensions:roomDimensions, + visible: true +}); + +var floor = Entities.addEntity({ + type: "Box", + position: Vec3.sum(basePosition, {x: 0, y: -1.5, z: 0}), + dimensions: {x: roomDimensions.x, y: 0.6, z: roomDimensions.z}, + color: {red: 50, green: 10, blue: 100}, + shapeType: 'box' +}); + + + + + +var lightZone = Entities.addEntity({ + type: "Zone", + shapeType: 'box', + keyLightIntensity: 0.2, + keyLightColor: { + red: 50, + green: 0, + blue: 50 + }, + keyLightAmbientIntensity: .2, + position: MyAvatar.position, + dimensions: { + x: 100, + y: 100, + z: 100 + } +}); + + + + + + +function cleanup() { + + Entities.deleteEntity(raveRoom); + Entities.deleteEntity(lightZone) + Entities.deleteEntity(floor); + lightBall.cleanup(); +} + +Script.scriptEnding.connect(cleanup); \ No newline at end of file diff --git a/examples/flowArts/lightBall/lightBallSpawner.js b/examples/flowArts/lightBall/lightBallSpawner.js index 20a9c312fc..7325f16a64 100644 --- a/examples/flowArts/lightBall/lightBallSpawner.js +++ b/examples/flowArts/lightBall/lightBallSpawner.js @@ -1,129 +1,124 @@ + Script.include("../../libraries/utils.js"); -Script.include("../../libraries/utils.js"); + LightBallSpawner = function(basePosition) { -var center = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Camera.getOrientation()))); -var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); - -var raveRoom = Entities.addEntity({ - type: "Model", - modelURL: modelURL, - position: center, - visible:false -}); - -var colorPalette = [{ - red: 25, - green: 20, - blue: 162 -}]; + var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); + var colorPalette = [{ + red: 25, + green: 20, + blue: 162 + }]; -var containerBall = Entities.addEntity({ - type: "Sphere", - position: center, - dimensions: {x: .1, y: .1, z: .1}, - color: {red: 15, green: 10, blue: 150}, - collisionsWillMove: true, - userData: JSON.stringify({ - grabbableKey: { - spatialKey: { - relativePosition: { - x: 0, - y: 1, - z: 0 - } + var containerBall = Entities.addEntity({ + type: "Sphere", + position: Vec3.sum(basePosition, { + x: 0, + y: .5, + z: 0 + }), + dimensions: { + x: .1, + y: .1, + z: .1 }, - invertSolidWhileHeld: true + color: { + red: 15, + green: 10, + blue: 150 + }, + collisionsWillMove: true, + userData: JSON.stringify({ + grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: 1, + z: 0 + } + }, + invertSolidWhileHeld: true + } + }) + }); + + + var light = Entities.addEntity({ + type: 'Light', + parentID: containerBall, + dimensions: { + x: 30, + y: 30, + z: 30 + }, + color: colorPalette[randInt(0, colorPalette.length)], + intensity: 5 + }); + + + var lightBall = Entities.addEntity({ + type: "ParticleEffect", + parentID: containerBall, + isEmitting: true, + "name": "ParticlesTest Emitter", + "colorStart": { + red: 200, + green: 20, + blue: 40 + }, + color: { + red: 200, + green: 200, + blue: 255 + }, + "colorFinish": { + red: 25, + green: 20, + blue: 255 + }, + "maxParticles": 100000, + "lifespan": 5, + "emitRate": 5000, + "emitSpeed": .1, + "speedSpread": 0.0, + "emitDimensions": { + "x": 0, + "y": 0, + "z": 0 + }, + "polarStart": 0, + "polarFinish": Math.PI, + "azimuthStart": -Math.PI, + "azimuthFinish": Math.PI, + "emitAcceleration": { + "x": 0, + "y": 0, + "z": 0 + }, + "accelerationSpread": { + "x": .00, + "y": .00, + "z": .00 + }, + "particleRadius": 0.04, + "radiusSpread": 0, + "radiusStart": 0.05, + "radiusFinish": 0.0003, + "alpha": 0, + "alphaSpread": .5, + "alphaStart": 0, + "alphaFinish": 0.5, + "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", + emitterShouldTrail: true + }) + + + + function cleanup() { + Entities.deleteEntity(lightBall); + Entities.deleteEntity(containerBall); + Entities.deleteEntity(light); } - }) - // gravity: {x: 0, y: -.1, z: 0} -}); -var lightZone = Entities.addEntity({ - type: "Zone", - shapeType: 'box', - keyLightIntensity: 0.2, - keyLightColor: { - red: 50, - green: 0, - blue: 50 - }, - keyLightAmbientIntensity: .2, - position: MyAvatar.position, - dimensions: { - x: 100, - y: 100, - z: 100 - } -}); - -var light = Entities.addEntity({ - type: 'Light', - position: center, - parentID: containerBall, - dimensions: { - x: 30, - y: 30, - z: 30 - }, - color: colorPalette[randInt(0, colorPalette.length)], - intensity: 5 - }); - - -var lightBall = Entities.addEntity({ - position: center, - type: "ParticleEffect", - parentID: containerBall, - isEmitting: true, - "name": "ParticlesTest Emitter", - "colorStart": {red: 200, green: 20, blue: 40}, - color: {red: 200, green: 200, blue: 255}, - "colorFinish": {red: 25, green: 20, blue:255}, - "maxParticles": 100000, - "lifespan": 5, - "emitRate": 5000, - "emitSpeed": .1, - "speedSpread": 0.0, - "emitDimensions": { - "x": 0, - "y": 0, - "z": 0 - }, - "polarStart": 0, - "polarFinish": Math.PI, - "azimuthStart": -Math.PI, - "azimuthFinish": Math.PI, - "emitAcceleration": { - "x": 0, - "y": 0, - "z": 0 - }, - "accelerationSpread": { - "x": .00, - "y": .00, - "z": .00 - }, - "particleRadius": 0.04, - "radiusSpread": 0, - "radiusStart": 0.05, - "radiusFinish": 0.0003, - "alpha": 0, - "alphaSpread": .5, - "alphaStart": 0, - "alphaFinish": 0.5, - "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", - emitterShouldTrail: true -}) - - - -function cleanup() { - Entities.deleteEntity(lightBall); - Entities.deleteEntity(containerBall); - Entities.deleteEntity(raveRoom); - Entities.deleteEntity(lightZone) - Entities.deleteEntity(light); -} - -Script.scriptEnding.connect(cleanup); \ No newline at end of file + this.cleanup = cleanup; + } \ No newline at end of file From 4155e3af71a9efc3bc79772364e475864d2187d6 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 16 Dec 2015 15:22:56 -0800 Subject: [PATCH 18/62] refactoring --- examples/flowArts/flowArtsHutSpawner.js | 8 +- examples/flowArts/lightBall/lightBall.js | 124 ++++++++++++++++++ .../flowArts/lightBall/lightBallSpawner.js | 124 ------------------ .../flowArts/raveStick/createRaveStick.js | 0 4 files changed, 126 insertions(+), 130 deletions(-) delete mode 100644 examples/flowArts/lightBall/lightBallSpawner.js create mode 100644 examples/flowArts/raveStick/createRaveStick.js diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index d3c60548ea..c8f7dbed78 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -14,11 +14,11 @@ Script.include("../../libraries/utils.js"); -Script.include("lightBall/lightBallSpawner.js"); +Script.include("lightBall/LightBall.js"); var basePosition = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Camera.getOrientation()))); basePosition.y = MyAvatar.position.y + 1 -var lightBall = LightBallSpawner(basePosition); +var lightBall = LightBall(basePosition); var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); var roomDimensions = {x: 30.58, y: 15.29, z: 30.58}; @@ -62,10 +62,6 @@ var lightZone = Entities.addEntity({ }); - - - - function cleanup() { Entities.deleteEntity(raveRoom); diff --git a/examples/flowArts/lightBall/lightBall.js b/examples/flowArts/lightBall/lightBall.js index e69de29bb2..6f44ed6d74 100644 --- a/examples/flowArts/lightBall/lightBall.js +++ b/examples/flowArts/lightBall/lightBall.js @@ -0,0 +1,124 @@ + Script.include("../../libraries/utils.js"); + + LightBall = function(basePosition) { + + var colorPalette = [{ + red: 25, + green: 20, + blue: 162 + }]; + + + var containerBall = Entities.addEntity({ + type: "Sphere", + position: Vec3.sum(basePosition, { + x: 0, + y: .5, + z: 0 + }), + dimensions: { + x: .1, + y: .1, + z: .1 + }, + color: { + red: 15, + green: 10, + blue: 150 + }, + collisionsWillMove: true, + userData: JSON.stringify({ + grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: 1, + z: 0 + } + }, + invertSolidWhileHeld: true + } + }) + }); + + + var light = Entities.addEntity({ + type: 'Light', + parentID: containerBall, + dimensions: { + x: 30, + y: 30, + z: 30 + }, + color: colorPalette[randInt(0, colorPalette.length)], + intensity: 5 + }); + + + var lightBall = Entities.addEntity({ + type: "ParticleEffect", + parentID: containerBall, + isEmitting: true, + "name": "ParticlesTest Emitter", + "colorStart": { + red: 200, + green: 20, + blue: 40 + }, + color: { + red: 200, + green: 200, + blue: 255 + }, + "colorFinish": { + red: 25, + green: 20, + blue: 255 + }, + "maxParticles": 100000, + "lifespan": 5, + "emitRate": 5000, + "emitSpeed": .1, + "speedSpread": 0.0, + "emitDimensions": { + "x": 0, + "y": 0, + "z": 0 + }, + "polarStart": 0, + "polarFinish": Math.PI, + "azimuthStart": -Math.PI, + "azimuthFinish": Math.PI, + "emitAcceleration": { + "x": 0, + "y": 0, + "z": 0 + }, + "accelerationSpread": { + "x": .00, + "y": .00, + "z": .00 + }, + "particleRadius": 0.04, + "radiusSpread": 0, + "radiusStart": 0.05, + "radiusFinish": 0.0003, + "alpha": 0, + "alphaSpread": .5, + "alphaStart": 0, + "alphaFinish": 0.5, + // "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", + "textures": "file:///C:/Users/Eric/Desktop/Particle-Sprite-Smoke-1.png?v1" + Math.random(), + emitterShouldTrail: true + }) + + + + function cleanup() { + Entities.deleteEntity(lightBall); + Entities.deleteEntity(containerBall); + Entities.deleteEntity(light); + } + + this.cleanup = cleanup; + } \ No newline at end of file diff --git a/examples/flowArts/lightBall/lightBallSpawner.js b/examples/flowArts/lightBall/lightBallSpawner.js deleted file mode 100644 index 7325f16a64..0000000000 --- a/examples/flowArts/lightBall/lightBallSpawner.js +++ /dev/null @@ -1,124 +0,0 @@ - Script.include("../../libraries/utils.js"); - - LightBallSpawner = function(basePosition) { - - var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); - var colorPalette = [{ - red: 25, - green: 20, - blue: 162 - }]; - - - var containerBall = Entities.addEntity({ - type: "Sphere", - position: Vec3.sum(basePosition, { - x: 0, - y: .5, - z: 0 - }), - dimensions: { - x: .1, - y: .1, - z: .1 - }, - color: { - red: 15, - green: 10, - blue: 150 - }, - collisionsWillMove: true, - userData: JSON.stringify({ - grabbableKey: { - spatialKey: { - relativePosition: { - x: 0, - y: 1, - z: 0 - } - }, - invertSolidWhileHeld: true - } - }) - }); - - - var light = Entities.addEntity({ - type: 'Light', - parentID: containerBall, - dimensions: { - x: 30, - y: 30, - z: 30 - }, - color: colorPalette[randInt(0, colorPalette.length)], - intensity: 5 - }); - - - var lightBall = Entities.addEntity({ - type: "ParticleEffect", - parentID: containerBall, - isEmitting: true, - "name": "ParticlesTest Emitter", - "colorStart": { - red: 200, - green: 20, - blue: 40 - }, - color: { - red: 200, - green: 200, - blue: 255 - }, - "colorFinish": { - red: 25, - green: 20, - blue: 255 - }, - "maxParticles": 100000, - "lifespan": 5, - "emitRate": 5000, - "emitSpeed": .1, - "speedSpread": 0.0, - "emitDimensions": { - "x": 0, - "y": 0, - "z": 0 - }, - "polarStart": 0, - "polarFinish": Math.PI, - "azimuthStart": -Math.PI, - "azimuthFinish": Math.PI, - "emitAcceleration": { - "x": 0, - "y": 0, - "z": 0 - }, - "accelerationSpread": { - "x": .00, - "y": .00, - "z": .00 - }, - "particleRadius": 0.04, - "radiusSpread": 0, - "radiusStart": 0.05, - "radiusFinish": 0.0003, - "alpha": 0, - "alphaSpread": .5, - "alphaStart": 0, - "alphaFinish": 0.5, - "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", - emitterShouldTrail: true - }) - - - - function cleanup() { - Entities.deleteEntity(lightBall); - Entities.deleteEntity(containerBall); - Entities.deleteEntity(light); - } - - this.cleanup = cleanup; - } \ No newline at end of file diff --git a/examples/flowArts/raveStick/createRaveStick.js b/examples/flowArts/raveStick/createRaveStick.js new file mode 100644 index 0000000000..e69de29bb2 From 6a77ae5db2cbead0c901ca40e788a73929ad8bc5 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 16 Dec 2015 15:47:34 -0800 Subject: [PATCH 19/62] adding rave stick --- examples/flowArts/flowArtsHutSpawner.js | 9 +- examples/flowArts/lightBall/lightBall.js | 232 +++++++++--------- examples/flowArts/raveStick/RaveStick.js | 24 ++ .../flowArts/raveStick/createRaveStick.js | 0 4 files changed, 145 insertions(+), 120 deletions(-) create mode 100644 examples/flowArts/raveStick/RaveStick.js delete mode 100644 examples/flowArts/raveStick/createRaveStick.js diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index c8f7dbed78..ffd73dbdca 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -15,10 +15,12 @@ Script.include("../../libraries/utils.js"); Script.include("lightBall/LightBall.js"); +Script.include("raveStick/RaveStick.js"); var basePosition = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Camera.getOrientation()))); -basePosition.y = MyAvatar.position.y + 1 -var lightBall = LightBall(basePosition); +basePosition.y = MyAvatar.position.y + 1; +var lightBall = new LightBall(basePosition); +var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 1, z: 1})); var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); var roomDimensions = {x: 30.58, y: 15.29, z: 30.58}; @@ -41,8 +43,6 @@ var floor = Entities.addEntity({ - - var lightZone = Entities.addEntity({ type: "Zone", shapeType: 'box', @@ -68,6 +68,7 @@ function cleanup() { Entities.deleteEntity(lightZone) Entities.deleteEntity(floor); lightBall.cleanup(); + raveStick.cleanup(); } Script.scriptEnding.connect(cleanup); \ No newline at end of file diff --git a/examples/flowArts/lightBall/lightBall.js b/examples/flowArts/lightBall/lightBall.js index 6f44ed6d74..e2d65874fa 100644 --- a/examples/flowArts/lightBall/lightBall.js +++ b/examples/flowArts/lightBall/lightBall.js @@ -1,124 +1,124 @@ - Script.include("../../libraries/utils.js"); +Script.include("../../libraries/utils.js"); - LightBall = function(basePosition) { +LightBall = function(spawnPosition) { - var colorPalette = [{ + var colorPalette = [{ + red: 25, + green: 20, + blue: 162 + }]; + + + var containerBall = Entities.addEntity({ + type: "Sphere", + position: Vec3.sum(spawnPosition, { + x: 0, + y: .5, + z: 0 + }), + dimensions: { + x: .1, + y: .1, + z: .1 + }, + color: { + red: 15, + green: 10, + blue: 150 + }, + collisionsWillMove: true, + userData: JSON.stringify({ + grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: .7, + z: 0 + } + }, + invertSolidWhileHeld: true + } + }) + }); + + + var light = Entities.addEntity({ + type: 'Light', + parentID: containerBall, + dimensions: { + x: 30, + y: 30, + z: 30 + }, + color: colorPalette[randInt(0, colorPalette.length)], + intensity: 5 + }); + + + var lightBall = Entities.addEntity({ + type: "ParticleEffect", + parentID: containerBall, + isEmitting: true, + "name": "ParticlesTest Emitter", + "colorStart": { + red: 200, + green: 20, + blue: 40 + }, + color: { + red: 200, + green: 200, + blue: 255 + }, + "colorFinish": { red: 25, green: 20, - blue: 162 - }]; - - - var containerBall = Entities.addEntity({ - type: "Sphere", - position: Vec3.sum(basePosition, { - x: 0, - y: .5, - z: 0 - }), - dimensions: { - x: .1, - y: .1, - z: .1 - }, - color: { - red: 15, - green: 10, - blue: 150 - }, - collisionsWillMove: true, - userData: JSON.stringify({ - grabbableKey: { - spatialKey: { - relativePosition: { - x: 0, - y: 1, - z: 0 - } - }, - invertSolidWhileHeld: true - } - }) - }); - - - var light = Entities.addEntity({ - type: 'Light', - parentID: containerBall, - dimensions: { - x: 30, - y: 30, - z: 30 - }, - color: colorPalette[randInt(0, colorPalette.length)], - intensity: 5 - }); - - - var lightBall = Entities.addEntity({ - type: "ParticleEffect", - parentID: containerBall, - isEmitting: true, - "name": "ParticlesTest Emitter", - "colorStart": { - red: 200, - green: 20, - blue: 40 - }, - color: { - red: 200, - green: 200, - blue: 255 - }, - "colorFinish": { - red: 25, - green: 20, - blue: 255 - }, - "maxParticles": 100000, - "lifespan": 5, - "emitRate": 5000, - "emitSpeed": .1, - "speedSpread": 0.0, - "emitDimensions": { - "x": 0, - "y": 0, - "z": 0 - }, - "polarStart": 0, - "polarFinish": Math.PI, - "azimuthStart": -Math.PI, - "azimuthFinish": Math.PI, - "emitAcceleration": { - "x": 0, - "y": 0, - "z": 0 - }, - "accelerationSpread": { - "x": .00, - "y": .00, - "z": .00 - }, - "particleRadius": 0.04, - "radiusSpread": 0, - "radiusStart": 0.05, - "radiusFinish": 0.0003, - "alpha": 0, - "alphaSpread": .5, - "alphaStart": 0, - "alphaFinish": 0.5, - // "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", - "textures": "file:///C:/Users/Eric/Desktop/Particle-Sprite-Smoke-1.png?v1" + Math.random(), - emitterShouldTrail: true - }) + blue: 255 + }, + "maxParticles": 100000, + "lifespan": 2, + "emitRate": 10000, + "emitSpeed": .1, + "speedSpread": 0.0, + "emitDimensions": { + "x": 0, + "y": 0, + "z": 0 + }, + "polarStart": 0, + "polarFinish": Math.PI, + "azimuthStart": -Math.PI, + "azimuthFinish": Math.PI, + "emitAcceleration": { + "x": 0, + "y": 0, + "z": 0 + }, + "accelerationSpread": { + "x": .00, + "y": .00, + "z": .00 + }, + "particleRadius": 0.02, + "radiusSpread": 0, + "radiusStart": 0.03, + "radiusFinish": 0.0003, + "alpha": 0, + "alphaSpread": .5, + "alphaStart": 0, + "alphaFinish": 0.5, + // "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", + "textures": "file:///C:/Users/Eric/Desktop/Particle-Sprite-Smoke-1.png?v1" + Math.random(), + emitterShouldTrail: true + }) - function cleanup() { - Entities.deleteEntity(lightBall); - Entities.deleteEntity(containerBall); - Entities.deleteEntity(light); - } + function cleanup() { + Entities.deleteEntity(lightBall); + Entities.deleteEntity(containerBall); + Entities.deleteEntity(light); + } - this.cleanup = cleanup; - } \ No newline at end of file + this.cleanup = cleanup; +} \ No newline at end of file diff --git a/examples/flowArts/raveStick/RaveStick.js b/examples/flowArts/raveStick/RaveStick.js new file mode 100644 index 0000000000..2703436bec --- /dev/null +++ b/examples/flowArts/raveStick/RaveStick.js @@ -0,0 +1,24 @@ +Script.include("../../libraries/utils.js"); +var modelURL = "file:///C:/Users/Eric/Desktop/raveStick.fbx?v1" + Math.random(); + +RaveStick = function(spawnPosition) { + + var stick = Entities.addEntity({ + type: "Model", + modelURL: modelURL, + position: spawnPosition, + shapeType: 'box', + userData: JSON.stringify({ + grabbableKey: { + invertSolidWhileHeld: true + } + }) + }); + + + function cleanup() { + Entities.deleteEntity(stick); + } + + this.cleanup = cleanup; +} \ No newline at end of file diff --git a/examples/flowArts/raveStick/createRaveStick.js b/examples/flowArts/raveStick/createRaveStick.js deleted file mode 100644 index e69de29bb2..0000000000 From 263557cc1ac008e5ae98ed1c5ea977cc20aae6fa Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 16 Dec 2015 16:18:57 -0800 Subject: [PATCH 20/62] setting dimensions for rave stick --- examples/flowArts/lightBall/lightBall.js | 3 ++- examples/flowArts/raveStick/RaveStick.js | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/flowArts/lightBall/lightBall.js b/examples/flowArts/lightBall/lightBall.js index e2d65874fa..698c62a71d 100644 --- a/examples/flowArts/lightBall/lightBall.js +++ b/examples/flowArts/lightBall/lightBall.js @@ -27,12 +27,13 @@ LightBall = function(spawnPosition) { blue: 150 }, collisionsWillMove: true, + gravity: {x: 0, y: -.5, z: 0}, userData: JSON.stringify({ grabbableKey: { spatialKey: { relativePosition: { x: 0, - y: .7, + y: .1, z: 0 } }, diff --git a/examples/flowArts/raveStick/RaveStick.js b/examples/flowArts/raveStick/RaveStick.js index 2703436bec..bee5c995f9 100644 --- a/examples/flowArts/raveStick/RaveStick.js +++ b/examples/flowArts/raveStick/RaveStick.js @@ -8,6 +8,7 @@ RaveStick = function(spawnPosition) { modelURL: modelURL, position: spawnPosition, shapeType: 'box', + dimensions: {x: 0.17, y: 0.48, z: 0.17}, userData: JSON.stringify({ grabbableKey: { invertSolidWhileHeld: true From d8c877831664a37949932217b75be6937236c468 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 16 Dec 2015 16:50:27 -0800 Subject: [PATCH 21/62] rave stick in right orientation --- examples/flowArts/flowArtsHutSpawner.js | 6 +- examples/flowArts/raveStick/RaveStick.js | 16 +++- .../raveStick/raveStickEntityScript.js | 81 +++++++++++++++++++ 3 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 examples/flowArts/raveStick/raveStickEntityScript.js diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index ffd73dbdca..8e39a4b1d8 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -19,8 +19,12 @@ Script.include("raveStick/RaveStick.js"); var basePosition = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Camera.getOrientation()))); basePosition.y = MyAvatar.position.y + 1; + +// RAVE ITEMS var lightBall = new LightBall(basePosition); -var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 1, z: 1})); +var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 0.5, z: 1})); + + var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); var roomDimensions = {x: 30.58, y: 15.29, z: 30.58}; diff --git a/examples/flowArts/raveStick/RaveStick.js b/examples/flowArts/raveStick/RaveStick.js index bee5c995f9..046932c473 100644 --- a/examples/flowArts/raveStick/RaveStick.js +++ b/examples/flowArts/raveStick/RaveStick.js @@ -1,6 +1,6 @@ Script.include("../../libraries/utils.js"); var modelURL = "file:///C:/Users/Eric/Desktop/raveStick.fbx?v1" + Math.random(); - +var scriptURL = Script.resolvePath("raveStickEntityScript.js"); RaveStick = function(spawnPosition) { var stick = Entities.addEntity({ @@ -8,9 +8,21 @@ RaveStick = function(spawnPosition) { modelURL: modelURL, position: spawnPosition, shapeType: 'box', - dimensions: {x: 0.17, y: 0.48, z: 0.17}, + dimensions: { + x: 0.06, + y: 0.06, + z: 0.8 + }, userData: JSON.stringify({ grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: 0, + z: -0.4 + }, + relativeRotation: Quat.fromPitchYawRollDegrees(90, 90, 0) + }, invertSolidWhileHeld: true } }) diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js new file mode 100644 index 0000000000..cfe1e3a2fd --- /dev/null +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -0,0 +1,81 @@ +// raveStickEntityScript.js +// +// Script Type: Entity +// Created by Eric Levin on 9/21/15. +// Additions by James B. Pollack @imgntn on 9/24/15 +// Copyright 2015 High Fidelity, Inc. +// +// This entity script create light trails on a given object as it moves. +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function() { + Script.include("../../libraries/utils.js"); + var _this; + // this is the "constructor" for the entity as a JS object we don't do much here + var Doll = function() { + _this = this; + this.screamSounds = [SoundCache.getSound("https://hifi-public.s3.amazonaws.com/sounds/KenDoll_1%2303.wav")]; + }; + + Doll.prototype = { + audioInjector: null, + isGrabbed: false, + setLeftHand: function() { + this.hand = 'left'; + }, + + setRightHand: function() { + this.hand = 'right'; + }, + + startNearGrab: function() { + Entities.editEntity(this.entityID, { + animation: { + url: "https://hifi-public.s3.amazonaws.com/models/Bboys/zombie_scream.fbx", + running: true + } + }); + + var position = Entities.getEntityProperties(this.entityID, "position").position; + this.audioInjector = Audio.playSound(this.screamSounds[randInt(0, this.screamSounds.length)], { + position: position, + volume: 0.1 + }); + + this.isGrabbed = true; + this.initialHand = this.hand; + }, + + continueNearGrab: function() { + var props = Entities.getEntityProperties(this.entityID, ["position"]); + var audioOptions = { + position: props.position + }; + this.audioInjector.options = audioOptions; + }, + + releaseGrab: function() { + if (this.isGrabbed === true && this.hand === this.initialHand) { + this.audioInjector.stop(); + Entities.editEntity(this.entityID, { + animation: { + // Providing actual model fbx for animation used to work, now contorts doll into a weird ball + // See bug: https://app.asana.com/0/26225263936266/70097355490098 + // url: "http://hifi-public.s3.amazonaws.com/models/Bboys/bboy2/bboy2.fbx", + running: false, + } + }); + + this.isGrabbed = false; + } + }, + + preload: function(entityID) { + this.entityID = entityID; + }, + }; + // entity scripts always need to return a newly constructed object of our type + return new Doll(); +}); From f9f496ef5ab2d0e65e9d20500fb6f6fe521492d2 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 16 Dec 2015 17:32:30 -0800 Subject: [PATCH 22/62] adding beam effect --- examples/flowArts/flowArtsHutSpawner.js | 2 +- examples/flowArts/raveStick/RaveStick.js | 5 +- .../raveStick/raveStickEntityScript.js | 128 +++++++++++------- 3 files changed, 85 insertions(+), 50 deletions(-) diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index 8e39a4b1d8..aa87ddbd10 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -50,7 +50,7 @@ var floor = Entities.addEntity({ var lightZone = Entities.addEntity({ type: "Zone", shapeType: 'box', - keyLightIntensity: 0.2, + keyLightIntensity: 0.4, keyLightColor: { red: 50, green: 0, diff --git a/examples/flowArts/raveStick/RaveStick.js b/examples/flowArts/raveStick/RaveStick.js index 046932c473..5151b528cc 100644 --- a/examples/flowArts/raveStick/RaveStick.js +++ b/examples/flowArts/raveStick/RaveStick.js @@ -8,10 +8,11 @@ RaveStick = function(spawnPosition) { modelURL: modelURL, position: spawnPosition, shapeType: 'box', + script: scriptURL, dimensions: { x: 0.06, y: 0.06, - z: 0.8 + z: 0.31 }, userData: JSON.stringify({ grabbableKey: { @@ -19,7 +20,7 @@ RaveStick = function(spawnPosition) { relativePosition: { x: 0, y: 0, - z: -0.4 + z: -0.1 }, relativeRotation: Quat.fromPitchYawRollDegrees(90, 90, 0) }, diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index cfe1e3a2fd..67571e49fa 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -1,8 +1,7 @@ // raveStickEntityScript.js // // Script Type: Entity -// Created by Eric Levin on 9/21/15. -// Additions by James B. Pollack @imgntn on 9/24/15 +// Created by Eric Levin on 12/16/15. // Copyright 2015 High Fidelity, Inc. // // This entity script create light trails on a given object as it moves. @@ -14,68 +13,103 @@ Script.include("../../libraries/utils.js"); var _this; // this is the "constructor" for the entity as a JS object we don't do much here - var Doll = function() { + var RaveStick = function() { _this = this; - this.screamSounds = [SoundCache.getSound("https://hifi-public.s3.amazonaws.com/sounds/KenDoll_1%2303.wav")]; }; - Doll.prototype = { - audioInjector: null, + RaveStick.prototype = { isGrabbed: false, - setLeftHand: function() { - this.hand = 'left'; - }, - - setRightHand: function() { - this.hand = 'right'; - }, startNearGrab: function() { - Entities.editEntity(this.entityID, { - animation: { - url: "https://hifi-public.s3.amazonaws.com/models/Bboys/zombie_scream.fbx", - running: true - } - }); - - var position = Entities.getEntityProperties(this.entityID, "position").position; - this.audioInjector = Audio.playSound(this.screamSounds[randInt(0, this.screamSounds.length)], { - position: position, - volume: 0.1 - }); - - this.isGrabbed = true; - this.initialHand = this.hand; + // this.createBeam(); }, continueNearGrab: function() { - var props = Entities.getEntityProperties(this.entityID, ["position"]); - var audioOptions = { - position: props.position - }; - this.audioInjector.options = audioOptions; + }, releaseGrab: function() { - if (this.isGrabbed === true && this.hand === this.initialHand) { - this.audioInjector.stop(); - Entities.editEntity(this.entityID, { - animation: { - // Providing actual model fbx for animation used to work, now contorts doll into a weird ball - // See bug: https://app.asana.com/0/26225263936266/70097355490098 - // url: "http://hifi-public.s3.amazonaws.com/models/Bboys/bboy2/bboy2.fbx", - running: false, - } - }); - this.isGrabbed = false; - } }, preload: function(entityID) { this.entityID = entityID; + this.createBeam(); }, + + unload: function() { + Entities.deleteEntity(this.beam); + }, + + createBeam: function() { + + var props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); + var forwardVec = Quat.getFront(Quat.multiply(props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); + forwardVec = Vec3.normalize(forwardVec); + var forwardQuat = orientationOf(forwardVec); + var position = Vec3.sum(props.position, Vec3.multiply(Quat.getFront(props.rotation), 0.1)); + position.z += 0.1; + position.x += -0.035; + var props = { + type: "ParticleEffect", + position: position, + parentID: this.entityID, + isEmitting: true, + "name": "ParticlesTest Emitter", + "colorStart": { + red: 0, + green: 200, + blue: 40 + }, + color: { + red: 200, + green: 200, + blue: 255 + }, + "colorFinish": { + red: 25, + green: 200, + blue: 5 + }, + "maxParticles": 100000, + "lifespan": 2, + "emitRate": 1000, + emitOrientation: forwardQuat, + "emitSpeed": .4, + "speedSpread": 0.0, + // "emitDimensions": { + // "x": .1, + // "y": .1, + // "z": .1 + // }, + "polarStart": 0, + "polarFinish": .0, + "azimuthStart": .1, + "azimuthFinish": .01, + "emitAcceleration": { + "x": 0, + "y": 0, + "z": 0 + }, + "accelerationSpread": { + "x": .00, + "y": .00, + "z": .00 + }, + "radiusStart": 0.03, + radiusFinish: 0.025, + "alpha": 0.7, + "alphaSpread": .1, + "alphaStart": 0.5, + "alphaFinish": 0.5, + // "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", + "textures": "file:///C:/Users/Eric/Desktop/beamParticle.png?v1" + Math.random(), + emitterShouldTrail: false + } + this.beam = Entities.addEntity(props); + + } }; // entity scripts always need to return a newly constructed object of our type - return new Doll(); -}); + return new RaveStick(); +}); \ No newline at end of file From bb67ca87e238a4db2b613e15c3de787d93544955 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 16 Dec 2015 17:52:39 -0800 Subject: [PATCH 23/62] lightsabers --- examples/flowArts/flowArtsHutSpawner.js | 2 ++ .../raveStick/raveStickEntityScript.js | 26 ++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index aa87ddbd10..b9d89859df 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -23,6 +23,7 @@ basePosition.y = MyAvatar.position.y + 1; // RAVE ITEMS var lightBall = new LightBall(basePosition); var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 0.5, z: 1})); +var raveStick2 = new RaveStick(Vec3.sum(basePosition, {x: 2, y: 0.5, z: 1})); var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); @@ -73,6 +74,7 @@ function cleanup() { Entities.deleteEntity(floor); lightBall.cleanup(); raveStick.cleanup(); + raveStick2.cleanup(); } Script.scriptEnding.connect(cleanup); \ No newline at end of file diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index 67571e49fa..0372fd388f 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -15,6 +15,15 @@ // this is the "constructor" for the entity as a JS object we don't do much here var RaveStick = function() { _this = this; + this.colorPalette = [{ + red: 0, + green: 200, + blue: 40 + }, { + red: 200, + green: 10, + blue: 40 + }]; }; RaveStick.prototype = { @@ -39,6 +48,7 @@ unload: function() { Entities.deleteEntity(this.beam); + // Entities.deleteEntity(this.beamTrail); }, createBeam: function() { @@ -50,27 +60,20 @@ var position = Vec3.sum(props.position, Vec3.multiply(Quat.getFront(props.rotation), 0.1)); position.z += 0.1; position.x += -0.035; + var color = this.colorPalette[randInt(0, this.colorPalette.length)]; var props = { type: "ParticleEffect", position: position, parentID: this.entityID, isEmitting: true, "name": "ParticlesTest Emitter", - "colorStart": { - red: 0, - green: 200, - blue: 40 - }, + "colorStart": color, color: { red: 200, green: 200, blue: 255 }, - "colorFinish": { - red: 25, - green: 200, - blue: 5 - }, + "colorFinish": color, "maxParticles": 100000, "lifespan": 2, "emitRate": 1000, @@ -108,6 +111,9 @@ } this.beam = Entities.addEntity(props); + // props.emitterShouldTrail = true; + // this.beamTrail = Entities.addEntity(props); + } }; // entity scripts always need to return a newly constructed object of our type From b127b6a9e887874b0cfa253c9dcb447a2e91f7d4 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 08:55:57 -0800 Subject: [PATCH 24/62] separating out rave stick --- examples/flowArts/flowArtsHutSpawner.js | 5 + examples/flowArts/lightSaber/LightSaber.js | 38 ++++++ .../lightSaber/lightSaberEntityScript.js | 121 ++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 examples/flowArts/lightSaber/LightSaber.js create mode 100644 examples/flowArts/lightSaber/lightSaberEntityScript.js diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index b9d89859df..920fcc90ea 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -16,6 +16,9 @@ Script.include("../../libraries/utils.js"); Script.include("lightBall/LightBall.js"); Script.include("raveStick/RaveStick.js"); +Script.include("lightSaber/LightSaber.js"); + + var basePosition = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Camera.getOrientation()))); basePosition.y = MyAvatar.position.y + 1; @@ -24,6 +27,7 @@ basePosition.y = MyAvatar.position.y + 1; var lightBall = new LightBall(basePosition); var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 0.5, z: 1})); var raveStick2 = new RaveStick(Vec3.sum(basePosition, {x: 2, y: 0.5, z: 1})); +var lightSaber = new LightSaber(Vec3.sum(basePosition, {x: 3, y: 0.5, z: 1})); var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); @@ -75,6 +79,7 @@ function cleanup() { lightBall.cleanup(); raveStick.cleanup(); raveStick2.cleanup(); + lightSaber.cleanup(); } Script.scriptEnding.connect(cleanup); \ No newline at end of file diff --git a/examples/flowArts/lightSaber/LightSaber.js b/examples/flowArts/lightSaber/LightSaber.js new file mode 100644 index 0000000000..12ac3f3b60 --- /dev/null +++ b/examples/flowArts/lightSaber/LightSaber.js @@ -0,0 +1,38 @@ +Script.include("../../libraries/utils.js"); +var modelURL = "file:///C:/Users/Eric/Desktop/lightSaber.fbx?v1" + Math.random(); +var scriptURL = Script.resolvePath("lightSaberEntityScript.js"); +LightSaber = function(spawnPosition) { + + var stick = Entities.addEntity({ + type: "Model", + modelURL: modelURL, + position: spawnPosition, + shapeType: 'box', + script: scriptURL, + dimensions: { + x: 0.06, + y: 0.06, + z: 0.31 + }, + userData: JSON.stringify({ + grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: 0, + z: -0.1 + }, + relativeRotation: Quat.fromPitchYawRollDegrees(90, 90, 0) + }, + invertSolidWhileHeld: true + } + }) + }); + + + function cleanup() { + Entities.deleteEntity(stick); + } + + this.cleanup = cleanup; +} \ No newline at end of file diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js new file mode 100644 index 0000000000..5ff3c65afd --- /dev/null +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -0,0 +1,121 @@ +// lightSaberEntityScript.js +// +// Script Type: Entity +// Created by Eric Levin on 12/16/15. +// Copyright 2015 High Fidelity, Inc. +// +// This entity script creates a lightsaber. +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function() { + Script.include("../../libraries/utils.js"); + var _this; + // this is the "constructor" for the entity as a JS object we don't do much here + var LightSaber = function() { + _this = this; + this.colorPalette = [{ + red: 0, + green: 200, + blue: 40 + }, { + red: 200, + green: 10, + blue: 40 + }]; + }; + + LightSaber.prototype = { + isGrabbed: false, + + startNearGrab: function() { + // this.createBeam(); + this.createBeam(); + }, + + continueNearGrab: function() { + + }, + + releaseGrab: function() { + + }, + + preload: function(entityID) { + this.entityID = entityID; + }, + + unload: function() { + Entities.deleteEntity(this.beam); + // Entities.deleteEntity(this.beamTrail); + }, + + createBeam: function() { + + var props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); + var forwardVec = Quat.getFront(Quat.multiply(props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); + forwardVec = Vec3.normalize(forwardVec); + var forwardQuat = orientationOf(forwardVec); + var position = Vec3.sum(props.position, Vec3.multiply(Quat.getFront(props.rotation), 0.1)); + position.z += 0.1; + position.x += -0.035; + var color = this.colorPalette[randInt(0, this.colorPalette.length)]; + var props = { + type: "ParticleEffect", + position: position, + parentID: this.entityID, + isEmitting: true, + "name": "ParticlesTest Emitter", + "colorStart": color, + color: { + red: 200, + green: 200, + blue: 255 + }, + "colorFinish": color, + "maxParticles": 100000, + "lifespan": 2, + "emitRate": 1000, + emitOrientation: forwardQuat, + "emitSpeed": .4, + "speedSpread": 0.0, + // "emitDimensions": { + // "x": .1, + // "y": .1, + // "z": .1 + // }, + "polarStart": 0, + "polarFinish": .0, + "azimuthStart": .1, + "azimuthFinish": .01, + "emitAcceleration": { + "x": 0, + "y": 0, + "z": 0 + }, + "accelerationSpread": { + "x": .00, + "y": .00, + "z": .00 + }, + "radiusStart": 0.03, + radiusFinish: 0.025, + "alpha": 0.7, + "alphaSpread": .1, + "alphaStart": 0.5, + "alphaFinish": 0.5, + // "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", + "textures": "file:///C:/Users/Eric/Desktop/beamParticle.png?v1" + Math.random(), + emitterShouldTrail: false + } + this.beam = Entities.addEntity(props); + + // props.emitterShouldTrail = true; + // this.beamTrail = Entities.addEntity(props); + + } + }; + // entity scripts always need to return a newly constructed object of our type + return new LightSaber(); +}); \ No newline at end of file From 064c05e98cb3f421e36ed3c827af4b643d86996a Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 10:04:51 -0800 Subject: [PATCH 25/62] light trails --- examples/flowArts/flowArtsHutSpawner.js | 2 +- examples/flowArts/lightBall/particles.js | 129 ++++++++++++++++++ .../lightSaber/lightSaberEntityScript.js | 21 +-- .../raveStick/raveStickEntityScript.js | 49 ++++++- 4 files changed, 189 insertions(+), 12 deletions(-) create mode 100644 examples/flowArts/lightBall/particles.js diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index 920fcc90ea..1ed3325b9c 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -27,7 +27,7 @@ basePosition.y = MyAvatar.position.y + 1; var lightBall = new LightBall(basePosition); var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 0.5, z: 1})); var raveStick2 = new RaveStick(Vec3.sum(basePosition, {x: 2, y: 0.5, z: 1})); -var lightSaber = new LightSaber(Vec3.sum(basePosition, {x: 3, y: 0.5, z: 1})); +// var lightSaber = new LightSaber(Vec3.sum(basePosition, {x: 3, y: 0.5, z: 1})); var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); diff --git a/examples/flowArts/lightBall/particles.js b/examples/flowArts/lightBall/particles.js new file mode 100644 index 0000000000..86616d5099 --- /dev/null +++ b/examples/flowArts/lightBall/particles.js @@ -0,0 +1,129 @@ +Script.include("../../libraries/utils.js"); + +LightBall = function(spawnPosition) { + + var colorPalette = [{ + red: 25, + green: 20, + blue: 162 + }]; + + + var containerBall = Entities.addEntity({ + type: "Sphere", + position: Vec3.sum(spawnPosition, { + x: 0, + y: .5, + z: 0 + }), + dimensions: { + x: .1, + y: .1, + z: .1 + }, + color: { + red: 15, + green: 10, + blue: 150 + }, + collisionsWillMove: true, + gravity: {x: 0, y: -.5, z: 0}, + visible: false, + userData: JSON.stringify({ + grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: .1, + z: 0 + } + }, + invertSolidWhileHeld: true + } + }) + }); + + + var light = Entities.addEntity({ + type: 'Light', + parentID: containerBall, + dimensions: { + x: 30, + y: 30, + z: 30 + }, + color: colorPalette[randInt(0, colorPalette.length)], + intensity: 5 + }); + + + var lightBall = Entities.addEntity({ + type: "ParticleEffect", + position: spawnPosition, + // parentID: containerBall, + isEmitting: true, + "name": "ParticlesTest Emitter", + "colorStart": { + red: 200, + green: 20, + blue: 40 + }, + color: { + red: 200, + green: 200, + blue: 255 + }, + "colorFinish": { + red: 25, + green: 20, + blue: 255 + }, + "maxParticles": 100000, + "lifespan": 2, + "emitRate": 10000, + "emitSpeed": .0, + "speedSpread": 0.0, + "emitDimensions": { + "x": 5, + "y":0 , + "z": 0 + }, + // "polarStart": 0, + // "polarFinish": Math.PI, + // "azimuthStart": -Math.PI, + // "azimuthFinish": Math.PI, + "emitAcceleration": { + "x": 0, + "y": 0, + "z": 0 + }, + "accelerationSpread": { + "x": .00, + "y": .0, + "z": .00 + }, + "particleRadius": 0.02, + "radiusSpread": 0, + "radiusStart": 0.03, + "radiusFinish": 0.0003, + "alpha": 0, + "alphaSpread": .5, + "alphaStart": 0, + "alphaFinish": 0.5, + // "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", + "textures": "file:///C:/Users/Eric/Desktop/Particle-Sprite-Smoke-1.png?v1" + Math.random(), + emitterShouldTrail: true + }) + + + + function cleanup() { + Entities.deleteEntity(lightBall); + Entities.deleteEntity(containerBall); + Entities.deleteEntity(light); + } + + this.cleanup = cleanup; +} + +LightBall(); \ No newline at end of file diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js index 5ff3c65afd..ea1f408abd 100644 --- a/examples/flowArts/lightSaber/lightSaberEntityScript.js +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -31,7 +31,7 @@ startNearGrab: function() { // this.createBeam(); - this.createBeam(); + }, continueNearGrab: function() { @@ -44,6 +44,7 @@ preload: function(entityID) { this.entityID = entityID; + this.createBeam(); }, unload: function() { @@ -53,11 +54,12 @@ createBeam: function() { - var props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); - var forwardVec = Quat.getFront(Quat.multiply(props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); + + this.props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); + var forwardVec = Quat.getFront(Quat.multiply(this.props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); forwardVec = Vec3.normalize(forwardVec); var forwardQuat = orientationOf(forwardVec); - var position = Vec3.sum(props.position, Vec3.multiply(Quat.getFront(props.rotation), 0.1)); + var position = Vec3.sum(this.props.position, Vec3.multiply(Quat.getFront(this.props.rotation), 0.1)); position.z += 0.1; position.x += -0.035; var color = this.colorPalette[randInt(0, this.colorPalette.length)]; @@ -66,7 +68,6 @@ position: position, parentID: this.entityID, isEmitting: true, - "name": "ParticlesTest Emitter", "colorStart": color, color: { red: 200, @@ -80,11 +81,11 @@ emitOrientation: forwardQuat, "emitSpeed": .4, "speedSpread": 0.0, - // "emitDimensions": { - // "x": .1, - // "y": .1, - // "z": .1 - // }, + "emitDimensions": { + "x": 0, + "y": 0, + "z": 0 + }, "polarStart": 0, "polarFinish": .0, "azimuthStart": .1, diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index 0372fd388f..95e37ee79b 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -13,6 +13,11 @@ Script.include("../../libraries/utils.js"); var _this; // this is the "constructor" for the entity as a JS object we don't do much here + var LIFETIME = 6000; + var DRAWING_DEPTH = 0.8; + var LINE_DIMENSIONS = 100; + var MAX_POINTS_PER_LINE = 50; + var MIN_POINT_DISTANCE = 0.02; var RaveStick = function() { _this = this; this.colorPalette = [{ @@ -24,6 +29,21 @@ green: 10, blue: 40 }]; + var texture = "https://s3.amazonaws.com/hifi-public/eric/textures/paintStrokes/trails.png"; + this.trail = Entities.addEntity({ + type: "PolyLine", + dimensions: {x: LINE_DIMENSIONS, y: LINE_DIMENSIONS, z: LINE_DIMENSIONS}, + color: { + red: 255, + green: 255, + blue: 255 + }, + textures: texture, + lifetime: LIFETIME + }) + this.points = []; + this.normals = []; + this.strokeWidths = []; }; RaveStick.prototype = { @@ -31,9 +51,31 @@ startNearGrab: function() { // this.createBeam(); + this.trailBasePosition = Entities.getEntityProperties(this.entityID, "position").position; + Entities.editEntity(this.trail, { + position: this.trailBasePosition + }); + this.points = []; + this.normals = []; + this.strokeWidths = []; }, continueNearGrab: function() { + var position = Entities.getEntityProperties(this.entityID, "position").position; + var localPoint = Vec3.subtract(position, this.trailBasePosition); + if (this.points.length >=1 && Vec3.distance(localPoint, this.points[this.points.length - 1]) < MIN_POINT_DISTANCE) { + //Need a minimum distance to avoid binormal NANs + return; + } + this.points.push(localPoint); + var normal = computeNormal(position, Camera.getPosition()); + this.normals.push(normal); + this.strokeWidths.push(0.04); + Entities.editEntity(this.trail, { + linePoints: this.points, + normals: this.normals, + strokeWidths: this.strokeWidths + }) }, @@ -48,6 +90,7 @@ unload: function() { Entities.deleteEntity(this.beam); + Entities.deleteEntity(this.trail); // Entities.deleteEntity(this.beamTrail); }, @@ -60,7 +103,7 @@ var position = Vec3.sum(props.position, Vec3.multiply(Quat.getFront(props.rotation), 0.1)); position.z += 0.1; position.x += -0.035; - var color = this.colorPalette[randInt(0, this.colorPalette.length)]; + var color = this.colorPalette[randInt(0, this.colorPalette.length)]; var props = { type: "ParticleEffect", position: position, @@ -118,4 +161,8 @@ }; // entity scripts always need to return a newly constructed object of our type return new RaveStick(); + + function computeNormal(p1, p2) { + return Vec3.normalize(Vec3.subtract(p2, p1)); + } }); \ No newline at end of file From f7811cf5dc5bc33af18788a21b8c46d9ad8d8fe7 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 10:25:51 -0800 Subject: [PATCH 26/62] light trails from rave stick --- .../raveStick/raveStickEntityScript.js | 61 ++++++++++++++----- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index 95e37ee79b..7b84f473ea 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -18,6 +18,8 @@ var LINE_DIMENSIONS = 100; var MAX_POINTS_PER_LINE = 50; var MIN_POINT_DISTANCE = 0.02; + var STROKE_WIDTH = 0.05 + var ugLSD = 25; var RaveStick = function() { _this = this; this.colorPalette = [{ @@ -32,7 +34,11 @@ var texture = "https://s3.amazonaws.com/hifi-public/eric/textures/paintStrokes/trails.png"; this.trail = Entities.addEntity({ type: "PolyLine", - dimensions: {x: LINE_DIMENSIONS, y: LINE_DIMENSIONS, z: LINE_DIMENSIONS}, + dimensions: { + x: LINE_DIMENSIONS, + y: LINE_DIMENSIONS, + z: LINE_DIMENSIONS + }, color: { red: 255, green: 255, @@ -58,29 +64,58 @@ this.points = []; this.normals = []; this.strokeWidths = []; + this.setupEraseInterval(); }, continueNearGrab: function() { - var position = Entities.getEntityProperties(this.entityID, "position").position; + var props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); + var forwardVec = Quat.getFront(Quat.multiply(props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); + forwardVec = Vec3.normalize(forwardVec); + var forwardQuat = orientationOf(forwardVec); + var position = Vec3.sum(props.position, Vec3.multiply(Quat.getFront(props.rotation), 0.2)); + // position.z += 0.1; + // position.x += -0.035; var localPoint = Vec3.subtract(position, this.trailBasePosition); - if (this.points.length >=1 && Vec3.distance(localPoint, this.points[this.points.length - 1]) < MIN_POINT_DISTANCE) { + if (this.points.length >= 1 && Vec3.distance(localPoint, this.points[this.points.length - 1]) < MIN_POINT_DISTANCE) { //Need a minimum distance to avoid binormal NANs return; } + if (this.points.length === MAX_POINTS_PER_LINE) { + this.points.shift(); + this.normals.shift(); + this.strokeWidths.shift(); + } + this.points.push(localPoint); - var normal = computeNormal(position, Camera.getPosition()); + var normal = Quat.getUp(props.rotation); this.normals.push(normal); - this.strokeWidths.push(0.04); + this.strokeWidths.push(STROKE_WIDTH); Entities.editEntity(this.trail, { linePoints: this.points, normals: this.normals, strokeWidths: this.strokeWidths - }) + }); + }, - releaseGrab: function() { + setupEraseInterval: function() { + this.trailEraseInterval = Script.setInterval(function() { + if (_this.points.length > 0) { + _this.points.shift(); + _this.normals.shift(); + _this.strokeWidths.shift(); + Entities.editEntity(_this.trail, { + linePoints: _this.points, + strokeWidths: _this.strokeWidths, + normals: _this.normals + }); + } + }, ugLSD); + }, + releaseGrab: function() { + Script.clearInterval(this.trailEraseInterval); }, preload: function(entityID) { @@ -91,7 +126,7 @@ unload: function() { Entities.deleteEntity(this.beam); Entities.deleteEntity(this.trail); - // Entities.deleteEntity(this.beamTrail); + Script.clearInterval(this.trailEraseInterval); }, createBeam: function() { @@ -111,6 +146,7 @@ isEmitting: true, "name": "ParticlesTest Emitter", "colorStart": color, + colorSpread: {red: 200, green : 10, blue: 10}, color: { red: 200, green: 200, @@ -118,16 +154,11 @@ }, "colorFinish": color, "maxParticles": 100000, - "lifespan": 2, + "lifespan": 1, "emitRate": 1000, emitOrientation: forwardQuat, - "emitSpeed": .4, + "emitSpeed": .2, "speedSpread": 0.0, - // "emitDimensions": { - // "x": .1, - // "y": .1, - // "z": .1 - // }, "polarStart": 0, "polarFinish": .0, "azimuthStart": .1, From 57e51afd46c661db3545cef4345327137abc2338 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 10:35:20 -0800 Subject: [PATCH 27/62] light stick --- examples/flowArts/flowArtsHutSpawner.js | 4 +--- examples/flowArts/lightSaber/lightSaberEntityScript.js | 6 +++--- examples/flowArts/raveStick/raveStickEntityScript.js | 5 ++++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index 1ed3325b9c..2f9b2052d1 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -26,8 +26,7 @@ basePosition.y = MyAvatar.position.y + 1; // RAVE ITEMS var lightBall = new LightBall(basePosition); var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 0.5, z: 1})); -var raveStick2 = new RaveStick(Vec3.sum(basePosition, {x: 2, y: 0.5, z: 1})); -// var lightSaber = new LightSaber(Vec3.sum(basePosition, {x: 3, y: 0.5, z: 1})); +var lightSaber = new LightSaber(Vec3.sum(basePosition, {x: 3, y: 0.5, z: 1})); var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); @@ -78,7 +77,6 @@ function cleanup() { Entities.deleteEntity(floor); lightBall.cleanup(); raveStick.cleanup(); - raveStick2.cleanup(); lightSaber.cleanup(); } diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js index ea1f408abd..5175de25bb 100644 --- a/examples/flowArts/lightSaber/lightSaberEntityScript.js +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -31,7 +31,7 @@ startNearGrab: function() { // this.createBeam(); - + }, continueNearGrab: function() { @@ -44,7 +44,7 @@ preload: function(entityID) { this.entityID = entityID; - this.createBeam(); + this.createBeam(); }, unload: function() { @@ -62,7 +62,7 @@ var position = Vec3.sum(this.props.position, Vec3.multiply(Quat.getFront(this.props.rotation), 0.1)); position.z += 0.1; position.x += -0.035; - var color = this.colorPalette[randInt(0, this.colorPalette.length)]; + var color = this.colorPalette[randInt(0, this.colorPalette.length)]; var props = { type: "ParticleEffect", position: position, diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index 7b84f473ea..20c21d3a79 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -116,6 +116,7 @@ releaseGrab: function() { Script.clearInterval(this.trailEraseInterval); + this.trailEraseInterval = null; }, preload: function(entityID) { @@ -126,7 +127,9 @@ unload: function() { Entities.deleteEntity(this.beam); Entities.deleteEntity(this.trail); - Script.clearInterval(this.trailEraseInterval); + if(this.trailEraseInterval) { + Script.clearInterval(this.trailEraseInterval); + } }, createBeam: function() { From d4481818b2e991512afb6e8819ed5c910d7cf801 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 10:50:58 -0800 Subject: [PATCH 28/62] lightsaber oriented right --- .../flowArts/lightSaber/lightSaberEntityScript.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js index 5175de25bb..2faf0abff9 100644 --- a/examples/flowArts/lightSaber/lightSaberEntityScript.js +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -30,8 +30,9 @@ isGrabbed: false, startNearGrab: function() { - // this.createBeam(); - + Entities.editEntity(this.beam, { + isEmitting: true + }); }, continueNearGrab: function() { @@ -39,7 +40,9 @@ }, releaseGrab: function() { - + Entities.editEntity(this.beam, { + isEmitting: false + }); }, preload: function(entityID) { @@ -57,7 +60,7 @@ this.props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); var forwardVec = Quat.getFront(Quat.multiply(this.props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); - forwardVec = Vec3.normalize(forwardVec); + // forwardVec = Vec3.normalize(forwardVec); var forwardQuat = orientationOf(forwardVec); var position = Vec3.sum(this.props.position, Vec3.multiply(Quat.getFront(this.props.rotation), 0.1)); position.z += 0.1; @@ -67,7 +70,7 @@ type: "ParticleEffect", position: position, parentID: this.entityID, - isEmitting: true, + isEmitting: false, "colorStart": color, color: { red: 200, From 2aaefbcfcbbcc0d6e3ed7d4cfbb932467131d4a4 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 11:32:48 -0800 Subject: [PATCH 29/62] refactoring, adding headers --- examples/flowArts/flowArtsHutSpawner.js | 13 +-- examples/flowArts/lightBall/lightBall.js | 90 +++++++++++-------- examples/flowArts/lightSaber/LightSaber.js | 21 ++++- .../lightSaber/lightSaberEntityScript.js | 74 +++++++-------- examples/flowArts/lightTrails.js | 23 +---- examples/flowArts/raveStick/RaveStick.js | 41 ++++++++- .../raveStick/raveStickEntityScript.js | 67 +++++++------- .../RenderableParticleEffectEntityItem.cpp | 1 + .../entities/src/ParticleEffectEntityItem.cpp | 11 +-- 9 files changed, 195 insertions(+), 146 deletions(-) diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index 2f9b2052d1..03c0ca112f 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -1,11 +1,11 @@ // // flowArtsHutSpawner.js -// examples +// examples/flowArts // -// Created by Eric Levin on 5/14/15. +// Created by Eric Levin on 12/17/15. // Copyright 2014 High Fidelity, Inc. // -// This script creates a special flow arts hut with a numch of flow art toys people can go in and play with +// This script creates a special flow arts hut with a bunch of flow art toys people can go in and play with // // // Distributed under the Apache License, Version 2.0. @@ -29,12 +29,13 @@ var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 0.5, z: 1})); var lightSaber = new LightSaber(Vec3.sum(basePosition, {x: 3, y: 0.5, z: 1})); -var modelURL = "file:///C:/Users/Eric/Desktop/RaveRoom.fbx?v1" + Math.random(); +var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/rave/RaveRoom.fbx"; var roomDimensions = {x: 30.58, y: 15.29, z: 30.58}; var raveRoom = Entities.addEntity({ type: "Model", + name: "Rave Hut Room", modelURL: modelURL, position: basePosition, dimensions:roomDimensions, @@ -43,7 +44,8 @@ var raveRoom = Entities.addEntity({ var floor = Entities.addEntity({ type: "Box", - position: Vec3.sum(basePosition, {x: 0, y: -1.5, z: 0}), + name: "Rave Floor", + position: Vec3.sum(basePosition, {x: 0, y: -1.2, z: 0}), dimensions: {x: roomDimensions.x, y: 0.6, z: roomDimensions.z}, color: {red: 50, green: 10, blue: 100}, shapeType: 'box' @@ -53,6 +55,7 @@ var floor = Entities.addEntity({ var lightZone = Entities.addEntity({ type: "Zone", + name: "Rave Hut Zone", shapeType: 'box', keyLightIntensity: 0.4, keyLightColor: { diff --git a/examples/flowArts/lightBall/lightBall.js b/examples/flowArts/lightBall/lightBall.js index 698c62a71d..a8cdf894d1 100644 --- a/examples/flowArts/lightBall/lightBall.js +++ b/examples/flowArts/lightBall/lightBall.js @@ -1,3 +1,17 @@ +// +// LightBall.js +// examples/lightBall +// +// Created by Eric Levin on 12/17/15. +// Copyright 2014 High Fidelity, Inc. +// +// This script creats a particle light ball which makes particle trails as you move it. +// +// +// 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/utils.js"); LightBall = function(spawnPosition) { @@ -11,6 +25,7 @@ LightBall = function(spawnPosition) { var containerBall = Entities.addEntity({ type: "Sphere", + name: "containerBall", position: Vec3.sum(spawnPosition, { x: 0, y: .5, @@ -27,7 +42,11 @@ LightBall = function(spawnPosition) { blue: 150 }, collisionsWillMove: true, - gravity: {x: 0, y: -.5, z: 0}, + gravity: { + x: 0, + y: -.5, + z: 0 + }, userData: JSON.stringify({ grabbableKey: { spatialKey: { @@ -45,6 +64,7 @@ LightBall = function(spawnPosition) { var light = Entities.addEntity({ type: 'Light', + name: "ballLight", parentID: containerBall, dimensions: { x: 30, @@ -60,8 +80,8 @@ LightBall = function(spawnPosition) { type: "ParticleEffect", parentID: containerBall, isEmitting: true, - "name": "ParticlesTest Emitter", - "colorStart": { + name: "particleBall", + colorStart: { red: 200, green: 20, blue: 40 @@ -71,45 +91,45 @@ LightBall = function(spawnPosition) { green: 200, blue: 255 }, - "colorFinish": { + colorFinish: { red: 25, green: 20, blue: 255 }, - "maxParticles": 100000, - "lifespan": 2, - "emitRate": 10000, - "emitSpeed": .1, - "speedSpread": 0.0, - "emitDimensions": { - "x": 0, - "y": 0, - "z": 0 + maxParticles: 100000, + lifespan: 2, + emitRate: 10000, + emitSpeed: .1, + lifetime: -1, + speedSpread: 0.0, + emitDimensions: { + x: 0, + y: 0, + z: 0 }, - "polarStart": 0, - "polarFinish": Math.PI, - "azimuthStart": -Math.PI, - "azimuthFinish": Math.PI, - "emitAcceleration": { - "x": 0, - "y": 0, - "z": 0 + polarStart: 0, + polarFinish: Math.PI, + azimuthStart: -Math.PI, + azimuthFinish: Math.PI, + emitAcceleration: { + x: 0, + y: 0, + z: 0 }, - "accelerationSpread": { - "x": .00, - "y": .00, - "z": .00 + accelerationSpread: { + x: .00, + y: .00, + z: .00 }, - "particleRadius": 0.02, - "radiusSpread": 0, - "radiusStart": 0.03, - "radiusFinish": 0.0003, - "alpha": 0, - "alphaSpread": .5, - "alphaStart": 0, - "alphaFinish": 0.5, - // "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", - "textures": "file:///C:/Users/Eric/Desktop/Particle-Sprite-Smoke-1.png?v1" + Math.random(), + particleRadius: 0.02, + radiusSpread: 0, + radiusStart: 0.03, + radiusFinish: 0.0003, + alpha: 0, + alphaSpread: .5, + alphaStart: 0, + alphaFinish: 0.5, + textures: "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", emitterShouldTrail: true }) diff --git a/examples/flowArts/lightSaber/LightSaber.js b/examples/flowArts/lightSaber/LightSaber.js index 12ac3f3b60..8a4f3f2902 100644 --- a/examples/flowArts/lightSaber/LightSaber.js +++ b/examples/flowArts/lightSaber/LightSaber.js @@ -1,10 +1,25 @@ +// +// LightSaber.js +// examples +// +// Created by Eric Levin on 12/17/15. +// Copyright 2014 High Fidelity, Inc. +// +// This script creates a lightsaber which activates on grab +// +// +// 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/utils.js"); -var modelURL = "file:///C:/Users/Eric/Desktop/lightSaber.fbx?v1" + Math.random(); +var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/rave/lightSaber.fbx"; var scriptURL = Script.resolvePath("lightSaberEntityScript.js"); LightSaber = function(spawnPosition) { - var stick = Entities.addEntity({ + var saberHandle = Entities.addEntity({ type: "Model", + name: "LightSaber Handle", modelURL: modelURL, position: spawnPosition, shapeType: 'box', @@ -31,7 +46,7 @@ LightSaber = function(spawnPosition) { function cleanup() { - Entities.deleteEntity(stick); + Entities.deleteEntity(saberHandle); } this.cleanup = cleanup; diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js index 2faf0abff9..6f396bf6e3 100644 --- a/examples/flowArts/lightSaber/lightSaberEntityScript.js +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -1,10 +1,10 @@ // lightSaberEntityScript.js // // Script Type: Entity -// Created by Eric Levin on 12/16/15. +// Created by Eric Levin on 12/17/15. // Copyright 2015 High Fidelity, Inc. // -// This entity script creates a lightsaber. +// This entity script creates the logic for displaying the lightsaber beam. // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // @@ -35,10 +35,6 @@ }); }, - continueNearGrab: function() { - - }, - releaseGrab: function() { Entities.editEntity(this.beam, { isEmitting: false @@ -52,7 +48,6 @@ unload: function() { Entities.deleteEntity(this.beam); - // Entities.deleteEntity(this.beamTrail); }, createBeam: function() { @@ -68,56 +63,53 @@ var color = this.colorPalette[randInt(0, this.colorPalette.length)]; var props = { type: "ParticleEffect", + name: "LightSaber Beam", position: position, parentID: this.entityID, isEmitting: false, - "colorStart": color, + colorStart: color, color: { red: 200, green: 200, blue: 255 }, - "colorFinish": color, - "maxParticles": 100000, - "lifespan": 2, - "emitRate": 1000, + colorFinish: color, + maxParticles: 100000, + lifespan: 2, + emitRate: 1000, emitOrientation: forwardQuat, - "emitSpeed": .4, - "speedSpread": 0.0, - "emitDimensions": { - "x": 0, - "y": 0, - "z": 0 + emitSpeed: .4, + speedSpread: 0.0, + emitDimensions: { + x: 0, + y: 0, + z: 0 }, - "polarStart": 0, - "polarFinish": .0, - "azimuthStart": .1, - "azimuthFinish": .01, - "emitAcceleration": { - "x": 0, - "y": 0, - "z": 0 + polarStart: 0, + polarFinish: .0, + azimuthStart: .1, + azimuthFinish: .01, + emitAcceleration: { + x: 0, + y: 0, + z: 0 }, - "accelerationSpread": { - "x": .00, - "y": .00, - "z": .00 + accelerationSpread: { + x: .00, + y: .00, + z: .00 }, - "radiusStart": 0.03, - radiusFinish: 0.025, - "alpha": 0.7, - "alphaSpread": .1, - "alphaStart": 0.5, - "alphaFinish": 0.5, - // "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", - "textures": "file:///C:/Users/Eric/Desktop/beamParticle.png?v1" + Math.random(), + radiusStart: 0.03, + adiusFinish: 0.025, + alpha: 0.7, + alphaSpread: .1, + alphaStart: 0.5, + alphaFinish: 0.5, + textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", emitterShouldTrail: false } this.beam = Entities.addEntity(props); - // props.emitterShouldTrail = true; - // this.beamTrail = Entities.addEntity(props); - } }; // entity scripts always need to return a newly constructed object of our type diff --git a/examples/flowArts/lightTrails.js b/examples/flowArts/lightTrails.js index 8e0dc98bbb..522ecce851 100644 --- a/examples/flowArts/lightTrails.js +++ b/examples/flowArts/lightTrails.js @@ -1,11 +1,11 @@ // -// hydraPaint.js +// lightTrails.js // examples // // Created by Eric Levin on 5/14/15. // Copyright 2014 High Fidelity, Inc. // -// This script allows you to paint with the hydra! +// This script creates light trails as you move your hydra hands // // // Distributed under the Apache License, Version 2.0. @@ -25,24 +25,6 @@ var LIFETIME = 6000; var DRAWING_DEPTH = 0.8; var LINE_DIMENSIONS = 100; -var lightZone = Entities.addEntity({ - type: "Zone", - shapeType: 'box', - keyLightIntensity: 0.02, - keyLightColor: { - red: 5, - green: 0, - blue: 5 - }, - keyLightAmbientIntensity: .05, - position: MyAvatar.position, - dimensions: { - x: 100, - y: 100, - z: 100 - } -}); - var MIN_POINT_DISTANCE = 0.02; @@ -192,7 +174,6 @@ function update(deltaTime) { function scriptEnding() { leftController.cleanup(); rightController.cleanup(); - Entities.deleteEntity(lightZone); } function vectorIsZero(v) { diff --git a/examples/flowArts/raveStick/RaveStick.js b/examples/flowArts/raveStick/RaveStick.js index 5151b528cc..fd3c98b6e5 100644 --- a/examples/flowArts/raveStick/RaveStick.js +++ b/examples/flowArts/raveStick/RaveStick.js @@ -1,10 +1,32 @@ +// +// RaveStick.js +// examples/flowArats/raveStick +// +// Created by Eric Levin on 12/17/15. +// Copyright 2014 High Fidelity, Inc. +// +// This script creates a rave stick which makes pretty light trails as you paint +// +// 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/utils.js"); -var modelURL = "file:///C:/Users/Eric/Desktop/raveStick.fbx?v1" + Math.random(); +var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/rave/raveStick.fbx"; var scriptURL = Script.resolvePath("raveStickEntityScript.js"); RaveStick = function(spawnPosition) { - + var colorPalette = [{ + red: 0, + green: 200, + blue: 40 + }, { + red: 200, + green: 10, + blue: 40 + }]; var stick = Entities.addEntity({ type: "Model", + name: "raveStick", modelURL: modelURL, position: spawnPosition, shapeType: 'box', @@ -29,9 +51,24 @@ RaveStick = function(spawnPosition) { }) }); + var light = Entities.addEntity({ + type: 'Light', + name: "raveLight", + parentID: stick, + dimensions: { + x: 30, + y: 30, + z: 30 + }, + color: colorPalette[randInt(0, colorPalette.length)], + intensity: 5 + }); + + function cleanup() { Entities.deleteEntity(stick); + Entities.deleteEntity(light); } this.cleanup = cleanup; diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index 20c21d3a79..2c484e601d 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -46,7 +46,9 @@ }, textures: texture, lifetime: LIFETIME - }) + }); + + this.points = []; this.normals = []; this.strokeWidths = []; @@ -127,8 +129,8 @@ unload: function() { Entities.deleteEntity(this.beam); Entities.deleteEntity(this.trail); - if(this.trailEraseInterval) { - Script.clearInterval(this.trailEraseInterval); + if (this.trailEraseInterval) { + Script.clearInterval(this.trailEraseInterval); } }, @@ -147,43 +149,46 @@ position: position, parentID: this.entityID, isEmitting: true, - "name": "ParticlesTest Emitter", - "colorStart": color, - colorSpread: {red: 200, green : 10, blue: 10}, + name: "raveBeam", + colorStart: color, + colorSpread: { + red: 200, + green: 10, + blue: 10 + }, color: { red: 200, green: 200, blue: 255 }, - "colorFinish": color, - "maxParticles": 100000, - "lifespan": 1, - "emitRate": 1000, + colorFinish: color, + maxParticles: 100000, + lifespan: 1, + emitRate: 1000, emitOrientation: forwardQuat, - "emitSpeed": .2, - "speedSpread": 0.0, - "polarStart": 0, - "polarFinish": .0, - "azimuthStart": .1, - "azimuthFinish": .01, - "emitAcceleration": { - "x": 0, - "y": 0, - "z": 0 + emitSpeed: .2, + speedSpread: 0.0, + polarStart: 0, + polarFinish: .0, + azimuthStart: .1, + azimuthFinish: .01, + emitAcceleration: { + x: 0, + y: 0, + z: 0 }, - "accelerationSpread": { - "x": .00, - "y": .00, - "z": .00 + accelerationSpread: { + x: .00, + y: .00, + z: .00 }, - "radiusStart": 0.03, + radiusStart: 0.03, radiusFinish: 0.025, - "alpha": 0.7, - "alphaSpread": .1, - "alphaStart": 0.5, - "alphaFinish": 0.5, - // "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", - "textures": "file:///C:/Users/Eric/Desktop/beamParticle.png?v1" + Math.random(), + alpha: 0.7, + alphaSpread: .1, + alphaStart: 0.5, + alphaFinish: 0.5, + textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", emitterShouldTrail: false } this.beam = Entities.addEntity(props); diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 91a4811011..43b9ae7870 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -245,6 +245,7 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { transform.setRotation(rotation); } + render::PendingChanges pendingChanges; pendingChanges.updateItem(_renderItemId, [=](ParticlePayloadData& payload) { payload.setVisibleFlag(true); diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 4d46439554..413604dbdf 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -641,11 +641,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle() { Particle particle; - - std::random_device rd; - std::mt19937_64 el(rd()); - std::uniform_real_distribution uniform_dist(0.0, 1.0); particle.seed = randFloatInRange(-1.0f, 1.0f); if (getEmitterShouldTrail()) { @@ -667,13 +663,13 @@ ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle() { float elevationMinZ = sin(PI_OVER_TWO - _polarFinish); float elevationMaxZ = sin(PI_OVER_TWO - _polarStart); // float elevation = asin(elevationMinZ + (elevationMaxZ - elevationMinZ) * randFloat()); - float elevation = asin(elevationMinZ + (elevationMaxZ - elevationMinZ) * uniform_dist(el)); + float elevation = asin(elevationMinZ + (elevationMaxZ - elevationMinZ) *randFloat()); float azimuth; if (_azimuthFinish >= _azimuthStart) { - azimuth = _azimuthStart + (_azimuthFinish - _azimuthStart) * uniform_dist(el); + azimuth = _azimuthStart + (_azimuthFinish - _azimuthStart) * randFloat(); } else { - azimuth = _azimuthStart + (TWO_PI + _azimuthFinish - _azimuthStart) * uniform_dist(el); + azimuth = _azimuthStart + (TWO_PI + _azimuthFinish - _azimuthStart) * randFloat(); } glm::vec3 emitDirection; @@ -711,7 +707,6 @@ ParticleEffectEntityItem::Particle ParticleEffectEntityItem::createParticle() { } particle.velocity = (_emitSpeed + randFloatInRange(-1.0f, 1.0f) * _speedSpread) * (_emitOrientation * emitDirection); - // particle.velocity = (_emitSpeed + uniform_dist(el) * _speedSpread) * (_emitOrientation * emitDirection); particle.acceleration = _emitAcceleration + randFloatInRange(-1.0f, 1.0f) * _accelerationSpread; } From 8d25a666d11dd6e3498e55fcae021f9c886edc4c Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 11:40:06 -0800 Subject: [PATCH 30/62] fixed bug where trail would remain after user released rave stick --- examples/flowArts/flowArtsHutSpawner.js | 1 - examples/flowArts/lightBall/lightBall.js | 2 +- .../flowArts/raveStick/raveStickEntityScript.js | 13 +++++-------- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index 03c0ca112f..3762c67fe4 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -72,7 +72,6 @@ var lightZone = Entities.addEntity({ } }); - function cleanup() { Entities.deleteEntity(raveRoom); diff --git a/examples/flowArts/lightBall/lightBall.js b/examples/flowArts/lightBall/lightBall.js index a8cdf894d1..1898f86eef 100644 --- a/examples/flowArts/lightBall/lightBall.js +++ b/examples/flowArts/lightBall/lightBall.js @@ -44,7 +44,7 @@ LightBall = function(spawnPosition) { collisionsWillMove: true, gravity: { x: 0, - y: -.5, + y: -0.5, z: 0 }, userData: JSON.stringify({ diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index 2c484e601d..171b53e0cf 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -19,7 +19,7 @@ var MAX_POINTS_PER_LINE = 50; var MIN_POINT_DISTANCE = 0.02; var STROKE_WIDTH = 0.05 - var ugLSD = 25; + var ugLSD = 35; var RaveStick = function() { _this = this; this.colorPalette = [{ @@ -117,8 +117,10 @@ }, releaseGrab: function() { - Script.clearInterval(this.trailEraseInterval); - this.trailEraseInterval = null; + Script.setTimeout(function() { + Script.clearInterval(_this.trailEraseInterval); + _this.trailEraseInterval = null; + }, 3000); }, preload: function(entityID) { @@ -192,13 +194,8 @@ emitterShouldTrail: false } this.beam = Entities.addEntity(props); - - // props.emitterShouldTrail = true; - // this.beamTrail = Entities.addEntity(props); - } }; - // entity scripts always need to return a newly constructed object of our type return new RaveStick(); function computeNormal(p1, p2) { From 6f82d680b9cb7873f091614fde07c6fd055a0ccd Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 12:38:25 -0800 Subject: [PATCH 31/62] removed unwanted file --- examples/flowArts/lightBall/particles.js | 129 ----------------------- 1 file changed, 129 deletions(-) delete mode 100644 examples/flowArts/lightBall/particles.js diff --git a/examples/flowArts/lightBall/particles.js b/examples/flowArts/lightBall/particles.js deleted file mode 100644 index 86616d5099..0000000000 --- a/examples/flowArts/lightBall/particles.js +++ /dev/null @@ -1,129 +0,0 @@ -Script.include("../../libraries/utils.js"); - -LightBall = function(spawnPosition) { - - var colorPalette = [{ - red: 25, - green: 20, - blue: 162 - }]; - - - var containerBall = Entities.addEntity({ - type: "Sphere", - position: Vec3.sum(spawnPosition, { - x: 0, - y: .5, - z: 0 - }), - dimensions: { - x: .1, - y: .1, - z: .1 - }, - color: { - red: 15, - green: 10, - blue: 150 - }, - collisionsWillMove: true, - gravity: {x: 0, y: -.5, z: 0}, - visible: false, - userData: JSON.stringify({ - grabbableKey: { - spatialKey: { - relativePosition: { - x: 0, - y: .1, - z: 0 - } - }, - invertSolidWhileHeld: true - } - }) - }); - - - var light = Entities.addEntity({ - type: 'Light', - parentID: containerBall, - dimensions: { - x: 30, - y: 30, - z: 30 - }, - color: colorPalette[randInt(0, colorPalette.length)], - intensity: 5 - }); - - - var lightBall = Entities.addEntity({ - type: "ParticleEffect", - position: spawnPosition, - // parentID: containerBall, - isEmitting: true, - "name": "ParticlesTest Emitter", - "colorStart": { - red: 200, - green: 20, - blue: 40 - }, - color: { - red: 200, - green: 200, - blue: 255 - }, - "colorFinish": { - red: 25, - green: 20, - blue: 255 - }, - "maxParticles": 100000, - "lifespan": 2, - "emitRate": 10000, - "emitSpeed": .0, - "speedSpread": 0.0, - "emitDimensions": { - "x": 5, - "y":0 , - "z": 0 - }, - // "polarStart": 0, - // "polarFinish": Math.PI, - // "azimuthStart": -Math.PI, - // "azimuthFinish": Math.PI, - "emitAcceleration": { - "x": 0, - "y": 0, - "z": 0 - }, - "accelerationSpread": { - "x": .00, - "y": .0, - "z": .00 - }, - "particleRadius": 0.02, - "radiusSpread": 0, - "radiusStart": 0.03, - "radiusFinish": 0.0003, - "alpha": 0, - "alphaSpread": .5, - "alphaStart": 0, - "alphaFinish": 0.5, - // "textures": "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", - "textures": "file:///C:/Users/Eric/Desktop/Particle-Sprite-Smoke-1.png?v1" + Math.random(), - emitterShouldTrail: true - }) - - - - function cleanup() { - Entities.deleteEntity(lightBall); - Entities.deleteEntity(containerBall); - Entities.deleteEntity(light); - } - - this.cleanup = cleanup; -} - -LightBall(); \ No newline at end of file From 92f96cbb2f403a556a62bae17326def1e90c4c8f Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 12:49:30 -0800 Subject: [PATCH 32/62] Removed un-needed libraries from particle effect entity --- libraries/entities/src/ParticleEffectEntityItem.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index da8e369841..16196aa129 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -33,8 +33,6 @@ #include #include #include -#include -#include #include "EntityTree.h" #include "EntityTreeElement.h" From 035ca25b485d6d712abeac8975bd9eecda455fe1 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 13:31:27 -0800 Subject: [PATCH 33/62] arc ball finds other balls --- examples/flowArts/arcBall/arcBall.js | 149 ++++++++++++++++++ .../flowArts/arcBall/arcBallEntityScript.js | 45 ++++++ examples/flowArts/flowArtsHutSpawner.js | 9 +- examples/flowArts/lightBall/lightBall.js | 10 +- 4 files changed, 206 insertions(+), 7 deletions(-) create mode 100644 examples/flowArts/arcBall/arcBall.js create mode 100644 examples/flowArts/arcBall/arcBallEntityScript.js diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js new file mode 100644 index 0000000000..3853830863 --- /dev/null +++ b/examples/flowArts/arcBall/arcBall.js @@ -0,0 +1,149 @@ +// +// arcBall.js +// examples/arcBall +// +// Created by Eric Levin on 12/17/15. +// Copyright 2014 High Fidelity, Inc. +// +// This script creats a particle light ball which makes particle trails as you move it. +// +// +// 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/utils.js"); + + +var scriptURL = Script.resolvePath("arcBallEntityScript.js"); +ArcBall = function(spawnPosition) { + + var colorPalette = [{ + red: 25, + green: 20, + blue: 162 + }]; + + + var containerBall = Entities.addEntity({ + type: "Sphere", + name: "Arc Ball", + script: scriptURL, + position: Vec3.sum(spawnPosition, { + x: 0, + y: .5, + z: 0 + }), + dimensions: { + x: .1, + y: .1, + z: .1 + }, + color: { + red: 15, + green: 10, + blue: 150 + }, + mass: 10, + collisionsWillMove: true, + // gravity: { + // x: 0, + // y: -0.5, + // z: 0 + // }, + userData: JSON.stringify({ + grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: .1, + z: 0 + } + }, + invertSolidWhileHeld: true + } + }) + }); + + + var light = Entities.addEntity({ + type: 'Light', + name: "ballLight", + parentID: containerBall, + dimensions: { + x: 30, + y: 30, + z: 30 + }, + color: colorPalette[randInt(0, colorPalette.length)], + intensity: 5 + }); + + + var arcBall = Entities.addEntity({ + type: "ParticleEffect", + parentID: containerBall, + isEmitting: true, + name: "Arc Ball Particle Effect", + colorStart: { + red: 200, + green: 20, + blue: 40 + }, + color: { + red: 200, + green: 200, + blue: 255 + }, + colorFinish: { + red: 25, + green: 20, + blue: 255 + }, + maxParticles: 100000, + lifespan: 2, + emitRate: 10000, + emitSpeed: .1, + lifetime: -1, + speedSpread: 0.0, + emitDimensions: { + x: 0, + y: 0, + z: 0 + }, + polarStart: 0, + polarFinish: Math.PI, + azimuthStart: -Math.PI, + azimuthFinish: Math.PI, + emitAcceleration: { + x: 0, + y: 0, + z: 0 + }, + accelerationSpread: { + x: .00, + y: .00, + z: .00 + }, + particleRadius: 0.02, + radiusSpread: 0, + radiusStart: 0.03, + radiusFinish: 0.0003, + alpha: 0, + alphaSpread: .5, + alphaStart: 0, + alphaFinish: 0.5, + textures: "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", + emitterShouldTrail: true + }) + + + + function cleanup() { + Entities.deleteEntity(arcBall); + Entities.deleteEntity(containerBall); + Entities.deleteEntity(light); + } + + this.cleanup = cleanup; +} \ No newline at end of file diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js new file mode 100644 index 0000000000..bcdb2bc5a9 --- /dev/null +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -0,0 +1,45 @@ +// arcBallEntityScript.js +// +// Script Type: Entity +// Created by Eric Levin on 12/17/15. +// Copyright 2015 High Fidelity, Inc. +// +// This entity script handles the logic for the arcBall rave toy +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function() { + Script.include("../../libraries/utils.js"); + var _this; + var ArcBall = function() { + _this = this; + }; + + ArcBall.prototype = { + isGrabbed: false, + startNearGrab: function() { + //Search for nearby balls and create an arc to it if one is found + var position = Entities.getEntityProperties(this.entityID, "position").position + var entities = Entities.findEntities(position, 10); + entities.forEach(function(entity) { + var props = Entities.getEntityProperties(entity, ["position", "name"]); + if (props.name === "Arc Ball" && JSON.stringify(_this.entityID) !== JSON.stringify(entity)) { + print ("WE FOUND ANOTHER ARC BALL"); + } + }) + + }, + + continueNearGrab: function() { + }, + + releaseGrab: function() { + }, + + preload: function(entityID) { + this.entityID = entityID; + }, + }; + return new ArcBall(); +}); diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index 3762c67fe4..742b239981 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -17,6 +17,7 @@ Script.include("../../libraries/utils.js"); Script.include("lightBall/LightBall.js"); Script.include("raveStick/RaveStick.js"); Script.include("lightSaber/LightSaber.js"); +Script.include("arcBall/ArcBall.js"); @@ -24,7 +25,10 @@ var basePosition = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Ca basePosition.y = MyAvatar.position.y + 1; // RAVE ITEMS -var lightBall = new LightBall(basePosition); +//var lightBall = new LightBall(basePosition); + +var arcBall = new ArcBall(basePosition); +var arcBall2 = new ArcBall(Vec3.sum(basePosition, {x: -1, y: 0, z: 0})); var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 0.5, z: 1})); var lightSaber = new LightSaber(Vec3.sum(basePosition, {x: 3, y: 0.5, z: 1})); @@ -77,7 +81,8 @@ function cleanup() { Entities.deleteEntity(raveRoom); Entities.deleteEntity(lightZone) Entities.deleteEntity(floor); - lightBall.cleanup(); + arcBall.cleanup(); + arcBall2.cleanup(); raveStick.cleanup(); lightSaber.cleanup(); } diff --git a/examples/flowArts/lightBall/lightBall.js b/examples/flowArts/lightBall/lightBall.js index 1898f86eef..df62b1b786 100644 --- a/examples/flowArts/lightBall/lightBall.js +++ b/examples/flowArts/lightBall/lightBall.js @@ -42,11 +42,11 @@ LightBall = function(spawnPosition) { blue: 150 }, collisionsWillMove: true, - gravity: { - x: 0, - y: -0.5, - z: 0 - }, + // gravity: { + // x: 0, + // y: -0.5, + // z: 0 + // }, userData: JSON.stringify({ grabbableKey: { spatialKey: { From 3e6ae7c5710e99f2508022bb80082b4fcc73911b Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 15:02:25 -0800 Subject: [PATCH 34/62] added lightball back --- examples/flowArts/arcBall/arcBall.js | 8 +- .../flowArts/arcBall/arcBallEntityScript.js | 80 +++++++++++++++++-- examples/flowArts/flowArtsHutSpawner.js | 13 +-- .../lightSaber/lightSaberEntityScript.js | 3 +- 4 files changed, 88 insertions(+), 16 deletions(-) diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index 3853830863..34578cce76 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -35,9 +35,9 @@ ArcBall = function(spawnPosition) { z: 0 }), dimensions: { - x: .1, - y: .1, - z: .1 + x: .2, + y: .2, + z: .2 }, color: { red: 15, @@ -102,7 +102,7 @@ ArcBall = function(spawnPosition) { }, maxParticles: 100000, lifespan: 2, - emitRate: 10000, + emitRate: 1000, emitSpeed: .1, lifetime: -1, speedSpread: 0.0, diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index bcdb2bc5a9..f1ba9aeb95 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -25,16 +25,86 @@ entities.forEach(function(entity) { var props = Entities.getEntityProperties(entity, ["position", "name"]); if (props.name === "Arc Ball" && JSON.stringify(_this.entityID) !== JSON.stringify(entity)) { - print ("WE FOUND ANOTHER ARC BALL"); + _this.createBeam(position, props.position); } - }) + }); }, - continueNearGrab: function() { + createBeam: function(startPosition, endPosition) { + print("CREATE BEAM") + // Creates particle arc from start position to end position + var sourceToTargetVec = Vec3.subtract(endPosition, startPosition); + var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); + + testBox = Entities.addEntity({ + type: "Box", + dimensions: {x: .1, y: .1, z: 1}, + color: {red: 200, green: 10, blue: 10}, + position: startPosition, + rotation: emitOrientation + }); + var color = { + red: 200, + green: 10, + blue: 10 + }; + var props = { + type: "ParticleEffect", + name: "Particle Arc", + parentID: this.entityID, + isEmitting: true, + colorStart: color, + color: { + red: 200, + green: 200, + blue: 255 + }, + colorFinish: color, + maxParticles: 100000, + lifespan: 2, + emitRate: 1000, + emitOrientation: emitOrientation, + emitSpeed: .4, + speedSpread: 0.0, + emitDimensions: { + x: 0, + y: 0, + z: 0 + }, + polarStart: 0, + polarFinish: .0, + azimuthStart: .1, + azimuthFinish: .01, + emitAcceleration: { + x: 0, + y: 0, + z: 0 + }, + accelerationSpread: { + x: .00, + y: .00, + z: .00 + }, + radiusStart: 0.03, + adiusFinish: 0.025, + alpha: 0.7, + alphaSpread: .1, + alphaStart: 0.5, + alphaFinish: 0.5, + textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", + emitterShouldTrail: false + } + this.particleArc = Entities.addEntity(props); }, - releaseGrab: function() { + continueNearGrab: function() {}, + + releaseGrab: function() {}, + + unload: function() { + Entities.deleteEntity(this.particleArc); + Entities.deleteEntity(testBox); }, preload: function(entityID) { @@ -42,4 +112,4 @@ }, }; return new ArcBall(); -}); +}); \ No newline at end of file diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index 742b239981..e03d2bf0e8 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -25,10 +25,10 @@ var basePosition = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Ca basePosition.y = MyAvatar.position.y + 1; // RAVE ITEMS -//var lightBall = new LightBall(basePosition); +var lightBall = new LightBall(basePosition); -var arcBall = new ArcBall(basePosition); -var arcBall2 = new ArcBall(Vec3.sum(basePosition, {x: -1, y: 0, z: 0})); +// var arcBall = new ArcBall(basePosition); +// var arcBall2 = new ArcBall(Vec3.sum(basePosition, {x: -1, y: 0, z: 0})); var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 0.5, z: 1})); var lightSaber = new LightSaber(Vec3.sum(basePosition, {x: 3, y: 0.5, z: 1})); @@ -79,10 +79,11 @@ var lightZone = Entities.addEntity({ function cleanup() { Entities.deleteEntity(raveRoom); - Entities.deleteEntity(lightZone) + Entities.deleteEntity(lightZone); Entities.deleteEntity(floor); - arcBall.cleanup(); - arcBall2.cleanup(); + lightBall.cleanup(); + // arcBall.cleanup(); + // arcBall2.cleanup(); raveStick.cleanup(); lightSaber.cleanup(); } diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js index 6f396bf6e3..794e241924 100644 --- a/examples/flowArts/lightSaber/lightSaberEntityScript.js +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -56,7 +56,8 @@ this.props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); var forwardVec = Quat.getFront(Quat.multiply(this.props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); // forwardVec = Vec3.normalize(forwardVec); - var forwardQuat = orientationOf(forwardVec); + // var forwardQuat = orientationOf(forwardVec); + var forwardQuat = Quat.rotationBetween(Vec3.UNIT_Z, forwardVec); var position = Vec3.sum(this.props.position, Vec3.multiply(Quat.getFront(this.props.rotation), 0.1)); position.z += 0.1; position.x += -0.035; From aa1f77ab1c6e0294983e2f8f4c18bfa7dbef2772 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 15:42:52 -0800 Subject: [PATCH 35/62] adding ravestick to toybox demo room --- examples/flowArts/raveStick/RaveStick.js | 62 +++++++++ .../raveStick/raveStickEntityScript.js | 62 --------- unpublishedScripts/hiddenEntityReset.js | 115 ++++++++++++++++- unpublishedScripts/masterReset.js | 118 +++++++++++++++++- 4 files changed, 292 insertions(+), 65 deletions(-) diff --git a/examples/flowArts/raveStick/RaveStick.js b/examples/flowArts/raveStick/RaveStick.js index fd3c98b6e5..3e4cf16136 100644 --- a/examples/flowArts/raveStick/RaveStick.js +++ b/examples/flowArts/raveStick/RaveStick.js @@ -64,11 +64,73 @@ RaveStick = function(spawnPosition) { intensity: 5 }); + var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0) + var forwardVec = Quat.getFront(Quat.multiply(rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); + forwardVec = Vec3.normalize(forwardVec); + var forwardQuat = orientationOf(forwardVec); + var position = Vec3.sum(spawnPosition, Vec3.multiply(Quat.getFront(rotation), 0.1)); + position.z += 0.1; + position.x += -0.035; + var color = { + red: 0, + green: 200, + blue: 40 + }; + var props = { + type: "ParticleEffect", + position: position, + parentID: stick, + isEmitting: true, + name: "raveBeam", + colorStart: color, + colorSpread: { + red: 200, + green: 10, + blue: 10 + }, + color: { + red: 200, + green: 200, + blue: 255 + }, + colorFinish: color, + maxParticles: 100000, + lifespan: 1, + emitRate: 1000, + emitOrientation: forwardQuat, + emitSpeed: .2, + speedSpread: 0.0, + polarStart: 0, + polarFinish: .0, + azimuthStart: .1, + azimuthFinish: .01, + emitAcceleration: { + x: 0, + y: 0, + z: 0 + }, + accelerationSpread: { + x: .00, + y: .00, + z: .00 + }, + radiusStart: 0.03, + radiusFinish: 0.025, + alpha: 0.7, + alphaSpread: .1, + alphaStart: 0.5, + alphaFinish: 0.5, + textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", + emitterShouldTrail: false, + } + var beam = Entities.addEntity(props); + function cleanup() { Entities.deleteEntity(stick); Entities.deleteEntity(light); + Entities.deleteEntity(beam); } this.cleanup = cleanup; diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index 171b53e0cf..2e174c78f0 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -58,7 +58,6 @@ isGrabbed: false, startNearGrab: function() { - // this.createBeam(); this.trailBasePosition = Entities.getEntityProperties(this.entityID, "position").position; Entities.editEntity(this.trail, { position: this.trailBasePosition @@ -125,7 +124,6 @@ preload: function(entityID) { this.entityID = entityID; - this.createBeam(); }, unload: function() { @@ -134,66 +132,6 @@ if (this.trailEraseInterval) { Script.clearInterval(this.trailEraseInterval); } - }, - - createBeam: function() { - - var props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); - var forwardVec = Quat.getFront(Quat.multiply(props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); - forwardVec = Vec3.normalize(forwardVec); - var forwardQuat = orientationOf(forwardVec); - var position = Vec3.sum(props.position, Vec3.multiply(Quat.getFront(props.rotation), 0.1)); - position.z += 0.1; - position.x += -0.035; - var color = this.colorPalette[randInt(0, this.colorPalette.length)]; - var props = { - type: "ParticleEffect", - position: position, - parentID: this.entityID, - isEmitting: true, - name: "raveBeam", - colorStart: color, - colorSpread: { - red: 200, - green: 10, - blue: 10 - }, - color: { - red: 200, - green: 200, - blue: 255 - }, - colorFinish: color, - maxParticles: 100000, - lifespan: 1, - emitRate: 1000, - emitOrientation: forwardQuat, - emitSpeed: .2, - speedSpread: 0.0, - polarStart: 0, - polarFinish: .0, - azimuthStart: .1, - azimuthFinish: .01, - emitAcceleration: { - x: 0, - y: 0, - z: 0 - }, - accelerationSpread: { - x: .00, - y: .00, - z: .00 - }, - radiusStart: 0.03, - radiusFinish: 0.025, - alpha: 0.7, - alphaSpread: .1, - alphaStart: 0.5, - alphaFinish: 0.5, - textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", - emitterShouldTrail: false - } - this.beam = Entities.addEntity(props); } }; return new RaveStick(); diff --git a/unpublishedScripts/hiddenEntityReset.js b/unpublishedScripts/hiddenEntityReset.js index ee53e36f9e..e4cf434bf8 100644 --- a/unpublishedScripts/hiddenEntityReset.js +++ b/unpublishedScripts/hiddenEntityReset.js @@ -24,6 +24,7 @@ var lightsScriptURL = Script.resolvePath("../examples/toybox/lights/lightSwitch.js"); var targetsScriptURL = Script.resolvePath('../examples/toybox/ping_pong_gun/wallTarget.js'); var bowScriptURL = Script.resolvePath('../examples/toybox/bow/bow.js'); + var raveStickEntityScriptURL = Script.resolvePath("../examples/flowarts/raveStick/raveStickEntityScript.js"); var basketballResetterScriptURL = Script.resolvePath('basketballsResetter.js'); var targetsResetterScriptURL = Script.resolvePath('targetsResetter.js'); @@ -106,6 +107,13 @@ z: 505.78 }); + createRaveStick({ + x: 547.4, + y: 495.4, + z: 504.5 + }); + + createCombinedArmChair({ x: 549.29, y: 494.9, @@ -160,6 +168,111 @@ }); } + function createRaveStick(position) { + var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/rave/raveStick.fbx"; + var stick = Entities.addEntity({ + type: "Model", + name: "raveStick", + modelURL: modelURL, + position: position, + shapeType: 'box', + collisionsWillMove: true, + script: raveStickEntityScriptURL, + dimensions: { + x: 0.06, + y: 0.06, + z: 0.31 + }, + gravity: { + x: 0, + y: -3, + z: 0 + }, + userData: JSON.stringify({ + resetMe: { + resetMe: true + }, + grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: 0, + z: -0.1 + }, + relativeRotation: Quat.fromPitchYawRollDegrees(90, 90, 0) + }, + invertSolidWhileHeld: true + } + }) + }); + var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0) + var forwardVec = Quat.getFront(Quat.multiply(rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); + forwardVec = Vec3.normalize(forwardVec); + var forwardQuat = orientationOf(forwardVec); + position = Vec3.sum(position, Vec3.multiply(Quat.getFront(rotation), 0.1)); + position.z += 0.1; + position.x += -0.035; + var color = { + red: 0, + green: 200, + blue: 40 + }; + var props = { + type: "ParticleEffect", + position: position, + parentID: stick, + isEmitting: true, + name: "raveBeam", + colorStart: color, + colorSpread: { + red: 200, + green: 10, + blue: 10 + }, + color: { + red: 200, + green: 200, + blue: 255 + }, + colorFinish: color, + maxParticles: 100000, + lifespan: 1, + emitRate: 1000, + emitOrientation: forwardQuat, + emitSpeed: .2, + speedSpread: 0.0, + polarStart: 0, + polarFinish: .0, + azimuthStart: .1, + azimuthFinish: .01, + emitAcceleration: { + x: 0, + y: 0, + z: 0 + }, + accelerationSpread: { + x: .00, + y: .00, + z: .00 + }, + radiusStart: 0.03, + radiusFinish: 0.025, + alpha: 0.7, + alphaSpread: .1, + alphaStart: 0.5, + alphaFinish: 0.5, + textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", + emitterShouldTrail: false, + userData: JSON.stringify({ + resetMe: { + resetMe: true + } + }) + } + var beam = Entities.addEntity(props); + + } + function createGun(position) { var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/gun.fbx"; @@ -1391,4 +1504,4 @@ }; // entity scripts always need to return a newly constructed object of our type return new ResetSwitch(); -}); +}); \ No newline at end of file diff --git a/unpublishedScripts/masterReset.js b/unpublishedScripts/masterReset.js index 1837f4d656..66c8c74edd 100644 --- a/unpublishedScripts/masterReset.js +++ b/unpublishedScripts/masterReset.js @@ -23,10 +23,12 @@ var wandScriptURL = Script.resolvePath("../examples/toybox/bubblewand/wand.js"); var dollScriptURL = Script.resolvePath("../examples/toybox/doll/doll.js"); var lightsScriptURL = Script.resolvePath("../examples/toybox/lights/lightSwitch.js"); var bowScriptURL = Script.resolvePath("../examples/toybox/bow/bow.js"); +var raveStickEntityScriptURL = Script.resolvePath("../examples/flowarts/raveStick/raveStickEntityScript.js"); var targetsScriptURL = Script.resolvePath('../examples/toybox/ping_pong_gun/wallTarget.js'); var basketballResetterScriptURL = Script.resolvePath('basketballsResetter.js'); var targetsResetterScriptURL = Script.resolvePath('targetsResetter.js'); + MasterReset = function() { var resetKey = "resetMe"; @@ -80,6 +82,12 @@ MasterReset = function() { z: 505.78 }); + createRaveStick({ + x: 547.4, + y: 495.4, + z: 504.5 + }); + createCombinedArmChair({ @@ -94,6 +102,8 @@ MasterReset = function() { z: 504.53 }); + + createPingPongBallGun(); createTargets(); createTargetResetter(); @@ -137,6 +147,110 @@ MasterReset = function() { }); } + function createRaveStick(position) { + var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/rave/raveStick.fbx"; + var stick = Entities.addEntity({ + type: "Model", + name: "raveStick", + modelURL: modelURL, + position: position, + shapeType: 'box', + collisionsWillMove: true, + script: raveStickEntityScriptURL, + dimensions: { + x: 0.06, + y: 0.06, + z: 0.31 + }, + gravity: { + x: 0, + y: -3, + z: 0 + }, + userData: JSON.stringify({ + resetMe: { + resetMe: true + }, + grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: 0, + z: -0.1 + }, + relativeRotation: Quat.fromPitchYawRollDegrees(90, 90, 0) + }, + invertSolidWhileHeld: true + } + }) + }); + var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0) + var forwardVec = Quat.getFront(Quat.multiply(rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); + forwardVec = Vec3.normalize(forwardVec); + var forwardQuat = orientationOf(forwardVec); + position = Vec3.sum(position, Vec3.multiply(Quat.getFront(rotation), 0.1)); + position.z += 0.1; + position.x += -0.035; + var color = { + red: 0, + green: 200, + blue: 40 + }; + var props = { + type: "ParticleEffect", + position: position, + parentID: stick, + isEmitting: true, + name: "raveBeam", + colorStart: color, + colorSpread: { + red: 200, + green: 10, + blue: 10 + }, + color: { + red: 200, + green: 200, + blue: 255 + }, + colorFinish: color, + maxParticles: 100000, + lifespan: 1, + emitRate: 1000, + emitOrientation: forwardQuat, + emitSpeed: .2, + speedSpread: 0.0, + polarStart: 0, + polarFinish: .0, + azimuthStart: .1, + azimuthFinish: .01, + emitAcceleration: { + x: 0, + y: 0, + z: 0 + }, + accelerationSpread: { + x: .00, + y: .00, + z: .00 + }, + radiusStart: 0.03, + radiusFinish: 0.025, + alpha: 0.7, + alphaSpread: .1, + alphaStart: 0.5, + alphaFinish: 0.5, + textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", + emitterShouldTrail: false, + userData: JSON.stringify({ + resetMe: { + resetMe: true + } + }) + } + var beam = Entities.addEntity(props); + + } function createGun(position) { var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/gun.fbx"; @@ -1349,7 +1463,7 @@ MasterReset = function() { resetMe: true }, grabbableKey: { - invertSolidWhileHeld: true + invertSolidWhileHeld: true } }) }); @@ -1366,4 +1480,4 @@ MasterReset = function() { Script.scriptEnding.connect(cleanup); } -}; +}; \ No newline at end of file From 17af34a3be36fdc30ae832f602d5f260358e5cb4 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 17 Dec 2015 15:48:05 -0800 Subject: [PATCH 36/62] fixed spelling error --- unpublishedScripts/hiddenEntityReset.js | 2 +- unpublishedScripts/masterReset.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unpublishedScripts/hiddenEntityReset.js b/unpublishedScripts/hiddenEntityReset.js index e4cf434bf8..cc4037beb4 100644 --- a/unpublishedScripts/hiddenEntityReset.js +++ b/unpublishedScripts/hiddenEntityReset.js @@ -24,7 +24,7 @@ var lightsScriptURL = Script.resolvePath("../examples/toybox/lights/lightSwitch.js"); var targetsScriptURL = Script.resolvePath('../examples/toybox/ping_pong_gun/wallTarget.js'); var bowScriptURL = Script.resolvePath('../examples/toybox/bow/bow.js'); - var raveStickEntityScriptURL = Script.resolvePath("../examples/flowarts/raveStick/raveStickEntityScript.js"); + var raveStickEntityScriptURL = Script.resolvePath("../examples/flowArts/raveStick/raveStickEntityScript.js"); var basketballResetterScriptURL = Script.resolvePath('basketballsResetter.js'); var targetsResetterScriptURL = Script.resolvePath('targetsResetter.js'); diff --git a/unpublishedScripts/masterReset.js b/unpublishedScripts/masterReset.js index 66c8c74edd..a1545a3b67 100644 --- a/unpublishedScripts/masterReset.js +++ b/unpublishedScripts/masterReset.js @@ -23,7 +23,7 @@ var wandScriptURL = Script.resolvePath("../examples/toybox/bubblewand/wand.js"); var dollScriptURL = Script.resolvePath("../examples/toybox/doll/doll.js"); var lightsScriptURL = Script.resolvePath("../examples/toybox/lights/lightSwitch.js"); var bowScriptURL = Script.resolvePath("../examples/toybox/bow/bow.js"); -var raveStickEntityScriptURL = Script.resolvePath("../examples/flowarts/raveStick/raveStickEntityScript.js"); +var raveStickEntityScriptURL = Script.resolvePath("../examples/flowArts/raveStick/raveStickEntityScript.js"); var targetsScriptURL = Script.resolvePath('../examples/toybox/ping_pong_gun/wallTarget.js'); var basketballResetterScriptURL = Script.resolvePath('basketballsResetter.js'); var targetsResetterScriptURL = Script.resolvePath('targetsResetter.js'); From 77264b3f99283694ef126d859680760a10e39032 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 18 Dec 2015 14:52:39 -0800 Subject: [PATCH 37/62] Ping pong gun lines up with hand --- examples/flowArts/lightSaber/LightSaber.js | 13 +++++++++++++ unpublishedScripts/hiddenEntityReset.js | 8 ++++++++ unpublishedScripts/masterReset.js | 8 ++++++++ 3 files changed, 29 insertions(+) diff --git a/examples/flowArts/lightSaber/LightSaber.js b/examples/flowArts/lightSaber/LightSaber.js index 8a4f3f2902..50984110bc 100644 --- a/examples/flowArts/lightSaber/LightSaber.js +++ b/examples/flowArts/lightSaber/LightSaber.js @@ -44,6 +44,19 @@ LightSaber = function(spawnPosition) { }) }); + var light = Entities.addEntity({ + type: 'Light', + name: "raveLight", + parentID: saberHandle, + dimensions: { + x: 30, + y: 30, + z: 30 + }, + color: {red: 200, green: 10, blue: 200}, + intensity: 5 + }); + function cleanup() { Entities.deleteEntity(saberHandle); diff --git a/unpublishedScripts/hiddenEntityReset.js b/unpublishedScripts/hiddenEntityReset.js index cc4037beb4..c8a2c97b0f 100644 --- a/unpublishedScripts/hiddenEntityReset.js +++ b/unpublishedScripts/hiddenEntityReset.js @@ -1153,6 +1153,14 @@ resetMe: true }, grabbableKey: { + spatialKey: { + relativePosition: { + x: -0.05, + y: 0, + z: 0.0 + }, + relativeRotation: Quat.fromPitchYawRollDegrees(0, -90, -90) + }, invertSolidWhileHeld: true } diff --git a/unpublishedScripts/masterReset.js b/unpublishedScripts/masterReset.js index a1545a3b67..3d985e9a92 100644 --- a/unpublishedScripts/masterReset.js +++ b/unpublishedScripts/masterReset.js @@ -1134,6 +1134,14 @@ MasterReset = function() { resetMe: true }, grabbableKey: { + spatialKey: { + relativePosition: { + x: -0.05, + y: 0, + z: 0.0 + }, + relativeRotation: Quat.fromPitchYawRollDegrees(0,-90, -90) + }, invertSolidWhileHeld: true } From 2dbb3bd84abf25e2d5d6f0fc0f90ae3d02682012 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 18 Dec 2015 15:12:46 -0800 Subject: [PATCH 38/62] Added grab offsets to createPingPongGun.js --- examples/toybox/ping_pong_gun/createPingPongGun.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/examples/toybox/ping_pong_gun/createPingPongGun.js b/examples/toybox/ping_pong_gun/createPingPongGun.js index 4b93842896..7835dbf7f9 100644 --- a/examples/toybox/ping_pong_gun/createPingPongGun.js +++ b/examples/toybox/ping_pong_gun/createPingPongGun.js @@ -38,6 +38,14 @@ var pingPongGun = Entities.addEntity({ collisionSoundURL: COLLISION_SOUND_URL, userData: JSON.stringify({ grabbableKey: { + spatialKey: { + relativePosition: { + x: -0.05, + y: 0, + z: 0.0 + }, + relativeRotation: Quat.fromPitchYawRollDegrees(0, -90, -90) + }, invertSolidWhileHeld: true } }) From 2c02e7ad631ddec997bbcca99a462b701554d92b Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 18 Dec 2015 15:22:23 -0800 Subject: [PATCH 39/62] grabbing works with left hand for ping pong gun now --- unpublishedScripts/hiddenEntityReset.js | 2 +- unpublishedScripts/masterReset.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unpublishedScripts/hiddenEntityReset.js b/unpublishedScripts/hiddenEntityReset.js index c8a2c97b0f..21971a18ad 100644 --- a/unpublishedScripts/hiddenEntityReset.js +++ b/unpublishedScripts/hiddenEntityReset.js @@ -1125,7 +1125,7 @@ z: 503.39 }; - var rotation = Quat.fromPitchYawRollDegrees(0, 36, 0); + var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); var pingPongGun = Entities.addEntity({ type: "Model", diff --git a/unpublishedScripts/masterReset.js b/unpublishedScripts/masterReset.js index 3d985e9a92..3d0773ca10 100644 --- a/unpublishedScripts/masterReset.js +++ b/unpublishedScripts/masterReset.js @@ -1106,7 +1106,7 @@ MasterReset = function() { z: 503.39 }; - var rotation = Quat.fromPitchYawRollDegrees(0, 36, 0); + var rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); var pingPongGun = Entities.addEntity({ type: "Model", From 514cb7a329b835c282cdf448807a221143796eb0 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 18 Dec 2015 15:26:21 -0800 Subject: [PATCH 40/62] Beams arc to each other. BAM --- examples/flowArts/arcBall/arcBall.js | 11 ++--------- examples/flowArts/arcBall/arcBallEntityScript.js | 5 ++++- examples/flowArts/flowArtsHutSpawner.js | 12 ++++++------ 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index 34578cce76..e39a9af2d6 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -26,7 +26,7 @@ ArcBall = function(spawnPosition) { var containerBall = Entities.addEntity({ - type: "Sphere", + type: "Box", name: "Arc Ball", script: scriptURL, position: Vec3.sum(spawnPosition, { @@ -37,7 +37,7 @@ ArcBall = function(spawnPosition) { dimensions: { x: .2, y: .2, - z: .2 + z: .5 }, color: { red: 15, @@ -53,13 +53,6 @@ ArcBall = function(spawnPosition) { // }, userData: JSON.stringify({ grabbableKey: { - spatialKey: { - relativePosition: { - x: 0, - y: .1, - z: 0 - } - }, invertSolidWhileHeld: true } }) diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index f1ba9aeb95..8c37f170bb 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -42,7 +42,8 @@ dimensions: {x: .1, y: .1, z: 1}, color: {red: 200, green: 10, blue: 10}, position: startPosition, - rotation: emitOrientation + rotation: emitOrientation, + visible: false }); var color = { red: 200, @@ -53,6 +54,8 @@ type: "ParticleEffect", name: "Particle Arc", parentID: this.entityID, + parentJointIndex: -1, + position: startPosition, isEmitting: true, colorStart: color, color: { diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index e03d2bf0e8..39dcf15698 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -25,10 +25,10 @@ var basePosition = Vec3.sum(MyAvatar.position, Vec3.multiply(1, Quat.getFront(Ca basePosition.y = MyAvatar.position.y + 1; // RAVE ITEMS -var lightBall = new LightBall(basePosition); +// var lightBall = new LightBall(basePosition); -// var arcBall = new ArcBall(basePosition); -// var arcBall2 = new ArcBall(Vec3.sum(basePosition, {x: -1, y: 0, z: 0})); +var arcBall = new ArcBall(basePosition); +var arcBall2 = new ArcBall(Vec3.sum(basePosition, {x: -1, y: 0, z: 0})); var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 0.5, z: 1})); var lightSaber = new LightSaber(Vec3.sum(basePosition, {x: 3, y: 0.5, z: 1})); @@ -81,9 +81,9 @@ function cleanup() { Entities.deleteEntity(raveRoom); Entities.deleteEntity(lightZone); Entities.deleteEntity(floor); - lightBall.cleanup(); - // arcBall.cleanup(); - // arcBall2.cleanup(); + // lightBall.cleanup(); + arcBall.cleanup(); + arcBall2.cleanup(); raveStick.cleanup(); lightSaber.cleanup(); } From fffe6dbb9bd32ec6dcb7ce71a8c787dcbc00df66 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 18 Dec 2015 15:38:01 -0800 Subject: [PATCH 41/62] relative rotation --- examples/flowArts/arcBall/arcBall.js | 13 ++++--------- examples/flowArts/arcBall/arcBallEntityScript.js | 4 +++- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index e39a9af2d6..736920ddd5 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -35,22 +35,17 @@ ArcBall = function(spawnPosition) { z: 0 }), dimensions: { - x: .2, - y: .2, - z: .5 + x: .1, + y: .1, + z: .2 }, color: { red: 15, green: 10, blue: 150 }, - mass: 10, + damping: 0.8, collisionsWillMove: true, - // gravity: { - // x: 0, - // y: -0.5, - // z: 0 - // }, userData: JSON.stringify({ grabbableKey: { invertSolidWhileHeld: true diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index 8c37f170bb..4ad0d66257 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -34,8 +34,10 @@ createBeam: function(startPosition, endPosition) { print("CREATE BEAM") // Creates particle arc from start position to end position + var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; var sourceToTargetVec = Vec3.subtract(endPosition, startPosition); var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); + emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation); testBox = Entities.addEntity({ type: "Box", @@ -65,7 +67,7 @@ }, colorFinish: color, maxParticles: 100000, - lifespan: 2, + lifespan: 6, emitRate: 1000, emitOrientation: emitOrientation, emitSpeed: .4, From 1beec0dbe7c46327bc0553734fa5871bbf3fc90d Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 18 Dec 2015 18:15:05 -0800 Subject: [PATCH 42/62] balls --- examples/controllers/handControllerGrab.js | 21 ++++++---- examples/flowArts/arcBall/arcBall.js | 11 ++++- .../flowArts/arcBall/arcBallEntityScript.js | 42 ++++++++++++------- 3 files changed, 49 insertions(+), 25 deletions(-) diff --git a/examples/controllers/handControllerGrab.js b/examples/controllers/handControllerGrab.js index 07894b46d1..fb7ba8a4f6 100644 --- a/examples/controllers/handControllerGrab.js +++ b/examples/controllers/handControllerGrab.js @@ -861,20 +861,25 @@ function MyController(hand) { var handPosition = this.getHandPosition(); var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, this.grabbedEntity, DEFAULT_GRABBABLE_DATA); - + var objectRotation = grabbedProperties.rotation; + var currentObjectPosition = grabbedProperties.position; + var offset = Vec3.subtract(currentObjectPosition, handPosition); if (this.state != STATE_NEAR_GRABBING && grabbableData.spatialKey) { // if an object is "equipped" and has a spatialKey, use it. this.ignoreIK = grabbableData.spatialKey.ignoreIK ? grabbableData.spatialKey.ignoreIK : false; - this.offsetPosition = getSpatialOffsetPosition(this.hand, grabbableData.spatialKey); - this.offsetRotation = getSpatialOffsetRotation(this.hand, grabbableData.spatialKey); + if (grabbableData.spatialKey.relativePosition) { + this.offsetPosition = getSpatialOffsetPosition(this.hand, grabbableData.spatialKey); + } else { + this.offsetPosition = Vec3.multiplyQbyV(Quat.inverse(Quat.multiply(handRotation, this.offsetRotation)), offset); + } + if (grabbableData.spatialKey.relativeRotation) { + this.offsetRotation = getSpatialOffsetRotation(this.hand, grabbableData.spatialKey); + } else { + this.offsetRotation = Quat.multiply(Quat.inverse(handRotation), objectRotation); + } } else { this.ignoreIK = false; - - var objectRotation = grabbedProperties.rotation; this.offsetRotation = Quat.multiply(Quat.inverse(handRotation), objectRotation); - - var currentObjectPosition = grabbedProperties.position; - var offset = Vec3.subtract(currentObjectPosition, handPosition); this.offsetPosition = Vec3.multiplyQbyV(Quat.inverse(Quat.multiply(handRotation, this.offsetRotation)), offset); } diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index 736920ddd5..f779f65643 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -26,7 +26,7 @@ ArcBall = function(spawnPosition) { var containerBall = Entities.addEntity({ - type: "Box", + type: "Sphere", name: "Arc Ball", script: scriptURL, position: Vec3.sum(spawnPosition, { @@ -37,7 +37,7 @@ ArcBall = function(spawnPosition) { dimensions: { x: .1, y: .1, - z: .2 + z: .1 }, color: { red: 15, @@ -48,6 +48,13 @@ ArcBall = function(spawnPosition) { collisionsWillMove: true, userData: JSON.stringify({ grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: 0, + z: -0.5 + }, + }, invertSolidWhileHeld: true } }) diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index 4ad0d66257..7cae0a9cb0 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -25,6 +25,7 @@ entities.forEach(function(entity) { var props = Entities.getEntityProperties(entity, ["position", "name"]); if (props.name === "Arc Ball" && JSON.stringify(_this.entityID) !== JSON.stringify(entity)) { + _this.target = entity; _this.createBeam(position, props.position); } }); @@ -32,21 +33,13 @@ }, createBeam: function(startPosition, endPosition) { - print("CREATE BEAM") // Creates particle arc from start position to end position var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; var sourceToTargetVec = Vec3.subtract(endPosition, startPosition); var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation); - testBox = Entities.addEntity({ - type: "Box", - dimensions: {x: .1, y: .1, z: 1}, - color: {red: 200, green: 10, blue: 10}, - position: startPosition, - rotation: emitOrientation, - visible: false - }); + var color = { red: 200, green: 10, @@ -57,7 +50,7 @@ name: "Particle Arc", parentID: this.entityID, parentJointIndex: -1, - position: startPosition, + // position: startPosition, isEmitting: true, colorStart: color, color: { @@ -67,7 +60,7 @@ }, colorFinish: color, maxParticles: 100000, - lifespan: 6, + lifespan: 5, emitRate: 1000, emitOrientation: emitOrientation, emitSpeed: .4, @@ -103,13 +96,32 @@ this.particleArc = Entities.addEntity(props); }, - continueNearGrab: function() {}, + updateBeam: function(startPosition) { + var targetPosition = Entities.getEntityProperties(this.target, "position").position; + print("TARGET position " + JSON.stringify(this.target)); + var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; + var sourceToTargetVec = Vec3.subtract(targetPosition, startPosition); + var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); + emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation); + Entities.editEntity(this.particleArc, {emitOrientation: emitOrientation}); + Entities.editEntity(this.testBox, {rotation: emitOrientation}); + }, - releaseGrab: function() {}, + continueNearGrab: function() { + var startPosition = Entities.getEntityProperties(this.entityID, "position").position; + this.updateBeam(startPosition); + }, + + releaseGrab: function() { + Entities.editEntity(this.particleArc, { + isEmitting: false + }); + }, unload: function() { - Entities.deleteEntity(this.particleArc); - Entities.deleteEntity(testBox); + if (this.particleArc) { + Entities.deleteEntity(this.particleArc); + } }, preload: function(entityID) { From 7a7befafb9e4afc78039d4a4f99da1b53763ea5f Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 10:43:59 -0800 Subject: [PATCH 43/62] arc balls working --- examples/controllers/handControllerGrab.js | 54 ++++++++++++------- examples/flowArts/arcBall/arcBall.js | 27 ++++++---- .../flowArts/arcBall/arcBallEntityScript.js | 47 ++++++++++------ 3 files changed, 81 insertions(+), 47 deletions(-) diff --git a/examples/controllers/handControllerGrab.js b/examples/controllers/handControllerGrab.js index 07894b46d1..6cacc2e80a 100644 --- a/examples/controllers/handControllerGrab.js +++ b/examples/controllers/handControllerGrab.js @@ -218,6 +218,7 @@ function getSpatialOffsetPosition(hand, spatialKey) { } var yFlip = Quat.angleAxis(180, Vec3.UNIT_Y); + function getSpatialOffsetRotation(hand, spatialKey) { var rotation = Quat.IDENTITY; @@ -261,9 +262,9 @@ function MyController(hand) { this.triggerValue = 0; // rolling average of trigger value this.rawTriggerValue = 0; this.rawBumperValue = 0; - + this.overlayLine = null; - + this.ignoreIK = false; this.offsetPosition = Vec3.ZERO; this.offsetRotation = Quat.IDENTITY; @@ -819,8 +820,16 @@ function MyController(hand) { // mix in head motion if (MOVE_WITH_HEAD) { var objDistance = Vec3.length(objectToAvatar); - var before = Vec3.multiplyQbyV(this.currentCameraOrientation, { x: 0.0, y: 0.0, z: objDistance }); - var after = Vec3.multiplyQbyV(Camera.orientation, { x: 0.0, y: 0.0, z: objDistance }); + var before = Vec3.multiplyQbyV(this.currentCameraOrientation, { + x: 0.0, + y: 0.0, + z: objDistance + }); + var after = Vec3.multiplyQbyV(Camera.orientation, { + x: 0.0, + y: 0.0, + z: objDistance + }); var change = Vec3.subtract(before, after); this.currentCameraOrientation = Camera.orientation; this.currentObjectPosition = Vec3.sum(this.currentObjectPosition, change); @@ -861,20 +870,25 @@ function MyController(hand) { var handPosition = this.getHandPosition(); var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, this.grabbedEntity, DEFAULT_GRABBABLE_DATA); - + var objectRotation = grabbedProperties.rotation; + var currentObjectPosition = grabbedProperties.position; + var offset = Vec3.subtract(currentObjectPosition, handPosition); if (this.state != STATE_NEAR_GRABBING && grabbableData.spatialKey) { // if an object is "equipped" and has a spatialKey, use it. this.ignoreIK = grabbableData.spatialKey.ignoreIK ? grabbableData.spatialKey.ignoreIK : false; - this.offsetPosition = getSpatialOffsetPosition(this.hand, grabbableData.spatialKey); - this.offsetRotation = getSpatialOffsetRotation(this.hand, grabbableData.spatialKey); + if (grabbableData.spatialKey.relativePosition) { + this.offsetPosition = getSpatialOffsetPosition(this.hand, grabbableData.spatialKey); + } else { + this.offsetPosition = Vec3.multiplyQbyV(Quat.inverse(Quat.multiply(handRotation, this.offsetRotation)), offset); + } + if (grabbableData.spatialKey.relativeRotation) { + this.offsetRotation = getSpatialOffsetRotation(this.hand, grabbableData.spatialKey); + } else { + this.offsetRotation = Quat.multiply(Quat.inverse(handRotation), objectRotation); + } } else { this.ignoreIK = false; - - var objectRotation = grabbedProperties.rotation; this.offsetRotation = Quat.multiply(Quat.inverse(handRotation), objectRotation); - - var currentObjectPosition = grabbedProperties.position; - var offset = Vec3.subtract(currentObjectPosition, handPosition); this.offsetPosition = Vec3.multiplyQbyV(Quat.inverse(Quat.multiply(handRotation, this.offsetRotation)), offset); } @@ -1304,10 +1318,10 @@ Controller.enableMapping(MAPPING_NAME); var handToDisable = 'none'; function update() { - if (handToDisable !== LEFT_HAND && handToDisable!=='both') { + if (handToDisable !== LEFT_HAND && handToDisable !== 'both') { leftController.update(); } - if (handToDisable !== RIGHT_HAND && handToDisable!=='both') { + if (handToDisable !== RIGHT_HAND && handToDisable !== 'both') { rightController.update(); } } @@ -1315,7 +1329,7 @@ function update() { Messages.subscribe('Hifi-Hand-Disabler'); handleHandDisablerMessages = function(channel, message, sender) { - + if (sender === MyAvatar.sessionUUID) { if (message === 'left') { handToDisable = LEFT_HAND; @@ -1323,11 +1337,11 @@ handleHandDisablerMessages = function(channel, message, sender) { if (message === 'right') { handToDisable = RIGHT_HAND; } - if(message==='both'){ - handToDisable='both'; + if (message === 'both') { + handToDisable = 'both'; } - if(message==='none'){ - handToDisable='none'; + if (message === 'none') { + handToDisable = 'none'; } } @@ -1342,4 +1356,4 @@ function cleanup() { } Script.scriptEnding.connect(cleanup); -Script.update.connect(update); +Script.update.connect(update); \ No newline at end of file diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index 736920ddd5..54cb16fe15 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -26,7 +26,7 @@ ArcBall = function(spawnPosition) { var containerBall = Entities.addEntity({ - type: "Box", + type: "Sphere", name: "Arc Ball", script: scriptURL, position: Vec3.sum(spawnPosition, { @@ -35,12 +35,12 @@ ArcBall = function(spawnPosition) { z: 0 }), dimensions: { - x: .1, - y: .1, - z: .2 + x: .05, + y: .05, + z: .05 }, color: { - red: 15, + red: 100, green: 10, blue: 150 }, @@ -48,6 +48,13 @@ ArcBall = function(spawnPosition) { collisionsWillMove: true, userData: JSON.stringify({ grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: 0, + z: -0.5 + }, + }, invertSolidWhileHeld: true } }) @@ -127,11 +134,11 @@ ArcBall = function(spawnPosition) { - function cleanup() { - Entities.deleteEntity(arcBall); - Entities.deleteEntity(containerBall); - Entities.deleteEntity(light); - } + function cleanup() { + Entities.deleteEntity(arcBall); + Entities.deleteEntity(containerBall); + Entities.deleteEntity(light); + } this.cleanup = cleanup; } \ No newline at end of file diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index 4ad0d66257..7bb8472ce9 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -25,6 +25,7 @@ entities.forEach(function(entity) { var props = Entities.getEntityProperties(entity, ["position", "name"]); if (props.name === "Arc Ball" && JSON.stringify(_this.entityID) !== JSON.stringify(entity)) { + _this.target = entity; _this.createBeam(position, props.position); } }); @@ -32,21 +33,13 @@ }, createBeam: function(startPosition, endPosition) { - print("CREATE BEAM") - // Creates particle arc from start position to end position + // Creates particle arc from start position to end position var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; var sourceToTargetVec = Vec3.subtract(endPosition, startPosition); var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation); - testBox = Entities.addEntity({ - type: "Box", - dimensions: {x: .1, y: .1, z: 1}, - color: {red: 200, green: 10, blue: 10}, - position: startPosition, - rotation: emitOrientation, - visible: false - }); + var color = { red: 200, green: 10, @@ -57,7 +50,7 @@ name: "Particle Arc", parentID: this.entityID, parentJointIndex: -1, - position: startPosition, + // position: startPosition, isEmitting: true, colorStart: color, color: { @@ -67,7 +60,7 @@ }, colorFinish: color, maxParticles: 100000, - lifespan: 6, + lifespan: 5, emitRate: 1000, emitOrientation: emitOrientation, emitSpeed: .4, @@ -98,18 +91,38 @@ alphaStart: 0.5, alphaFinish: 0.5, textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", - emitterShouldTrail: false + emitterShouldTrail: true } this.particleArc = Entities.addEntity(props); }, - continueNearGrab: function() {}, + updateBeam: function(startPosition) { + var targetPosition = Entities.getEntityProperties(this.target, "position").position; + print("TARGET position " + JSON.stringify(this.target)); + var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; + var sourceToTargetVec = Vec3.subtract(targetPosition, startPosition); + var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); + // emitOrientation = Quat.multiply(emitOrientation,Quat.inverse(rotation)); + Entities.editEntity(this.particleArc, { + emitOrientation: emitOrientation + }); + }, - releaseGrab: function() {}, + continueNearGrab: function() { + var startPosition = Entities.getEntityProperties(this.entityID, "position").position; + this.updateBeam(startPosition); + }, + + releaseGrab: function() { + Entities.editEntity(this.particleArc, { + isEmitting: false + }); + }, unload: function() { - Entities.deleteEntity(this.particleArc); - Entities.deleteEntity(testBox); + if (this.particleArc) { + Entities.deleteEntity(this.particleArc); + } }, preload: function(entityID) { From 45ba7a3d35c12e55207acbee615757f022e655e1 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 10:46:54 -0800 Subject: [PATCH 44/62] merged --- examples/controllers/handControllerGrab.js | 10 --------- .../flowArts/arcBall/arcBallEntityScript.js | 21 ------------------- 2 files changed, 31 deletions(-) diff --git a/examples/controllers/handControllerGrab.js b/examples/controllers/handControllerGrab.js index 6337079dc5..6cacc2e80a 100644 --- a/examples/controllers/handControllerGrab.js +++ b/examples/controllers/handControllerGrab.js @@ -877,24 +877,14 @@ function MyController(hand) { // if an object is "equipped" and has a spatialKey, use it. this.ignoreIK = grabbableData.spatialKey.ignoreIK ? grabbableData.spatialKey.ignoreIK : false; if (grabbableData.spatialKey.relativePosition) { -<<<<<<< HEAD this.offsetPosition = getSpatialOffsetPosition(this.hand, grabbableData.spatialKey); -======= - this.offsetPosition = getSpatialOffsetPosition(this.hand, grabbableData.spatialKey); ->>>>>>> origin/polylineOptimizations } else { this.offsetPosition = Vec3.multiplyQbyV(Quat.inverse(Quat.multiply(handRotation, this.offsetRotation)), offset); } if (grabbableData.spatialKey.relativeRotation) { -<<<<<<< HEAD this.offsetRotation = getSpatialOffsetRotation(this.hand, grabbableData.spatialKey); } else { this.offsetRotation = Quat.multiply(Quat.inverse(handRotation), objectRotation); -======= - this.offsetRotation = getSpatialOffsetRotation(this.hand, grabbableData.spatialKey); - } else { - this.offsetRotation = Quat.multiply(Quat.inverse(handRotation), objectRotation); ->>>>>>> origin/polylineOptimizations } } else { this.ignoreIK = false; diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index 539bdd7cf0..7bb8472ce9 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -33,21 +33,13 @@ }, createBeam: function(startPosition, endPosition) { -<<<<<<< HEAD // Creates particle arc from start position to end position -======= - // Creates particle arc from start position to end position ->>>>>>> origin/polylineOptimizations var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; var sourceToTargetVec = Vec3.subtract(endPosition, startPosition); var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation); -<<<<<<< HEAD -======= - ->>>>>>> origin/polylineOptimizations var color = { red: 200, green: 10, @@ -110,7 +102,6 @@ var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; var sourceToTargetVec = Vec3.subtract(targetPosition, startPosition); var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); -<<<<<<< HEAD // emitOrientation = Quat.multiply(emitOrientation,Quat.inverse(rotation)); Entities.editEntity(this.particleArc, { emitOrientation: emitOrientation @@ -122,18 +113,6 @@ this.updateBeam(startPosition); }, -======= - emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation); - Entities.editEntity(this.particleArc, {emitOrientation: emitOrientation}); - Entities.editEntity(this.testBox, {rotation: emitOrientation}); - }, - - continueNearGrab: function() { - var startPosition = Entities.getEntityProperties(this.entityID, "position").position; - this.updateBeam(startPosition); - }, - ->>>>>>> origin/polylineOptimizations releaseGrab: function() { Entities.editEntity(this.particleArc, { isEmitting: false From 48ab99c34864f5ecd2734900e4d89b29f964288d Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 11:00:10 -0800 Subject: [PATCH 45/62] rotation fix --- examples/flowArts/arcBall/arcBall.js | 8 +- .../flowArts/arcBall/arcBallEntityScript.js | 112 +++++++++--------- 2 files changed, 63 insertions(+), 57 deletions(-) diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index 54cb16fe15..f6860b54c6 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -31,7 +31,7 @@ ArcBall = function(spawnPosition) { script: scriptURL, position: Vec3.sum(spawnPosition, { x: 0, - y: .5, + y: .7, z: 0 }), dimensions: { @@ -51,8 +51,8 @@ ArcBall = function(spawnPosition) { spatialKey: { relativePosition: { x: 0, - y: 0, - z: -0.5 + y: -0.5, + z: 0.0 }, }, invertSolidWhileHeld: true @@ -97,7 +97,7 @@ ArcBall = function(spawnPosition) { }, maxParticles: 100000, lifespan: 2, - emitRate: 1000, + emitRate: 400, emitSpeed: .1, lifetime: -1, speedSpread: 0.0, diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index 7bb8472ce9..7edf22ecdb 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -14,6 +14,15 @@ var _this; var ArcBall = function() { _this = this; + this.colorPalette = [{ + red: 25, + green: 20, + blue: 162 + }, { + red: 200, + green: 10, + blue: 10 + }]; }; ArcBall.prototype = { @@ -40,59 +49,56 @@ emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation); - var color = { - red: 200, - green: 10, - blue: 10 - }; - var props = { - type: "ParticleEffect", - name: "Particle Arc", - parentID: this.entityID, - parentJointIndex: -1, - // position: startPosition, - isEmitting: true, - colorStart: color, - color: { - red: 200, - green: 200, - blue: 255 - }, - colorFinish: color, - maxParticles: 100000, - lifespan: 5, - emitRate: 1000, - emitOrientation: emitOrientation, - emitSpeed: .4, - speedSpread: 0.0, - emitDimensions: { - x: 0, - y: 0, - z: 0 - }, - polarStart: 0, - polarFinish: .0, - azimuthStart: .1, - azimuthFinish: .01, - emitAcceleration: { - x: 0, - y: 0, - z: 0 - }, - accelerationSpread: { - x: .00, - y: .00, - z: .00 - }, - radiusStart: 0.03, - adiusFinish: 0.025, - alpha: 0.7, - alphaSpread: .1, - alphaStart: 0.5, - alphaFinish: 0.5, - textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", - emitterShouldTrail: true - } + var color = this.colorPalette[randInt(0, this.colorPalette.length)]; + var props = { + type: "ParticleEffect", + name: "Particle Arc", + parentID: this.entityID, + parentJointIndex: -1, + // position: startPosition, + isEmitting: true, + colorStart: color, + color: { + red: 200, + green: 200, + blue: 255 + }, + colorFinish: color, + maxParticles: 100000, + lifespan: 2, + emitRate: 500, + emitOrientation: emitOrientation, + emitSpeed: .4, + speedSpread: 0.1, + emitDimensions: { + x: 0, + y: 0, + z: 0 + }, + polarStart: 0, + polarFinish: .0, + azimuthStart: .1, + azimuthFinish: .01, + emitAcceleration: { + x: 0, + y: 0, + z: 0 + }, + accelerationSpread: { + x: .00, + y: .00, + z: .00 + }, + radiusStart: 0.03, + radiusFinish: 0.025, + radiusSpread: .01, + alpha: 0.7, + alphaSpread: .1, + alphaStart: 0.5, + alphaFinish: 0.5, + textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", + emitterShouldTrail: true + } this.particleArc = Entities.addEntity(props); }, From 3c66e3826830a2f9bc84697da5e4d7b61dc77423 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 11:12:59 -0800 Subject: [PATCH 46/62] test --- examples/flowArts/arcBall/arcBall.js | 7 +++--- .../flowArts/arcBall/arcBallEntityScript.js | 22 +++++++++---------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index f6860b54c6..e67dffddff 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -44,6 +44,7 @@ ArcBall = function(spawnPosition) { green: 10, blue: 150 }, + ignoreForCollisions: true, damping: 0.8, collisionsWillMove: true, userData: JSON.stringify({ @@ -51,11 +52,11 @@ ArcBall = function(spawnPosition) { spatialKey: { relativePosition: { x: 0, - y: -0.5, - z: 0.0 + y: 0.0, + z: -0.5 }, }, - invertSolidWhileHeld: true + // invertSolidWhileHeld: true } }) }); diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index 7edf22ecdb..0906b90b53 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -65,15 +65,15 @@ }, colorFinish: color, maxParticles: 100000, - lifespan: 2, - emitRate: 500, + lifespan: 1, + emitRate: 1000, emitOrientation: emitOrientation, - emitSpeed: .4, + emitSpeed: .2, speedSpread: 0.1, emitDimensions: { - x: 0, - y: 0, - z: 0 + x: .1, + y: .1, + z: .1 }, polarStart: 0, polarFinish: .0, @@ -89,13 +89,13 @@ y: .00, z: .00 }, - radiusStart: 0.03, - radiusFinish: 0.025, - radiusSpread: .01, - alpha: 0.7, + radiusStart: 0.01, + radiusFinish: 0.005, + radiusSpread: .005, + alpha: 0.5, alphaSpread: .1, alphaStart: 0.5, - alphaFinish: 0.5, + alphaFinish: 0.0, textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", emitterShouldTrail: true } From ba3633710a9dfb0663f386a8f532fd5bd83e1c5f Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 11:29:59 -0800 Subject: [PATCH 47/62] name fixes --- examples/flowArts/arcBall/arcBall.js | 258 +++++++++--------- examples/flowArts/flowArtsHutSpawner.js | 8 +- .../{LightSaber.js => lightSaber.js} | 0 .../raveStick/{RaveStick.js => raveStick.js} | 0 4 files changed, 130 insertions(+), 136 deletions(-) rename examples/flowArts/lightSaber/{LightSaber.js => lightSaber.js} (100%) rename examples/flowArts/raveStick/{RaveStick.js => raveStick.js} (100%) diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index e67dffddff..0906b90b53 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -1,145 +1,139 @@ -// -// arcBall.js -// examples/arcBall -// +// arcBallEntityScript.js +// +// Script Type: Entity // Created by Eric Levin on 12/17/15. -// Copyright 2014 High Fidelity, Inc. -// -// This script creats a particle light ball which makes particle trails as you move it. -// +// Copyright 2015 High Fidelity, Inc. // +// This entity script handles the logic for the arcBall rave toy // 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/utils.js"); - - -var scriptURL = Script.resolvePath("arcBallEntityScript.js"); -ArcBall = function(spawnPosition) { - - var colorPalette = [{ - red: 25, - green: 20, - blue: 162 - }]; - - - var containerBall = Entities.addEntity({ - type: "Sphere", - name: "Arc Ball", - script: scriptURL, - position: Vec3.sum(spawnPosition, { - x: 0, - y: .7, - z: 0 - }), - dimensions: { - x: .05, - y: .05, - z: .05 - }, - color: { - red: 100, - green: 10, - blue: 150 - }, - ignoreForCollisions: true, - damping: 0.8, - collisionsWillMove: true, - userData: JSON.stringify({ - grabbableKey: { - spatialKey: { - relativePosition: { - x: 0, - y: 0.0, - z: -0.5 - }, - }, - // invertSolidWhileHeld: true - } - }) - }); - - - var light = Entities.addEntity({ - type: 'Light', - name: "ballLight", - parentID: containerBall, - dimensions: { - x: 30, - y: 30, - z: 30 - }, - color: colorPalette[randInt(0, colorPalette.length)], - intensity: 5 - }); - - - var arcBall = Entities.addEntity({ - type: "ParticleEffect", - parentID: containerBall, - isEmitting: true, - name: "Arc Ball Particle Effect", - colorStart: { - red: 200, - green: 20, - blue: 40 - }, - color: { - red: 200, - green: 200, - blue: 255 - }, - colorFinish: { +(function() { + Script.include("../../libraries/utils.js"); + var _this; + var ArcBall = function() { + _this = this; + this.colorPalette = [{ red: 25, green: 20, - blue: 255 + blue: 162 + }, { + red: 200, + green: 10, + blue: 10 + }]; + }; + + ArcBall.prototype = { + isGrabbed: false, + startNearGrab: function() { + //Search for nearby balls and create an arc to it if one is found + var position = Entities.getEntityProperties(this.entityID, "position").position + var entities = Entities.findEntities(position, 10); + entities.forEach(function(entity) { + var props = Entities.getEntityProperties(entity, ["position", "name"]); + if (props.name === "Arc Ball" && JSON.stringify(_this.entityID) !== JSON.stringify(entity)) { + _this.target = entity; + _this.createBeam(position, props.position); + } + }); + }, - maxParticles: 100000, - lifespan: 2, - emitRate: 400, - emitSpeed: .1, - lifetime: -1, - speedSpread: 0.0, - emitDimensions: { - x: 0, - y: 0, - z: 0 - }, - polarStart: 0, - polarFinish: Math.PI, - azimuthStart: -Math.PI, - azimuthFinish: Math.PI, - emitAcceleration: { - x: 0, - y: 0, - z: 0 - }, - accelerationSpread: { - x: .00, - y: .00, - z: .00 - }, - particleRadius: 0.02, - radiusSpread: 0, - radiusStart: 0.03, - radiusFinish: 0.0003, - alpha: 0, - alphaSpread: .5, - alphaStart: 0, - alphaFinish: 0.5, - textures: "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", - emitterShouldTrail: true - }) + + createBeam: function(startPosition, endPosition) { + // Creates particle arc from start position to end position + var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; + var sourceToTargetVec = Vec3.subtract(endPosition, startPosition); + var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); + emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation); + var color = this.colorPalette[randInt(0, this.colorPalette.length)]; + var props = { + type: "ParticleEffect", + name: "Particle Arc", + parentID: this.entityID, + parentJointIndex: -1, + // position: startPosition, + isEmitting: true, + colorStart: color, + color: { + red: 200, + green: 200, + blue: 255 + }, + colorFinish: color, + maxParticles: 100000, + lifespan: 1, + emitRate: 1000, + emitOrientation: emitOrientation, + emitSpeed: .2, + speedSpread: 0.1, + emitDimensions: { + x: .1, + y: .1, + z: .1 + }, + polarStart: 0, + polarFinish: .0, + azimuthStart: .1, + azimuthFinish: .01, + emitAcceleration: { + x: 0, + y: 0, + z: 0 + }, + accelerationSpread: { + x: .00, + y: .00, + z: .00 + }, + radiusStart: 0.01, + radiusFinish: 0.005, + radiusSpread: .005, + alpha: 0.5, + alphaSpread: .1, + alphaStart: 0.5, + alphaFinish: 0.0, + textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", + emitterShouldTrail: true + } + this.particleArc = Entities.addEntity(props); + }, - function cleanup() { - Entities.deleteEntity(arcBall); - Entities.deleteEntity(containerBall); - Entities.deleteEntity(light); - } + updateBeam: function(startPosition) { + var targetPosition = Entities.getEntityProperties(this.target, "position").position; + print("TARGET position " + JSON.stringify(this.target)); + var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; + var sourceToTargetVec = Vec3.subtract(targetPosition, startPosition); + var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); + // emitOrientation = Quat.multiply(emitOrientation,Quat.inverse(rotation)); + Entities.editEntity(this.particleArc, { + emitOrientation: emitOrientation + }); + }, - this.cleanup = cleanup; -} \ No newline at end of file + continueNearGrab: function() { + var startPosition = Entities.getEntityProperties(this.entityID, "position").position; + this.updateBeam(startPosition); + }, + + releaseGrab: function() { + Entities.editEntity(this.particleArc, { + isEmitting: false + }); + }, + + unload: function() { + if (this.particleArc) { + Entities.deleteEntity(this.particleArc); + } + }, + + preload: function(entityID) { + this.entityID = entityID; + }, + }; + return new ArcBall(); +}); \ No newline at end of file diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index 39dcf15698..2c87a27c15 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -14,10 +14,10 @@ Script.include("../../libraries/utils.js"); -Script.include("lightBall/LightBall.js"); -Script.include("raveStick/RaveStick.js"); -Script.include("lightSaber/LightSaber.js"); -Script.include("arcBall/ArcBall.js"); +Script.include("lightBall/lightBall.js"); +Script.include("raveStick/raveStick.js"); +Script.include("lightSaber/lightSaber.js"); +Script.include("arcBall/arcBall.js"); diff --git a/examples/flowArts/lightSaber/LightSaber.js b/examples/flowArts/lightSaber/lightSaber.js similarity index 100% rename from examples/flowArts/lightSaber/LightSaber.js rename to examples/flowArts/lightSaber/lightSaber.js diff --git a/examples/flowArts/raveStick/RaveStick.js b/examples/flowArts/raveStick/raveStick.js similarity index 100% rename from examples/flowArts/raveStick/RaveStick.js rename to examples/flowArts/raveStick/raveStick.js From b89e25f8f7f6fe1138c9521c9b309111f164838d Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 11:35:57 -0800 Subject: [PATCH 48/62] correct file --- examples/flowArts/arcBall/arcBall.js | 256 ++++++++++++++------------- 1 file changed, 131 insertions(+), 125 deletions(-) diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index 0906b90b53..e67dffddff 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -1,139 +1,145 @@ -// arcBallEntityScript.js -// -// Script Type: Entity -// Created by Eric Levin on 12/17/15. -// Copyright 2015 High Fidelity, Inc. // -// This entity script handles the logic for the arcBall rave toy +// arcBall.js +// examples/arcBall +// +// Created by Eric Levin on 12/17/15. +// Copyright 2014 High Fidelity, Inc. +// +// This script creats a particle light ball which makes particle trails as you move it. +// +// // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -(function() { - Script.include("../../libraries/utils.js"); - var _this; - var ArcBall = function() { - _this = this; - this.colorPalette = [{ +Script.include("../../libraries/utils.js"); + + +var scriptURL = Script.resolvePath("arcBallEntityScript.js"); +ArcBall = function(spawnPosition) { + + var colorPalette = [{ + red: 25, + green: 20, + blue: 162 + }]; + + + var containerBall = Entities.addEntity({ + type: "Sphere", + name: "Arc Ball", + script: scriptURL, + position: Vec3.sum(spawnPosition, { + x: 0, + y: .7, + z: 0 + }), + dimensions: { + x: .05, + y: .05, + z: .05 + }, + color: { + red: 100, + green: 10, + blue: 150 + }, + ignoreForCollisions: true, + damping: 0.8, + collisionsWillMove: true, + userData: JSON.stringify({ + grabbableKey: { + spatialKey: { + relativePosition: { + x: 0, + y: 0.0, + z: -0.5 + }, + }, + // invertSolidWhileHeld: true + } + }) + }); + + + var light = Entities.addEntity({ + type: 'Light', + name: "ballLight", + parentID: containerBall, + dimensions: { + x: 30, + y: 30, + z: 30 + }, + color: colorPalette[randInt(0, colorPalette.length)], + intensity: 5 + }); + + + var arcBall = Entities.addEntity({ + type: "ParticleEffect", + parentID: containerBall, + isEmitting: true, + name: "Arc Ball Particle Effect", + colorStart: { + red: 200, + green: 20, + blue: 40 + }, + color: { + red: 200, + green: 200, + blue: 255 + }, + colorFinish: { red: 25, green: 20, - blue: 162 - }, { - red: 200, - green: 10, - blue: 10 - }]; - }; - - ArcBall.prototype = { - isGrabbed: false, - startNearGrab: function() { - //Search for nearby balls and create an arc to it if one is found - var position = Entities.getEntityProperties(this.entityID, "position").position - var entities = Entities.findEntities(position, 10); - entities.forEach(function(entity) { - var props = Entities.getEntityProperties(entity, ["position", "name"]); - if (props.name === "Arc Ball" && JSON.stringify(_this.entityID) !== JSON.stringify(entity)) { - _this.target = entity; - _this.createBeam(position, props.position); - } - }); - + blue: 255 }, - - createBeam: function(startPosition, endPosition) { - // Creates particle arc from start position to end position - var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; - var sourceToTargetVec = Vec3.subtract(endPosition, startPosition); - var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); - emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation); - - - var color = this.colorPalette[randInt(0, this.colorPalette.length)]; - var props = { - type: "ParticleEffect", - name: "Particle Arc", - parentID: this.entityID, - parentJointIndex: -1, - // position: startPosition, - isEmitting: true, - colorStart: color, - color: { - red: 200, - green: 200, - blue: 255 - }, - colorFinish: color, - maxParticles: 100000, - lifespan: 1, - emitRate: 1000, - emitOrientation: emitOrientation, - emitSpeed: .2, - speedSpread: 0.1, - emitDimensions: { - x: .1, - y: .1, - z: .1 - }, - polarStart: 0, - polarFinish: .0, - azimuthStart: .1, - azimuthFinish: .01, - emitAcceleration: { - x: 0, - y: 0, - z: 0 - }, - accelerationSpread: { - x: .00, - y: .00, - z: .00 - }, - radiusStart: 0.01, - radiusFinish: 0.005, - radiusSpread: .005, - alpha: 0.5, - alphaSpread: .1, - alphaStart: 0.5, - alphaFinish: 0.0, - textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", - emitterShouldTrail: true - } - this.particleArc = Entities.addEntity(props); + maxParticles: 100000, + lifespan: 2, + emitRate: 400, + emitSpeed: .1, + lifetime: -1, + speedSpread: 0.0, + emitDimensions: { + x: 0, + y: 0, + z: 0 }, - - updateBeam: function(startPosition) { - var targetPosition = Entities.getEntityProperties(this.target, "position").position; - print("TARGET position " + JSON.stringify(this.target)); - var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; - var sourceToTargetVec = Vec3.subtract(targetPosition, startPosition); - var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); - // emitOrientation = Quat.multiply(emitOrientation,Quat.inverse(rotation)); - Entities.editEntity(this.particleArc, { - emitOrientation: emitOrientation - }); + polarStart: 0, + polarFinish: Math.PI, + azimuthStart: -Math.PI, + azimuthFinish: Math.PI, + emitAcceleration: { + x: 0, + y: 0, + z: 0 }, - - continueNearGrab: function() { - var startPosition = Entities.getEntityProperties(this.entityID, "position").position; - this.updateBeam(startPosition); + accelerationSpread: { + x: .00, + y: .00, + z: .00 }, + particleRadius: 0.02, + radiusSpread: 0, + radiusStart: 0.03, + radiusFinish: 0.0003, + alpha: 0, + alphaSpread: .5, + alphaStart: 0, + alphaFinish: 0.5, + textures: "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", + emitterShouldTrail: true + }) - releaseGrab: function() { - Entities.editEntity(this.particleArc, { - isEmitting: false - }); - }, - unload: function() { - if (this.particleArc) { - Entities.deleteEntity(this.particleArc); - } - }, - preload: function(entityID) { - this.entityID = entityID; - }, - }; - return new ArcBall(); -}); \ No newline at end of file + function cleanup() { + Entities.deleteEntity(arcBall); + Entities.deleteEntity(containerBall); + Entities.deleteEntity(light); + } + + this.cleanup = cleanup; +} \ No newline at end of file From 4b4fe96b64808321652b4ca0e2a8d9ea056d5331 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 12:47:31 -0800 Subject: [PATCH 49/62] tweaks --- examples/flowArts/arcBall/arcBallEntityScript.js | 14 +++++++------- examples/flowArts/lightSaber/lightSaber.js | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index 0906b90b53..84208bf559 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -65,19 +65,19 @@ }, colorFinish: color, maxParticles: 100000, - lifespan: 1, + lifespan: 2, emitRate: 1000, emitOrientation: emitOrientation, - emitSpeed: .2, - speedSpread: 0.1, + emitSpeed: .1, + speedSpread: 0.02, emitDimensions: { - x: .1, - y: .1, - z: .1 + x: .01, + y: .01, + z: .01 }, polarStart: 0, polarFinish: .0, - azimuthStart: .1, + azimuthStart: .02, azimuthFinish: .01, emitAcceleration: { x: 0, diff --git a/examples/flowArts/lightSaber/lightSaber.js b/examples/flowArts/lightSaber/lightSaber.js index 50984110bc..a42f81d196 100644 --- a/examples/flowArts/lightSaber/lightSaber.js +++ b/examples/flowArts/lightSaber/lightSaber.js @@ -23,6 +23,7 @@ LightSaber = function(spawnPosition) { modelURL: modelURL, position: spawnPosition, shapeType: 'box', + collisionsWillMove: true, script: scriptURL, dimensions: { x: 0.06, From 4110630d1f074fdf4c710f804d10d14539424a00 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 13:15:37 -0800 Subject: [PATCH 50/62] fixed ravestick fargrab --- examples/flowArts/raveStick/raveStick.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/flowArts/raveStick/raveStick.js b/examples/flowArts/raveStick/raveStick.js index 3e4cf16136..bcbe44168c 100644 --- a/examples/flowArts/raveStick/raveStick.js +++ b/examples/flowArts/raveStick/raveStick.js @@ -30,7 +30,8 @@ RaveStick = function(spawnPosition) { modelURL: modelURL, position: spawnPosition, shapeType: 'box', - script: scriptURL, + collisionsWillMove: true, + // script: scriptURL, dimensions: { x: 0.06, y: 0.06, From cabc47e7a9914e9e2985e932de6f74310d3bb71f Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 13:30:52 -0800 Subject: [PATCH 51/62] lightsaber immediately turns off on release --- .../flowArts/arcBall/arcBallEntityScript.js | 128 ++++++++++-------- .../lightSaber/lightSaberEntityScript.js | 4 +- 2 files changed, 76 insertions(+), 56 deletions(-) diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index 84208bf559..1952209c95 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -27,7 +27,16 @@ ArcBall.prototype = { isGrabbed: false, - startNearGrab: function() { + startDistanceGrab: function() { + this.searchForNearbyArcBalls(); + + }, + + startFarGrab: function() { + this.searchForNearbyArcBalls(); + }, + + searchForNearbyArcBalls: function() { //Search for nearby balls and create an arc to it if one is found var position = Entities.getEntityProperties(this.entityID, "position").position var entities = Entities.findEntities(position, 10); @@ -36,12 +45,13 @@ if (props.name === "Arc Ball" && JSON.stringify(_this.entityID) !== JSON.stringify(entity)) { _this.target = entity; _this.createBeam(position, props.position); + } }); - }, createBeam: function(startPosition, endPosition) { + // Creates particle arc from start position to end position var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; var sourceToTargetVec = Vec3.subtract(endPosition, startPosition); @@ -50,61 +60,65 @@ var color = this.colorPalette[randInt(0, this.colorPalette.length)]; - var props = { - type: "ParticleEffect", - name: "Particle Arc", - parentID: this.entityID, - parentJointIndex: -1, - // position: startPosition, - isEmitting: true, - colorStart: color, - color: { - red: 200, - green: 200, - blue: 255 - }, - colorFinish: color, - maxParticles: 100000, - lifespan: 2, - emitRate: 1000, - emitOrientation: emitOrientation, - emitSpeed: .1, - speedSpread: 0.02, - emitDimensions: { - x: .01, - y: .01, - z: .01 - }, - polarStart: 0, - polarFinish: .0, - azimuthStart: .02, - azimuthFinish: .01, - emitAcceleration: { - x: 0, - y: 0, - z: 0 - }, - accelerationSpread: { - x: .00, - y: .00, - z: .00 - }, - radiusStart: 0.01, - radiusFinish: 0.005, - radiusSpread: .005, - alpha: 0.5, - alphaSpread: .1, - alphaStart: 0.5, - alphaFinish: 0.0, - textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", - emitterShouldTrail: true - } + var props = { + type: "ParticleEffect", + name: "Particle Arc", + parentID: this.entityID, + parentJointIndex: -1, + // position: startPosition, + isEmitting: true, + colorStart: color, + color: { + red: 200, + green: 200, + blue: 255 + }, + colorFinish: color, + maxParticles: 100000, + lifespan: 2, + emitRate: 1000, + emitOrientation: emitOrientation, + emitSpeed: .1, + speedSpread: 0.02, + emitDimensions: { + x: .01, + y: .01, + z: .01 + }, + polarStart: 0, + polarFinish: .0, + azimuthStart: .02, + azimuthFinish: .01, + emitAcceleration: { + x: 0, + y: 0, + z: 0 + }, + accelerationSpread: { + x: .00, + y: .00, + z: .00 + }, + radiusStart: 0.01, + radiusFinish: 0.005, + radiusSpread: .005, + alpha: 0.5, + alphaSpread: .1, + alphaStart: 0.5, + alphaFinish: 0.0, + textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", + emitterShouldTrail: true + } this.particleArc = Entities.addEntity(props); }, - updateBeam: function(startPosition) { + updateBeam: function() { + if(!this.target) { + return; + } + var startPosition = Entities.getEntityProperties(this.entityID, "position").position; + var targetPosition = Entities.getEntityProperties(this.target, "position").position; - print("TARGET position " + JSON.stringify(this.target)); var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; var sourceToTargetVec = Vec3.subtract(targetPosition, startPosition); var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); @@ -115,14 +129,18 @@ }, continueNearGrab: function() { - var startPosition = Entities.getEntityProperties(this.entityID, "position").position; - this.updateBeam(startPosition); + this.updateBeam(); + }, + + continueDistanceGrab: function() { + this.updateBeam(); }, releaseGrab: function() { Entities.editEntity(this.particleArc, { isEmitting: false }); + this.target = null; }, unload: function() { diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js index 794e241924..cbbcd8a0bf 100644 --- a/examples/flowArts/lightSaber/lightSaberEntityScript.js +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -31,12 +31,14 @@ startNearGrab: function() { Entities.editEntity(this.beam, { - isEmitting: true + isEmitting: true, + visible: true }); }, releaseGrab: function() { Entities.editEntity(this.beam, { + visible: false, isEmitting: false }); }, From 876d8ab6b25a427ae16acbe459ea3e4f01b05348 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 13:59:00 -0800 Subject: [PATCH 52/62] far grabbing arc balls --- examples/flowArts/arcBall/arcBall.js | 12 ++++++------ examples/flowArts/arcBall/arcBallEntityScript.js | 16 ++++++---------- .../lightSaber/lightSaberEntityScript.js | 1 - 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index e67dffddff..5a6b1b47f3 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -15,7 +15,7 @@ Script.include("../../libraries/utils.js"); -var scriptURL = Script.resolvePath("arcBallEntityScript.js"); +var scriptURL = Script.resolvePath("arcBallEntityScript.js?v1" + Math.random()); ArcBall = function(spawnPosition) { var colorPalette = [{ @@ -50,11 +50,11 @@ ArcBall = function(spawnPosition) { userData: JSON.stringify({ grabbableKey: { spatialKey: { - relativePosition: { - x: 0, - y: 0.0, - z: -0.5 - }, + // relativePosition: { + // x: 0, + // y: -0.5, + // z: 0.0 + // }, }, // invertSolidWhileHeld: true } diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index 1952209c95..102ceca40c 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -27,12 +27,11 @@ ArcBall.prototype = { isGrabbed: false, - startDistanceGrab: function() { + startDistantGrab: function() { this.searchForNearbyArcBalls(); - }, - startFarGrab: function() { + startNearGrab: function() { this.searchForNearbyArcBalls(); }, @@ -58,7 +57,6 @@ var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); emitOrientation = Quat.multiply(Quat.inverse(rotation), emitOrientation); - var color = this.colorPalette[randInt(0, this.colorPalette.length)]; var props = { type: "ParticleEffect", @@ -75,10 +73,10 @@ }, colorFinish: color, maxParticles: 100000, - lifespan: 2, + lifespan: 1, emitRate: 1000, emitOrientation: emitOrientation, - emitSpeed: .1, + emitSpeed: 1, speedSpread: 0.02, emitDimensions: { x: .01, @@ -105,7 +103,7 @@ alpha: 0.5, alphaSpread: .1, alphaStart: 0.5, - alphaFinish: 0.0, + alphaFinish: 0.5, textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", emitterShouldTrail: true } @@ -117,12 +115,10 @@ return; } var startPosition = Entities.getEntityProperties(this.entityID, "position").position; - var targetPosition = Entities.getEntityProperties(this.target, "position").position; var rotation = Entities.getEntityProperties(this.entityID, "rotation").rotation; var sourceToTargetVec = Vec3.subtract(targetPosition, startPosition); var emitOrientation = Quat.rotationBetween(Vec3.UNIT_Z, sourceToTargetVec); - // emitOrientation = Quat.multiply(emitOrientation,Quat.inverse(rotation)); Entities.editEntity(this.particleArc, { emitOrientation: emitOrientation }); @@ -132,7 +128,7 @@ this.updateBeam(); }, - continueDistanceGrab: function() { + continueDistantGrab: function() { this.updateBeam(); }, diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js index cbbcd8a0bf..fd55916cc6 100644 --- a/examples/flowArts/lightSaber/lightSaberEntityScript.js +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -54,7 +54,6 @@ createBeam: function() { - this.props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); var forwardVec = Quat.getFront(Quat.multiply(this.props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); // forwardVec = Vec3.normalize(forwardVec); From f19d1a3067ccf7e586c17ac59d8e45092db1a907 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 15:20:36 -0800 Subject: [PATCH 53/62] cleanup --- .../flowArts/arcBall/arcBallEntityScript.js | 18 ++++++++++-------- examples/flowArts/flowArtsHutSpawner.js | 2 +- examples/flowArts/lightSaber/lightSaber.js | 2 +- .../lightSaber/lightSaberEntityScript.js | 10 +++++----- examples/flowArts/raveStick/raveStick.js | 14 +++++++------- .../raveStick/raveStickEntityScript.js | 2 -- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/examples/flowArts/arcBall/arcBallEntityScript.js b/examples/flowArts/arcBall/arcBallEntityScript.js index 102ceca40c..987ddc7a31 100644 --- a/examples/flowArts/arcBall/arcBallEntityScript.js +++ b/examples/flowArts/arcBall/arcBallEntityScript.js @@ -23,6 +23,8 @@ green: 10, blue: 10 }]; + + this.searchRadius = 10; }; ArcBall.prototype = { @@ -38,7 +40,7 @@ searchForNearbyArcBalls: function() { //Search for nearby balls and create an arc to it if one is found var position = Entities.getEntityProperties(this.entityID, "position").position - var entities = Entities.findEntities(position, 10); + var entities = Entities.findEntities(position, this.searchRadius); entities.forEach(function(entity) { var props = Entities.getEntityProperties(entity, ["position", "name"]); if (props.name === "Arc Ball" && JSON.stringify(_this.entityID) !== JSON.stringify(entity)) { @@ -84,8 +86,8 @@ z: .01 }, polarStart: 0, - polarFinish: .0, - azimuthStart: .02, + polarFinish: 0, + azimuthStart: 0.02, azimuthFinish: .01, emitAcceleration: { x: 0, @@ -93,15 +95,15 @@ z: 0 }, accelerationSpread: { - x: .00, - y: .00, - z: .00 + x: 0, + y: 0, + z: 0 }, radiusStart: 0.01, radiusFinish: 0.005, - radiusSpread: .005, + radiusSpread: 0.005, alpha: 0.5, - alphaSpread: .1, + alphaSpread: 0.1, alphaStart: 0.5, alphaFinish: 0.5, textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index 2c87a27c15..59f4e70858 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -33,7 +33,7 @@ var raveStick = new RaveStick(Vec3.sum(basePosition, {x: 1, y: 0.5, z: 1})); var lightSaber = new LightSaber(Vec3.sum(basePosition, {x: 3, y: 0.5, z: 1})); -var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/rave/RaveRoom.fbx"; +var modelURL = "https://s3-us-west-1.amazonaws.com/hifi-content/eric/models/RaveRoom.fbx"; var roomDimensions = {x: 30.58, y: 15.29, z: 30.58}; diff --git a/examples/flowArts/lightSaber/lightSaber.js b/examples/flowArts/lightSaber/lightSaber.js index a42f81d196..f582798546 100644 --- a/examples/flowArts/lightSaber/lightSaber.js +++ b/examples/flowArts/lightSaber/lightSaber.js @@ -13,7 +13,7 @@ // Script.include("../../libraries/utils.js"); -var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/rave/lightSaber.fbx"; +var modelURL = "https://s3-us-west-1.amazonaws.com/hifi-content/eric/models/lightSaber.fbx"; var scriptURL = Script.resolvePath("lightSaberEntityScript.js"); LightSaber = function(spawnPosition) { diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js index fd55916cc6..fd53eb4c87 100644 --- a/examples/flowArts/lightSaber/lightSaberEntityScript.js +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -80,7 +80,7 @@ lifespan: 2, emitRate: 1000, emitOrientation: forwardQuat, - emitSpeed: .4, + emitSpeed: 0.7, speedSpread: 0.0, emitDimensions: { x: 0, @@ -88,9 +88,9 @@ z: 0 }, polarStart: 0, - polarFinish: .0, - azimuthStart: .1, - azimuthFinish: .01, + polarFinish: 0, + azimuthStart: 0.1, + azimuthFinish: 0.01, emitAcceleration: { x: 0, y: 0, @@ -104,7 +104,7 @@ radiusStart: 0.03, adiusFinish: 0.025, alpha: 0.7, - alphaSpread: .1, + alphaSpread: 0.1, alphaStart: 0.5, alphaFinish: 0.5, textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", diff --git a/examples/flowArts/raveStick/raveStick.js b/examples/flowArts/raveStick/raveStick.js index bcbe44168c..79c281de47 100644 --- a/examples/flowArts/raveStick/raveStick.js +++ b/examples/flowArts/raveStick/raveStick.js @@ -12,7 +12,7 @@ // Script.include("../../libraries/utils.js"); -var modelURL = "https://s3.amazonaws.com/hifi-public/eric/models/rave/raveStick.fbx"; +var modelURL = "https://s3-us-west-1.amazonaws.com/hifi-content/eric/models/raveStick.fbx"; var scriptURL = Script.resolvePath("raveStickEntityScript.js"); RaveStick = function(spawnPosition) { var colorPalette = [{ @@ -31,7 +31,7 @@ RaveStick = function(spawnPosition) { position: spawnPosition, shapeType: 'box', collisionsWillMove: true, - // script: scriptURL, + script: scriptURL, dimensions: { x: 0.06, y: 0.06, @@ -99,12 +99,12 @@ RaveStick = function(spawnPosition) { lifespan: 1, emitRate: 1000, emitOrientation: forwardQuat, - emitSpeed: .2, + emitSpeed: 0.2, speedSpread: 0.0, polarStart: 0, - polarFinish: .0, + polarFinish: 0.0, azimuthStart: .1, - azimuthFinish: .01, + azimuthFinish: 0.01, emitAcceleration: { x: 0, y: 0, @@ -118,10 +118,10 @@ RaveStick = function(spawnPosition) { radiusStart: 0.03, radiusFinish: 0.025, alpha: 0.7, - alphaSpread: .1, + alphaSpread: 0.1, alphaStart: 0.5, alphaFinish: 0.5, - textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", + textures: "https://s3-us-west-1.amazonaws.com/hifi-content/eric/textures/beamParticle.png", emitterShouldTrail: false, } var beam = Entities.addEntity(props); diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index 2e174c78f0..2fc51f6821 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -74,8 +74,6 @@ forwardVec = Vec3.normalize(forwardVec); var forwardQuat = orientationOf(forwardVec); var position = Vec3.sum(props.position, Vec3.multiply(Quat.getFront(props.rotation), 0.2)); - // position.z += 0.1; - // position.x += -0.035; var localPoint = Vec3.subtract(position, this.trailBasePosition); if (this.points.length >= 1 && Vec3.distance(localPoint, this.points[this.points.length - 1]) < MIN_POINT_DISTANCE) { //Need a minimum distance to avoid binormal NANs From 8d80c06f02eedad5c5d7a9395152a87d902d3739 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 18:26:28 -0800 Subject: [PATCH 54/62] updated ravestick model --- examples/flowArts/raveStick/raveStick.js | 50 +------------------ .../raveStick/raveStickEntityScript.js | 5 +- 2 files changed, 5 insertions(+), 50 deletions(-) diff --git a/examples/flowArts/raveStick/raveStick.js b/examples/flowArts/raveStick/raveStick.js index 79c281de47..1e49c525f2 100644 --- a/examples/flowArts/raveStick/raveStick.js +++ b/examples/flowArts/raveStick/raveStick.js @@ -77,61 +77,13 @@ RaveStick = function(spawnPosition) { green: 200, blue: 40 }; - var props = { - type: "ParticleEffect", - position: position, - parentID: stick, - isEmitting: true, - name: "raveBeam", - colorStart: color, - colorSpread: { - red: 200, - green: 10, - blue: 10 - }, - color: { - red: 200, - green: 200, - blue: 255 - }, - colorFinish: color, - maxParticles: 100000, - lifespan: 1, - emitRate: 1000, - emitOrientation: forwardQuat, - emitSpeed: 0.2, - speedSpread: 0.0, - polarStart: 0, - polarFinish: 0.0, - azimuthStart: .1, - azimuthFinish: 0.01, - emitAcceleration: { - x: 0, - y: 0, - z: 0 - }, - accelerationSpread: { - x: .00, - y: .00, - z: .00 - }, - radiusStart: 0.03, - radiusFinish: 0.025, - alpha: 0.7, - alphaSpread: 0.1, - alphaStart: 0.5, - alphaFinish: 0.5, - textures: "https://s3-us-west-1.amazonaws.com/hifi-content/eric/textures/beamParticle.png", - emitterShouldTrail: false, - } - var beam = Entities.addEntity(props); + function cleanup() { Entities.deleteEntity(stick); Entities.deleteEntity(light); - Entities.deleteEntity(beam); } this.cleanup = cleanup; diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index 2fc51f6821..5a37a9b313 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -73,7 +73,7 @@ var forwardVec = Quat.getFront(Quat.multiply(props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); forwardVec = Vec3.normalize(forwardVec); var forwardQuat = orientationOf(forwardVec); - var position = Vec3.sum(props.position, Vec3.multiply(Quat.getFront(props.rotation), 0.2)); + var position = Vec3.sum(props.position, Vec3.multiply(Quat.getFront(props.rotation), 0.04)); var localPoint = Vec3.subtract(position, this.trailBasePosition); if (this.points.length >= 1 && Vec3.distance(localPoint, this.points[this.points.length - 1]) < MIN_POINT_DISTANCE) { //Need a minimum distance to avoid binormal NANs @@ -114,6 +114,9 @@ }, releaseGrab: function() { + if(!this.trailEraseInterval) { + return; + } Script.setTimeout(function() { Script.clearInterval(_this.trailEraseInterval); _this.trailEraseInterval = null; From ba993eccd4686e5c60b8e636dd3e7b378ee232a7 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 18:32:07 -0800 Subject: [PATCH 55/62] cleanup --- examples/flowArts/lightSaber/lightSaberEntityScript.js | 2 -- examples/flowArts/raveStick/raveStickEntityScript.js | 2 -- 2 files changed, 4 deletions(-) diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js index fd53eb4c87..fc67015ffb 100644 --- a/examples/flowArts/lightSaber/lightSaberEntityScript.js +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -56,8 +56,6 @@ this.props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); var forwardVec = Quat.getFront(Quat.multiply(this.props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); - // forwardVec = Vec3.normalize(forwardVec); - // var forwardQuat = orientationOf(forwardVec); var forwardQuat = Quat.rotationBetween(Vec3.UNIT_Z, forwardVec); var position = Vec3.sum(this.props.position, Vec3.multiply(Quat.getFront(this.props.rotation), 0.1)); position.z += 0.1; diff --git a/examples/flowArts/raveStick/raveStickEntityScript.js b/examples/flowArts/raveStick/raveStickEntityScript.js index 5a37a9b313..3f571817d2 100644 --- a/examples/flowArts/raveStick/raveStickEntityScript.js +++ b/examples/flowArts/raveStick/raveStickEntityScript.js @@ -12,7 +12,6 @@ (function() { Script.include("../../libraries/utils.js"); var _this; - // this is the "constructor" for the entity as a JS object we don't do much here var LIFETIME = 6000; var DRAWING_DEPTH = 0.8; var LINE_DIMENSIONS = 100; @@ -48,7 +47,6 @@ lifetime: LIFETIME }); - this.points = []; this.normals = []; this.strokeWidths = []; From 1031489ada2b4053f388823f923d531c0de65e25 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 21 Dec 2015 19:08:34 -0800 Subject: [PATCH 56/62] changed dates --- examples/flowArts/arcBall/arcBall.js | 2 +- examples/flowArts/flowArtsHutSpawner.js | 2 +- examples/flowArts/lightSaber/lightSaber.js | 2 +- examples/flowArts/lightTrails.js | 2 +- examples/flowArts/raveStick/raveStick.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/flowArts/arcBall/arcBall.js b/examples/flowArts/arcBall/arcBall.js index 5a6b1b47f3..12ef2df48a 100644 --- a/examples/flowArts/arcBall/arcBall.js +++ b/examples/flowArts/arcBall/arcBall.js @@ -3,7 +3,7 @@ // examples/arcBall // // Created by Eric Levin on 12/17/15. -// Copyright 2014 High Fidelity, Inc. +// Copyright 2015 High Fidelity, Inc. // // This script creats a particle light ball which makes particle trails as you move it. // diff --git a/examples/flowArts/flowArtsHutSpawner.js b/examples/flowArts/flowArtsHutSpawner.js index 59f4e70858..faa07c186d 100644 --- a/examples/flowArts/flowArtsHutSpawner.js +++ b/examples/flowArts/flowArtsHutSpawner.js @@ -3,7 +3,7 @@ // examples/flowArts // // Created by Eric Levin on 12/17/15. -// Copyright 2014 High Fidelity, Inc. +// Copyright 2015 High Fidelity, Inc. // // This script creates a special flow arts hut with a bunch of flow art toys people can go in and play with // diff --git a/examples/flowArts/lightSaber/lightSaber.js b/examples/flowArts/lightSaber/lightSaber.js index f582798546..3af5b65d16 100644 --- a/examples/flowArts/lightSaber/lightSaber.js +++ b/examples/flowArts/lightSaber/lightSaber.js @@ -3,7 +3,7 @@ // examples // // Created by Eric Levin on 12/17/15. -// Copyright 2014 High Fidelity, Inc. +// Copyright 2015 High Fidelity, Inc. // // This script creates a lightsaber which activates on grab // diff --git a/examples/flowArts/lightTrails.js b/examples/flowArts/lightTrails.js index 522ecce851..bb936d55c2 100644 --- a/examples/flowArts/lightTrails.js +++ b/examples/flowArts/lightTrails.js @@ -3,7 +3,7 @@ // examples // // Created by Eric Levin on 5/14/15. -// Copyright 2014 High Fidelity, Inc. +// Copyright 2015 High Fidelity, Inc. // // This script creates light trails as you move your hydra hands // diff --git a/examples/flowArts/raveStick/raveStick.js b/examples/flowArts/raveStick/raveStick.js index 1e49c525f2..c51e8b5d89 100644 --- a/examples/flowArts/raveStick/raveStick.js +++ b/examples/flowArts/raveStick/raveStick.js @@ -3,7 +3,7 @@ // examples/flowArats/raveStick // // Created by Eric Levin on 12/17/15. -// Copyright 2014 High Fidelity, Inc. +// Copyright 2015 High Fidelity, Inc. // // This script creates a rave stick which makes pretty light trails as you paint // From 653e3ecdcc0cec85d61cf22b26ac7f6d1efc7780 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Tue, 22 Dec 2015 11:02:36 -0800 Subject: [PATCH 57/62] fixed offset issue with lightsaber --- examples/flowArts/lightSaber/lightSaberEntityScript.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/flowArts/lightSaber/lightSaberEntityScript.js b/examples/flowArts/lightSaber/lightSaberEntityScript.js index fc67015ffb..a86f471449 100644 --- a/examples/flowArts/lightSaber/lightSaberEntityScript.js +++ b/examples/flowArts/lightSaber/lightSaberEntityScript.js @@ -57,9 +57,8 @@ this.props = Entities.getEntityProperties(this.entityID, ["position", "rotation"]); var forwardVec = Quat.getFront(Quat.multiply(this.props.rotation, Quat.fromPitchYawRollDegrees(-90, 0, 0))); var forwardQuat = Quat.rotationBetween(Vec3.UNIT_Z, forwardVec); - var position = Vec3.sum(this.props.position, Vec3.multiply(Quat.getFront(this.props.rotation), 0.1)); - position.z += 0.1; - position.x += -0.035; + var position = this.props.position; + var color = this.colorPalette[randInt(0, this.colorPalette.length)]; var props = { type: "ParticleEffect", @@ -114,4 +113,4 @@ }; // entity scripts always need to return a newly constructed object of our type return new LightSaber(); -}); \ No newline at end of file +}); From e8803ad9aecd6c66620ecd1de1436887f870988d Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Tue, 22 Dec 2015 11:35:04 -0800 Subject: [PATCH 58/62] Lightsaber looks way better now --- examples/flowArts/lightSaber/lightSaber.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/flowArts/lightSaber/lightSaber.js b/examples/flowArts/lightSaber/lightSaber.js index 3af5b65d16..c4ab49e8e6 100644 --- a/examples/flowArts/lightSaber/lightSaber.js +++ b/examples/flowArts/lightSaber/lightSaber.js @@ -38,7 +38,7 @@ LightSaber = function(spawnPosition) { y: 0, z: -0.1 }, - relativeRotation: Quat.fromPitchYawRollDegrees(90, 90, 0) + relativeRotation: Quat.fromPitchYawRollDegrees(180, 90, 0) }, invertSolidWhileHeld: true } @@ -64,4 +64,4 @@ LightSaber = function(spawnPosition) { } this.cleanup = cleanup; -} \ No newline at end of file +} From 6fc98bd5773d7aa93c9b29692665e59a9c577a36 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 22 Dec 2015 12:03:03 -0800 Subject: [PATCH 59/62] fixed ravestick, merged --- libraries/entities-renderer/src/paintStroke.slf | 2 ++ libraries/entities-renderer/src/paintStroke.slv | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/libraries/entities-renderer/src/paintStroke.slf b/libraries/entities-renderer/src/paintStroke.slf index f6beca811b..fc659d5928 100644 --- a/libraries/entities-renderer/src/paintStroke.slf +++ b/libraries/entities-renderer/src/paintStroke.slf @@ -21,6 +21,7 @@ uniform sampler2D originalTexture; // the interpolated normal in vec3 interpolatedNormal; in vec2 varTexcoord; +in vec4 varColor; struct PolyLineUniforms { vec3 color; @@ -35,6 +36,7 @@ void main(void) { vec4 texel = texture(originalTexture, varTexcoord); int frontCondition = 1 -int(gl_FrontFacing) * 2; + vec3 color = varColor.rgb; packDeferredFragmentTranslucent( interpolatedNormal * frontCondition, texel.a, diff --git a/libraries/entities-renderer/src/paintStroke.slv b/libraries/entities-renderer/src/paintStroke.slv index 43eac49e3d..769b87f2a9 100644 --- a/libraries/entities-renderer/src/paintStroke.slv +++ b/libraries/entities-renderer/src/paintStroke.slv @@ -23,9 +23,13 @@ out vec3 interpolatedNormal; //the diffuse texture out vec2 varTexcoord; +out vec4 varColor; + void main(void) { varTexcoord = inTexCoord0.st; + + // pass along the diffuse color varColor = colorToLinearRGBA(inColor); From 51630734dfac1a9c992df67e6d83b9a2cde42a1e Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Tue, 22 Dec 2015 12:07:02 -0800 Subject: [PATCH 60/62] Update masterReset.js add initial zeroes --- unpublishedScripts/masterReset.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/unpublishedScripts/masterReset.js b/unpublishedScripts/masterReset.js index 3d0773ca10..9afbd0a68b 100644 --- a/unpublishedScripts/masterReset.js +++ b/unpublishedScripts/masterReset.js @@ -218,26 +218,26 @@ MasterReset = function() { lifespan: 1, emitRate: 1000, emitOrientation: forwardQuat, - emitSpeed: .2, + emitSpeed: 0.2, speedSpread: 0.0, polarStart: 0, - polarFinish: .0, - azimuthStart: .1, - azimuthFinish: .01, + polarFinish: 0.0, + azimuthStart: 0.1, + azimuthFinish: 0.01, emitAcceleration: { x: 0, y: 0, z: 0 }, accelerationSpread: { - x: .00, - y: .00, - z: .00 + x: 0.00, + y: 0.00, + z: 0.00 }, radiusStart: 0.03, radiusFinish: 0.025, alpha: 0.7, - alphaSpread: .1, + alphaSpread: 0.1, alphaStart: 0.5, alphaFinish: 0.5, textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", @@ -1488,4 +1488,4 @@ MasterReset = function() { Script.scriptEnding.connect(cleanup); } -}; \ No newline at end of file +}; From 5e0a428dec71bc493736587b73784a1f6abae0d7 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Tue, 22 Dec 2015 12:07:57 -0800 Subject: [PATCH 61/62] Update hiddenEntityReset.js add zeroes --- unpublishedScripts/hiddenEntityReset.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/unpublishedScripts/hiddenEntityReset.js b/unpublishedScripts/hiddenEntityReset.js index 21971a18ad..94d815796b 100644 --- a/unpublishedScripts/hiddenEntityReset.js +++ b/unpublishedScripts/hiddenEntityReset.js @@ -239,26 +239,26 @@ lifespan: 1, emitRate: 1000, emitOrientation: forwardQuat, - emitSpeed: .2, + emitSpeed: 0.2, speedSpread: 0.0, polarStart: 0, - polarFinish: .0, - azimuthStart: .1, - azimuthFinish: .01, + polarFinish: 0.0, + azimuthStart: 0.1, + azimuthFinish: 0.01, emitAcceleration: { x: 0, y: 0, z: 0 }, accelerationSpread: { - x: .00, - y: .00, - z: .00 + x: 0.00, + y: 0.00, + z: 0.00 }, radiusStart: 0.03, radiusFinish: 0.025, alpha: 0.7, - alphaSpread: .1, + alphaSpread:0.1, alphaStart: 0.5, alphaFinish: 0.5, textures: "https://s3.amazonaws.com/hifi-public/eric/textures/particleSprites/beamParticle.png", @@ -1512,4 +1512,4 @@ }; // entity scripts always need to return a newly constructed object of our type return new ResetSwitch(); -}); \ No newline at end of file +}); From 52e6b849684f2f1766687c534061570faa63d364 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Tue, 22 Dec 2015 12:09:16 -0800 Subject: [PATCH 62/62] Update lightBall.js zeroes --- examples/flowArts/lightBall/lightBall.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/flowArts/lightBall/lightBall.js b/examples/flowArts/lightBall/lightBall.js index df62b1b786..b2ed00f326 100644 --- a/examples/flowArts/lightBall/lightBall.js +++ b/examples/flowArts/lightBall/lightBall.js @@ -28,13 +28,13 @@ LightBall = function(spawnPosition) { name: "containerBall", position: Vec3.sum(spawnPosition, { x: 0, - y: .5, + y: 0.5, z: 0 }), dimensions: { - x: .1, - y: .1, - z: .1 + x: 0.1, + y: 0.1, + z: 0.1 }, color: { red: 15, @@ -52,7 +52,7 @@ LightBall = function(spawnPosition) { spatialKey: { relativePosition: { x: 0, - y: .1, + y: 0.1, z: 0 } }, @@ -99,7 +99,7 @@ LightBall = function(spawnPosition) { maxParticles: 100000, lifespan: 2, emitRate: 10000, - emitSpeed: .1, + emitSpeed: 0.1, lifetime: -1, speedSpread: 0.0, emitDimensions: { @@ -117,16 +117,16 @@ LightBall = function(spawnPosition) { z: 0 }, accelerationSpread: { - x: .00, - y: .00, - z: .00 + x: 0.00, + y: 0.00, + z: 0.00 }, particleRadius: 0.02, radiusSpread: 0, radiusStart: 0.03, radiusFinish: 0.0003, alpha: 0, - alphaSpread: .5, + alphaSpread: 0.5, alphaStart: 0, alphaFinish: 0.5, textures: "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", @@ -142,4 +142,4 @@ LightBall = function(spawnPosition) { } this.cleanup = cleanup; -} \ No newline at end of file +}