From 5d19de76ab1eafd2ddb7fee989ad47f3f8e13504 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Thu, 7 Jan 2016 16:15:24 -0800 Subject: [PATCH] Added avatarAttachmentTest.js script --- examples/tests/avatarAttachmentTest.js | 148 +++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 examples/tests/avatarAttachmentTest.js diff --git a/examples/tests/avatarAttachmentTest.js b/examples/tests/avatarAttachmentTest.js new file mode 100644 index 0000000000..23b94ba8d5 --- /dev/null +++ b/examples/tests/avatarAttachmentTest.js @@ -0,0 +1,148 @@ +// +// avatarAttachmentTest.js +// examples/tests +// +// Created by Anthony Thibault on January 7, 2016 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +// Test for MyAvatar attachment API +// MyAvatar.setAttachmentData(); +// MyAvatar.getAttachmentData(); + +// Toggle button helper +function ToggleButtonBuddy(x, y, width, height, urls) { + this.up = Overlays.addOverlay("image", { + x: x, y: y, width: width, height: height, + subImage: { x: 0, y: height, width: width, height: height}, + imageURL: urls.up, + visible: true, + alpha: 1.0 + }); + this.down = Overlays.addOverlay("image", { + x: x, y: y, width: width, height: height, + subImage: { x: 0, y: height, width: width, height: height}, + imageURL: urls.down, + visible: false, + alpha: 1.0 + }); + this.callbacks = []; + + var self = this; + Controller.mousePressEvent.connect(function (event) { + var clickedOverlay = Overlays.getOverlayAtPoint({x: event.x, y: event.y}); + if (clickedOverlay === self.up) { + // flip visiblity + Overlays.editOverlay(self.up, {visible: false}); + Overlays.editOverlay(self.down, {visible: true}); + self.onToggle(true); + } else if (clickedOverlay === self.down) { + // flip visiblity + Overlays.editOverlay(self.up, {visible: true}); + Overlays.editOverlay(self.down, {visible: false}); + self.onToggle(false); + } + }); +} +ToggleButtonBuddy.prototype.destroy = function () { + Overlays.deleteOverlay(this.up); + Overlays.deleteOverlay(this.down); +}; +ToggleButtonBuddy.prototype.addToggleHandler = function (callback) { + this.callbacks.push(callback); + return callback; +}; +ToggleButtonBuddy.prototype.removeToggleHandler = function (callback) { + var index = this.callbacks.indexOf(callback); + if (index != -1) { + this.callbacks.splice(index, 1); + } +}; +ToggleButtonBuddy.prototype.onToggle = function (isDown) { + var i, l = this.callbacks.length; + for (i = 0; i < l; i++) { + this.callbacks[i](isDown); + } +}; + +var windowDimensions = Controller.getViewportDimensions(); +var BUTTON_WIDTH = 64; +var BUTTON_HEIGHT = 64; +var BUTTON_PADDING = 10; +var buttonPositionX = windowDimensions.x - BUTTON_PADDING - BUTTON_WIDTH; +var buttonPositionY = (windowDimensions.y - BUTTON_HEIGHT) / 2 - (BUTTON_HEIGHT + BUTTON_PADDING); + +var hatButton = new ToggleButtonBuddy(buttonPositionX, buttonPositionY, BUTTON_WIDTH, BUTTON_HEIGHT, { + up: "https://s3.amazonaws.com/hifi-public/tony/icons/hat-up.svg", + down: "https://s3.amazonaws.com/hifi-public/tony/icons/hat-down.svg" +}); + +buttonPositionY += BUTTON_HEIGHT + BUTTON_PADDING; +var coatButton = new ToggleButtonBuddy(buttonPositionX, buttonPositionY, BUTTON_WIDTH, BUTTON_HEIGHT, { + up: "https://s3.amazonaws.com/hifi-public/tony/icons/coat-up.svg", + down: "https://s3.amazonaws.com/hifi-public/tony/icons/coat-down.svg" +}); + +var HAT_ATTACHMENT = { + modelURL: "https://s3.amazonaws.com/hifi-public/tony/cowboy-hat.fbx", + jointName: "Head", + translation: {"x": 0, "y": 0.2, "z": 0}, + rotation: {"x": 0, "y": 0, "z": 0, "w": 1}, + scale: 1, + isSoft: false +}; + +var COAT_ATTACHMENT = { + modelURL: "https://hifi-content.s3.amazonaws.com/ozan/dev/clothes/coat/coat_rig.fbx", + jointName: "Hips", + translation: {"x": 0, "y": 0, "z": 0}, + rotation: {"x": 0, "y": 0, "z": 0, "w": 1}, + scale: 1, + isSoft: true +}; + +hatButton.addToggleHandler(function (isDown) { + if (isDown) { + wearAttachment(HAT_ATTACHMENT); + } else { + removeAttachment(HAT_ATTACHMENT); + } +}); + +coatButton.addToggleHandler(function (isDown) { + if (isDown) { + wearAttachment(COAT_ATTACHMENT); + } else { + removeAttachment(COAT_ATTACHMENT); + } +}); + + +function wearAttachment(attachment) { + MyAvatar.attach(attachment.modelURL, + attachment.jointName, + attachment.translation, + attachment.rotation, + attachment.scale, + attachment.isSoft); +} + +function removeAttachment(attachment) { + var attachments = MyAvatar.attachmentData; + var i, l = attachments.length; + for (i = 0; i < l; i++) { + if (attachments[i].modelURL === attachment.modelURL) { + attachments.splice(i, 1); + MyAvatar.attachmentData = attachments; + break; + } + } +} + +Script.scriptEnding.connect(function() { + hatButton.destroy(); + coatbutton.destroy(); +});