#include "LoopListScene.h"

USING_NS_CC;

void LoopListScene::continueInit()
{
    UIPackage::addPackage("UI/LoopList");
    UIConfig::horizontalScrollBar = "";
    UIConfig::verticalScrollBar = "";

    _view = UIPackage::createObject("LoopList", "Main")->as<GComponent>();
    _groot->addChild(_view);

    _list = _view->getChild("list")->as<GList>();
    _list->itemRenderer = CC_CALLBACK_2(LoopListScene::renderListItem, this);
    _list->setVirtualAndLoop();
    _list->setNumItems(5);
    _list->addEventListener(UIEventType::Scroll, CC_CALLBACK_1(LoopListScene::doSpecialEffect, this));

    doSpecialEffect(nullptr);
}

void LoopListScene::renderListItem(int index, GObject* obj)
{
    obj->setPivot(0.5f, 0.5f);
    obj->setIcon("ui://LoopList/n" + std::to_string(index + 1));
}

void LoopListScene::doSpecialEffect(EventContext*)
{
    //change the scale according to the distance to middle
    float midX = _list->getScrollPane()->getPosX() + _list->getViewWidth() / 2;
    int cnt = _list->numChildren();
    for (int i = 0; i < cnt; i++)
    {
        GObject* obj = _list->getChildAt(i);
        float dist = std::abs(midX - obj->getX() - obj->getWidth() / 2);
        if (dist > obj->getWidth()) //no intersection
            obj->setScale(1, 1);
        else
        {
            float ss = 1 + (1 - dist / obj->getWidth()) * 0.24f;
            obj->setScale(ss, ss);
        }
    }

    _view->getChild("n3")->setText(std::to_string((_list->getFirstChildInView() + 1) % _list->getNumItems()));
}