removed nuke; restored quickjs due to mem leaks

This commit is contained in:
2023-10-03 22:16:38 +00:00
parent f5c7b0433d
commit 2b402d7a2d
28 changed files with 273 additions and 33698 deletions

View File

@@ -146,94 +146,6 @@ var Profile = {
get fps() { return sys_cmd(8); },
};
var Nuke = {
newline(cols) { nuke(3, cols ? cols : 1); },
newrow(height) { nuke(13,height); },
wins: {},
curwin:"",
prop(str, v) {
var ret = nuke(2, str, v);
if (Number.isFinite(ret)) return ret;
return 0;
},
treeid: 0,
tree(str) { var on = nuke(11, str, this.treeid); this.treeid++; return on; },
tree_pop() { nuke(12);},
prop_num(str, num) { return nuke(2, str, num, -1e10, 1e10, 0.01); },
prop_bool(str, val) { return nuke(4, str, val); },
checkbox(val) { return nuke(4,"",val); },
label(str) { nuke(5, str); },
textbox(str) { return nuke(7, str); },
scrolltext(str) { nuke(14,str); },
defaultrect: { x:10, y:10, w:400, h:600 },
window(name) {
this.curwin = name;
var rect;
if (name in this.wins)
rect = this.wins[name];
else
rect = { x:10, y:10, w:400, h:600 };
nuke(0, name, rect);
},
button(name) { return nuke(6, name); },
radio(name, val, cmp) { return nuke(9, name, val, cmp); },
img(path) { nuke(8, path); },
end() {
this.wins[this.curwin] = nuke(10);
this.treeid = 0;
nuke(1);
},
pprop(str, p, nonew) {
switch(typeof p) {
case 'number':
if (!nonew) Nuke.newline();
return Nuke.prop_num(str, p);
break;
case 'boolean':
if (!nonew) Nuke.newline();
return Nuke.prop_bool(str, p);
case 'object':
if (Array.isArray(p)) {
var arr = [];
Nuke.newline(p.length+1);
Nuke.label(str);
arr[0] = Nuke.pprop("#x", p[0], true);
arr[1] = Nuke.pprop("#y", p[1], true);
return arr;
} else {
if (!nonew)Nuke.newline(2);
Nuke.label(str);
Nuke.label(p);
}
break;
case 'string':
if (!nonew) Nuke.newline();
Nuke.label(str);
return Nuke.textbox(p);
default:
if (!nonew) Nuke.newline(2);
Nuke.label(str);
Nuke.label(p);
}
},
};
Object.defineProperty(Nuke, "curwin", {enumerable:false});
Object.defineProperty(Nuke, "defaultrect", {enumerable:false});
/* These controls are available during editing, and during play of debug builds */
var DebugControls = {};
DebugControls.inputs = {};

View File

@@ -19,8 +19,6 @@ var configs = {
};
var editor = {
dbgdraw: false,
selected: undefined,
selectlist: [],
grablist: [],
scalelist: [],
@@ -379,6 +377,7 @@ var editor = {
GUI.text("WORKING LAYER: " + this.working_layer, [0,520]);
GUI.text("MODE: " + this.edit_mode, [0,500]);
Debug.point(world2screen(this.cursor), 2, Color.green);
if (this.comp_info && this.sel_comp) {
@@ -387,7 +386,7 @@ var editor = {
GUI.text("0,0", world2screen([0,0]));
var clvl = this.edit_level;
var clvl = this.selectlist.length === 1 ? this.selectlist[0] : this.edit_level;
var lvlchain = [];
while (clvl !== Primum) {
lvlchain.push(clvl);
@@ -401,11 +400,12 @@ var editor = {
var ypos = 200;
lvlchain.reverse();
lvlchain.forEach(function(x) {
lvlchain.forEach(function(x,i) {
lvlcolor = colormap.sample(lvlcolorsample);
var lvlstr = x.toString();
if (x.dirty)
lvlstr += "*";
if (i === lvlchain.length-1) lvlstr += "[this]";
GUI.text(lvlstr, [0, ypos], 1, lvlcolor);
lvlcolorsample -= 0.1;
@@ -1260,15 +1260,7 @@ var inputpanel = {
stolen: {},
gui() {
Nuke.window(this.title);
Nuke.newline();
this.guibody();
if (Nuke.button("close"))
this.close();
Nuke.end();
return false;
},
guibody() {
@@ -1386,12 +1378,9 @@ var replpanel = Object.copy(inputpanel, {
title: "REPL",
closeonsubmit:false,
guibody() {
Nuke.newrow(400);
var log = cmd(84);
var f = log.prev('\n', 0,10);
Nuke.scrolltext(log.slice(f));
Nuke.newrow(30);
this.value = Nuke.textbox(this.value);
GUI.text(log, [400,60], 1, Color.white, 600, [0,0]);
GUI.text(this.value, [400,50], 1, Color.green, 600);
},
action() {
@@ -1591,7 +1580,7 @@ var openlevelpanel = Object.copy(inputpanel, {
keycb() { this.assets = this.allassets.filter(x => x.search(this.value) !== -1); },
guibody() {
this.value = Nuke.textbox(this.value);
GUI.text(this.value, [100,600], 1, Color.green, 600);
this.assets.forEach(function(x) {
if (Nuke.button(x)) {

View File

@@ -311,8 +311,10 @@ var gameobject = {
var objects = {};
this.ur.objects ??= {};
if (!Object.keys(this.objects).equal(Object.keys(this.ur.objects))) {
for (var o in this.objects)
for (var o in this.objects) {
objects[o] = this.objects[o].transform_obj();
objects[o].ur = this.objects[o].ur.toString();
}
} else {
for (var o in this.objects) {
var obj = this.objects[o].json_obj();
@@ -446,6 +448,7 @@ var gameobject = {
for (var prop in ur.objects) {
var o = ur.objects[prop];
var newobj = obj.spawn(prototypes.get_ur(o.ur));
if (!newobj) continue;
obj.rename_obj(newobj.toString(), prop);
}
}
@@ -642,6 +645,10 @@ prototypes.file2ur = function(file)
*/
prototypes.get_ur = function(name)
{
if (!name) {
Log.warn(`Can't get ur from an undefined.`);
return;
}
var urpath = name;
if (urpath.includes('/'))
urpath = prototypes.file2ur(name);

View File

@@ -1,13 +1,23 @@
var GUI = {
text(str, pos, size, color, wrap) {
text(str, pos, size, color, wrap, anchor) {
size ??= 1;
color ??= Color.white;
wrap ??= -1;
anchor ??= [0,1];
var bb = cmd(118, str, size, wrap);
var opos = [bb.r, bb.t];
var h = ui_text(str, pos, size, color, wrap);
var w = bb.r*2;
var h = bb.t*2;
//ui_text draws with an anchor on top left corner
var p = pos.slice();
p.x -= w * anchor.x;
bb.r += (w*anchor.x);
bb.l += (w*anchor.x);
p.y += h * (1 - anchor.y);
bb.t += h*(1-anchor.y);
bb.b += h*(1-anchor.y);
ui_text(str, p, size, color, wrap);
return bb;
},