module armos.command.generator.component; abstract class Component{ static Component add(ref Component[] components, ref string[] options); string[] define()const{ return [""]; } string[] setup()const{ return [""]; } string[] update()const{ return [""]; } string[] draw()const{ return [""]; } // private this(){}; } /++ +/ class DefaultCamera: Component{ import std.string; static void add(ref Component[] components, ref string[] options){ import std.getopt; string name; options.getopt("defaultcamera", &name); if(name.length != 0){ auto camera = new DefaultCamera(); camera._name = name; components ~= camera; } }; override string[] define()const{ return ["private ar.graphics.Camera %s;".format(_name)]; } override string[] setup()const{ import std.range; import std.array; import std.string; import std.conv; return [_name ~ " = (new ar.graphics.DefaultCamera()).position(ar.math.Vector3f(0, 0, -1))", ' '.repeat.take(_name.length).array.to!string ~ " .target(ar.math.Vector3f.zero);"]; } override string[] draw()const{ return ["{auto cameraScope = ar.utils.scoped(%s);}".format(_name)]; } private{ this(){}; string _name; } }//class Camera