Using S7; edit Makefile for debug, windows compilation
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include "editor.h"
|
||||
#include "ed_project.h"
|
||||
|
||||
#include "2dphysics.h"
|
||||
#include "camera.h"
|
||||
@@ -495,7 +496,7 @@ void editor_project_gui() {
|
||||
*/
|
||||
NK_MENU_START(level)
|
||||
nuke_nel(1);
|
||||
nk_labelf(ctx, "Current level: %s", current_level[0] == '\0' ? "No level loaded." : current_level);
|
||||
nuke_labelf(ctx, "Current level: %s", current_level[0] == '\0' ? "No level loaded." : current_level);
|
||||
|
||||
nuke_nel(3);
|
||||
if (nk_button_label(ctx, "New")) {
|
||||
@@ -517,7 +518,7 @@ void editor_project_gui() {
|
||||
YughWarn("Can't save level that has no name.");
|
||||
} else {
|
||||
strcpy(current_level, levelname);
|
||||
strncat(current_level, EXT_LEVEL, MAXNAME);
|
||||
strncat(current_level, EXT_LEVEL, 10);
|
||||
save_level(current_level);
|
||||
levelname[0] = '\0';
|
||||
get_levels();
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "resources.h"
|
||||
#include "nuke.h"
|
||||
#include "log.h"
|
||||
#include "debugdraw.h"
|
||||
|
||||
#include "stb_ds.h"
|
||||
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
#include "mrbffi.h"
|
||||
|
||||
#include "mruby.h"
|
||||
#include "mruby/compile.h"
|
||||
#include "mruby/string.h"
|
||||
#include "mruby/hash.h"
|
||||
#include "s7.h"
|
||||
|
||||
#include "font.h"
|
||||
|
||||
|
||||
#include "script.h"
|
||||
#include "string.h"
|
||||
#include "window.h"
|
||||
@@ -15,60 +10,43 @@
|
||||
#include "engine.h"
|
||||
#include "log.h"
|
||||
|
||||
extern mrb_state *mrb;
|
||||
|
||||
#include "nuklear.h"
|
||||
extern struct nk_context *ctx;
|
||||
#include "nuke.h"
|
||||
|
||||
/* FFI */
|
||||
s7_pointer s7_ui_label(s7_scheme *sc, s7_pointer args) {
|
||||
if (s7_is_string(s7_car(args))) {
|
||||
nuke_label(s7_string(s7_car(args)));
|
||||
return s7_make_boolean(sc, 1);
|
||||
}
|
||||
|
||||
mrb_value mrb_load(mrb_state *mrb, mrb_value self) {
|
||||
char *path;
|
||||
mrb_get_args(mrb, "z!", &path);
|
||||
script_dofile(path);
|
||||
return self;
|
||||
return s7_wrong_type_arg_error(sc, "ui_label", 1, args, "Should be a string.");
|
||||
}
|
||||
|
||||
mrb_value mrb_ui_label(mrb_state *mrb, mrb_value self) {
|
||||
char *str;
|
||||
mrb_get_args(mrb, "z", &str);
|
||||
nk_labelf(ctx, NK_TEXT_LEFT, "%s", str);
|
||||
return self;
|
||||
s7_pointer s7_ui_btn(s7_scheme *sc, s7_pointer args) {
|
||||
return s7_make_boolean(sc, nuke_btn(s7_string(s7_car(args))));
|
||||
}
|
||||
|
||||
mrb_value mrb_ui_btn(mrb_state *mrb, mrb_value self) {
|
||||
char *str;
|
||||
mrb_get_args(mrb, "z", &str);
|
||||
return mrb_bool_value(nk_button_label(ctx, str));
|
||||
s7_pointer s7_ui_nel(s7_scheme *sc, s7_pointer args) {
|
||||
nuke_nel(s7_integer(s7_cadr(args)));
|
||||
return s7_make_boolean(sc, 1);
|
||||
}
|
||||
|
||||
mrb_value mrb_ui_nel(mrb_state *mrb, mrb_value self) {
|
||||
int height, cols;
|
||||
mrb_get_args(mrb, "ii", &height, &cols);
|
||||
nk_layout_row_dynamic(ctx, height, cols);
|
||||
return self;
|
||||
s7_pointer s7_ui_prop(s7_scheme *sc, s7_pointer args) {
|
||||
float val = s7_real(s7_cadr(args));
|
||||
nuke_prop_float(s7_string(s7_car(args)), (float)s7_real(s7_caddr(args)), &val, s7_real(s7_cadddr(args)), s7_real(s7_car(s7_cddddr(args))), s7_real(s7_car(s7_cdr(s7_cddddr(args)))));
|
||||
return s7_make_real(sc, val);
|
||||
}
|
||||
|
||||
mrb_value mrb_ui_prop(mrb_state *mrb, mrb_value self) {
|
||||
mrb_float min, max, step1, step2, val;
|
||||
char *s;
|
||||
mrb_get_args(mrb, "zfffff", &s, &val, &min, &max, &step1, &step2);
|
||||
nk_property_float(ctx, s, min, &val, max, step1, step2);
|
||||
return mrb_float_value(mrb, val);
|
||||
s7_pointer s7_ui_text(s7_scheme *sc, s7_pointer args) {
|
||||
const char *s = s7_string(s7_car(args));
|
||||
int len = s7_integer(s7_cadr(args));
|
||||
char str[len+1];
|
||||
strncpy(str,s,len);
|
||||
nuke_edit_str(str);
|
||||
return s7_make_string(sc, str);
|
||||
}
|
||||
|
||||
mrb_value mrb_ui_text(mrb_state *mrb, mrb_value self) {
|
||||
char *s;
|
||||
mrb_float len;
|
||||
|
||||
mrb_get_args(mrb, "zf", &s, &len);
|
||||
|
||||
char str[(int)len+1];
|
||||
strncpy(str, s,len);
|
||||
nk_edit_string_zero_terminated(ctx, NK_EDIT_BOX|NK_EDIT_NO_HORIZONTAL_SCROLL, str, 130, nk_filter_ascii);
|
||||
|
||||
return mrb_str_new_cstr(mrb, str);
|
||||
}
|
||||
/*
|
||||
|
||||
mrb_value mrb_ui_begin(mrb_state *mrb, mrb_value self) {
|
||||
char *title;
|
||||
@@ -79,6 +57,9 @@ mrb_value mrb_ui_begin(mrb_state *mrb, mrb_value self) {
|
||||
return mrb_bool_value(nk_begin(ctx, title, nk_rect(0,0,w,h), NK_WINDOW_TITLE|NK_WINDOW_BORDER|NK_WINDOW_SCALABLE|NK_WINDOW_MOVABLE|NK_WINDOW_NO_SCROLLBAR));
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
mrb_value mrb_ui_rendertext(mrb_state *mrb, mrb_value self) {
|
||||
char *s;
|
||||
mrb_float pos[2];
|
||||
@@ -91,10 +72,6 @@ mrb_value mrb_ui_rendertext(mrb_state *mrb, mrb_value self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
mrb_value mrb_c_reload(mrb_state *mrb, mrb_value self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
mrb_value mrb_win_make(mrb_state *mrb, mrb_value self) {
|
||||
char name[50] = "New Window";
|
||||
struct window *new = MakeSDLWindow(name, 500, 500, 0);
|
||||
@@ -197,10 +174,20 @@ mrb_value mrb_editor_render(mrb_state *mrb, mrb_value self) {
|
||||
editor_render();
|
||||
return self;
|
||||
}
|
||||
*/
|
||||
|
||||
#define MRB_FUNC(NAME, ARGS) mrb_define_method(mrb, mrb->object_class, #NAME, mrb_ ## NAME, ARGS)
|
||||
//#define MRB_FUNC(NAME, ARGS) mrb_define_method(mrb, mrb->object_class, #NAME, mrb_ ## NAME, ARGS)
|
||||
#define S7_FUNC(NAME, ARGS) s7_define_function(s7, #NAME, s7_ ##NAME, ARGS, 0, 0, "")
|
||||
|
||||
void ffi_load() {
|
||||
//s7_define_function(s7, "ui_label", s7_ui_label, 1, 0, 0, "Draw UI label with given string");
|
||||
S7_FUNC(ui_label, 1);
|
||||
S7_FUNC(ui_btn, 1);
|
||||
S7_FUNC(ui_nel, 1);
|
||||
S7_FUNC(ui_prop, 6);
|
||||
S7_FUNC(ui_text, 2);
|
||||
|
||||
/*
|
||||
MRB_FUNC(load, MRB_ARGS_REQ(1));
|
||||
MRB_FUNC(ui_label, MRB_ARGS_REQ(1));
|
||||
MRB_FUNC(ui_btn, MRB_ARGS_REQ(1));
|
||||
@@ -227,5 +214,6 @@ void ffi_load() {
|
||||
MRB_FUNC(editor_render, MRB_ARGS_REQ(0));
|
||||
|
||||
MRB_FUNC(settings_cmd, MRB_ARGS_REQ(2));
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
0
source/engine/mus-config.h
Normal file
0
source/engine/mus-config.h
Normal file
@@ -86,5 +86,9 @@ void nuke_nel(int cols) {
|
||||
}
|
||||
|
||||
void nuke_label(const char *s) {
|
||||
nk_label(ctx, NK_TEXT_LEFT, s);
|
||||
nk_label(ctx, s, NK_TEXT_LEFT);
|
||||
}
|
||||
|
||||
void nuke_edit_str(char *str) {
|
||||
nk_edit_string_zero_terminated(ctx, NK_EDIT_BOX|NK_EDIT_NO_HORIZONTAL_SCROLL, str, 130, nk_filter_ascii);
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
#ifndef NUKE_H
|
||||
#define NUKE_H
|
||||
|
||||
#define NK_INCLUDE_FIXED_TYPES
|
||||
#include "nuklear.h"
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ void nuke_checkbox(const char *lbl, int *val);
|
||||
void nuke_nel(int cols);
|
||||
void nuke_label(const char *s);
|
||||
void nuke_prop_float(const char *label, float min, float *val, float max, float step, float dragstep);
|
||||
void nuke_edit_str(char *str);
|
||||
|
||||
int nuke_btn(const char *lbl);
|
||||
|
||||
|
||||
@@ -168,7 +168,7 @@ void openglRender(struct window *window)
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||
|
||||
////// TEXT && GUI
|
||||
script_call_sym(window->gui_cb);
|
||||
// script_call_sym(window->gui_cb);
|
||||
|
||||
///// Sprites
|
||||
glDepthFunc(GL_LESS);
|
||||
|
||||
96035
source/engine/s7.c
Normal file
96035
source/engine/s7.c
Normal file
File diff suppressed because it is too large
Load Diff
1239
source/engine/s7.h
Normal file
1239
source/engine/s7.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,65 +3,45 @@
|
||||
#include "stdio.h"
|
||||
#include "log.h"
|
||||
|
||||
|
||||
#include "mruby/compile.h"
|
||||
#include "mrbffi.h"
|
||||
|
||||
mrb_value obj;
|
||||
|
||||
mrb_state *mrb;
|
||||
mrbc_context *c;
|
||||
s7_scheme *s7 = NULL;
|
||||
|
||||
void script_init() {
|
||||
mrb = mrb_open();
|
||||
c = mrbc_context_new(mrb);
|
||||
s7 = s7_init();
|
||||
ffi_load();
|
||||
}
|
||||
|
||||
void script_run(const char *script) {
|
||||
mrb_load_string(mrb, script);
|
||||
s7_eval_c_string(s7, script);
|
||||
}
|
||||
|
||||
int script_dofile(const char *file) {
|
||||
FILE *mrbf = fopen(file, "r");
|
||||
if (mrbf == NULL) {
|
||||
YughError("Could not find script %s.", file);
|
||||
return 1;
|
||||
}
|
||||
mrbc_filename(mrb, c, file);
|
||||
obj = mrb_load_file_cxt(mrb, mrbf, c);
|
||||
mrb_print_error(mrb);
|
||||
fclose(mrbf);
|
||||
|
||||
s7_load(s7, file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Call the "update" function in the master game script */
|
||||
void script_update(double dt) {
|
||||
mrb_funcall(mrb, obj, "update", 1, mrb_float_value(mrb, dt));
|
||||
mrb_print_error(mrb);
|
||||
}
|
||||
|
||||
/* Call the "draw" function in master game script */
|
||||
void script_draw() {
|
||||
mrb_funcall(mrb, obj, "draw", 0);
|
||||
mrb_print_error(mrb);
|
||||
}
|
||||
|
||||
/* Call "editor" function in master game script */
|
||||
void script_editor() {
|
||||
mrb_funcall(mrb, obj, "editor", 0);
|
||||
mrb_print_error(mrb);
|
||||
}
|
||||
|
||||
void script_call(const char *f) {
|
||||
script_call_sym(mrb_intern_cstr(mrb, f));
|
||||
s7_call(s7, s7_name_to_value(s7, f), s7_nil(s7));
|
||||
}
|
||||
|
||||
void script_call_sym(mrb_sym sym)
|
||||
void script_call_sym(s7_pointer sym)
|
||||
{
|
||||
if (mrb_respond_to(mrb, obj, sym)) mrb_funcall_argv(mrb, obj, sym, 0, NULL);
|
||||
|
||||
mrb_print_error(mrb);
|
||||
s7_call(s7, sym, s7_nil(s7));
|
||||
}
|
||||
|
||||
int script_has_sym(mrb_sym sym) {
|
||||
return mrb_respond_to(mrb, obj, sym);
|
||||
int script_has_sym(s7_pointer sym) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
#ifndef SCRIPT_H
|
||||
#define SCRIPT_H
|
||||
|
||||
#include "mruby.h"
|
||||
#include "s7.h"
|
||||
extern s7_scheme *s7;
|
||||
|
||||
void script_init();
|
||||
void script_run(const char *script);
|
||||
@@ -10,7 +11,7 @@ void script_update(double dt);
|
||||
void script_draw();
|
||||
void script_editor();
|
||||
void script_call(const char *f);
|
||||
void script_call_sym(mrb_sym sym);
|
||||
int script_has_sym(mrb_sym sym);
|
||||
void script_call_sym(s7_pointer sym);
|
||||
int script_has_sym(s7_pointer sym);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "timer.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <stb_ds.h>;
|
||||
#include <stb_ds.h>
|
||||
|
||||
static double time;
|
||||
|
||||
|
||||
@@ -276,7 +276,7 @@ int window_hasfocus(struct window *w)
|
||||
void window_render(struct window *w) {
|
||||
window_makecurrent(w);
|
||||
openglRender(w);
|
||||
|
||||
/*
|
||||
if (script_has_sym(w->nuke_cb)) {
|
||||
nuke_start();
|
||||
script_call_sym(w->nuke_cb);
|
||||
@@ -287,7 +287,7 @@ void window_render(struct window *w) {
|
||||
w->nuke_gui();
|
||||
nuke_end();
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
window_swap(w);
|
||||
}
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "mruby.h"
|
||||
|
||||
struct window {
|
||||
GLFWwindow *window;
|
||||
int id;
|
||||
@@ -21,8 +19,6 @@ struct window {
|
||||
bool iconified;
|
||||
bool shown;
|
||||
float projection[16];
|
||||
mrb_sym nuke_cb;
|
||||
mrb_sym gui_cb;
|
||||
void (*nuke_gui)();
|
||||
};
|
||||
|
||||
|
||||
@@ -10,7 +10,10 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __linux__
|
||||
#include <execinfo.h>
|
||||
#endif
|
||||
|
||||
#include <signal.h>
|
||||
#include <time.h>
|
||||
|
||||
@@ -29,6 +32,7 @@ double updateMS = 1/60.f;
|
||||
static int ed = 1;
|
||||
|
||||
void seghandle(int sig) {
|
||||
#ifdef __linux__
|
||||
void *ents[512];
|
||||
size_t size;
|
||||
|
||||
@@ -48,6 +52,7 @@ void seghandle(int sig) {
|
||||
}
|
||||
|
||||
exit(1);
|
||||
#endif
|
||||
}
|
||||
|
||||
int main(int argc, char **args) {
|
||||
|
||||
Reference in New Issue
Block a user