UNPKG

@dcl-sdk/utils

Version:

A collection of helpers to make it easier to build a Decentraland scene using the SDK 7.

50 lines 6.6 kB
import { engine, EntityState, Schemas } from '@dcl/sdk/ecs'; import { timers } from './timer'; export var ToggleState; (function (ToggleState) { ToggleState[ToggleState["Off"] = 0] = "Off"; ToggleState[ToggleState["On"] = 1] = "On"; })(ToggleState || (ToggleState = {})); function createToggles(targetEngine, timers) { const Toggle = targetEngine.defineComponent('dcl.utils.Toggle', { state: Schemas.EnumNumber(ToggleState, ToggleState.Off) }); let toggles = new Map(); timers.setInterval(function () { for (const entity of toggles.keys()) { if (targetEngine.getEntityState(entity) == EntityState.Removed || !Toggle.has(entity)) { toggles.delete(entity); } } }, 5000); return { addToggle(entity, state, callback) { toggles.set(entity, callback); Toggle.createOrReplace(entity, { state: state }); }, removeToggle(entity) { toggles.delete(entity); Toggle.deleteFrom(entity); }, setCallback(entity, callback) { toggles.set(entity, callback); }, set(entity, state) { const oldState = Toggle.get(entity).state; if (oldState != state) { Toggle.getMutable(entity).state = state; const callback = toggles.get(entity); if (callback) callback(state); } }, flip(entity) { this.set(entity, 1 - Toggle.get(entity).state); }, isOn(entity) { return Toggle.get(entity).state == ToggleState.On; } }; } export const toggles = createToggles(engine, timers); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RvZ2dsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFVLFdBQVcsRUFBVyxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBVSxNQUFNLFNBQVMsQ0FBQztBQUV6QyxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLDJDQUFPLENBQUE7SUFDUCx5Q0FBTSxDQUFBO0FBQ1IsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCO0FBTUQsU0FBUyxhQUFhLENBQUMsWUFBcUIsRUFBRSxNQUFjO0lBQzFELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7UUFDOUQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7S0FDeEQsQ0FBQyxDQUFBO0lBRUYsSUFBSSxPQUFPLEdBQTRDLElBQUksR0FBRyxFQUFFLENBQUM7SUFFakUsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNqQixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN0RixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3hCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRVIsT0FBTztRQUNMLFNBQVMsQ0FBQyxNQUFjLEVBQUUsS0FBa0IsRUFBRSxRQUF5QjtZQUNyRSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUM3QixNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBQ2hELENBQUM7UUFDRCxZQUFZLENBQUMsTUFBYztZQUN6QixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3RCLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDM0IsQ0FBQztRQUNELFdBQVcsQ0FBQyxNQUFjLEVBQUUsUUFBeUI7WUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDL0IsQ0FBQztRQUNELEdBQUcsQ0FBQyxNQUFjLEVBQUUsS0FBa0I7WUFDcEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUE7WUFDekMsSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtnQkFDdkMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDcEMsSUFBSSxRQUFRO29CQUNWLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFjO1lBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2hELENBQUM7UUFDRCxJQUFJLENBQUMsTUFBYztZQUNqQixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUE7UUFDbkQsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbmdpbmUsIEVudGl0eSwgRW50aXR5U3RhdGUsIElFbmdpbmUsIFNjaGVtYXMgfSBmcm9tICdAZGNsL3Nkay9lY3MnXG5pbXBvcnQgeyB0aW1lcnMsIFRpbWVycyB9IGZyb20gJy4vdGltZXInO1xuXG5leHBvcnQgZW51bSBUb2dnbGVTdGF0ZSB7XG4gIE9mZiA9IDAsXG4gIE9uID0gMVxufVxuXG5leHBvcnQgdHlwZSBUb2dnbGVDYWxsYmFjayA9IChzdGF0ZTogVG9nZ2xlU3RhdGUpID0+IHZvaWRcblxuZXhwb3J0IHR5cGUgVG9nZ2xlcyA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVRvZ2dsZXM+XG5cbmZ1bmN0aW9uIGNyZWF0ZVRvZ2dsZXModGFyZ2V0RW5naW5lOiBJRW5naW5lLCB0aW1lcnM6IFRpbWVycykge1xuICBjb25zdCBUb2dnbGUgPSB0YXJnZXRFbmdpbmUuZGVmaW5lQ29tcG9uZW50KCdkY2wudXRpbHMuVG9nZ2xlJywge1xuICAgIHN0YXRlOiBTY2hlbWFzLkVudW1OdW1iZXIoVG9nZ2xlU3RhdGUsIFRvZ2dsZVN0YXRlLk9mZilcbiAgfSlcblxuICBsZXQgdG9nZ2xlczogTWFwPEVudGl0eSwgVG9nZ2xlQ2FsbGJhY2sgfCB1bmRlZmluZWQ+ID0gbmV3IE1hcCgpO1xuXG4gIHRpbWVycy5zZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgdG9nZ2xlcy5rZXlzKCkpIHtcbiAgICAgIGlmICh0YXJnZXRFbmdpbmUuZ2V0RW50aXR5U3RhdGUoZW50aXR5KSA9PSBFbnRpdHlTdGF0ZS5SZW1vdmVkIHx8ICFUb2dnbGUuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgdG9nZ2xlcy5kZWxldGUoZW50aXR5KVxuICAgICAgfVxuICAgIH1cbiAgfSwgNTAwMClcblxuICByZXR1cm4ge1xuICAgIGFkZFRvZ2dsZShlbnRpdHk6IEVudGl0eSwgc3RhdGU6IFRvZ2dsZVN0YXRlLCBjYWxsYmFjaz86IFRvZ2dsZUNhbGxiYWNrKSB7XG4gICAgICB0b2dnbGVzLnNldChlbnRpdHksIGNhbGxiYWNrKVxuICAgICAgVG9nZ2xlLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtzdGF0ZTogc3RhdGV9KVxuICAgIH0sXG4gICAgcmVtb3ZlVG9nZ2xlKGVudGl0eTogRW50aXR5KSB7XG4gICAgICB0b2dnbGVzLmRlbGV0ZShlbnRpdHkpXG4gICAgICBUb2dnbGUuZGVsZXRlRnJvbShlbnRpdHkpXG4gICAgfSxcbiAgICBzZXRDYWxsYmFjayhlbnRpdHk6IEVudGl0eSwgY2FsbGJhY2s/OiBUb2dnbGVDYWxsYmFjaykge1xuICAgICAgdG9nZ2xlcy5zZXQoZW50aXR5LCBjYWxsYmFjaylcbiAgICB9LFxuICAgIHNldChlbnRpdHk6IEVudGl0eSwgc3RhdGU6IFRvZ2dsZVN0YXRlKSB7XG4gICAgICBjb25zdCBvbGRTdGF0ZSA9IFRvZ2dsZS5nZXQoZW50aXR5KS5zdGF0ZVxuICAgICAgaWYgKG9sZFN0YXRlICE9IHN0YXRlKSB7XG4gICAgICAgIFRvZ2dsZS5nZXRNdXRhYmxlKGVudGl0eSkuc3RhdGUgPSBzdGF0ZVxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRvZ2dsZXMuZ2V0KGVudGl0eSlcbiAgICAgICAgaWYgKGNhbGxiYWNrKVxuICAgICAgICAgIGNhbGxiYWNrKHN0YXRlKVxuICAgICAgfVxuICAgIH0sXG4gICAgZmxpcChlbnRpdHk6IEVudGl0eSkge1xuICAgICAgdGhpcy5zZXQoZW50aXR5LCAxIC0gVG9nZ2xlLmdldChlbnRpdHkpLnN0YXRlKSAgICAgIFxuICAgIH0sXG4gICAgaXNPbihlbnRpdHk6IEVudGl0eSkge1xuICAgICAgcmV0dXJuIFRvZ2dsZS5nZXQoZW50aXR5KS5zdGF0ZSA9PSBUb2dnbGVTdGF0ZS5PblxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdG9nZ2xlcyA9IGNyZWF0ZVRvZ2dsZXMoZW5naW5lLCB0aW1lcnMpXG4iXX0=