Add back in ai and tween, and fix
This commit is contained in:
parent
1195e6c73d
commit
3b9a932c85
|
@ -2,26 +2,28 @@ var ai = {
|
||||||
race(list) {
|
race(list) {
|
||||||
return function(dt) {
|
return function(dt) {
|
||||||
var good = false;
|
var good = false;
|
||||||
list.forEach(function(x) { if (x.call(this,dt)) good = true; }, this);
|
for (var i = 0; i < list.length; i++)
|
||||||
|
if (list[i].call(this,dt)) good=true;
|
||||||
|
|
||||||
return good;
|
return good;
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
do(times, list) {
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
sequence(list) {
|
sequence(list) {
|
||||||
var i = 0;
|
var i = 0;
|
||||||
return function(dt) {
|
var fn = function(dt) {
|
||||||
while (i !== list.length) {
|
while (i !== list.length) {
|
||||||
if (list[i].call(this,dt))
|
if (list[i].call(this,dt))
|
||||||
i++;
|
i++;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (fn.done) fn.done();
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fn.restart = function() { i = 0; };
|
||||||
|
return fn;
|
||||||
},
|
},
|
||||||
|
|
||||||
parallel(list) {
|
parallel(list) {
|
||||||
|
@ -32,21 +34,11 @@ var ai = {
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
moveto() {
|
dofor(secs, fn) {
|
||||||
return function(dt) {
|
return ai.race([
|
||||||
var dir = this.randomloc.sub(this.pos);
|
ai.wait(secs),
|
||||||
if (Vector.length(dir) < 10) return true;
|
fn
|
||||||
|
]);
|
||||||
this.velocity = Vector.norm(this.randomloc.sub(this.pos)).scale(20);
|
|
||||||
return False;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
move() {
|
|
||||||
return function(dt) {
|
|
||||||
this.velocity = this.left().scale(20);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
wait(secs) {
|
wait(secs) {
|
||||||
|
@ -54,8 +46,10 @@ var ai = {
|
||||||
var accum = 0;
|
var accum = 0;
|
||||||
return function(dt) {
|
return function(dt) {
|
||||||
accum += dt;
|
accum += dt;
|
||||||
if (accum >= secs)
|
if (accum >= secs) {
|
||||||
|
accum = 0;
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,7 +4,7 @@ this.view2world = function(pos) { return render.view2world(pos); };
|
||||||
this.world2view = function(pos) { return render.world2view(pos); };
|
this.world2view = function(pos) { return render.world2view(pos); };
|
||||||
this.realzoom = function() { return render.get_zoom(); };
|
this.realzoom = function() { return render.get_zoom(); };
|
||||||
|
|
||||||
this.right = function() { return this.pos.x + (window.rendersize.x/2); }
|
this.screenright = function() { return this.pos.x + (window.rendersize.x/2); }
|
||||||
this.left = function() { return this.pos.x - (window.rendersize.x/2); }
|
this.screenleft = function() { return this.pos.x - (window.rendersize.x/2); }
|
||||||
|
|
||||||
this.zoom = 1;
|
this.zoom = 1;
|
||||||
|
|
|
@ -322,6 +322,7 @@ var SpriteAnim = {
|
||||||
};
|
};
|
||||||
|
|
||||||
var data = json.decode(io.slurp(path));
|
var data = json.decode(io.slurp(path));
|
||||||
|
if (!data?.meta?.app.includes("aseprite")) return;
|
||||||
var anims = {};
|
var anims = {};
|
||||||
var frames = Array.isArray(data.frames) ? data.frames : Object.values(data.frames);
|
var frames = Array.isArray(data.frames) ? data.frames : Object.values(data.frames);
|
||||||
var f = 0;
|
var f = 0;
|
||||||
|
|
|
@ -362,6 +362,8 @@ global.mixin("scripts/std");
|
||||||
global.mixin("scripts/diff");
|
global.mixin("scripts/diff");
|
||||||
global.mixin("scripts/color");
|
global.mixin("scripts/color");
|
||||||
global.mixin("scripts/gui");
|
global.mixin("scripts/gui");
|
||||||
|
global.mixin("scripts/tween");
|
||||||
|
global.mixin("scripts/ai");
|
||||||
|
|
||||||
var timer = {
|
var timer = {
|
||||||
update(dt) {
|
update(dt) {
|
||||||
|
|
|
@ -2,7 +2,7 @@ var keycodes = {
|
||||||
259: "back",
|
259: "back",
|
||||||
258: "tab",
|
258: "tab",
|
||||||
257: "enter",
|
257: "enter",
|
||||||
1: "escape",
|
256: "escape",
|
||||||
32: "space",
|
32: "space",
|
||||||
266: "pgup",
|
266: "pgup",
|
||||||
267: "pgdown",
|
267: "pgdown",
|
||||||
|
@ -111,7 +111,7 @@ prosperon.droppedfile = function(path)
|
||||||
|
|
||||||
var mousepos = [0,0];
|
var mousepos = [0,0];
|
||||||
|
|
||||||
prosperon.textinput = function(){};
|
prosperon.textinput = function(l){};
|
||||||
prosperon.mousemove = function(pos, dx){
|
prosperon.mousemove = function(pos, dx){
|
||||||
mousepos = pos;
|
mousepos = pos;
|
||||||
player[0].mouse_input(modstr() + "move", pos, dx);
|
player[0].mouse_input(modstr() + "move", pos, dx);
|
||||||
|
|
|
@ -135,10 +135,12 @@ render.text = function(str, pos, size, color, wrap, anchor, cursor) {
|
||||||
return bb;
|
return bb;
|
||||||
};
|
};
|
||||||
|
|
||||||
render.image = function(tex, pos, rotation, color) {
|
render.image = function(tex, pos, rotation, color, dimensions) {
|
||||||
color ??= Color.white;
|
color ??= Color.white;
|
||||||
rotation ??= 0;
|
rotation ??= 0;
|
||||||
gui.img(tex,pos, [1.0,1.0], 0.0, false, [0.0,0.0], color);
|
dimensions ??= [tex.width, tex.height];
|
||||||
|
var scale = [dimensions.x/tex.width, dimensions.y/tex.height];
|
||||||
|
gui.img(tex,pos, scale, 0.0, false, [0.0,0.0], color);
|
||||||
return bbox.fromcwh([0,0], [tex.width,tex.height]);
|
return bbox.fromcwh([0,0], [tex.width,tex.height]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,33 @@ audio.bus.master = dspsound.master();
|
||||||
audio.dsp = {};
|
audio.dsp = {};
|
||||||
audio.dsp = dspsound;
|
audio.dsp = dspsound;
|
||||||
|
|
||||||
|
var cries = [];
|
||||||
|
audio.cry = function(file)
|
||||||
|
{
|
||||||
|
var player = audio.play(file);
|
||||||
|
cries.push(player);
|
||||||
|
var hook = function() { console.warn("ENDED SOUND!!!!"); cries.remove(player); player = undefined; hook = undefined;}
|
||||||
|
player.hook = hook;
|
||||||
|
}
|
||||||
|
|
||||||
|
var song;
|
||||||
|
|
||||||
|
audio.music = function(file, fade) {
|
||||||
|
fade ??= 0;
|
||||||
|
if (!fade) {
|
||||||
|
song = audio.play(file);
|
||||||
|
console.info("STRAIGHT PLAY");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var temp = audio.play(file);
|
||||||
|
temp.volume = 0;
|
||||||
|
var temp2 = song;
|
||||||
|
tween(temp, 'volume', 1, fade);
|
||||||
|
tween(temp2, 'volume', 0, fade);
|
||||||
|
song = temp;
|
||||||
|
}
|
||||||
|
|
||||||
audio.dsp.mix = function(to) {
|
audio.dsp.mix = function(to) {
|
||||||
var n = audio.dsp.mix();
|
var n = audio.dsp.mix();
|
||||||
if (to) n.plugin(to);
|
if (to) n.plugin(to);
|
||||||
|
|
|
@ -280,7 +280,7 @@ Cmdline.register_order("play", function(argv) {
|
||||||
game.engine_start(function() {
|
game.engine_start(function() {
|
||||||
global.mixin("scripts/sound.js");
|
global.mixin("scripts/sound.js");
|
||||||
global.app = actor.spawn("game.js");
|
global.app = actor.spawn("game.js");
|
||||||
if (project.icon) window.set_icon(project.icon);
|
if (project.icon) window.set_icon(game.texture(project.icon));
|
||||||
});
|
});
|
||||||
}, "Play the game present in this folder.");
|
}, "Play the game present in this folder.");
|
||||||
|
|
||||||
|
|
|
@ -103,6 +103,21 @@ Ease.elastic = {
|
||||||
Ease.elastic.c4 = 2*Math.PI/3;
|
Ease.elastic.c4 = 2*Math.PI/3;
|
||||||
Ease.elastic.c5 = 2*Math.PI / 4.5;
|
Ease.elastic.c5 = 2*Math.PI / 4.5;
|
||||||
|
|
||||||
|
var tween = function(obj, val, to, time)
|
||||||
|
{
|
||||||
|
var start = profile.secs(profile.now());
|
||||||
|
var startval = obj[val];
|
||||||
|
var update = function(dt) {
|
||||||
|
var elapsed = profile.secs(profile.now()) - start;
|
||||||
|
obj[val] = startval.lerp(to, elapsed/time);
|
||||||
|
if (elapsed >= time) {
|
||||||
|
obj[val] = to;
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var stop = Register.update.register(update);
|
||||||
|
}
|
||||||
|
|
||||||
var Tween = {
|
var Tween = {
|
||||||
default: {
|
default: {
|
||||||
loop: "restart",
|
loop: "restart",
|
||||||
|
@ -142,12 +157,12 @@ var Tween = {
|
||||||
if (defn.accum >= defn.time && defn.loop === 'hold') {
|
if (defn.accum >= defn.time && defn.loop === 'hold') {
|
||||||
if (typeof target === 'string')
|
if (typeof target === 'string')
|
||||||
obj[target] = tvals[tvals.length-1];
|
obj[target] = tvals[tvals.length-1];
|
||||||
else
|
else
|
||||||
target(tvals[tvals.length-1]);
|
target(tvals[tvals.length-1]);
|
||||||
|
|
||||||
defn.pause();
|
defn.pause();
|
||||||
defn.cb.call(obj);
|
defn.cb.call(obj);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
defn.pct = (defn.accum % defn.time) / defn.time;
|
defn.pct = (defn.accum % defn.time) / defn.time;
|
||||||
|
@ -197,4 +212,4 @@ var Tween = {
|
||||||
|
|
||||||
Tween.make = Tween.start;
|
Tween.make = Tween.start;
|
||||||
|
|
||||||
return {Tween, Ease};
|
return {Tween, Ease, tween};
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#include "sokol/sokol_gfx.h"
|
#include "sokol/sokol_gfx.h"
|
||||||
#include "sokol_gfx_ext.h"
|
#include "sokol_gfx_ext.h"
|
||||||
|
|
||||||
|
#include "crt.sglsl.h"
|
||||||
|
|
||||||
#include "msf_gif.h"
|
#include "msf_gif.h"
|
||||||
|
|
||||||
HMM_Vec2 campos = {0,0};
|
HMM_Vec2 campos = {0,0};
|
||||||
|
@ -38,6 +40,12 @@ static struct {
|
||||||
sg_image depth;
|
sg_image depth;
|
||||||
} sg_gif;
|
} sg_gif;
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
sg_pipeline pipe;
|
||||||
|
sg_bindings bind;
|
||||||
|
sg_shader shader;
|
||||||
|
} sg_crt;
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
int w;
|
int w;
|
||||||
int h;
|
int h;
|
||||||
|
@ -225,14 +233,13 @@ void render_init() {
|
||||||
.layout = {
|
.layout = {
|
||||||
.attrs = {
|
.attrs = {
|
||||||
[0].format = SG_VERTEXFORMAT_FLOAT2,
|
[0].format = SG_VERTEXFORMAT_FLOAT2,
|
||||||
[1].format = SG_VERTEXFORMAT_FLOAT2
|
[1].format = SG_VERTEXFORMAT_FLOAT2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
.colors[0].pixel_format = SG_PIXELFORMAT_RGBA8,
|
.colors[0].pixel_format = SG_PIXELFORMAT_RGBA8,
|
||||||
.label = "gif pipe",
|
.label = "gif pipe",
|
||||||
});
|
});
|
||||||
|
|
||||||
#if defined SOKOL_GLCORE33 || defined SOKOL_GLES3
|
|
||||||
float crt_quad[] = {
|
float crt_quad[] = {
|
||||||
-1, 1, 0, 1,
|
-1, 1, 0, 1,
|
||||||
-1, -1, 0, 0,
|
-1, -1, 0, 0,
|
||||||
|
@ -241,16 +248,7 @@ void render_init() {
|
||||||
1, -1, 1, 0,
|
1, -1, 1, 0,
|
||||||
1, 1, 1, 1
|
1, 1, 1, 1
|
||||||
};
|
};
|
||||||
#else
|
|
||||||
float crt_quad[] = {
|
|
||||||
-1, 1, 0, 0,
|
|
||||||
-1, -1, 0, 1,
|
|
||||||
1, -1, 1, 1,
|
|
||||||
-1, 1, 0, 0,
|
|
||||||
1, -1, 1, 1,
|
|
||||||
1, 1, 1, 0
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
float gif_quad[] = {
|
float gif_quad[] = {
|
||||||
-1, 1, 0, 1,
|
-1, 1, 0, 1,
|
||||||
-1, -1, 0, 0,
|
-1, -1, 0, 0,
|
||||||
|
@ -265,6 +263,24 @@ void render_init() {
|
||||||
.data = gif_quad,
|
.data = gif_quad,
|
||||||
});
|
});
|
||||||
sg_gif.bind.fs.samplers[0] = sg_make_sampler(&(sg_sampler_desc){});
|
sg_gif.bind.fs.samplers[0] = sg_make_sampler(&(sg_sampler_desc){});
|
||||||
|
|
||||||
|
sg_crt.shader = sg_make_shader(crt_shader_desc(sg_query_backend()));
|
||||||
|
sg_crt.pipe = sg_make_pipeline(&(sg_pipeline_desc){
|
||||||
|
.shader = sg_crt.shader,
|
||||||
|
.layout = {
|
||||||
|
.attrs = {
|
||||||
|
[0].format = SG_VERTEXFORMAT_FLOAT2,
|
||||||
|
[1].format = SG_VERTEXFORMAT_FLOAT2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.primitive_type = SG_PRIMITIVETYPE_TRIANGLE_STRIP,
|
||||||
|
});
|
||||||
|
|
||||||
|
sg_crt.bind.vertex_buffers[0] = sg_make_buffer(&(sg_buffer_desc){
|
||||||
|
.size = sizeof(crt_quad),
|
||||||
|
.type = SG_BUFFERTYPE_VERTEXBUFFER,
|
||||||
|
.usage = SG_USAGE_IMMUTABLE
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
HMM_Vec2 world2screen(HMM_Vec2 pos)
|
HMM_Vec2 world2screen(HMM_Vec2 pos)
|
||||||
|
@ -360,23 +376,6 @@ void openglRender(struct window *window, gameobject *cam, float zoom) {
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
sg_shader sg_compile_shader(const char *v, const char *f, sg_shader_desc *d)
|
|
||||||
{
|
|
||||||
YughInfo("Making shader with %s and %s", v, f);
|
|
||||||
char *vs = slurp_text(v, NULL);
|
|
||||||
char *fs = slurp_text(f, NULL);
|
|
||||||
|
|
||||||
d->vs.source = vs;
|
|
||||||
d->fs.source = fs;
|
|
||||||
d->label = v;
|
|
||||||
|
|
||||||
sg_shader ret = sg_make_shader(d);
|
|
||||||
|
|
||||||
free(vs);
|
|
||||||
free(fs);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct boundingbox cwh2bb(HMM_Vec2 c, HMM_Vec2 wh) {
|
struct boundingbox cwh2bb(HMM_Vec2 c, HMM_Vec2 wh) {
|
||||||
struct boundingbox bb = {
|
struct boundingbox bb = {
|
||||||
.t = c.Y + wh.Y/2,
|
.t = c.Y + wh.Y/2,
|
||||||
|
|
|
@ -67,8 +67,6 @@ void capture_screen(int x, int y, int w, int h, const char *path);
|
||||||
HMM_Vec2 world2screen(HMM_Vec2 pos);
|
HMM_Vec2 world2screen(HMM_Vec2 pos);
|
||||||
HMM_Vec2 screen2world(HMM_Vec2 pos);
|
HMM_Vec2 screen2world(HMM_Vec2 pos);
|
||||||
|
|
||||||
sg_shader sg_compile_shader(const char *v, const char *f, sg_shader_desc *d);
|
|
||||||
|
|
||||||
void gif_rec_start(int w, int h, int cpf, int bitdepth);
|
void gif_rec_start(int w, int h, int cpf, int bitdepth);
|
||||||
void gif_rec_end(const char *path);
|
void gif_rec_end(const char *path);
|
||||||
|
|
||||||
|
|
|
@ -278,7 +278,7 @@ void sound_fillbuf(struct sound *s, soundbyte *buf, int n) {
|
||||||
if(end) {
|
if(end) {
|
||||||
if (s->loop)
|
if (s->loop)
|
||||||
s->frame = 0;
|
s->frame = 0;
|
||||||
|
YughInfo("CALLING HOOK");
|
||||||
script_call_sym(s->hook,0,NULL);
|
script_call_sym(s->hook,0,NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ void c_event(const sapp_event *e)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SAPP_EVENTTYPE_CHAR:
|
case SAPP_EVENTTYPE_CHAR:
|
||||||
script_evalf("prosperon.textinput(`%lc`);", e->char_code);
|
script_evalf("prosperon.textinput(`\\%lc`);", e->char_code);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SAPP_EVENTTYPE_RESIZED:
|
case SAPP_EVENTTYPE_RESIZED:
|
||||||
|
|
|
@ -17,13 +17,12 @@ out vec4 frag_color;
|
||||||
|
|
||||||
uniform texture2D diffuse;
|
uniform texture2D diffuse;
|
||||||
uniform sampler smp;
|
uniform sampler smp;
|
||||||
|
uniform mpara {
|
||||||
|
uniform vec2 screensize;
|
||||||
|
};
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
frag_color = texture(sampler2D(diffuse,smp), TexCoords);
|
|
||||||
return;
|
|
||||||
/* vec2 screensize = textureSize(diffuse,0);
|
|
||||||
|
|
||||||
vec4 color = texture(sampler2D(diffuse,smp), TexCoords);
|
vec4 color = texture(sampler2D(diffuse,smp), TexCoords);
|
||||||
float avg = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b;
|
float avg = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b;
|
||||||
frag_color = vec4(avg,avg,avg,1.0);
|
frag_color = vec4(avg,avg,avg,1.0);
|
||||||
|
@ -39,7 +38,7 @@ void main()
|
||||||
float b = color.b;
|
float b = color.b;
|
||||||
|
|
||||||
frag_color = vec4(r, g*0.99, b, 1.0) * clamp(line_intensity, 0.85, 1.0);
|
frag_color = vec4(r, g*0.99, b, 1.0) * clamp(line_intensity, 0.85, 1.0);
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue