diff options
Diffstat (limited to 'src/rectangle.cpp')
-rw-r--r-- | src/rectangle.cpp | 300 |
1 files changed, 0 insertions, 300 deletions
diff --git a/src/rectangle.cpp b/src/rectangle.cpp deleted file mode 100644 index f678cc3..0000000 --- a/src/rectangle.cpp +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright 2022 Frederico de Oliveira Linhares - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "rectangle.hpp" - -#include <mruby/array.h> - -#include "vector_3d.hpp" -#include "view_2d.hpp" -#include "view_3d.hpp" - -void -cg_free_rectangle(mrb_state *mrb, void* obj) -{ - auto ptr = static_cast<std::shared_ptr<VK::Rectangle>*>(obj); - - ptr->~shared_ptr(); - mrb_free(mrb, ptr); -} - -const struct mrb_data_type cg_rectangle_type = { - "CG_Rectangle", cg_free_rectangle }; - -static mrb_value -cg_cRectangle_initialize(mrb_state *mrb, mrb_value self) -{ - mrb_float x, y, width, height; - std::shared_ptr<VK::Rectangle> *ptr; - - mrb_get_args(mrb, "ffff", &x, &y, &width, &height); - ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - if(ptr) mrb_free(mrb, ptr); - ptr = (std::shared_ptr<VK::Rectangle>*)mrb_malloc( - mrb, sizeof(std::shared_ptr<VK::Rectangle>)); - - new(ptr)std::shared_ptr<VK::Rectangle>( - std::make_shared<VK::Rectangle>(x, y, width, height)); - - mrb_data_init(self, ptr, &cg_rectangle_type); - return self; -} - -static mrb_value -cg_cRectangle_get_x(mrb_state *mrb, mrb_value self) -{ - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - return mrb_float_value(mrb, (*ptr)->x); -} - -static mrb_value -cg_cRectangle_set_x(mrb_state *mrb, mrb_value self) -{ - mrb_float x; - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - mrb_get_args(mrb, "f", &x); - - (*ptr)->x = x; - - return mrb_float_value(mrb, (*ptr)->x); -} - -static mrb_value -cg_cRectangle_get_y(mrb_state *mrb, mrb_value self) -{ - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - return mrb_float_value(mrb, (*ptr)->y); -} - -static mrb_value -cg_cRectangle_set_y(mrb_state *mrb, mrb_value self) -{ - mrb_float y; - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - mrb_get_args(mrb, "f", &y); - - (*ptr)->y = y; - - return mrb_float_value(mrb, (*ptr)->y); -} - -static mrb_value -cg_cRectangle_get_width(mrb_state *mrb, mrb_value self) -{ - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - return mrb_float_value(mrb, (*ptr)->width); -} - -static mrb_value -cg_cRectangle_set_width(mrb_state *mrb, mrb_value self) -{ - mrb_float width; - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - mrb_get_args(mrb, "f", &width); - - (*ptr)->width = width; - - return mrb_float_value(mrb, (*ptr)->width); -} - -static mrb_value -cg_cRectangle_get_height(mrb_state *mrb, mrb_value self) -{ - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - return mrb_float_value(mrb, (*ptr)->height); -} - -static mrb_value -cg_cRectangle_set_height(mrb_state *mrb, mrb_value self) -{ - mrb_float height; - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - mrb_get_args(mrb, "f", &height); - - (*ptr)->height = height; - - return mrb_float_value(mrb, (*ptr)->height); -} - -static mrb_value -cg_cRectangle_get_xy(mrb_state *mrb, mrb_value self) -{ - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - mrb_value array = mrb_ary_new_capa(mrb, 2); - mrb_ary_push(mrb, array, mrb_float_value(mrb, (*ptr)->x)); - mrb_ary_push(mrb, array, mrb_float_value(mrb, (*ptr)->y)); - - return array; -} - -static mrb_value -cg_cRectangle_get_width_height(mrb_state *mrb, mrb_value self) -{ - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - mrb_value array = mrb_ary_new_capa(mrb, 2); - mrb_ary_push(mrb, array, mrb_float_value(mrb, (*ptr)->width)); - mrb_ary_push(mrb, array, mrb_float_value(mrb, (*ptr)->height)); - - return array; -} - -static mrb_value -cg_cRectangle_set_xy(mrb_state *mrb, mrb_value self) -{ - mrb_float x, y; - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - mrb_get_args(mrb, "ff", &x, &y); - - (*ptr)->x = x; - (*ptr)->y = y; - - return self; -} - -static mrb_value -cg_cRectangle_set_width_height(mrb_state *mrb, mrb_value self) -{ - mrb_float width, height; - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - mrb_get_args(mrb, "ff", &width, &height); - - (*ptr)->width = width; - (*ptr)->height = height; - - return self; -} - -static mrb_value -cg_cRectangle_align_vertically(mrb_state *mrb, mrb_value self) -{ - std::shared_ptr<VK::Rectangle> *ptr, *that; - - mrb_get_args(mrb, "d", &that, &cg_rectangle_type); - ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - return mrb_bool_value((*ptr)->align_vertically(**that)); -} - -static mrb_value -cg_cRectangle_align_horizontally(mrb_state *mrb, mrb_value self) -{ - std::shared_ptr<VK::Rectangle> *ptr, *that; - - mrb_get_args(mrb, "d", &that, &cg_rectangle_type); - ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - return mrb_bool_value((*ptr)->align_horizontally(**that)); -} - -static mrb_value -cg_cRectangle_collide(mrb_state *mrb, mrb_value self) -{ - std::shared_ptr<VK::Rectangle> *ptr, *that; - - mrb_get_args(mrb, "d", &that, &cg_rectangle_type); - ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - return mrb_bool_value((*ptr)->collide(**that)); -} - -static mrb_value -cg_cRectangle_draw(mrb_state *mrb, mrb_value self) -{ - mrb_value view_value; - VK::View2D *view_2d; - std::shared_ptr<glm::vec3> *color; - auto ptr = (std::shared_ptr<VK::Rectangle>*)DATA_PTR(self); - - mrb_get_args(mrb, "od", &view_value, &color, &cg_vector_3d_type); - - view_2d = cg_cView_to_view_2d(mrb, view_value); - - VK::UBOModel2D model; - model.color = **color; - (*ptr)->ub_rectangle[cg_core.vk_swapchain->current_frame].copy_data(&model); - (*ptr)->update_vertex_buffer(); - auto &rectangles = view_2d->rectangles_to_draw[ - cg_core.vk_swapchain->current_frame]; - rectangles.push_back(*ptr); - - return self; -} - -void -cg_rectangle_init(mrb_state *mrb) -{ - RClass *cg_m, *cg_cRectangle; - - cg_m = mrb_module_get(mrb, "CandyGear"); - cg_cRectangle = mrb_define_class_under( - mrb, cg_m, "Rectangle", mrb->object_class); - MRB_SET_INSTANCE_TT(cg_cRectangle, MRB_TT_DATA); - mrb_define_method( - mrb, cg_cRectangle, "initialize", cg_cRectangle_initialize, - MRB_ARGS_REQ(4)); - mrb_define_method( - mrb, cg_cRectangle, "x", cg_cRectangle_get_x, MRB_ARGS_NONE()); - mrb_define_method( - mrb, cg_cRectangle, "y", cg_cRectangle_get_y, MRB_ARGS_NONE()); - mrb_define_method( - mrb, cg_cRectangle, "width", cg_cRectangle_get_width, MRB_ARGS_NONE()); - mrb_define_method( - mrb, cg_cRectangle, "height", cg_cRectangle_get_height, MRB_ARGS_NONE()); - - mrb_define_method( - mrb, cg_cRectangle, "x=", cg_cRectangle_set_x, MRB_ARGS_REQ(1)); - mrb_define_method( - mrb, cg_cRectangle, "y=", cg_cRectangle_set_y, MRB_ARGS_REQ(1)); - mrb_define_method( - mrb, cg_cRectangle, "width=", cg_cRectangle_set_width, MRB_ARGS_REQ(1)); - mrb_define_method( - mrb, cg_cRectangle, "height=", cg_cRectangle_set_height, MRB_ARGS_REQ(1)); - - mrb_define_method( - mrb, cg_cRectangle, "xy", cg_cRectangle_get_xy, MRB_ARGS_NONE()); - mrb_define_method( - mrb, cg_cRectangle, "width_height", cg_cRectangle_get_width_height, - MRB_ARGS_NONE()); - - mrb_define_method( - mrb, cg_cRectangle, "set_xy", cg_cRectangle_set_xy, MRB_ARGS_REQ(2)); - mrb_define_method( - mrb, cg_cRectangle, "set_width_height", cg_cRectangle_set_width_height, - MRB_ARGS_REQ(2)); - - mrb_define_method( - mrb, cg_cRectangle, "align_vertically?", cg_cRectangle_align_vertically, - MRB_ARGS_REQ(1)); - mrb_define_method( - mrb, cg_cRectangle, "align_horizontally?", - cg_cRectangle_align_horizontally, MRB_ARGS_REQ(1)); - mrb_define_method( - mrb, cg_cRectangle, "collide?", cg_cRectangle_collide, MRB_ARGS_REQ(1)); - mrb_define_method( - mrb, cg_cRectangle, "draw", cg_cRectangle_draw, MRB_ARGS_REQ(2)); -} |