collider sensor and enabled query; color swapping functions
This commit is contained in:
parent
7639b7a781
commit
1a1884f61a
|
@ -18,48 +18,63 @@
|
||||||
cpSpace *space = NULL;
|
cpSpace *space = NULL;
|
||||||
float phys2d_gravity = -50.f;
|
float phys2d_gravity = -50.f;
|
||||||
|
|
||||||
static float dbg_color[3] = {0.836f, 1.f, 0.45f};
|
float dbg_color[3] = {0.836f, 1.f, 0.45f};
|
||||||
static float trigger_color[3] = {0.278f, 0.953f, 1.f};
|
float trigger_color[3] = {0.278f, 0.953f, 1.f};
|
||||||
static float disabled_color[3] = {0.58f, 0.58f, 0.58f};
|
float disabled_color[3] = {0.58f, 0.58f, 0.58f};
|
||||||
|
float dynamic_color[3] = {255/255, 70/255, 46/255};
|
||||||
|
float kinematic_color[3] = {255/255, 206/255,71/255};
|
||||||
|
float static_color[3] = {0.22f, 0.271f, 1.f};
|
||||||
|
|
||||||
static struct color static_color = {56, 69, 255};
|
static struct color static_color = {56, 69, 255};
|
||||||
|
|
||||||
|
void color2float(struct color color, float *fcolor)
|
||||||
|
{
|
||||||
|
fcolor[0] = (float)color.r/255;
|
||||||
|
fcolor[1] = (float)color.b/255;
|
||||||
|
fcolor[2] = (float)color.g/255;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct color float2color(float *fcolor)
|
||||||
|
{
|
||||||
|
struct color new;
|
||||||
|
new.r = fcolor[0]*255;
|
||||||
|
new.b = fcolor[1]*255;
|
||||||
|
new.g = fcolor[2]*255;
|
||||||
|
return new;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cpshape_enabled(cpShape *c)
|
||||||
|
{
|
||||||
|
cpShapeFilter filter = cpShapeGetFilter(c);
|
||||||
|
if (filter.categories == ~CP_ALL_CATEGORIES && filter.mask == ~CP_ALL_CATEGORIES)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float *shape_outline_color(cpShape *shape)
|
||||||
|
{
|
||||||
|
switch (cpBodyGetType(cpShapeGetBody(shape))) {
|
||||||
|
case CP_BODY_TYPE_DYNAMIC:
|
||||||
|
return dynamic_color;
|
||||||
|
|
||||||
|
case CP_BODY_TYPE_KINEMATIC:
|
||||||
|
return kinematic_color;
|
||||||
|
|
||||||
|
case CP_BODY_TYPE_STATIC:
|
||||||
|
return static_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
return static_color;
|
||||||
|
}
|
||||||
|
|
||||||
float *shape_color(cpShape *shape)
|
float *shape_color(cpShape *shape)
|
||||||
{
|
{
|
||||||
cpShapeFilter filter = cpShapeGetFilter(shape);
|
if (cpshape_enabled(shape)) return disabled_color;
|
||||||
if (filter.categories == ~CP_ALL_CATEGORIES && filter.mask == ~CP_ALL_CATEGORIES)
|
|
||||||
return disabled_color;
|
|
||||||
|
|
||||||
if (cpShapeGetSensor(shape)) return trigger_color;
|
if (cpShapeGetSensor(shape)) return trigger_color;
|
||||||
|
|
||||||
switch (cpBodyGetType(cpShapeGetBody(shape))) {
|
|
||||||
case CP_BODY_TYPE_DYNAMIC:
|
|
||||||
return dbg_color;
|
return dbg_color;
|
||||||
break;
|
|
||||||
|
|
||||||
case CP_BODY_TYPE_KINEMATIC:
|
|
||||||
return dbg_color;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CP_BODY_TYPE_STATIC:
|
|
||||||
return dbg_color;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return dbg_color;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_dbg_color(struct color color)
|
|
||||||
{
|
|
||||||
dbg_color[0] = (float)color.r/255;
|
|
||||||
dbg_color[1] = (float)color.b/255;
|
|
||||||
dbg_color[2] = (float)color.g/255;
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_trigger_color(struct color color)
|
|
||||||
{
|
|
||||||
trigger_color[0] = (float)color.r/255;
|
|
||||||
trigger_color[1] = (float)color.b/255;
|
|
||||||
trigger_color[2] = (float)color.g/255;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void phys2d_init()
|
void phys2d_init()
|
||||||
|
@ -495,23 +510,35 @@ void phys2d_dbgdrawedge(struct phys2d_edge *edge)
|
||||||
|
|
||||||
void shape_enabled(struct phys2d_shape *shape, int enabled)
|
void shape_enabled(struct phys2d_shape *shape, int enabled)
|
||||||
{
|
{
|
||||||
YughInfo("Setting shape %p to enabled? %d.", shape, enabled);
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
cpShapeSetFilter(shape->shape, CP_SHAPE_FILTER_ALL);
|
cpShapeSetFilter(shape->shape, CP_SHAPE_FILTER_ALL);
|
||||||
else
|
else
|
||||||
cpShapeSetFilter(shape->shape, CP_SHAPE_FILTER_NONE);
|
cpShapeSetFilter(shape->shape, CP_SHAPE_FILTER_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int shape_is_enabled(struct phys2d_shape *shape)
|
||||||
|
{
|
||||||
|
if (cpshape_enabled(shape->shape))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void shape_set_sensor(struct phys2d_shape *shape, int sensor)
|
void shape_set_sensor(struct phys2d_shape *shape, int sensor)
|
||||||
{
|
{
|
||||||
YughInfo("Setting shape %p to sensor? %d.", shape, sensor);
|
|
||||||
cpShapeSetSensor(shape->shape, sensor);
|
cpShapeSetSensor(shape->shape, sensor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int shape_get_sensor(struct phys2d_shape *shape)
|
||||||
|
{
|
||||||
|
return cpShapeGetSensor(shape->shape);
|
||||||
|
}
|
||||||
|
|
||||||
void phys2d_reindex_body(cpBody *body) {
|
void phys2d_reindex_body(cpBody *body) {
|
||||||
cpSpaceReindexShapesForBody(space, body);
|
cpSpaceReindexShapesForBody(space, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void register_collide(void *sym) {
|
void register_collide(void *sym) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,14 @@ extern float phys2d_gravity;
|
||||||
extern int physOn;
|
extern int physOn;
|
||||||
extern cpSpace *space;
|
extern cpSpace *space;
|
||||||
|
|
||||||
|
extern float dbg_color[3];
|
||||||
|
extern float trigger_color[3];
|
||||||
|
extern float disabled_color[3];
|
||||||
|
extern float dynamic_color[3];
|
||||||
|
extern float kinematic_color[3];
|
||||||
|
extern float static_color[3];
|
||||||
|
|
||||||
|
|
||||||
struct phys2d_shape {
|
struct phys2d_shape {
|
||||||
cpShape *shape;
|
cpShape *shape;
|
||||||
int go;
|
int go;
|
||||||
|
@ -98,7 +106,9 @@ void register_collide(void *sym);
|
||||||
void phys2d_set_gravity(cpVect v);
|
void phys2d_set_gravity(cpVect v);
|
||||||
|
|
||||||
void shape_enabled(struct phys2d_shape *shape, int enabled);
|
void shape_enabled(struct phys2d_shape *shape, int enabled);
|
||||||
|
int shape_is_enabled(struct phys2d_shape *shape);
|
||||||
void shape_set_sensor(struct phys2d_shape *shape, int sensor);
|
void shape_set_sensor(struct phys2d_shape *shape, int sensor);
|
||||||
|
int shape_get_sensor(struct phys2d_shape *shape);
|
||||||
|
|
||||||
struct color {
|
struct color {
|
||||||
unsigned char r;
|
unsigned char r;
|
||||||
|
@ -106,8 +116,8 @@ struct color {
|
||||||
unsigned char b;
|
unsigned char b;
|
||||||
};
|
};
|
||||||
|
|
||||||
void set_dbg_color(struct color);
|
void color2float(struct color, float *fcolor);
|
||||||
void set_trigger_color(struct color);
|
struct color float2color(float *fcolor);
|
||||||
|
|
||||||
void shape_gui(struct phys2d_shape *shape);
|
void shape_gui(struct phys2d_shape *shape);
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,6 @@ duk_ret_t duk_cmd(duk_context *duk) {
|
||||||
//anim2d_delete(duk_to_int(duk, 1));
|
//anim2d_delete(duk_to_int(duk, 1));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case 13:
|
case 13:
|
||||||
play_song(duk_to_string(duk, 1), duk_to_string(duk, 2));
|
play_song(duk_to_string(duk, 1), duk_to_string(duk, 2));
|
||||||
break;
|
break;
|
||||||
|
@ -145,11 +144,11 @@ duk_ret_t duk_cmd(duk_context *duk) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 16:
|
case 16:
|
||||||
set_dbg_color(duk2color(duk, 1));
|
color2float(duk2color(duk, 1), dbg_color);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 17:
|
case 17:
|
||||||
set_trigger_color(duk2color(duk, 1));
|
color2float(duk2color(duk, 1), trigger_color);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 18:
|
case 18:
|
||||||
|
@ -165,11 +164,16 @@ duk_ret_t duk_cmd(duk_context *duk) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 21:
|
case 21:
|
||||||
break;
|
duk_push_boolean(duk, shape_get_sensor(duk_to_pointer(duk, 1)));
|
||||||
|
return 1;
|
||||||
|
|
||||||
case 22:
|
case 22:
|
||||||
shape_enabled(duk_to_pointer(duk, 1), duk_to_int(duk, 2));
|
shape_enabled(duk_to_pointer(duk, 1), duk_to_int(duk, 2));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 23:
|
||||||
|
duk_push_boolean(duk, shape_is_enabled(duk_to_pointer(duk, 1)));
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue