content/hifi-content/caitlyn/scratch/drive.js
2022-02-13 22:19:19 +01:00

129 lines
No EOL
3.4 KiB
JavaScript

// 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);
});