font setting
This commit is contained in:
parent
0054c7ab2e
commit
f948dac73f
|
@ -143,7 +143,7 @@ global.mixin("scripts/tween.js");
|
||||||
global.mixin("scripts/render.js");
|
global.mixin("scripts/render.js");
|
||||||
global.mixin("scripts/physics.js");
|
global.mixin("scripts/physics.js");
|
||||||
global.mixin("scripts/input.js");
|
global.mixin("scripts/input.js");
|
||||||
global.mixin("scripts/sound.js");
|
|
||||||
global.mixin("scripts/ai.js");
|
global.mixin("scripts/ai.js");
|
||||||
global.mixin("scripts/geometry.js");
|
global.mixin("scripts/geometry.js");
|
||||||
|
|
||||||
|
@ -300,8 +300,6 @@ global.mixin("scripts/components.js");
|
||||||
var Game = {
|
var Game = {
|
||||||
engine_start(fn) {
|
engine_start(fn) {
|
||||||
cmd(257, fn);
|
cmd(257, fn);
|
||||||
Sound.bus.master = cmd(180);
|
|
||||||
Sound.master = Sound.bus.master;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
native: render.device.pc,
|
native: render.device.pc,
|
||||||
|
|
|
@ -109,7 +109,7 @@ var Mum = {
|
||||||
selectable: false,
|
selectable: false,
|
||||||
selected: false,
|
selected: false,
|
||||||
font_size: 1,
|
font_size: 1,
|
||||||
text_align: "left",
|
text_align: "left", /* left, center, right */
|
||||||
scale: 1,
|
scale: 1,
|
||||||
angle: 0,
|
angle: 0,
|
||||||
anchor: [0,1],
|
anchor: [0,1],
|
||||||
|
@ -157,6 +157,7 @@ var Mum = {
|
||||||
|
|
||||||
Mum.text = Mum.extend({
|
Mum.text = Mum.extend({
|
||||||
draw(cursor, cnt) {
|
draw(cursor, cnt) {
|
||||||
|
cursor ??= [0,0];
|
||||||
cnt ??= Mum;
|
cnt ??= Mum;
|
||||||
if (this.hide) return;
|
if (this.hide) return;
|
||||||
if (this.selectable) GUI.controls.check_bb(this);
|
if (this.selectable) GUI.controls.check_bb(this);
|
||||||
|
@ -175,6 +176,7 @@ Mum.text = Mum.extend({
|
||||||
this.height = this.wh.y;
|
this.height = this.wh.y;
|
||||||
var aa = [0,1].sub(params.anchor);
|
var aa = [0,1].sub(params.anchor);
|
||||||
var pos = cursor.add(params.wh.scale(aa)).add(params.offset);
|
var pos = cursor.add(params.wh.scale(aa)).add(params.offset);
|
||||||
|
cmd(263, params.font);
|
||||||
ui_text(params.str, pos, params.font_size, params.color, this.width, params.caret);
|
ui_text(params.str, pos, params.font_size, params.color, this.width, params.caret);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -208,6 +210,7 @@ Mum.window = Mum.extend({
|
||||||
this.bb = bbox.fromcwh([0,0], this.wh);
|
this.bb = bbox.fromcwh([0,0], this.wh);
|
||||||
},
|
},
|
||||||
draw(cursor, cnt) {
|
draw(cursor, cnt) {
|
||||||
|
cursor ??= [0,0];
|
||||||
cnt ??= Mum;
|
cnt ??= Mum;
|
||||||
var p = cursor.sub(this.wh.scale(this.anchor)).add(this.padding);
|
var p = cursor.sub(this.wh.scale(this.anchor)).add(this.padding);
|
||||||
GUI.window(p,this.wh, this.color);
|
GUI.window(p,this.wh, this.color);
|
||||||
|
@ -256,6 +259,7 @@ Mum.image = Mum.extend({
|
||||||
|
|
||||||
Mum.column = Mum.extend({
|
Mum.column = Mum.extend({
|
||||||
draw(cursor, cnt) {
|
draw(cursor, cnt) {
|
||||||
|
cursor ??= [0,0];
|
||||||
cnt ??= Mum;
|
cnt ??= Mum;
|
||||||
if (this.hide) return;
|
if (this.hide) return;
|
||||||
cursor = cursor.add(this.offset);
|
cursor = cursor.add(this.offset);
|
||||||
|
|
|
@ -10,7 +10,7 @@ audio.sound = {
|
||||||
}
|
}
|
||||||
var src = audio.dsp.source(file);
|
var src = audio.dsp.source(file);
|
||||||
bus ??= audio.sound.bus.master;
|
bus ??= audio.sound.bus.master;
|
||||||
// src.plugin(bus);
|
src.plugin(bus);
|
||||||
return src;
|
return src;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -259,6 +259,7 @@ Cmdline.register_order("play", function() {
|
||||||
if (project.title) Window.title(project.title);
|
if (project.title) Window.title(project.title);
|
||||||
|
|
||||||
Game.engine_start(function() {
|
Game.engine_start(function() {
|
||||||
|
global.mixin("scripts/sound.js");
|
||||||
global.mixin("game.js");
|
global.mixin("game.js");
|
||||||
if (project.icon) Window.icon(project.icon);
|
if (project.icon) Window.icon(project.icon);
|
||||||
});
|
});
|
||||||
|
|
|
@ -64,6 +64,8 @@ void mYughLog(int category, int priority, int line, const char *file, const char
|
||||||
snprintf(buffer, len, logfmt, file, line, logstr[priority], catstr[category], msg);
|
snprintf(buffer, len, logfmt, file, line, logstr[priority], catstr[category], msg);
|
||||||
|
|
||||||
fprintf(stderr, "%s", buffer);
|
fprintf(stderr, "%s", buffer);
|
||||||
|
if (priority >= 2)
|
||||||
|
js_stacktrace();
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
|
||||||
free(msg);
|
free(msg);
|
||||||
|
|
|
@ -17,11 +17,17 @@
|
||||||
#include "stb_image_write.h"
|
#include "stb_image_write.h"
|
||||||
#include "stb_rect_pack.h"
|
#include "stb_rect_pack.h"
|
||||||
#include "stb_truetype.h"
|
#include "stb_truetype.h"
|
||||||
|
#include "stb_ds.h"
|
||||||
|
|
||||||
#include "HandmadeMath.h"
|
#include "HandmadeMath.h"
|
||||||
|
|
||||||
struct sFont *font;
|
struct sFont *font;
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
char *key;
|
||||||
|
struct sFont *value;
|
||||||
|
} *fonthash = NULL;
|
||||||
|
|
||||||
#define max_chars 10000
|
#define max_chars 10000
|
||||||
|
|
||||||
static sg_shader fontshader;
|
static sg_shader fontshader;
|
||||||
|
@ -78,13 +84,33 @@ void font_init() {
|
||||||
.label = "text buffer"
|
.label = "text buffer"
|
||||||
});
|
});
|
||||||
|
|
||||||
font = MakeFont("fonts/LessPerfectDOSVGA.ttf", 16);
|
font_set("fonts/LessPerfectDOSVGA.ttf");
|
||||||
// font = MakeFont("fonts/c64.ttf", 8);
|
|
||||||
// font = MakeFont("fonts/teenytinypixels.ttf", 16);
|
|
||||||
bind_text.fs.images[0] = font->texID;
|
bind_text.fs.images[0] = font->texID;
|
||||||
bind_text.fs.samplers[0] = sg_make_sampler(&(sg_sampler_desc){});
|
bind_text.fs.samplers[0] = sg_make_sampler(&(sg_sampler_desc){});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void font_set(const char *path)
|
||||||
|
{
|
||||||
|
if (shlen(fonthash) == 0) sh_new_arena(fonthash);
|
||||||
|
int index = shgeti(fonthash, path);
|
||||||
|
if (index != -1) {
|
||||||
|
if (font == fonthash[index].value) return;
|
||||||
|
font = fonthash[index].value;
|
||||||
|
bind_text.fs.images[0] = font->texID;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct sFont *newfont = MakeFont(path, 16);
|
||||||
|
if (!newfont) {
|
||||||
|
YughError("Could not make font from %s.", path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
font = newfont;
|
||||||
|
shput(fonthash, path, newfont);
|
||||||
|
bind_text.fs.images[0] = font->texID;
|
||||||
|
}
|
||||||
|
|
||||||
struct sFont *MakeSDFFont(const char *fontfile, int height)
|
struct sFont *MakeSDFFont(const char *fontfile, int height)
|
||||||
{
|
{
|
||||||
YughInfo("Making sdf font %s.", fontfile);
|
YughInfo("Making sdf font %s.", fontfile);
|
||||||
|
@ -329,7 +355,6 @@ void check_caret(int caret, int l, HMM_Vec2 pos, float scale, struct rgba color)
|
||||||
draw_underline_cursor(pos,scale,color);
|
draw_underline_cursor(pos,scale,color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* pos given in screen coordinates */
|
/* pos given in screen coordinates */
|
||||||
int renderText(const char *text, HMM_Vec2 pos, float scale, struct rgba color, float lw, int caret, float tracking) {
|
int renderText(const char *text, HMM_Vec2 pos, float scale, struct rgba color, float lw, int caret, float tracking) {
|
||||||
int len = strlen(text);
|
int len = strlen(text);
|
||||||
|
|
|
@ -30,6 +30,7 @@ struct sFont {
|
||||||
|
|
||||||
void font_init();
|
void font_init();
|
||||||
struct sFont *MakeFont(const char *fontfile, int height);
|
struct sFont *MakeFont(const char *fontfile, int height);
|
||||||
|
void font_set(const char *path);
|
||||||
void sdrawCharacter(struct Character c, HMM_Vec2 cursor, float scale, struct rgba color);
|
void sdrawCharacter(struct Character c, HMM_Vec2 cursor, float scale, struct rgba color);
|
||||||
void text_settype(struct sFont *font);
|
void text_settype(struct sFont *font);
|
||||||
struct boundingbox text_bb(const char *text, float scale, float lw, float tracking);
|
struct boundingbox text_bb(const char *text, float scale, float lw, float tracking);
|
||||||
|
|
|
@ -1452,6 +1452,10 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
||||||
str = js2str(argv[1]);
|
str = js2str(argv[1]);
|
||||||
save_qoa(str);
|
save_qoa(str);
|
||||||
break;
|
break;
|
||||||
|
case 263:
|
||||||
|
str = js2str(argv[1]);
|
||||||
|
font_set(str);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str) JS_FreeCString(js, str);
|
if (str) JS_FreeCString(js, str);
|
||||||
|
|
Loading…
Reference in a new issue