2019-09-30 19:23:11 -05:00
|
|
|
let traitId = 0;
|
|
|
|
const idToTraitMap = new Map();
|
|
|
|
const traitToIdMap = new Map();
|
2019-03-19 19:52:00 -05:00
|
|
|
const traitRegistry = new Map();
|
|
|
|
|
|
|
|
export function registerTrait(Trait) {
|
2019-10-15 03:28:54 -05:00
|
|
|
const hadTrait = traitRegistry.has(Trait.type());
|
2019-03-19 19:52:00 -05:00
|
|
|
traitRegistry.set(Trait.type(), Trait);
|
2019-10-15 03:28:54 -05:00
|
|
|
if (!hadTrait) {
|
|
|
|
traitToIdMap.set(Trait.type(), traitId);
|
|
|
|
idToTraitMap.set(traitId, Trait.type());
|
|
|
|
traitId += 1;
|
|
|
|
}
|
2019-03-19 19:52:00 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
export function hasTrait(type) {
|
|
|
|
return traitRegistry.has(type);
|
|
|
|
}
|
|
|
|
|
2019-09-30 19:23:11 -05:00
|
|
|
export function idFromTrait(Trait) {
|
2019-10-15 03:28:54 -05:00
|
|
|
return traitToIdMap.get(Trait.type());
|
2019-09-30 19:23:11 -05:00
|
|
|
}
|
|
|
|
|
2019-03-19 19:52:00 -05:00
|
|
|
export function lookupTrait(type) {
|
|
|
|
return traitRegistry.get(type);
|
|
|
|
}
|
2019-09-30 19:23:11 -05:00
|
|
|
|
|
|
|
export function traitFromId(id) {
|
2019-10-15 03:28:54 -05:00
|
|
|
return lookupTrait(idToTraitMap.get(id));
|
2019-09-30 19:23:11 -05:00
|
|
|
}
|