dcl-npc-toolkit
Version:
A collection of tools for creating Non-Player-Characters (NPCs). These are capable of having conversations with the player, and play different animations.
46 lines • 5.24 kB
JavaScript
import { engine, MeshRenderer, TriggerArea, Material } from "@dcl/sdk/ecs";
import { Color4 } from "@dcl/sdk/math";
let __delayedId = 0;
export const delayedFunction = (cb, delayMs) => {
const id = `delayedFunction_${++__delayedId}`;
let timeMs = 0;
let cancelled = false;
const system = (dt) => {
if (cancelled) {
engine.removeSystem(id);
return;
}
timeMs += dt * 1000;
if (timeMs < delayMs)
return;
timeMs = 0;
engine.removeSystem(id);
if (!cancelled) {
cb && cb();
}
};
engine.addSystem(system, undefined, id);
const cancel = () => {
cancelled = true;
engine.removeSystem(id);
};
return { id, cancel };
};
export function clearDelayedFunction(handleOrId) {
if (!handleOrId)
return;
if (typeof handleOrId === 'string') {
engine.removeSystem(handleOrId);
return;
}
handleOrId.cancel();
}
export function debugTriggers() {
for (const [entity] of engine.getEntitiesWith(TriggerArea)) {
MeshRenderer.setSphere(entity);
Material.setPbrMaterial(entity, {
albedoColor: Color4.create(1, 0, 0, 0.3)
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxRSxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztBQU9wQixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxFQUFjLEVBQUUsT0FBZSxFQUFpQixFQUFFO0lBQzlFLE1BQU0sRUFBRSxHQUFHLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFBO0lBQzdDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztJQUV0QixNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFO1FBQzVCLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ3ZCLE9BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxNQUFNLEdBQUcsT0FBTztZQUFFLE9BQU87UUFDN0IsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNYLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV4QyxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDbEIsU0FBUyxHQUFHLElBQUksQ0FBQTtRQUNoQixNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3pCLENBQUMsQ0FBQTtJQUVELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUE7QUFDekIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFVBQXFEO0lBQ3hGLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTTtJQUN2QixJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBRW5DLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDL0IsT0FBTTtJQUNSLENBQUM7SUFDRCxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUE7QUFDckIsQ0FBQztBQUlDLE1BQU0sVUFBVSxhQUFhO0lBRTNCLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzlCLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQzlCLFdBQVcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztTQUN6QyxDQUFDLENBQUE7SUFDSixDQUFDO0FBSUgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVuZ2luZSwgTWVzaFJlbmRlcmVyLCBUcmlnZ2VyQXJlYSwgTWF0ZXJpYWwgfSBmcm9tIFwiQGRjbC9zZGsvZWNzXCJcbmltcG9ydCB7IENvbG9yMywgQ29sb3I0IH0gZnJvbSBcIkBkY2wvc2RrL21hdGhcIjtcblxubGV0IF9fZGVsYXllZElkID0gMDtcblxuZXhwb3J0IHR5cGUgRGVsYXllZEhhbmRsZSA9IHtcbiAgaWQ6IHN0cmluZ1xuICBjYW5jZWw6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IGRlbGF5ZWRGdW5jdGlvbiA9IChjYjogKCkgPT4gdm9pZCwgZGVsYXlNczogbnVtYmVyKTogRGVsYXllZEhhbmRsZSA9PiB7XG4gICAgY29uc3QgaWQgPSBgZGVsYXllZEZ1bmN0aW9uXyR7KytfX2RlbGF5ZWRJZH1gXG4gICAgbGV0IHRpbWVNcyA9IDA7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3lzdGVtID0gKGR0OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgZW5naW5lLnJlbW92ZVN5c3RlbShpZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aW1lTXMgKz0gZHQgKiAxMDAwO1xuICAgICAgaWYgKHRpbWVNcyA8IGRlbGF5TXMpIHJldHVybjtcbiAgICAgIHRpbWVNcyA9IDA7XG4gICAgICBlbmdpbmUucmVtb3ZlU3lzdGVtKGlkKTtcbiAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgIGNiICYmIGNiKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZW5naW5lLmFkZFN5c3RlbShzeXN0ZW0sIHVuZGVmaW5lZCwgaWQpO1xuXG4gICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgZW5naW5lLnJlbW92ZVN5c3RlbShpZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBpZCwgY2FuY2VsIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRGVsYXllZEZ1bmN0aW9uKGhhbmRsZU9ySWQ6IERlbGF5ZWRIYW5kbGUgfCBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gIGlmICghaGFuZGxlT3JJZCkgcmV0dXJuXG4gIGlmICh0eXBlb2YgaGFuZGxlT3JJZCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBjYW5jZWwgYnkgaWQvbmFtZVxuICAgIGVuZ2luZS5yZW1vdmVTeXN0ZW0oaGFuZGxlT3JJZClcbiAgICByZXR1cm5cbiAgfVxuICBoYW5kbGVPcklkLmNhbmNlbCgpXG59XG5cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBkZWJ1Z1RyaWdnZXJzKCl7XG5cbiAgICBmb3IgKGNvbnN0IFtlbnRpdHldIG9mIGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoVHJpZ2dlckFyZWEpKSB7XG4gICAgICBNZXNoUmVuZGVyZXIuc2V0U3BoZXJlKGVudGl0eSlcbiAgICAgIE1hdGVyaWFsLnNldFBick1hdGVyaWFsKGVudGl0eSwge1xuICAgICAgICBhbGJlZG9Db2xvcjogQ29sb3I0LmNyZWF0ZSgxLCAwLCAwLCAwLjMpXG4gICAgICB9KVxuICAgIH1cblxuXG5cbiAgfSJdfQ==