speed up string functions
This commit is contained in:
parent
0a7f5a5cdd
commit
6047452b62
|
@ -409,7 +409,7 @@ Object.dainty_assign = function(target, source)
|
|||
|
||||
Object.isObject = function(o)
|
||||
{
|
||||
return (typeof o === 'object' && !Array.isArray(o));
|
||||
return (o instanceof Object && !(o instanceof Array));
|
||||
}
|
||||
|
||||
Object.setter_assign = function(target, source)
|
||||
|
@ -860,25 +860,6 @@ Object.defineProperty(String.prototype, 'trimchr', {
|
|||
}
|
||||
});
|
||||
|
||||
Object.defineProperty(String.prototype, 'startswith', {
|
||||
value: function(val) {
|
||||
if (!val) return false;
|
||||
return this.startsWith(val);
|
||||
}
|
||||
});
|
||||
|
||||
Object.defineProperty(String.prototype, 'endswith', {
|
||||
value: function(val) {
|
||||
if (!val) return false;
|
||||
return this.endsWith(val);
|
||||
}
|
||||
});
|
||||
|
||||
Object.defineProperty(String.prototype, 'pct', {
|
||||
value: function(val) {
|
||||
}
|
||||
});
|
||||
|
||||
Object.defineProperty(String.prototype, 'uc', { value: function() { return this.toUpperCase(); } });
|
||||
Object.defineProperty(String.prototype, 'lc', {value:function() { return this.toLowerCase(); }});
|
||||
|
||||
|
@ -900,6 +881,18 @@ Object.defineProperty(Array.prototype, 'copy', {
|
|||
}
|
||||
});
|
||||
|
||||
Object.defineProperty(Array.prototype, 'forFrom', {
|
||||
value: function(n, fn) {
|
||||
for (var i = n; i < this.length; i++) fn(this[i]);
|
||||
}
|
||||
});
|
||||
|
||||
Object.defineProperty(Array.prototype, 'forTo', {
|
||||
value: function(n, fn) {
|
||||
for (var i = 0; i < n; i++) fn(this[i]);
|
||||
}
|
||||
});
|
||||
|
||||
Object.defineProperty(Array.prototype, 'dofilter', {
|
||||
value: function(fn) {
|
||||
for (let i = 0; i < this.length; i++) {
|
||||
|
@ -1033,19 +1026,6 @@ value: function(b) {
|
|||
return c;
|
||||
}});
|
||||
|
||||
/*Object.defineProperty(Array.prototype, 'concat', {
|
||||
value: function(b) {
|
||||
var result = [];
|
||||
for (var i = 0; i < this.length; i++)
|
||||
result.push(this[i]);
|
||||
|
||||
for (var i = 0; i < b.length; i++)
|
||||
result.push(b[i]);
|
||||
|
||||
return result;
|
||||
}
|
||||
});*/
|
||||
|
||||
Object.defineProperty(Array.prototype, 'normalized', {
|
||||
value: function() {
|
||||
var c = this.slice();
|
||||
|
|
|
@ -79,9 +79,7 @@ var sprite = {
|
|||
return;
|
||||
}
|
||||
if (p === this.path) return;
|
||||
sprite_rmbucket(this);
|
||||
this._p = p;
|
||||
sprite_addbucket(this);
|
||||
|
||||
this.del_anim?.();
|
||||
this.texture = game.texture(p);
|
||||
|
@ -101,7 +99,6 @@ var sprite = {
|
|||
return this._p;
|
||||
},
|
||||
kill() {
|
||||
sprite_rmbucket(this);
|
||||
this.del_anim?.();
|
||||
this.anim = undefined;
|
||||
this.gameobject = undefined;
|
||||
|
@ -175,7 +172,6 @@ component.sprite = function(obj) {
|
|||
sp.transform = obj.transform;
|
||||
sp.guid = prosperon.guid();
|
||||
allsprites[sp.guid] = sp;
|
||||
sprite_addbucket(sp);
|
||||
if (component.sprite.make_hook) component.sprite.make_hook(sp);
|
||||
return sp;
|
||||
}
|
||||
|
|
|
@ -569,7 +569,7 @@ var editor = {
|
|||
obj.ur = sub;
|
||||
|
||||
return;
|
||||
} else if (!sub.startswith(obj.ur)) {
|
||||
} else if (!sub.startsWith(obj.ur)) {
|
||||
console.warn(`Cannot make an ur of type ${sub} from an object with the ur ${obj.ur}`);
|
||||
return;
|
||||
}
|
||||
|
@ -1433,7 +1433,7 @@ replpanel.inputs.tab = function() {
|
|||
var stub = this.value.fromlast('.');
|
||||
var replobj = (editor.selectlist.length === 1) ? "editor.selectlist[0]" : "editor.edit_level";
|
||||
|
||||
if (this.value.startswith("this."))
|
||||
if (this.value.startsWith("this."))
|
||||
keyobj = keyobj.replace("this", replobj);
|
||||
|
||||
if (!this.value.includes('.')) keys.push("this");
|
||||
|
@ -1461,7 +1461,7 @@ replpanel.inputs.tab = function() {
|
|||
|
||||
if (stub)
|
||||
this.value = o + '.' + comp;
|
||||
else if (this.value.endswith('.'))
|
||||
else if (this.value.endsWith('.'))
|
||||
this.value = o + '.' + comp;
|
||||
else
|
||||
this.value = comp;
|
||||
|
@ -1677,7 +1677,7 @@ var openlevelpanel = Object.copy(inputpanel, {
|
|||
|
||||
keycb() {
|
||||
if(this.value)
|
||||
this.assets = this.allassets.filter(x => x.startswith(this.value));
|
||||
this.assets = this.allassets.filter(x => x.startsWith(this.value));
|
||||
else
|
||||
this.assets = this.allassets.slice();
|
||||
for (var m in this.mumlist)
|
||||
|
|
|
@ -25,6 +25,14 @@ Object.defineProperty(String.prototype, "folder", {
|
|||
|
||||
globalThis.Resources = {};
|
||||
|
||||
Resources.rm_fn = function(fnstr, text)
|
||||
{
|
||||
while (text.match(fnstr)) {
|
||||
}
|
||||
}
|
||||
|
||||
Resources.rm_fn.doc = "Remove calls to a given function from a given text script.";
|
||||
|
||||
Resources.replpath = function (str, path) {
|
||||
if (!str) return str;
|
||||
if (str[0] === "/") return str.rm(0);
|
||||
|
@ -48,6 +56,10 @@ Resources.replstrs = function (path) {
|
|||
var script = io.slurp(path);
|
||||
var regexp = /"[^"\s]*?\.[^"\s]+?"/g;
|
||||
var stem = path.dir();
|
||||
|
||||
// remove console statements
|
||||
//script = script.replace(/console\.(.*?)\(.*?\)/g, '');
|
||||
//script = script.replace(/assert\(.*?\)/g, '');
|
||||
|
||||
script = script.replace(regexp, function (str) {
|
||||
var newstr = Resources.replpath(str.trimchr('"'), path);
|
||||
|
@ -222,7 +234,7 @@ global.check_registers = function (obj) {
|
|||
}
|
||||
|
||||
for (var k in obj) {
|
||||
if (!k.startswith("on_")) continue;
|
||||
if (!k.startsWith("on_")) continue;
|
||||
var signal = k.fromfirst("on_");
|
||||
Event.observe(signal, obj, obj[k]);
|
||||
}
|
||||
|
@ -728,12 +740,12 @@ var Register = {
|
|||
var fns = [];
|
||||
|
||||
n.register = function (fn, oname) {
|
||||
if (typeof fn !== "function") return;
|
||||
if (!(fn instanceof Function)) return;
|
||||
|
||||
var dofn = function(...args) {
|
||||
var st = profile.now();
|
||||
fn(...args);
|
||||
profile.addreport(name, oname, st);
|
||||
profile.addreport(name, oname, st);
|
||||
}
|
||||
|
||||
fns.push(dofn);
|
||||
|
|
|
@ -61,8 +61,8 @@ var entity = {
|
|||
},
|
||||
|
||||
sync() {
|
||||
this.components.forEach(function(x) { x.sync?.(); });
|
||||
this.objects.forEach(function(x) { x.sync(); });
|
||||
for (var c of Object.values(this.components)) c.sync?.();
|
||||
for (var o of Object.values(this.objects)) o.sync();
|
||||
},
|
||||
|
||||
delay(fn, seconds) {
|
||||
|
@ -150,7 +150,7 @@ var entity = {
|
|||
|
||||
if (!text)
|
||||
ent.ur = emptyur;
|
||||
else if (typeof text === 'object' && text) {// assume it's an ur
|
||||
else if (text instanceof Object) {// assume it's an ur
|
||||
ent.ur = text;
|
||||
text = ent.ur.text;
|
||||
config = [ent.ur.data, config].filter(x => x).flat();
|
||||
|
@ -164,22 +164,22 @@ var entity = {
|
|||
if (typeof text === 'string')
|
||||
use(text, ent);
|
||||
else if (Array.isArray(text))
|
||||
text.forEach(path => use(path,ent));
|
||||
for (var path of text) use(path,ent);
|
||||
|
||||
if (typeof config === 'string')
|
||||
Object.merge(ent, json.decode(Resources.replstrs(config)));
|
||||
else if (Array.isArray(config))
|
||||
config.forEach(function(path) {
|
||||
for (var path of config) {
|
||||
if (typeof path === 'string') {
|
||||
console.info(`ingesting ${path} ...`);
|
||||
Object.merge(ent, json.decode(Resources.replstrs(path)));
|
||||
}
|
||||
else if (typeof path === 'object')
|
||||
else if (path instanceof Object)
|
||||
Object.merge(ent,path);
|
||||
});
|
||||
};
|
||||
|
||||
ent.reparent(this);
|
||||
|
||||
|
||||
for (var [prop, p] of Object.entries(ent)) {
|
||||
if (!p) continue;
|
||||
if (typeof p !== 'object') continue;
|
||||
|
@ -188,12 +188,12 @@ var entity = {
|
|||
Object.merge(ent[prop], p);
|
||||
ent.components[prop] = ent[prop];
|
||||
};
|
||||
|
||||
|
||||
check_registers(ent);
|
||||
|
||||
if (typeof ent.load === 'function') ent.load();
|
||||
|
||||
if (ent.load instanceof Function) ent.load();
|
||||
if (sim.playing())
|
||||
if (typeof ent.start === 'function') ent.start();
|
||||
if (ent.start instanceof Function) ent.start();
|
||||
|
||||
Object.hide(ent, 'ur', 'components', 'objects', 'timers', 'guid', 'master');
|
||||
|
||||
|
@ -235,8 +235,8 @@ var entity = {
|
|||
return ent;
|
||||
},
|
||||
|
||||
disable() { this.components.forEach(function(x) { x.disable(); }); },
|
||||
enable() { this.components.forEach(function(x) { x.enable(); }); },
|
||||
disable() { for (var x of this.components) x.disable(); },
|
||||
enable() { for (var x of this.components) x.enable(); },
|
||||
|
||||
this2screen(pos) { return game.camera.world2view(this.this2world(pos)); },
|
||||
screen2this(pos) { return this.world2this(game.camera.view2world(pos)); },
|
||||
|
@ -280,7 +280,7 @@ var entity = {
|
|||
|
||||
var bb = boxes.shift();
|
||||
|
||||
boxes.forEach(function(x) { bb = bbox.expand(bb, x); });
|
||||
for (var x of boxes) bb = bbox.expand(bb, x);
|
||||
|
||||
bb = bbox.move(bb, this.pos);
|
||||
|
||||
|
@ -338,7 +338,7 @@ dup(diff) {
|
|||
this.__kill = true;
|
||||
console.spam(`Killing entity of type ${this.ur}`);
|
||||
|
||||
this.timers.forEach(t => t());
|
||||
for (var t of this.timers) t();
|
||||
this.timers = [];
|
||||
Event.rm_obj(this);
|
||||
input.do_uncontrol(this);
|
||||
|
@ -358,13 +358,12 @@ dup(diff) {
|
|||
delete this.components;
|
||||
|
||||
this.clear();
|
||||
if (typeof this.stop === 'function') this.stop();
|
||||
if (this.stop instanceof Function) this.stop();
|
||||
|
||||
game.tag_clear_guid(this.guid);
|
||||
|
||||
for (var i in this) {
|
||||
if (typeof this[i] === 'object') delete this[i];
|
||||
if (typeof this[i] === 'function') delete this[i];
|
||||
if (this[i] instanceof Object || this[i] instanceof Function) delete this[i];
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -482,17 +481,17 @@ var gameobject = {
|
|||
var newpos = relative.this2world(x);
|
||||
var move = newpos.sub(this.pos);
|
||||
this.rpos = newpos;
|
||||
this.objects.forEach(x => x.move(move));
|
||||
for (var o of this.objects) o.move(move);
|
||||
},
|
||||
|
||||
set_angle(x, relative = world) {
|
||||
var newangle = relative.angle + x;
|
||||
var diff = newangle - this.angle;
|
||||
this.rangle = newangle;
|
||||
this.objects.forEach(obj => {
|
||||
for (var obj of this.objects) {
|
||||
obj.rotate(diff);
|
||||
obj.set_pos(Vector.rotate(obj.get_pos(obj.master), diff), obj.master);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
set_scale(x, relative = world) {
|
||||
|
@ -500,10 +499,10 @@ var gameobject = {
|
|||
var newscale = relative.scale.map((s,i) => x[i]*s);
|
||||
var pct = this.scale.map((s,i) => newscale[i]/s);
|
||||
this.rscale = newscale;
|
||||
this.objects.forEach(obj => {
|
||||
for (var obj of this.objects) {
|
||||
obj.grow(pct);
|
||||
obj.set_pos(obj.get_pos(obj.master).map((x,i) => x*pct[i]), obj.master);
|
||||
});
|
||||
};
|
||||
},
|
||||
|
||||
get_pos(relative = world) {
|
||||
|
@ -650,17 +649,17 @@ function apply_ur(u, ent) {
|
|||
if (typeof text === 'string')
|
||||
use(text, ent);
|
||||
else if (Array.isArray(text))
|
||||
text.forEach(path => use(path,ent));
|
||||
for (var path of text) use(path,ent);
|
||||
|
||||
if (typeof data === 'string')
|
||||
Object.merge(ent, json.decode(Resources.replstrs(data)));
|
||||
else if (Array.isArray(data)) {
|
||||
data.forEach(function(path) {
|
||||
for (var path of data) {
|
||||
if (typeof path === 'string')
|
||||
Object.merge(ent, json.decode(Resources.replstrs(data)));
|
||||
else if (typeof path === 'object')
|
||||
else if (path instanceof Object)
|
||||
Object.merge(ent,path);
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,7 @@ profile.endframe = function()
|
|||
var print_frame = function(frame, indent, title)
|
||||
{
|
||||
var avg = frame._times.reduce((sum, e) => sum += e)/frame._times.length;
|
||||
say(indent + `${title} ::::: ${profile.best_t(avg)}`);
|
||||
say(indent + `${title} ::::: ${profile.best_t(avg)} (${frame._times.length} hits)`);
|
||||
|
||||
for (var i in frame) {
|
||||
if (i === '_times') continue;
|
||||
|
|
|
@ -660,11 +660,7 @@ render.box = function(pos, wh, color = Color.white) {
|
|||
check_flush(render.flush_poly);
|
||||
};
|
||||
|
||||
render.window = function(pos, wh, color) {
|
||||
var p = pos.slice();
|
||||
p = p.add(wh.scale(0.5));
|
||||
render.box(p,wh,color);
|
||||
};
|
||||
render.window = function(pos, wh, color) { render.box(pos.add(wh.scale(0.5)),wh,color); };
|
||||
|
||||
render.text_bb = function(str, size = 1, wrap = -1, pos = [0,0])
|
||||
{
|
||||
|
|
|
@ -171,7 +171,7 @@ var listpanel = Object.copy(inputpanel, {
|
|||
|
||||
keycb() {
|
||||
if(this.value)
|
||||
this.assets = this.allassets.filter(x => x.startswith(this.value));
|
||||
this.assets = this.allassets.filter(x => x.startsWith(this.value));
|
||||
else
|
||||
this.assets = this.allassets.slice();
|
||||
for (var m in this.mumlist)
|
||||
|
|
Loading…
Reference in a new issue