diff options
author | Frederico Linhares <fred@linhares.blue> | 2022-11-09 16:11:15 -0300 |
---|---|---|
committer | Frederico Linhares <fred@linhares.blue> | 2022-11-09 17:19:06 -0300 |
commit | bde8c8bd073abeb314748d66d6402f951ecb2902 (patch) | |
tree | 69c91317baf62a0ad9e36d8e35969fd82a02e91d /src/view_2d.cpp | |
parent | 7e9107cb1c5012fef900dfa03408e2179f1f9915 (diff) |
feat create method Rectangle#draw
Diffstat (limited to 'src/view_2d.cpp')
-rw-r--r-- | src/view_2d.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/view_2d.cpp b/src/view_2d.cpp index c84cbee..3f4325d 100644 --- a/src/view_2d.cpp +++ b/src/view_2d.cpp @@ -18,6 +18,7 @@ #include "sprite.hpp" #include "vector_4d.hpp" +#include "view_3d.hpp" #include "vk/sprite.hpp" #include "vk/view_2d.hpp" @@ -51,20 +52,26 @@ cg_cView2D_initialize(mrb_state *mrb, mrb_value self) return self; } -static mrb_value -cg_cView2D_draw(mrb_state *mrb, mrb_value self) +VK::View2D* +cg_cView_to_view_2d(mrb_state *mrb, mrb_value view_value) { - std::shared_ptr<VK::Sprite> *sprite; - std::shared_ptr<glm::vec4> *position; - auto *ptr = (std::shared_ptr<VK::View2D>*)DATA_PTR(self); + VK::View2D* view_2d; + const mrb_data_type *type = DATA_TYPE(view_value); - mrb_get_args(mrb, "dd", &sprite, &cg_sprite_type, - &position, &cg_vector_4d_type); - auto &positions = (*ptr)->sprites_to_draw[ - cg_core.vk_swapchain->current_frame][*sprite]; - positions.push_back(*position->get()); + if(type == &cg_view_2d_type) + view_2d = static_cast<std::shared_ptr<VK::View2D>*>( + DATA_PTR(view_value))->get(); + else if (type == &cg_view_3d_type) + view_2d = static_cast<VK::View2D*>( + static_cast<std::shared_ptr<VK::View3D>*>( + DATA_PTR(view_value))->get()); + else + mrb_raisef( + mrb, E_TYPE_ERROR, "wrong argument type %s (expected %s or %s)", + type->struct_name, cg_view_2d_type.struct_name, + cg_view_3d_type.struct_name); - return self; + return view_2d; } void @@ -77,5 +84,4 @@ cg_view_2d_init(mrb_state *mrb) MRB_SET_INSTANCE_TT(cg_cView2D, MRB_TT_DATA); mrb_define_method( mrb, cg_cView2D, "initialize", cg_cView2D_initialize, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, cg_cView2D, "draw", cg_cView2D_draw, MRB_ARGS_REQ(2)); } |