debug draw fix
This commit is contained in:
parent
9045f435a0
commit
8172620214
|
@ -32,6 +32,7 @@ struct rgba kinematic_color = {255, 194, 64, 255};
|
||||||
struct rgba static_color = {73,209,80,255};
|
struct rgba static_color = {73,209,80,255};
|
||||||
|
|
||||||
static const unsigned char col_alpha = 40;
|
static const unsigned char col_alpha = 40;
|
||||||
|
static const float sensor_seg = 10;
|
||||||
|
|
||||||
unsigned int category_masks[32];
|
unsigned int category_masks[32];
|
||||||
|
|
||||||
|
@ -338,7 +339,12 @@ void phys2d_dbgdrawbox(struct phys2d_box *box) {
|
||||||
for (int i = 0; i < n; i++)
|
for (int i = 0; i < n; i++)
|
||||||
points[i] = bodytransformpoint(cpShapeGetBody(box->shape.shape), cpPolyShapeGetVert(box->shape.shape, i));
|
points[i] = bodytransformpoint(cpShapeGetBody(box->shape.shape), cpPolyShapeGetVert(box->shape.shape, i));
|
||||||
|
|
||||||
draw_poly(points, n, shape_color(box->shape.shape), shape_color(box->shape.shape), 0);
|
struct rgba c = shape_color(box->shape.shape);
|
||||||
|
struct rgba cl = c;
|
||||||
|
cl.a = col_alpha;
|
||||||
|
float seglen = cpShapeGetSensor(box->shape.shape) ? sensor_seg : 0;
|
||||||
|
draw_line(points, n, cl,seglen, 1, 0);
|
||||||
|
draw_poly(points, n, c);
|
||||||
}
|
}
|
||||||
/************** POLYGON ************/
|
/************** POLYGON ************/
|
||||||
|
|
||||||
|
@ -404,7 +410,9 @@ void phys2d_dbgdrawpoly(struct phys2d_poly *poly) {
|
||||||
for (int i = 0; i < n; i++)
|
for (int i = 0; i < n; i++)
|
||||||
points[i] = bodytransformpoint(cpShapeGetBody(poly->shape.shape), cpPolyShapeGetVert(poly->shape.shape, i));
|
points[i] = bodytransformpoint(cpShapeGetBody(poly->shape.shape), cpPolyShapeGetVert(poly->shape.shape, i));
|
||||||
|
|
||||||
draw_poly(points, n, color, line_color, 0);
|
draw_poly(points, n, color);
|
||||||
|
float seglen = cpShapeGetSensor(poly->shape.shape) ? sensor_seg : 0;
|
||||||
|
draw_line(points, n, line_color, seglen, 1, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/****************** EDGE 2D**************/
|
/****************** EDGE 2D**************/
|
||||||
|
@ -529,7 +537,7 @@ void phys2d_dbgdrawedge(struct phys2d_edge *edge) {
|
||||||
drawpoints[i] = bodytransformpoint(cpShapeGetBody(edge->shapes[0]), drawpoints[i]);
|
drawpoints[i] = bodytransformpoint(cpShapeGetBody(edge->shapes[0]), drawpoints[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
float seglen = cpShapeGetSensor(edge->shapes[0]) ? 10 : 1;
|
float seglen = cpShapeGetSensor(edge->shapes[0]) ? sensor_seg : 0;
|
||||||
struct rgba color = shape_color(edge->shapes[0]);
|
struct rgba color = shape_color(edge->shapes[0]);
|
||||||
struct rgba line_color = color;
|
struct rgba line_color = color;
|
||||||
color.a = col_alpha;
|
color.a = col_alpha;
|
||||||
|
|
|
@ -40,6 +40,7 @@ struct line_vert {
|
||||||
float dist;
|
float dist;
|
||||||
struct rgba color;
|
struct rgba color;
|
||||||
float seg_len;
|
float seg_len;
|
||||||
|
float seg_speed;
|
||||||
};
|
};
|
||||||
static int line_c = 0;
|
static int line_c = 0;
|
||||||
static int line_v = 0;
|
static int line_v = 0;
|
||||||
|
@ -186,7 +187,8 @@ void debugdraw_init()
|
||||||
[0].format = SG_VERTEXFORMAT_FLOAT2, /* pos */
|
[0].format = SG_VERTEXFORMAT_FLOAT2, /* pos */
|
||||||
[1].format = SG_VERTEXFORMAT_FLOAT, /* dist */
|
[1].format = SG_VERTEXFORMAT_FLOAT, /* dist */
|
||||||
[2].format = SG_VERTEXFORMAT_UBYTE4N, /* color */
|
[2].format = SG_VERTEXFORMAT_UBYTE4N, /* color */
|
||||||
[3].format = SG_VERTEXFORMAT_FLOAT /* seg length */
|
[3].format = SG_VERTEXFORMAT_FLOAT, /* seg length */
|
||||||
|
[4].format = SG_VERTEXFORMAT_FLOAT /* dashed line speed */
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
.primitive_type = SG_PRIMITIVETYPE_LINES,
|
.primitive_type = SG_PRIMITIVETYPE_LINES,
|
||||||
|
@ -306,7 +308,7 @@ void debugdraw_init()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_line(cpVect *a_points, int a_n, struct rgba color, float seg_len, int closed)
|
void draw_line(cpVect *a_points, int a_n, struct rgba color, float seg_len, int closed, float seg_speed)
|
||||||
{
|
{
|
||||||
if (a_n < 2) return;
|
if (a_n < 2) return;
|
||||||
|
|
||||||
|
@ -325,6 +327,7 @@ void draw_line(cpVect *a_points, int a_n, struct rgba color, float seg_len, int
|
||||||
v[i].dist = dist;
|
v[i].dist = dist;
|
||||||
v[i].color = color;
|
v[i].color = color;
|
||||||
v[i].seg_len = seg_len;
|
v[i].seg_len = seg_len;
|
||||||
|
v[i].seg_speed = seg_speed;
|
||||||
dist += cpvdist(points[i], points[i+1]);
|
dist += cpvdist(points[i], points[i+1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,6 +335,7 @@ void draw_line(cpVect *a_points, int a_n, struct rgba color, float seg_len, int
|
||||||
v[n-1].dist = dist;
|
v[n-1].dist = dist;
|
||||||
v[n-1].color = color;
|
v[n-1].color = color;
|
||||||
v[n-1].seg_len = seg_len;
|
v[n-1].seg_len = seg_len;
|
||||||
|
v[n-1].seg_speed = seg_speed;
|
||||||
|
|
||||||
int i_c = (n-1)*2;
|
int i_c = (n-1)*2;
|
||||||
|
|
||||||
|
@ -483,7 +487,7 @@ void draw_edge(cpVect *points, int n, struct rgba color, int thickness, int clos
|
||||||
|
|
||||||
/* Now drawing the line outlines */
|
/* Now drawing the line outlines */
|
||||||
if (thickness == 1) {
|
if (thickness == 1) {
|
||||||
draw_line(points,n,line_color,line_seg, 0);
|
draw_line(points,n,line_color,line_seg, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
/* Draw inside and outside lines */
|
/* Draw inside and outside lines */
|
||||||
cpVect in_p[n];
|
cpVect in_p[n];
|
||||||
|
@ -495,48 +499,43 @@ void draw_edge(cpVect *points, int n, struct rgba color, int thickness, int clos
|
||||||
for (int i = 1, v = 0; i < n*2; i+=2,v++)
|
for (int i = 1, v = 0; i < n*2; i+=2,v++)
|
||||||
out_p[v] = vertices[i].pos;
|
out_p[v] = vertices[i].pos;
|
||||||
|
|
||||||
draw_line(in_p,n,line_color,line_seg,1);
|
draw_line(in_p,n,line_color,line_seg,1,0);
|
||||||
draw_line(out_p,n,line_color,line_seg,1);
|
draw_line(out_p,n,line_color,line_seg,1,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_circle(int x, int y, float radius, float pixels, struct rgba color, float segsize)
|
void draw_circle(int x, int y, float radius, float pixels, struct rgba color, float seg)
|
||||||
{
|
{
|
||||||
struct circle_vertex cv;
|
struct circle_vertex cv;
|
||||||
cv.pos[0] = x;
|
cv.pos[0] = x;
|
||||||
cv.pos[1] = y;
|
cv.pos[1] = y;
|
||||||
cv.radius = radius;
|
cv.radius = radius;
|
||||||
cv.color = color;
|
cv.color = color;
|
||||||
cv.segsize = segsize/radius;
|
cv.segsize = seg/radius;
|
||||||
cv.fill = pixels/radius;
|
cv.fill = pixels/radius;
|
||||||
memcpy(circle_b+circle_count, &cv, sizeof(struct circle_vertex));
|
memcpy(circle_b+circle_count, &cv, sizeof(struct circle_vertex));
|
||||||
circle_count++;
|
circle_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_rect(int x, int y, int w, int h, struct rgba color)
|
|
||||||
{
|
|
||||||
float hw = w / 2.f;
|
|
||||||
float hh = h / 2.f;
|
|
||||||
|
|
||||||
cpVect verts[4] = {
|
|
||||||
{ .x = x-hw, .y = y-hh },
|
|
||||||
{ .x = x+hw, .y = y-hh },
|
|
||||||
{ .x = x+hw, .y = y+hh },
|
|
||||||
{ .x = x-hw, .y = y+hh }
|
|
||||||
};
|
|
||||||
|
|
||||||
draw_poly(verts, 4, color, color, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void draw_box(struct cpVect c, struct cpVect wh, struct rgba color)
|
void draw_box(struct cpVect c, struct cpVect wh, struct rgba color)
|
||||||
{
|
{
|
||||||
draw_rect(c.x, c.y, wh.x, wh.y, color);
|
float hw = wh.x / 2.f;
|
||||||
|
float hh = wh.y / 2.f;
|
||||||
|
|
||||||
|
cpVect verts[4] = {
|
||||||
|
{ .x = c.x-hw, .y = c.y-hh },
|
||||||
|
{ .x = c.x+hw, .y = c.y-hh },
|
||||||
|
{ .x = c.x+hw, .y = c.y+hh },
|
||||||
|
{ .x = c.x-hw, .y = c.y+hh }
|
||||||
|
};
|
||||||
|
|
||||||
|
draw_poly(verts, 4, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_arrow(struct cpVect start, struct cpVect end, struct rgba color, int capsize)
|
void draw_arrow(struct cpVect start, struct cpVect end, struct rgba color, int capsize)
|
||||||
{
|
{
|
||||||
cpVect points[2] = {start, end};
|
cpVect points[2] = {start, end};
|
||||||
draw_line(points, 2, color, 0, 0);
|
draw_line(points, 2, color, 0, 0,0);
|
||||||
draw_cppoint(end, capsize, color);
|
draw_cppoint(end, capsize, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,10 +579,8 @@ void draw_points(struct cpVect *points, int n, float size, struct rgba color)
|
||||||
draw_cppoint(points[i], size, color);
|
draw_cppoint(points[i], size, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_poly(cpVect *points, int n, struct rgba color, struct rgba line_color, float line_seg)
|
void draw_poly(cpVect *points, int n, struct rgba color)
|
||||||
{
|
{
|
||||||
draw_line(points, n, line_color, line_seg, 1);
|
|
||||||
|
|
||||||
/* Find polygon mesh */
|
/* Find polygon mesh */
|
||||||
int tric = n - 2;
|
int tric = n - 2;
|
||||||
|
|
||||||
|
|
|
@ -8,16 +8,14 @@ void debugdraw_init();
|
||||||
void draw_cppoint(struct cpVect point, float r, struct rgba color);
|
void draw_cppoint(struct cpVect point, float r, struct rgba color);
|
||||||
void draw_points(struct cpVect *points, int n, float size, struct rgba color);
|
void draw_points(struct cpVect *points, int n, float size, struct rgba color);
|
||||||
|
|
||||||
void draw_line(cpVect *points, int n, struct rgba color, float seg_len, int closed);
|
void draw_line(cpVect *points, int n, struct rgba color, float seg_len, int closed, float seg_speed);
|
||||||
void draw_arrow(struct cpVect start, struct cpVect end, struct rgba, int capsize);
|
void draw_arrow(struct cpVect start, struct cpVect end, struct rgba, int capsize);
|
||||||
void draw_edge(struct cpVect *points, int n, struct rgba color, int thickness, int closed, int flags, struct rgba line_color, float line_seg);
|
void draw_edge(struct cpVect *points, int n, struct rgba color, int thickness, int closed, int flags, struct rgba line_color, float line_seg);
|
||||||
|
|
||||||
/* pixels - how many pixels thick, segsize - dashed line seg len */
|
/* pixels - how many pixels thick, segsize - dashed line seg len */
|
||||||
void draw_circle(int x, int y, float radius, float pixels, struct rgba color, float segsize);
|
void draw_circle(int x, int y, float radius, float pixels, struct rgba color, float seg);
|
||||||
|
|
||||||
void draw_rect(int x, int y, int w, int h, struct rgba color);
|
|
||||||
void draw_box(struct cpVect c, struct cpVect wh, struct rgba color);
|
void draw_box(struct cpVect c, struct cpVect wh, struct rgba color);
|
||||||
void draw_poly(cpVect *points, int n, struct rgba color, struct rgba line_color, float line_seg);
|
void draw_poly(cpVect *points, int n, struct rgba color);
|
||||||
|
|
||||||
void draw_grid(int width, int span, struct rgba color);
|
void draw_grid(int width, int span, struct rgba color);
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ void mYughLog(int category, int priority, int line, const char *file, const char
|
||||||
|
|
||||||
log_print(buffer);
|
log_print(buffer);
|
||||||
|
|
||||||
if (priority >= 2)
|
if (category == 1 && priority >= 2)
|
||||||
js_stacktrace();
|
js_stacktrace();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -968,6 +968,29 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
||||||
case 102:
|
case 102:
|
||||||
eye = HMM_AddV3(eye,(HMM_Vec3){0,0,0.01});
|
eye = HMM_AddV3(eye,(HMM_Vec3){0,0,0.01});
|
||||||
break;
|
break;
|
||||||
|
case 103:
|
||||||
|
return num2js(js2go(argv[1])->scale);
|
||||||
|
|
||||||
|
case 104:
|
||||||
|
return bool2js(js2go(argv[1])->flipx);
|
||||||
|
|
||||||
|
case 105:
|
||||||
|
return bool2js(js2go(argv[1])->flipy);
|
||||||
|
|
||||||
|
case 106:
|
||||||
|
js2go(argv[1])->e = js2num(argv[2]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 107:
|
||||||
|
return num2js(js2go(argv[1])->e);
|
||||||
|
|
||||||
|
case 108:
|
||||||
|
js2go(argv[1])->f = js2num(argv[2]);
|
||||||
|
break;
|
||||||
|
case 109:
|
||||||
|
return num2js(js2go(argv[1])->f);
|
||||||
|
case 110:
|
||||||
|
return num2js(js2go(argv[1])
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str)
|
if (str)
|
||||||
|
@ -1355,6 +1378,12 @@ JSValue duk_cmd_circle2d(JSContext *js, JSValueConst this, int argc, JSValueCons
|
||||||
case 1:
|
case 1:
|
||||||
circle->offset = js2vec2(argv[2]);
|
circle->offset = js2vec2(argv[2]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
return num2js(circle->radius);
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
return vec2js(circle->offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
phys2d_applycircle(circle);
|
phys2d_applycircle(circle);
|
||||||
|
|
|
@ -226,17 +226,16 @@ struct sFont *MakeFont(const char *fontfile, int height) {
|
||||||
|
|
||||||
static int curchar = 0;
|
static int curchar = 0;
|
||||||
|
|
||||||
void draw_char_box(struct Character c, float cursor[2], float scale, float color[3]) {
|
void draw_char_box(struct Character c, cpVect cursor, float scale, struct rgba color)
|
||||||
int x, y, w, h;
|
{
|
||||||
|
cpVect wh;
|
||||||
|
|
||||||
x = cursor[0];
|
wh.x = 8 * scale;
|
||||||
y = cursor[1];
|
wh.y = 14;
|
||||||
w = 8 * scale;
|
cursor.x += wh.x / 2.f;
|
||||||
h = 14;
|
cursor.y += wh.y / 2.f;
|
||||||
x += w / 2.f;
|
|
||||||
y += h / 2.f;
|
|
||||||
|
|
||||||
draw_rect(x, y, w, h, color);
|
draw_box(cursor, wh, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
void text_flush() {
|
void text_flush() {
|
||||||
|
|
|
@ -26,25 +26,15 @@ var component = {
|
||||||
|
|
||||||
var sprite = clone(component, {
|
var sprite = clone(component, {
|
||||||
name: "sprite",
|
name: "sprite",
|
||||||
_path: "",
|
path: "",
|
||||||
get path() { return this._path; },
|
layer: 0,
|
||||||
set path(x) { this._path = x; this.load_img(x); },
|
pos: [0,0],
|
||||||
_pos: [0, 0],
|
enabled: true,
|
||||||
get layer() {
|
get visible() { return this.enabled; },
|
||||||
if (!this.gameobject)
|
set visible(x) { this.enabled = x; },
|
||||||
return 0;
|
angle: 0,
|
||||||
else
|
rect: {s0:0, s1: 1, t0: 0, t1: 1},
|
||||||
return this.gameobject.draw_layer;
|
|
||||||
},
|
|
||||||
|
|
||||||
get pos() { return this._pos; },
|
|
||||||
set pos(x) {
|
|
||||||
this._pos = x;
|
|
||||||
this.sync();
|
|
||||||
},
|
|
||||||
|
|
||||||
input_kp9_pressed() { this.pos = [0,0]; },
|
|
||||||
input_kp8_pressed() { this.pos = [-0.5,0]; },
|
|
||||||
input_kp7_pressed() { this.pos = [-1,0]; },
|
input_kp7_pressed() { this.pos = [-1,0]; },
|
||||||
input_kp6_pressed() { this.pos = [0,-0.5]; },
|
input_kp6_pressed() { this.pos = [0,-0.5]; },
|
||||||
input_kp5_pressed() { this.pos = [-0.5,-0.5]; },
|
input_kp5_pressed() { this.pos = [-0.5,-0.5]; },
|
||||||
|
@ -65,57 +55,30 @@ var sprite = clone(component, {
|
||||||
return cwh2bb(realpos, dim);
|
return cwh2bb(realpos, dim);
|
||||||
},
|
},
|
||||||
|
|
||||||
set asset(x) {
|
|
||||||
if (!x) return;
|
|
||||||
if (!x.endsWith(".png")) {
|
|
||||||
Log.error("Can't set texture to a non image.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.path = x;
|
|
||||||
Log.info("path is now " + x);
|
|
||||||
this.sync();
|
|
||||||
},
|
|
||||||
|
|
||||||
_enabled: true,
|
|
||||||
set enabled(x) { this._enabled = x; cmd(20, this.id, x); },
|
|
||||||
get enabled() { return this._enabled; return cmd(21, this.id); },
|
|
||||||
get visible() { return this.enabled; },
|
|
||||||
set visible(x) { this.enabled = x; },
|
|
||||||
|
|
||||||
_angle: 0,
|
|
||||||
get angle() { return this._angle; },
|
|
||||||
set angle(x) {
|
|
||||||
this._angle = x;
|
|
||||||
sync();
|
|
||||||
},
|
|
||||||
|
|
||||||
make(go) {
|
make(go) {
|
||||||
var sprite = clone(this);
|
var old = this;
|
||||||
Object.defineProperty(sprite, 'id', {value:make_sprite(go,this.path,this.pos)});
|
var sprite = clone(this, {
|
||||||
sprite.sync();
|
get enabled() { return cmd(21,this.id); },
|
||||||
|
set enabled(x) { cmd(20,this.id,x); },
|
||||||
|
set color(x) { cmd(96,this.id,x); },
|
||||||
|
set pos(x) { cmd(37,this.id,x); },
|
||||||
|
set layer(x) { cmd(60, this.id, x); },
|
||||||
|
get layer() { return this.gameobject.draw_layer; },
|
||||||
|
set path(x) { cmd(12,this.id,x,this.rect); },
|
||||||
|
|
||||||
|
kill() { cmd(9,this.id); },
|
||||||
|
});
|
||||||
|
|
||||||
|
var id = make_sprite(go,old.path,old.pos);
|
||||||
|
|
||||||
|
Object.defineProperty(sprite, 'id', {value:id});
|
||||||
|
|
||||||
|
Object.assign(sprite, this);
|
||||||
|
|
||||||
return sprite;
|
return sprite;
|
||||||
},
|
},
|
||||||
|
|
||||||
rect: {s0:0, s1: 1, t0: 0, t1: 1},
|
|
||||||
|
|
||||||
sync() {
|
|
||||||
if (!this.hasOwn('id')) return;
|
|
||||||
cmd(60, this.id, this.layer);
|
|
||||||
cmd(37, this.id, this.pos);
|
|
||||||
},
|
|
||||||
|
|
||||||
set color(x) {
|
|
||||||
cmd(96, this.id, x);
|
|
||||||
},
|
|
||||||
|
|
||||||
load_img(img) {
|
|
||||||
cmd(12, this.id, img, this.rect);
|
|
||||||
},
|
|
||||||
|
|
||||||
kill() {
|
|
||||||
cmd(9, this.id);
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/* Container to play sprites and anim2ds */
|
/* Container to play sprites and anim2ds */
|
||||||
|
@ -217,14 +180,7 @@ var char2d = clone(sprite, {
|
||||||
/* For all colliders, "shape" is a pointer to a phys2d_shape, "id" is a pointer to the shape data */
|
/* For all colliders, "shape" is a pointer to a phys2d_shape, "id" is a pointer to the shape data */
|
||||||
var collider2d = clone(component, {
|
var collider2d = clone(component, {
|
||||||
name: "collider 2d",
|
name: "collider 2d",
|
||||||
|
sensor: false,
|
||||||
_sensor: false,
|
|
||||||
set sensor(x) {
|
|
||||||
this._sensor = x;
|
|
||||||
if (this.shape)
|
|
||||||
cmd(18, this.shape, x);
|
|
||||||
},
|
|
||||||
get sensor() { return this._sensor; },
|
|
||||||
|
|
||||||
input_s_pressed() {
|
input_s_pressed() {
|
||||||
if (!Keys.alt()) return;
|
if (!Keys.alt()) return;
|
||||||
|
@ -238,25 +194,28 @@ var collider2d = clone(component, {
|
||||||
this.enabled = !this.enabled;
|
this.enabled = !this.enabled;
|
||||||
},
|
},
|
||||||
|
|
||||||
coll_sync() {
|
enabled: true,
|
||||||
cmd(18, this.shape, this.sensor);
|
|
||||||
},
|
|
||||||
|
|
||||||
_enabled: true,
|
|
||||||
set enabled(x) {this._enabled = x; if (this.id) cmd(22, this.id, x); },
|
|
||||||
get enabled() { return this._enabled; },
|
get enabled() { return this._enabled; },
|
||||||
kill() {}, /* No killing is necessary - it is done through the gameobject's kill */
|
kill() {}, /* No killing is necessary - it is done through the gameobject's kill */
|
||||||
|
|
||||||
register_hit(fn, obj) {
|
register_hit(fn, obj) {
|
||||||
register_collide(1, fn, obj, this.gameobject.body, this.shape);
|
register_collide(1, fn, obj, this.gameobject.body, this.shape);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
make_fns: {
|
||||||
|
set sensor(x) { cmd(18,this.shape,x); },
|
||||||
|
set enabled(x) { cmd(22,this.id,x); }
|
||||||
|
},
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var polygon2d = clone(collider2d, {
|
var polygon2d = clone(collider2d, {
|
||||||
name: "polygon 2d",
|
name: "polygon 2d",
|
||||||
points: [],
|
points: [],
|
||||||
help: "Ctrl-click Add a point\nShift-click Remove a point",
|
mirrorx: false,
|
||||||
|
mirrory: false,
|
||||||
|
|
||||||
clone(spec) {
|
clone(spec) {
|
||||||
var obj = Object.create(this);
|
var obj = Object.create(this);
|
||||||
obj.points = this.points.copy();
|
obj.points = this.points.copy();
|
||||||
|
@ -266,6 +225,7 @@ var polygon2d = clone(collider2d, {
|
||||||
|
|
||||||
make(go) {
|
make(go) {
|
||||||
var poly = Object.create(this);
|
var poly = Object.create(this);
|
||||||
|
complete_assign(poly, this.make_fns);
|
||||||
Object.assign(poly, make_poly2d(go, this.points));
|
Object.assign(poly, make_poly2d(go, this.points));
|
||||||
Object.defineProperty(poly, 'id', {enumerable:false});
|
Object.defineProperty(poly, 'id', {enumerable:false});
|
||||||
Object.defineProperty(poly, 'shape', {enumerable:false});
|
Object.defineProperty(poly, 'shape', {enumerable:false});
|
||||||
|
@ -280,6 +240,8 @@ var polygon2d = clone(collider2d, {
|
||||||
return points2bb(scaledpoints);
|
return points2bb(scaledpoints);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
help: "Ctrl-click Add a point\nShift-click Remove a point",
|
||||||
|
|
||||||
input_f10_pressed() {
|
input_f10_pressed() {
|
||||||
this.points = sortpointsccw(this.points);
|
this.points = sortpointsccw(this.points);
|
||||||
},
|
},
|
||||||
|
@ -353,9 +315,6 @@ var polygon2d = clone(collider2d, {
|
||||||
return cmd(80, this.shape);
|
return cmd(80, this.shape);
|
||||||
},
|
},
|
||||||
|
|
||||||
mirrorx: false,
|
|
||||||
mirrory: false,
|
|
||||||
|
|
||||||
input_m_pressed() {
|
input_m_pressed() {
|
||||||
if (Keys.ctrl())
|
if (Keys.ctrl())
|
||||||
this.mirrory = !this.mirrory;
|
this.mirrory = !this.mirrory;
|
||||||
|
@ -485,15 +444,24 @@ var bucket = clone(collider2d, {
|
||||||
|
|
||||||
samples: 10,
|
samples: 10,
|
||||||
points:[],
|
points:[],
|
||||||
|
thickness:0, /* Number of pixels out the edge is */
|
||||||
|
|
||||||
make(go) {
|
make(go) {
|
||||||
var edge = Object.create(this);
|
var edge = Object.create(this);
|
||||||
Object.assign(edge, make_edge2d(go, this.points, this.thickness));
|
Object.assign(edge, make_edge2d(go, this.points, this.thickness));
|
||||||
Object.defineProperty(edge, 'id', {enumerable:false});
|
Object.defineProperty(edge, 'id', {enumerable:false});
|
||||||
Object.defineProperty(edge, 'shape', {enumerable:false});
|
Object.defineProperty(edge, 'shape', {enumerable:false});
|
||||||
|
complete_assign(edge, {
|
||||||
|
set thickness(x) {
|
||||||
|
cmd_edge2d(1,this.id,x);
|
||||||
|
}
|
||||||
|
});
|
||||||
edge.defn('points', []);
|
edge.defn('points', []);
|
||||||
// Object.defineProperty(edge, 'points', {enumerable:false});
|
|
||||||
edge.sync();
|
edge.sync();
|
||||||
|
|
||||||
|
var synctriggers = ['samples', 'thickness'];
|
||||||
|
|
||||||
return edge;
|
return edge;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -519,12 +487,6 @@ var bucket = clone(collider2d, {
|
||||||
this.sync();
|
this.sync();
|
||||||
},
|
},
|
||||||
|
|
||||||
_thickness:0, /* Number of pixels out the edge is */
|
|
||||||
get thickness() { return this._thickness; },
|
|
||||||
set thickness(x) {
|
|
||||||
this._thickness = Math.max(x, 0);
|
|
||||||
cmd_edge2d(1, this.id, this._thickness);
|
|
||||||
},
|
|
||||||
|
|
||||||
input_v_pressrep() {
|
input_v_pressrep() {
|
||||||
if (!Keys.alt()) return;
|
if (!Keys.alt()) return;
|
||||||
|
@ -638,14 +600,8 @@ var bucket = clone(collider2d, {
|
||||||
|
|
||||||
var circle2d = clone(collider2d, {
|
var circle2d = clone(collider2d, {
|
||||||
name: "circle 2d",
|
name: "circle 2d",
|
||||||
get radius() {
|
radius: 10,
|
||||||
return this.rradius;
|
offset: [0,0],
|
||||||
},
|
|
||||||
rradius: 10,
|
|
||||||
set radius(x) {
|
|
||||||
this.rradius = x;
|
|
||||||
cmd_circle2d(0, this.id, this.rradius);
|
|
||||||
},
|
|
||||||
|
|
||||||
get boundingbox() {
|
get boundingbox() {
|
||||||
if (!this.gameobject) return null;
|
if (!this.gameobject) return null;
|
||||||
|
@ -656,11 +612,7 @@ var circle2d = clone(collider2d, {
|
||||||
get scale() { return this.radius; },
|
get scale() { return this.radius; },
|
||||||
set scale(x) { this.radius = x; },
|
set scale(x) { this.radius = x; },
|
||||||
|
|
||||||
ofset: [0,0],
|
get pos() { return this.offset; },
|
||||||
get offset() { return this.ofset; },
|
|
||||||
set offset(x) { this.ofset = x; cmd_circle2d(1, this.id, this.ofset); },
|
|
||||||
|
|
||||||
get pos() { return this.ofset; },
|
|
||||||
set pos(x) { this.offset = x; },
|
set pos(x) { this.offset = x; },
|
||||||
|
|
||||||
make(go) {
|
make(go) {
|
||||||
|
@ -669,6 +621,18 @@ var circle2d = clone(collider2d, {
|
||||||
Object.assign(circle, circ);
|
Object.assign(circle, circ);
|
||||||
Object.defineProperty(circle, 'id', {enumerable:false});
|
Object.defineProperty(circle, 'id', {enumerable:false});
|
||||||
Object.defineProperty(circle, 'shape', {enumerable:false});
|
Object.defineProperty(circle, 'shape', {enumerable:false});
|
||||||
|
|
||||||
|
complete_assign(circle, {
|
||||||
|
set radius(x) { cmd_circle2d(0,this.id,x); },
|
||||||
|
get radius() { return cmd_circle2d(3,this.id); },
|
||||||
|
|
||||||
|
set offset(x) { cmd_circle2d(1,this.id,this.offset); },
|
||||||
|
get offset() { return cmd_circle2d(4,this.id); },
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
complete_assign(circle, this.make_fns);
|
||||||
|
|
||||||
return circle;
|
return circle;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -678,12 +642,6 @@ var circle2d = clone(collider2d, {
|
||||||
this.radius = Nuke.pprop("Radius", this.radius);
|
this.radius = Nuke.pprop("Radius", this.radius);
|
||||||
this.offset = Nuke.pprop("offset", this.offset);
|
this.offset = Nuke.pprop("offset", this.offset);
|
||||||
},
|
},
|
||||||
|
|
||||||
sync() {
|
|
||||||
cmd_circle2d(0, this.id, this.rradius);
|
|
||||||
cmd_circle2d(-1, this.id);
|
|
||||||
this.coll_sync();
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1311,9 +1311,7 @@ var gameobject = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_mass: 1,
|
mass: 1,
|
||||||
set mass(x) { this._mass = Math.max(0,x); },
|
|
||||||
get mass() { return this._mass; },
|
|
||||||
bodytype: {
|
bodytype: {
|
||||||
dynamic: 0,
|
dynamic: 0,
|
||||||
kinematic: 1,
|
kinematic: 1,
|
||||||
|
@ -1331,19 +1329,11 @@ var gameobject = {
|
||||||
this.phys = Nuke.radio("kinematic", this.phys, 1);
|
this.phys = Nuke.radio("kinematic", this.phys, 1);
|
||||||
this.phys = Nuke.radio("static", this.phys, 2);
|
this.phys = Nuke.radio("static", this.phys, 2);
|
||||||
},
|
},
|
||||||
_friction: 0,
|
friction: 0,
|
||||||
set friction(x) { this._friction = Math.max(0,x); },
|
elasticity: 0,
|
||||||
get friction() { return this._friction; },
|
flipx: false,
|
||||||
_elasticity: 0,
|
flipy: false,
|
||||||
set elasticity(x) { this._elasticity = Math.max(0, x); },
|
|
||||||
get elasticity() { return this._elasticity; },
|
|
||||||
|
|
||||||
_flipx: false,
|
|
||||||
_flipy: false,
|
|
||||||
get flipx() { return this._flipx; },
|
|
||||||
set flipx(x) { this._flipx = x; if (this.alive) cmd(55, this.body, x); this.sync(); },
|
|
||||||
get flipy() { return this._flipy; },
|
|
||||||
set flipy(x) { this._flipy = x; if (this.alive) cmd(56, this.body, x); this.sync(); },
|
|
||||||
|
|
||||||
body: -1,
|
body: -1,
|
||||||
controlled: false,
|
controlled: false,
|
||||||
|
@ -1379,14 +1369,7 @@ var gameobject = {
|
||||||
|
|
||||||
varname: "",
|
varname: "",
|
||||||
|
|
||||||
_pos: [0,0],
|
pos: [0,0],
|
||||||
set pos(x) { this._pos = x; set_body(2, this.body, x); this.sync(); },
|
|
||||||
get pos() {
|
|
||||||
if (this.body !== -1)
|
|
||||||
return q_body(1, this.body);
|
|
||||||
else
|
|
||||||
return this._pos;
|
|
||||||
},
|
|
||||||
|
|
||||||
set relpos(x) {
|
set relpos(x) {
|
||||||
if (!this.level) {
|
if (!this.level) {
|
||||||
|
@ -1404,14 +1387,7 @@ var gameobject = {
|
||||||
return Vector.rotate(offset, -Math.deg2rad(this.level.angle));
|
return Vector.rotate(offset, -Math.deg2rad(this.level.angle));
|
||||||
},
|
},
|
||||||
|
|
||||||
_angle: 0,
|
angle: 0,
|
||||||
set angle(x) { this._angle = x; set_body(0, this.body, Math.deg2rad(x)); this.sync(); },
|
|
||||||
get angle() {
|
|
||||||
if (this.body !== -1)
|
|
||||||
return Math.rad2deg(q_body(2, this.body)) % 360;
|
|
||||||
else
|
|
||||||
return this._angle;
|
|
||||||
},
|
|
||||||
|
|
||||||
get relangle() {
|
get relangle() {
|
||||||
if (!this.level) return this.angle;
|
if (!this.level) return this.angle;
|
||||||
|
@ -1447,9 +1423,6 @@ var gameobject = {
|
||||||
set_body(1, this.body, this.phys);
|
set_body(1, this.body, this.phys);
|
||||||
cmd(75,this.body,this.layer);
|
cmd(75,this.body,this.layer);
|
||||||
cmd(54, this.body);
|
cmd(54, this.body);
|
||||||
if (this.components)
|
|
||||||
for (var key in this.components)
|
|
||||||
this.components[key].sync();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
syncall() {
|
syncall() {
|
||||||
|
@ -1532,8 +1505,6 @@ var gameobject = {
|
||||||
prop_obj() {
|
prop_obj() {
|
||||||
var obj = JSON.parse(JSON.stringify(this));
|
var obj = JSON.parse(JSON.stringify(this));
|
||||||
delete obj.name;
|
delete obj.name;
|
||||||
delete obj._pos;
|
|
||||||
delete obj._angle;
|
|
||||||
delete obj.from;
|
delete obj.from;
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
|
@ -1598,6 +1569,30 @@ var gameobject = {
|
||||||
obj.sync();
|
obj.sync();
|
||||||
obj.defn('components', {});
|
obj.defn('components', {});
|
||||||
|
|
||||||
|
complete_assign(obj, {
|
||||||
|
set scale(x) { cmd(36, this.body, x); },
|
||||||
|
get scale() { return cmd(103, this.body); },
|
||||||
|
get flipx() { return cmd(104,this.body); },
|
||||||
|
set flipx(x) { cmd(55, this.body, x); },
|
||||||
|
get flipy() { return cmd(105,this.body); },
|
||||||
|
set flipy(x) { cmd(56, this.body, x); },
|
||||||
|
|
||||||
|
get angle() { return Math.rad2deg(q_body(2,this.body))%360; },
|
||||||
|
set angle(x) { set_body(0,this.body, Math.deg2rad(x)); },
|
||||||
|
|
||||||
|
set pos(x) { set_body(2,this.body,x); },
|
||||||
|
get pos() { return q_body(1,this.body); },
|
||||||
|
|
||||||
|
get elasticity() { return cmd(107,this.body); },
|
||||||
|
set elasticity(x) { cmd(106,this.body,x); },
|
||||||
|
|
||||||
|
get friction() { return cmd(109,this.body); },
|
||||||
|
set friction(x) { cmd(108,this.body,x); },
|
||||||
|
|
||||||
|
set mass(x) { set_body(7,this.body,x); },
|
||||||
|
get mass() { return cmd(
|
||||||
|
});
|
||||||
|
|
||||||
for (var prop in obj) {
|
for (var prop in obj) {
|
||||||
if (typeof obj[prop] === 'object' && 'make' in obj[prop]) {
|
if (typeof obj[prop] === 'object' && 'make' in obj[prop]) {
|
||||||
if (prop === 'flipper') return;
|
if (prop === 'flipper') return;
|
||||||
|
@ -1648,7 +1643,7 @@ var gameobject = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var locks = ['draw_layer', 'friction','elasticity', 'visible', 'body', 'flipx', 'flipy', 'controlled', 'selectable', 'save', 'velocity', 'angularvelocity', 'alive', 'boundingbox', 'name', 'scale', 'angle', 'properties', 'moi', 'relpos', 'relangle', 'up', 'down', 'right', 'left', 'bodytype', 'gizmo', 'pos'];
|
var locks = ['visible', 'body', 'controlled', 'selectable', 'save', 'velocity', 'angularvelocity', 'alive', 'boundingbox', 'name', 'scale', 'angle', 'properties', 'moi', 'relpos', 'relangle', 'up', 'down', 'right', 'left', 'bodytype', 'gizmo', 'pos'];
|
||||||
locks.forEach(function(x) {
|
locks.forEach(function(x) {
|
||||||
Object.defineProperty(gameobject, x, {enumerable:false});
|
Object.defineProperty(gameobject, x, {enumerable:false});
|
||||||
});
|
});
|
||||||
|
|
|
@ -3,6 +3,7 @@ out vec4 color;
|
||||||
|
|
||||||
in float dist;
|
in float dist;
|
||||||
in vec4 fcolor;
|
in vec4 fcolor;
|
||||||
|
in float seg_speed;
|
||||||
|
|
||||||
in float seg_len;
|
in float seg_len;
|
||||||
float pat = 0.5;
|
float pat = 0.5;
|
||||||
|
@ -16,7 +17,7 @@ void main()
|
||||||
color = fcolor;
|
color = fcolor;
|
||||||
if (seg_len == 0) return;
|
if (seg_len == 0) return;
|
||||||
|
|
||||||
if (mod(dist+time*seg_len,seg_len)/seg_len < 0.5)
|
if (mod(dist+(time*seg_speed)*seg_len,seg_len)/seg_len < 0.5)
|
||||||
discard;
|
discard;
|
||||||
/*
|
/*
|
||||||
int d = int(dist);
|
int d = int(dist);
|
||||||
|
|
|
@ -3,10 +3,12 @@ layout (location = 0) in vec2 apos;
|
||||||
layout (location = 1) in float adist;
|
layout (location = 1) in float adist;
|
||||||
layout (location = 2) in vec4 acolor;
|
layout (location = 2) in vec4 acolor;
|
||||||
layout (location = 3) in float aseglen;
|
layout (location = 3) in float aseglen;
|
||||||
|
layout (location = 4) in float asegspeed;
|
||||||
|
|
||||||
out float dist;
|
out float dist;
|
||||||
out vec4 fcolor;
|
out vec4 fcolor;
|
||||||
out float seg_len;
|
out float seg_len;
|
||||||
|
out float seg_speed;
|
||||||
|
|
||||||
uniform mat4 proj;
|
uniform mat4 proj;
|
||||||
|
|
||||||
|
@ -16,4 +18,5 @@ void main()
|
||||||
fcolor = acolor;
|
fcolor = acolor;
|
||||||
dist = adist;
|
dist = adist;
|
||||||
seg_len = aseglen;
|
seg_len = aseglen;
|
||||||
|
seg_speed = asegspeed;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue