示例#1
0
static VALUE
application_alloc(VALUE rcv, SEL sel)
{
    mc_Application *app = new mc_Application();
    VALUE obj = rb_class_wrap_new((void *)app, rcv);
    app->obj = obj;
    return obj;
}
示例#2
0
static VALUE
application_instance(VALUE rcv, SEL sel)
{
    if (mc_application_instance == Qnil) {
	VALUE obj = rb_class_wrap_new(
		(void *)cocos2d::Application::getInstance(), rb_cApplication);
	mc_application_instance = rb_retain(obj);
    }
    return mc_application_instance;
}
示例#3
0
// extern C++
void
cocos_android_app_init(JNIEnv* env)
{
    // Create the app instance here.
    VALUE app_klass = rb_const_get(rb_cObject, "Application");
    assert(app_klass != Qnil);

    mc_Application *app = new mc_Application();
    VALUE obj = rb_class_wrap_new((void *)app, app_klass);
    app->obj = rb_retain(obj);
    mc_application_instance = rb_retain(app->obj);
}
示例#4
0
static VALUE
scene_alloc(VALUE rcv, SEL sel)
{
    auto layer = mc_Scene::create();

    auto scene = cocos2d::Scene::createWithPhysics();
    scene->addChild(layer);
    layer->scene = scene;

    VALUE obj = rb_class_wrap_new((void *)layer, rcv);
    layer->obj = rb_retain(obj);
    return obj;
}
示例#5
0
文件: css_node.c 项目: hboon/Flow
static VALUE
node_alloc(VALUE rcv, SEL sel)
{
    struct ruby_css_node *node =
	(struct ruby_css_node *)malloc(sizeof(struct ruby_css_node));
    assert(node != NULL);
    node->parent = Qnil;
    node->node = new_css_node();
    assert(node->node != NULL);
    node->node->context = node;
    node->node->get_child = node_get_child;
    node->node->is_dirty = node_is_dirty;
    node->node->measure = NULL;
    node->children = rb_retain(rb_ary_new());
    node->dirty = true;
    node->obj = rb_weak(rb_class_wrap_new(node, rcv));
    return node->obj;
}
示例#6
0
static VALUE
scene_on_touch_event(VALUE rcv, SEL sel, mc_Scene_EventType type)
{
    VALUE block = rb_current_block();
    if (block == Qnil) {
        rb_raise(rb_eArgError, "block not given");
    }
    block = rb_retain(block); // FIXME need release...

    auto scene = SCENE(rcv);
    if (scene->touch_listener == NULL) {
        scene->touch_listener = cocos2d::EventListenerTouchOneByOne::create();
    }
    else {
        scene->getEventDispatcher()->removeEventListener(scene->touch_listener);
    }
    auto lambda = [block](cocos2d::Touch *touch,
    cocos2d::Event *event) -> bool {
        VALUE touch_obj = rb_class_wrap_new((void *)touch,
        rb_cTouch);
        return RTEST(rb_block_call(block, 1, &touch_obj));
    };
    switch (type) {
    case ON_BEGIN:
        scene->touch_listener->onTouchBegan = lambda;
        break;
    case ON_MOVE:
        scene->touch_listener->onTouchMoved = lambda;
        break;
    case ON_END:
        scene->touch_listener->onTouchEnded = lambda;
        break;
    case ON_CANCEL:
        scene->touch_listener->onTouchCancelled = lambda;
        break;
    }

    return scene_add_listener(rcv, scene->touch_listener);
}
示例#7
0
static VALUE
scene_on_accelerate(VALUE rcv, SEL sel)
{
#if CC_TARGET_OS_APPLETV
    rb_raise(rb_eRuntimeError, "Not supported in tvOS");
#else
    VALUE block = rb_current_block();
    if (block == Qnil) {
        rb_raise(rb_eArgError, "block not given");
    }
    block = rb_retain(block); // FIXME need release...

    cocos2d::Device::setAccelerometerEnabled(true);
    auto listener = cocos2d::EventListenerAcceleration::create(
    [block](cocos2d::Acceleration *acc, cocos2d::Event *event) {
        VALUE acc_obj = rb_class_wrap_new((void *)acc,
                                          rb_cAcceleration);
        rb_block_call(block, 1, &acc_obj);
    });

    return scene_add_listener(rcv, listener);
#endif
}