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

83 lines
No EOL
2.3 KiB
JavaScript

var materialEntityName = MyAvatar.displayName + "-Avatar-Material-Entity";
var MATERIAL_JSON = "URL TO YOUR MATERIAL HERE!!";
var createAvatarMaterialEntity = function (name) {
return Entities.addEntity({
type: "Material",
name: name,
position: MyAvatar.position,
userData: "",
materialURL: MATERIAL_JSON,
scale: {
x: 1,
y: 1,
z: 1
},
priority: 1,
parentMaterialName: "mat::Material",
parentID: MyAvatar.sessionUUID
}, true)
}
var clearAllMaterialEntities = function () {
var entities = Entities.findEntities(MyAvatar.position, 10);
if (entities.length > 0) {
for (var index in entities) {
var entity = Entities.getEntityProperties(entities[index]);
if (entity.clientOnly &&
entity.type === "Material" &&
entity.owningAvatarID === MyAvatar.sessionUUID &&
entity.name.indexOf("Avatar-Material-Entity") !== -1) {
Entities.deleteEntity(entity.id);
console.log("Found a potential Avatar Material Entity. Removing it.")
}
}
}
}
clearAllMaterialEntities();
var materialEntity;
materialEntity = createAvatarMaterialEntity(materialEntityName);
console.log("Created materialEntity", materialEntity);
var FPSThrottle = 1 / 24;
var timer = 0;
var currentTimer = 0;
var update = function (dt) {
timer += dt;
if (timer > FPSThrottle) {
currentTimer += dt; // Illusion update
var posX = Math.cos(currentTimer * 0.02) + 0.05;
var posY = Math.sin(currentTimer * 0.01) + 0.05;
var scaleX = Math.abs(2.0 * Math.sin(currentTimer * 0.01)) + 0.1;
var scaleY = Math.abs(2.0 * Math.sin(currentTimer * 0.01)) + 0.1;
var rot = Math.sin(currentTimer * -0.2) * 360
Entities.editEntity(materialEntity, {
materialMappingPos: {
x: posX,
y: posY
},
materialMappingScale: {
x: scaleX,
y: scaleY
},
materialMappingRot: rot
});
timer = 0;
}
// TODO: Throttle Entitity update to 24 fpsw
}
Script.update.connect(update);
Script.scriptEnding.connect(function () {
Script.update.disconnect(update);
clearAllMaterialEntities();
});