@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
JavaScript
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=