/* * 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 "point.h" void cg_free_point(mrb_state *mrb, void* obj) { struct cg_point *ptr = obj; mrb_free(mrb, ptr); } const struct mrb_data_type cg_point_type = { "CG_Point", cg_free_point }; static mrb_value cg_cPoint_initialize(mrb_state *mrb, mrb_value self) { mrb_int x, y; struct cg_point *ptr; mrb_get_args(mrb, "ii", &x, &y); ptr = (struct cg_point *)DATA_PTR(self); if(ptr) mrb_free(mrb, ptr); ptr = (struct cg_point *)mrb_malloc(mrb, sizeof(struct cg_point)); ptr->data.x = x; ptr->data.y = y; mrb_data_init(self, ptr, &cg_point_type); return self; } static mrb_value cg_cPoint_get_x(mrb_state *mrb, mrb_value self) { struct cg_point *ptr; ptr = (struct cg_point *)DATA_PTR(self); return mrb_int_value(mrb, ptr->data.x); } static mrb_value cg_cPoint_set_x(mrb_state *mrb, mrb_value self) { mrb_int x; struct cg_point *ptr; mrb_get_args(mrb, "i", &x); ptr = (struct cg_point *)DATA_PTR(self); ptr->data.x = x; return mrb_int_value(mrb, ptr->data.x); } static mrb_value cg_cPoint_get_y(mrb_state *mrb, mrb_value self) { struct cg_point *ptr; ptr = (struct cg_point *)DATA_PTR(self); return mrb_int_value(mrb, ptr->data.y); } static mrb_value cg_cPoint_set_y(mrb_state *mrb, mrb_value self) { mrb_int y; struct cg_point *ptr; mrb_get_args(mrb, "i", &y); ptr = (struct cg_point *)DATA_PTR(self); ptr->data.y = y; return mrb_int_value(mrb, ptr->data.y); } static mrb_value cg_cPoint_draw(mrb_state *mrb, mrb_value self) { struct cg_point *ptr; ptr = (struct cg_point *)DATA_PTR(self); SDL_RenderDrawPoint(cg_core.renderer, ptr->data.x, ptr->data.y); return self; } void cg_point_init(mrb_state *mrb) { struct RClass *cg_m, *cg_cPoint; cg_m = mrb_module_get(mrb, "CandyGear"); cg_cPoint = mrb_define_class_under( mrb, cg_m, "Point", mrb->object_class); MRB_SET_INSTANCE_TT(cg_cPoint, MRB_TT_DATA); mrb_define_method( mrb, cg_cPoint, "initialize", cg_cPoint_initialize, MRB_ARGS_REQ(2)); mrb_define_method(mrb, cg_cPoint, "x", cg_cPoint_get_x, MRB_ARGS_NONE()); mrb_define_method(mrb, cg_cPoint, "x=", cg_cPoint_set_x, MRB_ARGS_REQ(1)); mrb_define_method(mrb, cg_cPoint, "y", cg_cPoint_get_y, MRB_ARGS_NONE()); mrb_define_method(mrb, cg_cPoint, "y=", cg_cPoint_set_y, MRB_ARGS_REQ(1)); mrb_define_method(mrb, cg_cPoint, "draw", cg_cPoint_draw, MRB_ARGS_NONE()); }