diff options
Diffstat (limited to 'src/candy_gear.cpp')
-rw-r--r-- | src/candy_gear.cpp | 58 |
1 files changed, 32 insertions, 26 deletions
diff --git a/src/candy_gear.cpp b/src/candy_gear.cpp index 9460b51..8ba87cc 100644 --- a/src/candy_gear.cpp +++ b/src/candy_gear.cpp @@ -24,6 +24,7 @@ #include "rotation_3d.hpp" #include "vector_3d.hpp" +#include "view.hpp" static mrb_value parse_node(mrb_state *mrb, const YAML::Node &node) @@ -60,37 +61,47 @@ parse_node(mrb_state *mrb, const YAML::Node &node) } static mrb_value -cg_mCandyGear_set_camera_position(mrb_state *mrb, mrb_value self) +cg_mCandyGear_load_yaml(mrb_state *mrb, mrb_value self) { - std::shared_ptr<glm::vec3> *camera_position; + const char *file_path; - mrb_get_args(mrb, "d", &camera_position, &cg_vector_3d_type); - cg_core.vk_graphics_pipeline_3d->camera_position = (*camera_position); + mrb_get_args(mrb, "z", &file_path); - return self; + YAML::Node root = YAML::LoadFile(file_path); + + return parse_node(mrb, root); } static mrb_value -cg_mCandyGear_set_camera_rotation(mrb_state *mrb, mrb_value self) +cg_mCandyGear_set_views(mrb_state *mrb, mrb_value self) { - std::shared_ptr<glm::vec3> *camera_rotation; + struct RClass *cg_m, *cg_cView; + mrb_value *array; + mrb_int array_len; - mrb_get_args(mrb, "d", &camera_rotation, &cg_rotation_3d_type); - cg_core.vk_graphics_pipeline_3d->camera_rotation = (*camera_rotation); + std::vector<std::shared_ptr<VK::View>> views; - return self; -} - -static mrb_value -cg_mCandyGear_load_yaml(mrb_state *mrb, mrb_value self) -{ - const char *file_path; + cg_m = mrb_module_get(mrb, "CandyGear"); + cg_cView = mrb_class_get_under(mrb, cg_m, "View"); - mrb_get_args(mrb, "z", &file_path); + mrb_get_args(mrb, "a", &array, &array_len); + for(mrb_int i{0}; i < array_len; i++) + { + if(mrb_obj_is_kind_of(mrb, array[i], cg_cView)) + { + auto v = (std::shared_ptr<VK::View>*)DATA_PTR(array[i]); + views.push_back(*v); + } + } - YAML::Node root = YAML::LoadFile(file_path); + // A Renderer need at least one view to work. + if(views.size() > 0) + { + delete cg_core.vk_renderer; + cg_core.vk_renderer = new VK::Renderer({views}); + } - return parse_node(mrb, root); + return self; } static mrb_value @@ -136,15 +147,10 @@ cg_candy_gear_init(mrb_state *mrb) cg_m = mrb_module_get(mrb, "CandyGear"); mrb_define_class_method( - mrb, cg_m, "camera_position=", cg_mCandyGear_set_camera_position, - MRB_ARGS_REQ(1)); - mrb_define_class_method( - mrb, cg_m, "camera_rotation=", cg_mCandyGear_set_camera_rotation, - MRB_ARGS_REQ(1)); - - mrb_define_class_method( mrb, cg_m, "load_yaml", cg_mCandyGear_load_yaml, MRB_ARGS_REQ(1)); mrb_define_class_method( + mrb, cg_m, "views=", cg_mCandyGear_set_views, MRB_ARGS_REQ(1)); + mrb_define_class_method( mrb, cg_m, "log", cg_mCandyGear_log, MRB_ARGS_REQ(2)); mrb_define_class_method( mrb, cg_m, "quit", cg_mCandyGear_quit, MRB_ARGS_NONE()); |