summaryrefslogtreecommitdiff
path: root/src/view_2d.cpp
diff options
context:
space:
mode:
authorFrederico Linhares <fred@linhares.blue>2022-11-09 16:11:15 -0300
committerFrederico Linhares <fred@linhares.blue>2022-11-09 17:19:06 -0300
commitbde8c8bd073abeb314748d66d6402f951ecb2902 (patch)
tree69c91317baf62a0ad9e36d8e35969fd82a02e91d /src/view_2d.cpp
parent7e9107cb1c5012fef900dfa03408e2179f1f9915 (diff)
feat create method Rectangle#draw
Diffstat (limited to 'src/view_2d.cpp')
-rw-r--r--src/view_2d.cpp30
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));
}