UNPKG

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
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