fixes
This commit is contained in:
@@ -13,6 +13,19 @@ var script_fn = function script_fn(file) {
|
||||
return fn;
|
||||
}.hashify();
|
||||
|
||||
globalThis.actor_use = function actor_use(script)
|
||||
{
|
||||
var file = Resources.find_script(script);
|
||||
if (!file)
|
||||
return;
|
||||
|
||||
var padawan = {};
|
||||
|
||||
script_fn(file).call(padawan);
|
||||
|
||||
return padawan;
|
||||
}
|
||||
|
||||
globalThis.class_use = function class_use(script, config, base, callback) {
|
||||
var file = Resources.find_script(script);
|
||||
|
||||
|
||||
@@ -92,7 +92,6 @@ var sprite = {
|
||||
},
|
||||
tex_sync() {
|
||||
if (this.anim) this.stop();
|
||||
this.sync();
|
||||
this.play();
|
||||
this.transform.scale = [this.image.texture.width, this.image.texture.height];
|
||||
this._sprite.set_image(this.image);
|
||||
@@ -138,13 +137,11 @@ var sprite = {
|
||||
this.del_anim?.();
|
||||
this.anim = undefined;
|
||||
this.gameobject = undefined;
|
||||
allsprites.remove(this);
|
||||
sprite_qt.remove(this._sprite)
|
||||
},
|
||||
anchor: [0, 0],
|
||||
sync: function sync() {
|
||||
this.layer = this.gameobject.drawlayer;
|
||||
this._sprite.layer = this.layer;
|
||||
},
|
||||
set layer(v) { this._sprite.layer = v; },
|
||||
get layer() { return this._sprite.layer; },
|
||||
pick() {
|
||||
return this;
|
||||
},
|
||||
@@ -155,14 +152,6 @@ var sprite = {
|
||||
return bbox.fromcwh(realpos, dim);
|
||||
},
|
||||
};
|
||||
globalThis.allsprites = [];
|
||||
var sprite_buckets = {};
|
||||
|
||||
component.sprite_buckets = function () {
|
||||
return sprite_buckets;
|
||||
};
|
||||
|
||||
component.dynamic_sprites = [];
|
||||
|
||||
sprite.doc = {
|
||||
path: "Path to the texture.",
|
||||
@@ -243,8 +232,6 @@ component.sprite = function (obj) {
|
||||
sp.gameobject = obj;
|
||||
sp.transform = os.make_transform();
|
||||
sp.transform.parent = obj.transform;
|
||||
sp.guid = prosperon.guid();
|
||||
allsprites.push(msp);
|
||||
sp.transform.change_hook = function() {
|
||||
sprite_qt.remove(msp);
|
||||
msp.rect = sp.transform.torect();
|
||||
@@ -259,6 +246,31 @@ component.sprite = function (obj) {
|
||||
return sp;
|
||||
};
|
||||
|
||||
component.makesprite = function(obj = world, data)
|
||||
{
|
||||
var sp = Object.create(sprite);
|
||||
|
||||
var msp = os.make_sprite();
|
||||
sp._sprite = msp;
|
||||
msp.color = Color.white;
|
||||
|
||||
sp.gameobject = obj;
|
||||
sp.transform = os.make_transform();
|
||||
sp.transform.parent = obj.transform;
|
||||
sp.transform.change_hook = function() {
|
||||
sprite_qt.remove(msp);
|
||||
msp.rect = sp.transform.torect();
|
||||
msp.set_affine(sp.transform);
|
||||
sprite_qt.insert(msp);
|
||||
|
||||
/* sprite_qt.remove(sp)
|
||||
sp.rect = sp.transform.torect()
|
||||
sprite_qt.insert(sp)
|
||||
*/
|
||||
}
|
||||
return sp;
|
||||
}
|
||||
|
||||
sprite.shade = [1, 1, 1, 1];
|
||||
|
||||
return {component};
|
||||
|
||||
@@ -165,7 +165,7 @@ var entity = {
|
||||
else if (Array.isArray(text))
|
||||
for (var path of text) use(path,ent);
|
||||
*/
|
||||
ent.reparent(this);
|
||||
// ent.reparent(this);
|
||||
|
||||
/* for (var [prop, p] of Object.entries(ent)) {
|
||||
if (!p) continue;
|
||||
@@ -192,7 +192,7 @@ var entity = {
|
||||
urdiff: {},
|
||||
};
|
||||
|
||||
Object.hide(ent, "ur", "components", "objects", "timers", "guid", "master", "guid", "_ed");
|
||||
// Object.hide(ent, "ur", "components", "objects", "timers", "guid", "master", "guid", "_ed");
|
||||
|
||||
ent.sync();
|
||||
|
||||
|
||||
@@ -53,12 +53,14 @@ prosperon.mouse_wheel = function mousescroll(e) {
|
||||
|
||||
prosperon.mouse_button_down = function(e)
|
||||
{
|
||||
player[0].raw_input(modstr() + e.button, "pressed");
|
||||
player[0].mouse_input(modstr() + e.button, "pressed");
|
||||
input.mouse.buttons[e.button] = true
|
||||
}
|
||||
|
||||
prosperon.mouse_button_up = function(e)
|
||||
{
|
||||
player[0].raw_input(modstr() + e.button, "released");
|
||||
player[0].mouse_input(modstr() + e.button, "released");
|
||||
input.mouse.buttons[e.button] = false
|
||||
}
|
||||
|
||||
input.mouse = {};
|
||||
@@ -84,6 +86,11 @@ input.mouse.mode = function mouse_mode(m) {
|
||||
if (input.mouse.custom[m]) input.cursor_img(input.mouse.custom[m]);
|
||||
else input.mouse_cursor(m);
|
||||
};
|
||||
input.mouse.buttons = {
|
||||
0:false,
|
||||
1:false,
|
||||
2:false
|
||||
}
|
||||
|
||||
input.mouse.set_custom_cursor = function mouse_cursor(img, mode = input.mouse.cursor.default) {
|
||||
if (!img) delete input.mouse.custom[mode];
|
||||
|
||||
@@ -223,7 +223,7 @@ clay.button = function button(str, action, config = {})
|
||||
var hovered = undefined;
|
||||
layout.newframe = function() { hovered = undefined; }
|
||||
// mousepos given in hud coordinates
|
||||
layout.draw_commands = function draw_commands(cmds, pos = [0,0], mousepos)
|
||||
layout.draw_commands = function draw_commands(cmds, pos = [0,0], mousepos = prosperon.camera.screen2hud(input.mouse.screenpos()))
|
||||
{
|
||||
for (var cmd of cmds) {
|
||||
var config = cmd.config;
|
||||
@@ -269,7 +269,8 @@ layout.draw_debug = function draw_debug(cmds, pos = [0,0])
|
||||
}
|
||||
|
||||
layout.inputs = {};
|
||||
layout.inputs.lm = function()
|
||||
layout.inputs.mouse = {}
|
||||
layout.inputs.mouse.left = function()
|
||||
{
|
||||
if (hovered && hovered.action) hovered.action();
|
||||
}
|
||||
|
||||
@@ -677,7 +677,7 @@ function gpupresent()
|
||||
{
|
||||
try{
|
||||
var cmds = render._main.acquire_cmd_buffer();
|
||||
render_queue = sprites_to_queue(component.sprite_buckets()).concat(render_queue);
|
||||
render_queue = sprites_to_queue().concat(render_queue);
|
||||
render_camera(cmds, prosperon.camera);
|
||||
} catch(e) { console.error(e); } finally {
|
||||
var swapchain_tex = cmds.acquire_swapchain();
|
||||
@@ -756,7 +756,7 @@ function insertion_sort(arr, cmp)
|
||||
return arr
|
||||
}
|
||||
|
||||
function sprites_to_queue(sprites, ysort = false)
|
||||
function sprites_to_queue(ysort = false)
|
||||
{
|
||||
var pos = prosperon.camera.transform.pos;
|
||||
var size = prosperon.camera.size;
|
||||
@@ -1050,29 +1050,41 @@ function tile(image, rect = [0,0], color = Color.white, repeat = {})
|
||||
return;
|
||||
}
|
||||
|
||||
render.image = function image(image, rect = [0,0], rotation = 0, color = Color.white, pipeline = sprite_pipeline) {
|
||||
var std_sprite_cmd = {
|
||||
type: 'sprite',
|
||||
pipeline: sprite_pipeline,
|
||||
color: [1,1,1,1]
|
||||
}
|
||||
|
||||
render.image = function image(image, rect = [0,0], rotation = 0, color, pipeline) {
|
||||
if (!image) throw Error ('Need an image to render.')
|
||||
if (typeof image === "string")
|
||||
image = game.texture(image);
|
||||
|
||||
rect.width ??= image.texture.width;
|
||||
rect.height ??= image.texture.height;
|
||||
var T = os.make_transform();
|
||||
T.rect(rect);
|
||||
current_queue.push({
|
||||
type: 'sprite',
|
||||
transform: T,
|
||||
image,
|
||||
pipeline,
|
||||
color
|
||||
});
|
||||
var cmd = Object.create(std_sprite_cmd);
|
||||
cmd.image = image;
|
||||
cmd.rect = rect;
|
||||
if (pipeline) cmd.pipeline = pipeline;
|
||||
if (color) cmd.color = color;
|
||||
current_queue.push(cmd)
|
||||
};
|
||||
|
||||
render.images = function images(image, rects)
|
||||
render.images = function images(image, rects, config)
|
||||
{
|
||||
if (!image) throw Error ('Need an image to render.');
|
||||
if (typeof image === "string") image = game.texture(image);
|
||||
for (var rect of rects) render.image(image,rect);
|
||||
var bb = [];
|
||||
bb.width = image.texture.width;
|
||||
bb.height = image.texture.height;
|
||||
for (var rect of rects) {
|
||||
rect.__proto__ = bb;
|
||||
var cmd = Object.create(std_sprite_cmd);
|
||||
cmd.rect = rect;
|
||||
cmd.image = image;
|
||||
current_queue.push(cmd);
|
||||
}
|
||||
}
|
||||
|
||||
var tile_def = {repeat_x:true, repeat_y:true};
|
||||
@@ -1352,13 +1364,9 @@ var fpses = [];
|
||||
prosperon.process = function process() {
|
||||
var now = profile.now();
|
||||
var dt = now - last_frame_time;
|
||||
fpses.push(dt);
|
||||
if (fpses.length > 300) fpses.shift();
|
||||
console.log(1/(vector.sum(fpses)/fpses.length))
|
||||
if (dt < waittime) os.sleep(waittime-dt);
|
||||
last_frame_time = profile.now();
|
||||
|
||||
layout.newframe();
|
||||
// check for hot reloading
|
||||
if (dmon) dmon.poll(dmon_cb);
|
||||
var dt = last_frame_time - frame_t;
|
||||
@@ -1371,6 +1379,8 @@ try {
|
||||
});
|
||||
} catch(e) { console.error(e); }
|
||||
|
||||
layout.newframe();
|
||||
|
||||
try { prosperon.appupdate(dt); } catch(e) { console.error(e) }
|
||||
input.procdown();
|
||||
try {
|
||||
|
||||
@@ -2197,7 +2197,7 @@ JSC_CCALL(vector_from_to,
|
||||
to = HMM_SubV2(to,HMM_MulV2F(dir, to_offset));
|
||||
float length = HMM_DistV2(from, to);
|
||||
int steps = floor(length/space);
|
||||
int stepsize = length/(steps+1);
|
||||
float stepsize = length/(steps+1.0);
|
||||
|
||||
ret = JS_NewArray(js);
|
||||
JS_SetPropertyUint32(js,ret,0,vec22js(js,from));
|
||||
@@ -3372,7 +3372,6 @@ JSC_CCALL(renderer_make_sprite_mesh,
|
||||
|
||||
// Calculate the base index for the current quad
|
||||
size_t base = i * 4;
|
||||
|
||||
|
||||
// HMM_Mat3 trmat = transform2mat3_global(tr);
|
||||
|
||||
@@ -4229,9 +4228,18 @@ JSC_CCALL(gpu_make_sprite_mesh,
|
||||
JS_FreeValue(js,sub);
|
||||
|
||||
size_t base = i*4;
|
||||
HMM_Mat3 trmat = transform2mat3(tr);
|
||||
for (int j = 0; j < 4; j++)
|
||||
posdata[base+j] = HMM_MulM3V3(trmat, base_quad[j]).xy;
|
||||
if (tr) {
|
||||
HMM_Mat3 trmat = transform2mat3(tr);
|
||||
for (int j = 0; j < 4; j++)
|
||||
posdata[base+j] = HMM_MulM3V3(trmat, base_quad[j]).xy;
|
||||
} else {
|
||||
rect dst;
|
||||
JS_GETATOM(js,dst,sub,rect_atom,rect);
|
||||
posdata[base+0] = (HMM_Vec2){dst.x,dst.y};
|
||||
posdata[base + 1] = (HMM_Vec2){ dst.x+dst.w, dst.y };
|
||||
posdata[base + 2] = (HMM_Vec2){ dst.x, dst.y+dst.h };
|
||||
posdata[base + 3] = (HMM_Vec2){ dst.x+dst.w, dst.y+dst.h };
|
||||
}
|
||||
|
||||
uvdata[base+0] = (HMM_Vec2){src.x, src.y+src.h};
|
||||
uvdata[base+1] = (HMM_Vec2){src.x+src.w, src.y+src.h};
|
||||
@@ -4517,7 +4525,6 @@ JSC_CCALL(gpu_upload,
|
||||
memcpy(mapped_data + current_offset, items[i].data, items[i].size);
|
||||
current_offset += items[i].size;
|
||||
}
|
||||
printf("copy and unmap took %u\n", SDL_GetTicksNS()-sy);
|
||||
SDL_UnmapGPUTransferBuffer(gpu, transfer);
|
||||
|
||||
|
||||
@@ -4542,8 +4549,6 @@ JSC_CCALL(gpu_upload,
|
||||
|
||||
SDL_EndGPUCopyPass(copy_pass);
|
||||
free(items);
|
||||
|
||||
printf("UPLOAD TOOK %u ns\n", SDL_GetTicksNS()-ss);
|
||||
)
|
||||
|
||||
JSC_CCALL(gpu_wait_for_fences,
|
||||
@@ -7334,18 +7339,19 @@ JSC_CCALL(rtree_query,
|
||||
max[0] = r.x+r.w;
|
||||
max[1] = r.y+r.h;
|
||||
|
||||
/* struct rtree_iter_data data = {0};
|
||||
struct rtree_iter_data data = {0};
|
||||
data.js = js;
|
||||
data.arr = JS_NewArray(js);
|
||||
data.n = 0;
|
||||
rtree_search(tree, min, max, rtree_iter, &data);
|
||||
ret = data.arr;
|
||||
*/
|
||||
|
||||
/*
|
||||
sprite *arr = NULL;
|
||||
rtree_search(tree, min, max, rtree_array_iter, &arr);
|
||||
ret = JS_NewArrayBufferCopy(js,arr,arrlen(arr)*sizeof(*arr));
|
||||
arrfree(arr);
|
||||
*/
|
||||
)
|
||||
|
||||
JSC_CCALL(rtree_count,
|
||||
|
||||
@@ -5,14 +5,22 @@
|
||||
|
||||
#include "stb_ds.h"
|
||||
|
||||
static transform model = {
|
||||
.pos = {0,0,0},
|
||||
.scale = {1,1,1},
|
||||
.rotation = {0,0,0,1},
|
||||
.cache = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
||||
.gcache = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1},
|
||||
.dirty = 0,
|
||||
.jsparent = JS_UNDEFINED,
|
||||
.change_hook = JS_UNDEFINED
|
||||
};
|
||||
|
||||
|
||||
transform *make_transform()
|
||||
{
|
||||
transform *t = calloc(sizeof(transform),1);
|
||||
|
||||
t->scale = (HMM_Vec3){1,1,1};
|
||||
t->rotation = (HMM_Quat){0,0,0,1};
|
||||
transform_apply(t);
|
||||
t->change_hook = JS_UNDEFINED;
|
||||
transform *t = malloc(sizeof(transform));
|
||||
*t = model;
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user