[add] Added ElementProgramSet.

This commit is contained in:
falsycat 2019-10-05 00:00:00 +00:00
parent 375dabf2ea
commit 669c908f94
2 changed files with 41 additions and 3 deletions

View File

@ -0,0 +1,36 @@
/// License: MIT
module sjplayer.ElementProgramSet;
import std.meta,
std.typecons;
import sjplayer.CircleElement;
///
class ElementProgramSet {
public:
///
alias ElementPrograms = Tuple!(CircleElementProgram);
///
this() {
foreach (ref program; programs_) {
program = new typeof(program);
}
}
~this() {
foreach (program; programs_) {
program.destroy();
}
}
///
T Get(T)() out (r; r) {
enum index = staticIndexOf!(T, ElementPrograms.Types);
static assert(index >= 0);
return programs_[index];
}
private:
ElementPrograms programs_;
}

View File

@ -20,12 +20,14 @@ int main(string[] args) {
scope(exit) sfMusic_destroy(music);
sfMusic_play(music);
import sjplayer.ElementProgramSet;
auto programs = new ElementProgramSet;
scope(exit) programs.destroy();
import sjplayer.CircleElement;
auto program = new CircleElementProgram;
scope(exit) program.destroy();
auto element = new CircleElement;
scope(exit) element.destroy();
auto drawer = new CircleElementDrawer(program, [element]);
auto drawer = new CircleElementDrawer(programs.Get!CircleElementProgram, [element]);
scope(exit) drawer.destroy();
with (element) {