mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
Added avatarAttachmentTest.js script
This commit is contained in:
parent
7bef1ebdac
commit
5d19de76ab
1 changed files with 148 additions and 0 deletions
148
examples/tests/avatarAttachmentTest.js
Normal file
148
examples/tests/avatarAttachmentTest.js
Normal file
|
@ -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();
|
||||
});
|
Loading…
Reference in a new issue