// copyright 2018 // Fluffy Jenkins //GeorgeDeac var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var isActive = false; var bikeWearPosition = {x: 0, y: -0.35, z: 0.4}; var bikeWearRotation = {x: 0, y: 1, z: 0, w: -4.371138828673793e-8}; var jointIndex = -1; var bikeSize = { z: 3, y: 1, x: 1 }; var bikeColours = ["hoverKart.fbx"];//bikered.fbx","bikegreen.fbx","bikeblue.fbx","bikeorange.fbx","bikepurple.fbx"]; var bikeIconActive = Script.resolvePath("bikeb.png"); var bikeIconInactive = Script.resolvePath("bike.png"); var SCALE = 1; var TIMEOUT = 500; var bikeEntity; var bikeName = "HoverBike"; var ANIMATION_URL = Script.resolvePath("sitting.fbx"); var ANIMATION_FPS = 30, ANIMATION_FIRST_FRAME = 1, ANIMATION_LAST_FRAME = 200; var animationPrefetch = AnimationCache.prefetch(ANIMATION_URL); function sitMe() { MyAvatar.restoreAnimation(); MyAvatar.getAnimationRoles().filter(function (role) { return !/^(right|left)/.test(role); }).forEach(function (role) { MyAvatar.overrideRoleAnimation(role, ANIMATION_URL, ANIMATION_FPS, true, ANIMATION_FIRST_FRAME, ANIMATION_LAST_FRAME); }); Script.setTimeout(function () { MyAvatar.setJointRotation(jointIndex, Quat.IDENTITY); }, TIMEOUT); } function unSitMe() { MyAvatar.getAnimationRoles().filter(function (role) { return !/^(right|left)/.test(role); }).forEach(function (role) { MyAvatar.restoreRoleAnimation(role); }); MyAvatar.clearJointData(jointIndex); } // humbletim's barnacle locator function findBarnacles(name) { return Object.keys(MyAvatar.getAvatarEntityData()) .filter(function (id) { return Entities.getNestableType(id) === 'entity'; }) .map(function (entityID) { return Entities.getEntityProperties(entityID); }) .filter(function (props) { return props.name === name; }); } var toggle = function () { isActive = !isActive; activeButton.editProperties({isActive: isActive}); if (isActive) { activateFunction(); } else { deactivateFunction(); } }; function activateFunction() { jointIndex = MyAvatar.getJointIndex("Hips"); sitMe(); var currentbikeColour = bikeColours[Math.floor(Math.random()*bikeColours.length)]; var bikeURL = Script.resolvePath(currentbikeColour); bikeEntity = Entities.addEntity({ visible: true, name: "HoveBike", type: "Model", modelURL: bikeURL, parentID: MyAvatar.sessionUUID, parentJointIndex: jointIndex, localPosition: bikeWearPosition, localRotation: bikeWearRotation, dimensions: Vec3.multiply((SCALE * MyAvatar.scale), bikeSize), collisionless: true }, true); } function deactivateFunction() { unSitMe(); Entities.deleteEntity(bikeEntity); } var activeButton = tablet.addButton({ icon: bikeIconInactive, activeIcon: bikeIconActive, text: "HoverBike", isActive: false, sortOrder: 10 }); Script.scriptEnding.connect(function () { activeButton.clicked.disconnect(toggle); tablet.removeButton(activeButton); deactivateFunction(); }); activeButton.clicked.connect(toggle); var oldbikes = findBarnacles(bikeName); oldbikes.forEach(function (ent) { Entities.deleteEntity(ent.id); });