2019-10-05 00:00:00 +00:00
|
|
|
/// License: MIT
|
|
|
|
import std;
|
|
|
|
|
|
|
|
import derelict.sfml2.audio,
|
|
|
|
derelict.sfml2.system,
|
|
|
|
derelict.sfml2.window;
|
|
|
|
|
|
|
|
import gl4d;
|
|
|
|
|
2019-10-06 00:00:00 +00:00
|
|
|
import sjplayer;
|
|
|
|
|
2019-10-05 00:00:00 +00:00
|
|
|
int main(string[] args) {
|
|
|
|
(args.length == 4).enforce;
|
|
|
|
const music_file = args[1];
|
|
|
|
const bpm = args[2].to!float;
|
|
|
|
const script_file = args[3];
|
|
|
|
|
|
|
|
auto win = Initialize();
|
|
|
|
scope(exit) sfWindow_destroy(win);
|
|
|
|
|
|
|
|
auto music = sfMusic_createFromFile(music_file.toStringz).enforce;
|
|
|
|
scope(exit) sfMusic_destroy(music);
|
|
|
|
sfMusic_play(music);
|
|
|
|
|
2019-10-07 00:00:00 +00:00
|
|
|
auto programs = new ProgramSet;
|
2019-10-05 00:00:00 +00:00
|
|
|
scope(exit) programs.destroy();
|
|
|
|
|
2019-10-06 00:00:00 +00:00
|
|
|
auto context = script_file.readText.CreateContextFromText(programs);
|
2019-10-07 00:00:00 +00:00
|
|
|
scope(exit) context.destroy();
|
2019-10-05 00:00:00 +00:00
|
|
|
|
2019-10-05 00:00:00 +00:00
|
|
|
while (true) {
|
|
|
|
sfEvent e;
|
|
|
|
sfWindow_pollEvent(win, &e);
|
|
|
|
if (e.type == sfEvtClosed) break;
|
|
|
|
|
|
|
|
const msecs = sfMusic_getPlayingOffset(music).microseconds * 1e-6f;
|
|
|
|
const beat = msecs/60f * bpm;
|
|
|
|
|
2019-10-06 00:00:00 +00:00
|
|
|
context.OperateScheduledControllers(beat);
|
|
|
|
|
|
|
|
gl.Clear(GL_COLOR_BUFFER_BIT);
|
|
|
|
context.DrawElements();
|
2019-10-05 00:00:00 +00:00
|
|
|
sfWindow_display(win);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
sfWindow* Initialize() {
|
|
|
|
DerelictSFML2System.load();
|
|
|
|
DerelictSFML2Window.load();
|
|
|
|
DerelictSFML2Audio .load();
|
|
|
|
|
|
|
|
sfContextSettings specs;
|
|
|
|
specs.depthBits = 24;
|
|
|
|
specs.stencilBits = 8;
|
|
|
|
specs.antialiasingLevel = 1;
|
|
|
|
specs.majorVersion = 3;
|
|
|
|
specs.minorVersion = 3;
|
|
|
|
specs.attributeFlags = sfContextCore;
|
|
|
|
|
|
|
|
auto win = sfWindow_create(sfVideoMode(600, 600),
|
|
|
|
"sjplayer".toStringz, sfClose | sfTitlebar, &specs).enforce;
|
|
|
|
sfWindow_setVerticalSyncEnabled(win, true);
|
|
|
|
|
|
|
|
sfWindow_setActive(win, true).enforce;
|
2019-10-05 00:00:00 +00:00
|
|
|
|
2019-10-05 00:00:00 +00:00
|
|
|
gl.ApplyContext();
|
2019-10-05 00:00:00 +00:00
|
|
|
gl.Enable(GL_BLEND);
|
|
|
|
gl.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
2019-10-05 00:00:00 +00:00
|
|
|
|
|
|
|
return win;
|
|
|
|
}
|