line
This commit is contained in:
parent
8155bddb5e
commit
fceb68a910
|
@ -6,6 +6,7 @@
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "window.h"
|
||||||
|
|
||||||
#include "stb_ds.h"
|
#include "stb_ds.h"
|
||||||
|
|
||||||
|
@ -69,6 +70,7 @@ void draw_edge(cpVect *points, int n, float *color)
|
||||||
|
|
||||||
shader_use(rectShader);
|
shader_use(rectShader);
|
||||||
shader_setvec3(rectShader, "linecolor", color);
|
shader_setvec3(rectShader, "linecolor", color);
|
||||||
|
glLineWidth(20);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, rectVBO);
|
glBindBuffer(GL_ARRAY_BUFFER, rectVBO);
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * n * 2, points, GL_DYNAMIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * n * 2, points, GL_DYNAMIC_DRAW);
|
||||||
glBindVertexArray(rectVAO);
|
glBindVertexArray(rectVAO);
|
||||||
|
@ -77,6 +79,7 @@ void draw_edge(cpVect *points, int n, float *color)
|
||||||
|
|
||||||
shader_setfloat(rectShader, "alpha", 1.f);
|
shader_setfloat(rectShader, "alpha", 1.f);
|
||||||
glDrawArrays(GL_LINE_STRIP, 0, n);
|
glDrawArrays(GL_LINE_STRIP, 0, n);
|
||||||
|
glLineWidth(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_circle(int x, int y, float radius, int pixels, float *color, int fill)
|
void draw_circle(int x, int y, float radius, int pixels, float *color, int fill)
|
||||||
|
@ -130,10 +133,14 @@ void draw_grid(int width, int span)
|
||||||
shader_use(gridShader);
|
shader_use(gridShader);
|
||||||
shader_setint(gridShader, "thickness", width);
|
shader_setint(gridShader, "thickness", width);
|
||||||
shader_setint(gridShader, "span", span);
|
shader_setint(gridShader, "span", span);
|
||||||
|
|
||||||
|
cpVect offset = cam_pos();
|
||||||
|
offset.x -= mainwin->width/2;
|
||||||
|
offset.y -= mainwin->height/2;
|
||||||
|
shader_setvec2(gridShader, "offset", &offset);
|
||||||
|
|
||||||
glBindVertexArray(gridVAO);
|
glBindVertexArray(gridVAO);
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_point(int x, int y, float r, float *color)
|
void draw_point(int x, int y, float r, float *color)
|
||||||
|
|
|
@ -636,6 +636,23 @@ duk_ret_t duk_cmd(duk_context *duk) {
|
||||||
if (!id2sprite(duk_to_int(duk, 1))) return 0;
|
if (!id2sprite(duk_to_int(duk, 1))) return 0;
|
||||||
id2sprite(duk_to_int(duk, 1))->layer = duk_to_int(duk, 2);
|
id2sprite(duk_to_int(duk, 1))->layer = duk_to_int(duk, 2);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 61:
|
||||||
|
set_cam_body(id2body(duk_to_int(duk, 1)));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 62:
|
||||||
|
add_zoom(duk_to_number(duk, 1));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 63:
|
||||||
|
duk_push_number(duk, deltaT);
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case 64:
|
||||||
|
vect2duk(tex_get_dimensions(texture_pullfromfile(duk_to_string(duk, 1))));
|
||||||
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1023,6 +1040,10 @@ duk_ret_t duk_cmd_edge2d(duk_context *duk)
|
||||||
phys2d_edge_clearverts(edge);
|
phys2d_edge_clearverts(edge);
|
||||||
phys2d_edge_addverts(edge, duk2cpvec2arr(duk, 2));
|
phys2d_edge_addverts(edge, duk2cpvec2arr(duk, 2));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
edge->thickness = duk_to_number(duk, 2);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -38,6 +38,16 @@ int body2id(cpBody *body)
|
||||||
return cpBodyGetUserData(body);
|
return cpBodyGetUserData(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cpBody *id2body(int id)
|
||||||
|
{
|
||||||
|
struct gameobject *go;
|
||||||
|
|
||||||
|
if (go = id2go(id))
|
||||||
|
return go->body;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int shape2gameobject(cpShape *shape)
|
int shape2gameobject(cpShape *shape)
|
||||||
{
|
{
|
||||||
struct phys2d_shape *s = cpShapeGetUserData(shape);
|
struct phys2d_shape *s = cpShapeGetUserData(shape);
|
||||||
|
|
|
@ -50,6 +50,7 @@ struct gameobject *get_gameobject_from_id(int id);
|
||||||
struct gameobject *id2go(int id);
|
struct gameobject *id2go(int id);
|
||||||
int id_from_gameobject(struct gameobject *go);
|
int id_from_gameobject(struct gameobject *go);
|
||||||
int body2id(cpBody *body);
|
int body2id(cpBody *body);
|
||||||
|
cpBody *id2body(int id);
|
||||||
|
|
||||||
void go_shape_apply(cpBody *body, cpShape *shape, struct gameobject *go);
|
void go_shape_apply(cpBody *body, cpShape *shape, struct gameobject *go);
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,15 @@ static void cursor_pos_cb(GLFWwindow *w, double xpos, double ypos)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void pawn_call_keydown(int key)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < arrlen(pawns); i++) {
|
||||||
|
if (!pawns[i] || script_eval_setup("input_num_pressed", pawns[i])) continue;
|
||||||
|
duk_push_int(duk, key);
|
||||||
|
script_eval_exec(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void scroll_cb(GLFWwindow *w, double xoffset, double yoffset)
|
static void scroll_cb(GLFWwindow *w, double xoffset, double yoffset)
|
||||||
{
|
{
|
||||||
mouseWheelY = yoffset;
|
mouseWheelY = yoffset;
|
||||||
|
@ -260,6 +269,10 @@ void input_poll(double wait)
|
||||||
call_input_down(&downkeys[i]);
|
call_input_down(&downkeys[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int key_is_num(int key) {
|
||||||
|
return key <= 57 && key >= 48;
|
||||||
|
}
|
||||||
|
|
||||||
void win_key_callback(GLFWwindow *w, int key, int scancode, int action, int mods)
|
void win_key_callback(GLFWwindow *w, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
char keystr[50] = {'\0'};
|
char keystr[50] = {'\0'};
|
||||||
|
@ -270,6 +283,11 @@ void win_key_callback(GLFWwindow *w, int key, int scancode, int action, int mods
|
||||||
snprintf(keystr, 50, "input_%s_pressed", kkey);
|
snprintf(keystr, 50, "input_%s_pressed", kkey);
|
||||||
add_downkey(key);
|
add_downkey(key);
|
||||||
call_input_signal("input_any_pressed");
|
call_input_signal("input_any_pressed");
|
||||||
|
|
||||||
|
if (key_is_num(key)) {
|
||||||
|
pawn_call_keydown(key-48);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GLFW_RELEASE:
|
case GLFW_RELEASE:
|
||||||
|
|
|
@ -124,10 +124,11 @@ void openglRender(struct window *window)
|
||||||
//////////// 2D projection
|
//////////// 2D projection
|
||||||
mfloat_t projection[16] = { 0.f };
|
mfloat_t projection[16] = { 0.f };
|
||||||
cpVect pos = cam_pos();
|
cpVect pos = cam_pos();
|
||||||
mat4_ortho(projection, pos.x,
|
|
||||||
window->width*zoom + pos.x,
|
mat4_ortho(projection, pos.x - zoom*window->width/2,
|
||||||
pos.y,
|
pos.x + zoom*window->width/2,
|
||||||
window->height*zoom + pos.y, -1.f, 1.f);
|
pos.y - zoom*window->height/2,
|
||||||
|
pos.y + zoom*window->height/2, -1.f, 1.f);
|
||||||
|
|
||||||
mfloat_t ui_projection[16] = { 0.f };
|
mfloat_t ui_projection[16] = { 0.f };
|
||||||
mat4_ortho(ui_projection, 0,
|
mat4_ortho(ui_projection, 0,
|
||||||
|
|
|
@ -197,6 +197,13 @@ void callee_dbl(struct callee c, double d)
|
||||||
exec_callee(1);
|
exec_callee(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void callee_int(struct callee c, int i)
|
||||||
|
{
|
||||||
|
setup_callee(c);
|
||||||
|
duk_push_int(duk, i);
|
||||||
|
exec_callee(1);
|
||||||
|
}
|
||||||
|
|
||||||
void callee_vec2(struct callee c, cpVect vec)
|
void callee_vec2(struct callee c, cpVect vec)
|
||||||
{
|
{
|
||||||
setup_callee(c);
|
setup_callee(c);
|
||||||
|
|
|
@ -219,6 +219,15 @@ struct glrect tex_get_rect(struct Texture *tex)
|
||||||
return ST_UNIT;
|
return ST_UNIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cpVect tex_get_dimensions(struct Texture *tex)
|
||||||
|
{
|
||||||
|
if (!tex) return cpvzero;
|
||||||
|
cpVect d;
|
||||||
|
d.x = tex->width;
|
||||||
|
d.y = tex->height;
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
void tex_bind(struct Texture *tex)
|
void tex_bind(struct Texture *tex)
|
||||||
{
|
{
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define TEXTURE_H
|
#define TEXTURE_H
|
||||||
|
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
#include <chipmunk/chipmunk.h>
|
||||||
|
|
||||||
#define TEX_SPEC 0
|
#define TEX_SPEC 0
|
||||||
#define TEX_NORM 1
|
#define TEX_NORM 1
|
||||||
|
@ -67,6 +68,7 @@ struct Texture {
|
||||||
|
|
||||||
struct Texture *texture_pullfromfile(const char *path); // Create texture from image
|
struct Texture *texture_pullfromfile(const char *path); // Create texture from image
|
||||||
struct Texture *texture_loadfromfile(const char *path); // Create texture & load to gpu
|
struct Texture *texture_loadfromfile(const char *path); // Create texture & load to gpu
|
||||||
|
struct Texture *str2tex(const char *path);
|
||||||
void tex_gpu_reload(struct Texture *tex); // gpu_free then gpu_load
|
void tex_gpu_reload(struct Texture *tex); // gpu_free then gpu_load
|
||||||
void tex_gpu_free(struct Texture *tex); // Remove texture data from gpu
|
void tex_gpu_free(struct Texture *tex); // Remove texture data from gpu
|
||||||
void tex_bind(struct Texture *tex); // Bind to gl context
|
void tex_bind(struct Texture *tex); // Bind to gl context
|
||||||
|
@ -88,6 +90,7 @@ void anim_incr(struct anim2d *anim);
|
||||||
void anim_decr(struct anim2d *anim);
|
void anim_decr(struct anim2d *anim);
|
||||||
|
|
||||||
struct glrect tex_get_rect(struct Texture *tex);
|
struct glrect tex_get_rect(struct Texture *tex);
|
||||||
|
cpVect tex_get_dimensions(struct Texture *tex);
|
||||||
struct glrect anim_get_rect(struct anim2d *anim);
|
struct glrect anim_get_rect(struct anim2d *anim);
|
||||||
|
|
||||||
int anim_frames(struct TexAnim *a);
|
int anim_frames(struct TexAnim *a);
|
||||||
|
|
|
@ -2,15 +2,16 @@
|
||||||
layout (location = 0) in vec2 pos;
|
layout (location = 0) in vec2 pos;
|
||||||
out vec2 apos;
|
out vec2 apos;
|
||||||
|
|
||||||
|
uniform vec2 offset;
|
||||||
|
|
||||||
layout (std140) uniform Projection {
|
layout (std140) uniform Projection {
|
||||||
mat4 projection;
|
mat4 projection;
|
||||||
};
|
};
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
mat4 iproj = inverse(projection);
|
vec4 ipos = inverse(projection) * vec4(pos, 0.f, 1.f);
|
||||||
vec4 ipos = iproj * vec4(pos, 0.f, 1.f);
|
apos = ipos.xy + offset;
|
||||||
apos = ipos.xy;
|
|
||||||
|
|
||||||
gl_Position = vec4(pos, 0.f, 1.f);
|
gl_Position = vec4(pos, 0.f, 1.f);
|
||||||
}
|
}
|
Loading…
Reference in a new issue