Using S7; edit Makefile for debug, windows compilation

This commit is contained in:
2022-12-12 16:48:21 +00:00
parent 998cb11218
commit 18eefd4937
483 changed files with 97382 additions and 301477 deletions

View File

@@ -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();

View File

@@ -11,6 +11,7 @@
#include "resources.h"
#include "nuke.h"
#include "log.h"
#include "debugdraw.h"
#include "stb_ds.h"

View File

@@ -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));
*/
}

View File

View 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);
}

View File

@@ -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);

View File

@@ -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

File diff suppressed because it is too large Load Diff

1239
source/engine/s7.h Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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;
}

View File

@@ -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

View File

@@ -1,7 +1,7 @@
#include "timer.h"
#include <stdlib.h>
#include <stb_ds.h>;
#include <stb_ds.h>
static double time;

View File

@@ -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);
}

View File

@@ -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)();
};

View File

@@ -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) {