UNPKG

dcl-npc-toolkit-ai-version

Version:

A collection of tools for creating Non-Player-Characters (NPCs). These are capable of having conversations with the player, and play different animations. AI usage is added atop of it

59 lines 7.15 kB
import { Schemas, engine } from '@dcl/sdk/ecs'; import ReactEcs, { UiEntity } from '@dcl/sdk/react-ecs'; import { rotateUVs } from './utilities'; export const SpinnerComponent = engine.defineComponent('spinner-id', { angle: Schemas.Number, speed: Schemas.Number, timeout: Schemas.Number }); export function RotatorSystem(dt) { const spinnerGroup = engine.getEntitiesWith(SpinnerComponent); for (const [entity] of spinnerGroup) { const spinnerInfo = SpinnerComponent.getMutable(entity); spinnerInfo.angle -= dt * spinnerInfo.speed; if (spinnerInfo.angle < 0) spinnerInfo.angle += 360; } } export class Spinner { constructor(_texture, _speed) { this.visible = false; this.spinner = engine.addEntity(); SpinnerComponent.create(this.spinner, { angle: 0, speed: _speed, timeout: 3 }); this.texture = _texture; } getAngle() { return SpinnerComponent.get(this.spinner).angle; } show() { this.visible = true; } hide() { this.visible = false; } toggle() { this.visible = !this.visible; } } export function UISpinner(props) { return ReactEcs.createElement(UiEntity, { uiTransform: props.uiTransform }, ReactEcs.createElement(UiEntity, { uiTransform: { width: "100%", height: "100%", display: props.spinner.visible ? 'flex' : 'none' }, uiBackground: { textureMode: 'stretch', color: props.uiBackground?.color, uvs: rotateUVs(props.spinner.getAngle()), texture: { src: props.spinner.texture, wrapMode: 'clamp' }, } }, props.children)); } engine.addSystem(RotatorSystem); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVUlTcGlubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VpX2NvbXBvbmVudHMvVUlTcGlubmVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN0RCxPQUFPLFFBQVEsRUFBRSxFQUFtQixRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFO0lBQ25FLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTTtJQUNyQixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU07SUFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNO0NBQ3hCLENBQUMsQ0FBQTtBQUdGLE1BQU0sVUFBVSxhQUFhLENBQUMsRUFBVTtJQUV0QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFFN0QsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUM7UUFFcEMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXZELFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUE7UUFDM0MsSUFBSSxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUM7WUFBRSxXQUFXLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQTtJQUNyRCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sT0FBTyxPQUFPO0lBS2xCLFlBQVksUUFBZ0IsRUFBRSxNQUFjO1FBRjVDLFlBQU8sR0FBWSxLQUFLLENBQUE7UUFHdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDakMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDcEMsS0FBSyxFQUFFLENBQUM7WUFDUixLQUFLLEVBQUUsTUFBTTtZQUNiLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUE7SUFDekIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ2pELENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7SUFDckIsQ0FBQztJQUNELElBQUk7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtJQUN0QixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQzlCLENBQUM7Q0FFRjtBQVFELE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBdUI7SUFFL0MsT0FBTyx1QkFBQyxRQUFRLElBQ2QsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1FBRTlCLHVCQUFDLFFBQVEsSUFDUCxXQUFXLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU07YUFDakQsRUFDRCxZQUFZLEVBQUU7Z0JBQ1osV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLEtBQUssRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUs7Z0JBQ2hDLEdBQUcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxFQUFFO29CQUNQLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU87b0JBQzFCLFFBQVEsRUFBRSxPQUFPO2lCQUNsQjthQUNGLElBQ0EsS0FBSyxDQUFDLFFBQVEsQ0FDTixDQUNGLENBQUE7QUFDYixDQUFDO0FBR0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSwgU2NoZW1hcywgZW5naW5lIH0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0IFJlYWN0RWNzLCB7IEVudGl0eVByb3BUeXBlcywgVWlFbnRpdHkgfSBmcm9tICdAZGNsL3Nkay9yZWFjdC1lY3MnXG5pbXBvcnQgeyByb3RhdGVVVnMgfSBmcm9tICcuL3V0aWxpdGllcydcblxuZXhwb3J0IGNvbnN0IFNwaW5uZXJDb21wb25lbnQgPSBlbmdpbmUuZGVmaW5lQ29tcG9uZW50KCdzcGlubmVyLWlkJywge1xuICBhbmdsZTogU2NoZW1hcy5OdW1iZXIsXG4gIHNwZWVkOiBTY2hlbWFzLk51bWJlcixcbiAgdGltZW91dDogU2NoZW1hcy5OdW1iZXJcbn0pXG5cblxuZXhwb3J0IGZ1bmN0aW9uIFJvdGF0b3JTeXN0ZW0oZHQ6IG51bWJlcikge1xuXG4gIGNvbnN0IHNwaW5uZXJHcm91cCA9IGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoU3Bpbm5lckNvbXBvbmVudClcblxuICBmb3IgKGNvbnN0IFtlbnRpdHldIG9mIHNwaW5uZXJHcm91cCkge1xuXG4gICAgY29uc3Qgc3Bpbm5lckluZm8gPSBTcGlubmVyQ29tcG9uZW50LmdldE11dGFibGUoZW50aXR5KVxuXG4gICAgc3Bpbm5lckluZm8uYW5nbGUgLT0gZHQgKiBzcGlubmVySW5mby5zcGVlZFxuICAgIGlmIChzcGlubmVySW5mby5hbmdsZSA8IDApIHNwaW5uZXJJbmZvLmFuZ2xlICs9IDM2MFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTcGlubmVyIHtcbiAgc3Bpbm5lcjogRW50aXR5XG4gIHRleHR1cmU6IHN0cmluZ1xuICB2aXNpYmxlOiBib29sZWFuID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcihfdGV4dHVyZTogc3RyaW5nLCBfc3BlZWQ6IG51bWJlcikge1xuICAgIHRoaXMuc3Bpbm5lciA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgIFNwaW5uZXJDb21wb25lbnQuY3JlYXRlKHRoaXMuc3Bpbm5lciwge1xuICAgICAgYW5nbGU6IDAsXG4gICAgICBzcGVlZDogX3NwZWVkLFxuICAgICAgdGltZW91dDogM1xuICAgIH0pXG5cbiAgICB0aGlzLnRleHR1cmUgPSBfdGV4dHVyZVxuICB9XG5cbiAgZ2V0QW5nbGUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gU3Bpbm5lckNvbXBvbmVudC5nZXQodGhpcy5zcGlubmVyKS5hbmdsZVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlXG4gIH1cbiAgaGlkZSgpIHtcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZVxuICB9XG5cbiAgdG9nZ2xlKCkge1xuICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGVcbiAgfVxuXG59XG5cbmV4cG9ydCB0eXBlIFNwaW5uZXJBbmltUHJvcHMgPSBFbnRpdHlQcm9wVHlwZXMgJiB7XG4gIGNoaWxkcmVuPzogUmVhY3RFY3MuSlNYLkNvbXBvbmVudFtdXG4gIHNwaW5uZXI6IFNwaW5uZXJcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gVUlTcGlubmVyKHByb3BzOiBTcGlubmVyQW5pbVByb3BzKSB7XG5cbiAgcmV0dXJuIDxVaUVudGl0eVxuICAgIHVpVHJhbnNmb3JtPXtwcm9wcy51aVRyYW5zZm9ybX1cbiAgPlxuICAgIDxVaUVudGl0eVxuICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICBkaXNwbGF5OiBwcm9wcy5zcGlubmVyLnZpc2libGUgPyAnZmxleCcgOiAnbm9uZSdcbiAgICAgIH19XG4gICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgdGV4dHVyZU1vZGU6ICdzdHJldGNoJyxcbiAgICAgICAgY29sb3I6IHByb3BzLnVpQmFja2dyb3VuZD8uY29sb3IsXG4gICAgICAgIHV2czogcm90YXRlVVZzKHByb3BzLnNwaW5uZXIuZ2V0QW5nbGUoKSksXG4gICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICBzcmM6IHByb3BzLnNwaW5uZXIudGV4dHVyZSxcbiAgICAgICAgICB3cmFwTW9kZTogJ2NsYW1wJ1xuICAgICAgICB9LFxuICAgICAgfX0+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9VaUVudGl0eT5cbiAgPC9VaUVudGl0eT5cbn1cblxuXG5lbmdpbmUuYWRkU3lzdGVtKFJvdGF0b3JTeXN0ZW0pIl19