sdk7-npc-utils
Version:
A collection of helpers to make it easier to build a Decentraland scene using the SDK 7.
28 lines • 4.54 kB
JavaScript
import { Schemas, Transform, engine } from "@dcl/sdk/ecs";
import { Quaternion, Vector3 } from "@dcl/sdk/math";
let faceUserAdded = false;
export function addFaceUserSystem() {
faceUserAdded = true;
engine.addSystem(faceUserSystem);
}
export const TrackUserFlag = engine.defineComponent("npcutils::trackUserFlag", {
lockXZRotation: Schemas.Boolean,
active: Schemas.Boolean,
rotSpeed: Schemas.Number
});
export function faceUserSystem(dt) {
for (const [entity, track] of engine.getEntitiesWith(TrackUserFlag)) {
if (track.active) {
const player = Transform.get(engine.PlayerEntity);
let lookAtTarget = Vector3.create(player.position.x, player.position.y, player.position.z);
let direction = Vector3.subtract(lookAtTarget, Transform.get(entity).position);
let transform = Transform.getMutable(entity);
transform.rotation = Quaternion.slerp(player.rotation, Quaternion.lookRotation(direction), dt * track.rotSpeed);
if (track.lockXZRotation) {
transform.rotation.x = 0;
transform.rotation.z = 0;
}
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZVVzZXJTeXN0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmFjZVVzZXJTeXN0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBR25ELElBQUksYUFBYSxHQUFZLEtBQUssQ0FBQTtBQUVsQyxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLGFBQWEsR0FBRyxJQUFJLENBQUE7SUFFcEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQ2xELHlCQUF5QixFQUN6QjtJQUNDLGNBQWMsRUFBRSxPQUFPLENBQUMsT0FBTztJQUMvQixNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU87SUFDckIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0NBQzFCLENBQUMsQ0FBQTtBQUVILE1BQU0sVUFBVSxjQUFjLENBQUMsRUFBVTtJQUN2QyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUNuRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDakQsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzFGLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7WUFFOUUsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM1QyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7WUFFL0csSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO2dCQUN4QixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3hCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUN6QjtTQUNGO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NoZW1hcywgVHJhbnNmb3JtLCBlbmdpbmUgfSBmcm9tIFwiQGRjbC9zZGsvZWNzXCJcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGRjbC9zZGsvbWF0aFwiXG5cblxubGV0IGZhY2VVc2VyQWRkZWQ6IGJvb2xlYW4gPSBmYWxzZVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkRmFjZVVzZXJTeXN0ZW0oKSB7XG4gIGZhY2VVc2VyQWRkZWQgPSB0cnVlXG5cbiAgZW5naW5lLmFkZFN5c3RlbShmYWNlVXNlclN5c3RlbSlcbn1cblxuZXhwb3J0IGNvbnN0IFRyYWNrVXNlckZsYWcgPSBlbmdpbmUuZGVmaW5lQ29tcG9uZW50KFxuXHRcIm5wY3V0aWxzOjp0cmFja1VzZXJGbGFnXCIsXG5cdHtcblx0XHRsb2NrWFpSb3RhdGlvbjogU2NoZW1hcy5Cb29sZWFuLFxuXHRcdGFjdGl2ZTogU2NoZW1hcy5Cb29sZWFuLFxuICAgIHJvdFNwZWVkOiBTY2hlbWFzLk51bWJlclxuXHR9KVxuXG5leHBvcnQgZnVuY3Rpb24gZmFjZVVzZXJTeXN0ZW0oZHQ6IG51bWJlcikge1xuICBmb3IgKGNvbnN0IFtlbnRpdHksIHRyYWNrXSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFRyYWNrVXNlckZsYWcpKSB7XG4gICAgaWYgKHRyYWNrLmFjdGl2ZSkge1xuICAgICAgY29uc3QgcGxheWVyID0gVHJhbnNmb3JtLmdldChlbmdpbmUuUGxheWVyRW50aXR5KVxuICAgICAgbGV0IGxvb2tBdFRhcmdldCA9IFZlY3RvcjMuY3JlYXRlKHBsYXllci5wb3NpdGlvbi54LCBwbGF5ZXIucG9zaXRpb24ueSwgcGxheWVyLnBvc2l0aW9uLnopXG4gICAgICBsZXQgZGlyZWN0aW9uID0gVmVjdG9yMy5zdWJ0cmFjdChsb29rQXRUYXJnZXQsIFRyYW5zZm9ybS5nZXQoZW50aXR5KS5wb3NpdGlvbilcblxuICAgICAgbGV0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlKGVudGl0eSlcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IFF1YXRlcm5pb24uc2xlcnAocGxheWVyLnJvdGF0aW9uLCBRdWF0ZXJuaW9uLmxvb2tSb3RhdGlvbihkaXJlY3Rpb24pLCBkdCAqIHRyYWNrLnJvdFNwZWVkKVxuXG4gICAgICBpZiAodHJhY2subG9ja1haUm90YXRpb24pIHtcbiAgICAgICAgdHJhbnNmb3JtLnJvdGF0aW9uLnggPSAwXG4gICAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbi56ID0gMFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19