@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
112 lines (111 loc) • 3.37 kB
JavaScript
"use strict";
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const ste_events_1 = require("ste-events");
const ManagedComponent_1 = require("./ManagedComponent");
const Utilities_1 = __importDefault(require("../core/Utilities"));
class ManagedComponentGroup {
_data;
_managed;
id;
_onComponentAdded = new ste_events_1.EventDispatcher();
_onComponentRemoved = new ste_events_1.EventDispatcher();
_onComponentChanged = new ste_events_1.EventDispatcher();
constructor(data, id) {
this._data = data;
this._managed = {};
this.id = id;
}
getData() {
return this._data;
}
get onComponentAdded() {
return this._onComponentAdded.asEvent();
}
get onComponentRemoved() {
return this._onComponentRemoved.asEvent();
}
get onComponentChanged() {
return this._onComponentChanged.asEvent();
}
addComponent(id, componentOrData) {
if (!this._data) {
this._data = {};
}
if (!this._managed) {
this._managed = {};
}
const mc = componentOrData instanceof ManagedComponent_1.ManagedComponent
? componentOrData
: new ManagedComponent_1.ManagedComponent(this._data, id, componentOrData);
if (Utilities_1.default.isUsableAsObjectKey(mc.id)) {
this._data[mc.id] = mc.getData();
this._managed[mc.id] = mc;
}
return mc;
}
removeComponent(id) {
if (!this._data || !Utilities_1.default.isUsableAsObjectKey(id)) {
return;
}
this._data[id] = undefined;
if (this._managed) {
this._managed[id] = undefined;
}
}
getComponent(id) {
if (!this._data) {
return undefined;
}
if (!this._managed) {
this._managed = {};
}
if (!Utilities_1.default.isUsableAsObjectKey(id)) {
throw new Error();
}
if (!this._managed[id]) {
const data = this._data[id];
if (data) {
this._managed[id] = new ManagedComponent_1.ManagedComponent(this._data, id, data);
}
}
return this._managed[id];
}
getAllComponents() {
return this.getComponents();
}
getComponents() {
if (!this._data) {
return [];
}
if (!this._managed) {
this._managed = {};
}
const comparr = [];
for (const c in this._data) {
const comp = this._data[c];
if (!this._managed[c] && comp) {
this._managed[c] = new ManagedComponent_1.ManagedComponent(this._data, c, comp);
}
const mc = this._managed[c];
if (mc) {
comparr.push(mc);
}
}
return comparr;
}
notifyComponentUpdated(id) {
if (!this._managed) {
return;
}
const comp = this._managed[id];
if (comp) {
this._onComponentChanged.dispatch(this, comp);
}
}
}
exports.default = ManagedComponentGroup;