38 lines
814 B
JavaScript
38 lines
814 B
JavaScript
var ex = {}
|
|
|
|
var eachobj = function (obj, fn) {
|
|
var val = fn(obj);
|
|
if (val) return val;
|
|
for (var o in obj.objects) {
|
|
if (obj.objects[o] === obj) console.error(`Object ${obj.toString()} is referenced by itself.`);
|
|
val = eachobj(obj.objects[o], fn);
|
|
if (val) return val;
|
|
}
|
|
};
|
|
|
|
ex.all_objects = function (fn, startobj = world) {
|
|
return eachobj(startobj, fn);
|
|
};
|
|
ex.find_object = function (fn, startobj = world) {};
|
|
|
|
var gtags = {};
|
|
ex.tag_add = function (tag, obj) {
|
|
gtags[tag] ??= new Set();
|
|
gtags[tag].add(obj)
|
|
};
|
|
|
|
ex.tag_rm = function (tag, obj) {
|
|
delete gtags[tag].delete(obj)
|
|
};
|
|
|
|
ex.tag_clear_guid = function (obj) {
|
|
for (var tag in gtags) gtags[tag].delete(obj)
|
|
};
|
|
|
|
ex.objects_with_tag = function (tag) {
|
|
if (!gtags[tag]) return [];
|
|
return Array.from(gtags[tag])
|
|
};
|
|
|
|
return ex
|