mirror of
https://github.com/overte-org/community-apps.git
synced 2025-08-08 06:17:43 +02:00
81 lines
3.2 KiB
JavaScript
81 lines
3.2 KiB
JavaScript
/* globals Vec3, Quat, Uuid, Camera, MyAvatar, Entities, Overlays, Script, Tablet, AvatarList, AvatarManager, Picks, PickType require ScriptDiscoveryService */
|
|
//
|
|
// attachAvatarApp.js
|
|
//
|
|
// Created by KasenVR on 2 August 2020.
|
|
// Copyright 2020 Vircadia contributors.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
var APP_NAME = "Avatar Attach App";
|
|
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
|
|
|
|
var accountChildIcon = 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24"><path fill="white" d="M12,2A3,3 0 0,1 15,5A3,3 0 0,1 12,8A3,3 0 0,1 9,5A3,3 0 0,1 12,2M12,9C13.63,9 15.12,9.35 16.5,10.05C17.84,10.76 18.5,11.61 18.5,12.61V18.38C18.5,19.5 17.64,20.44 15.89,21.19V19C15.89,18.05 15.03,17.38 13.31,16.97C12.75,16.84 12.31,16.78 12,16.78C11.13,16.78 10.3,16.95 9.54,17.3C8.77,17.64 8.31,18.08 8.16,18.61C9.5,19.14 10.78,19.41 12,19.41L13,19.31V21.94L12,22C10.63,22 9.33,21.72 8.11,21.19C6.36,20.44 5.5,19.5 5.5,18.38V12.61C5.5,11.61 6.16,10.76 7.5,10.05C8.88,9.35 10.38,9 12,9M12,11A2,2 0 0,0 10,13A2,2 0 0,0 12,15A2,2 0 0,0 14,13A2,2 0 0,0 12,11Z" /></svg>';;
|
|
|
|
var button = tablet.addButton({
|
|
text: "ATTACH",
|
|
icon: accountChildIcon,
|
|
activeIcon: accountChildIcon.replace('white', 'black')
|
|
});
|
|
|
|
Script.scriptEnding.connect(function(){
|
|
tablet.removeButton(button);
|
|
button = null;
|
|
});
|
|
|
|
button.clicked.connect(togglePlatform);
|
|
var platformID;
|
|
|
|
function togglePlatform() {
|
|
|
|
function getNearbyAvatars(origin, sessionUUIDs) {
|
|
|
|
var cleanAvatars = sessionUUIDs.filter(function (id) {
|
|
if (id == null) {
|
|
return false;
|
|
}
|
|
|
|
var idString = id.toString();
|
|
|
|
if (idString.indexOf(MyAvatar.sessionUUID) === -1) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
});
|
|
|
|
return cleanAvatars.map(function(id) {
|
|
var avi = AvatarList.getAvatar(id);
|
|
avi.$distance = Vec3.distance(origin, avi.position);
|
|
return avi;
|
|
}).sort(function(a, b) {
|
|
return a.$distance < b.$distance ? -1 : a.$distance > b.$distance ? 1 : 0;
|
|
});
|
|
|
|
};
|
|
|
|
var nearest = getNearbyAvatars(MyAvatar.position, AvatarList.getAvatarIdentifiers())[0];
|
|
var platformScale = { x: 0.604 * MyAvatar.scale, y: 0.036 * MyAvatar.scale, z: 0.604 * MyAvatar.scale };
|
|
|
|
if(platformID) {
|
|
Entities.deleteEntity(platformID);
|
|
platformID = null;
|
|
MyAvatar.setParentID("null");
|
|
} else if (nearest != null) {
|
|
platformID = Entities.addEntity({
|
|
type: "Model",
|
|
modelURL: Script.resolvePath("./assets/Halo.fbx"),
|
|
position: MyAvatar.position,
|
|
rotation: Quat.IDENTITY,
|
|
dimensions: platformScale,
|
|
collisionMask: 8,
|
|
collisionless: false,
|
|
shapeType: "box",
|
|
parentID: nearest.sessionUUID,
|
|
parentJointIndex: 0,
|
|
}, "avatar"); // Make it a client entity! We want it to show up/load in other worlds without rez rights.
|
|
MyAvatar.setParentID(platformID);
|
|
}
|
|
}
|