UserHeadChangeView.lua 7.58 KB
local UserHeadChangeView = dialog.uinode("ui/HeadChangeLayer.csb",import(".BaseView"))

UserHeadChangeView.page_current = 1;
UserHeadChangeView.page_total = 1;
UserHeadChangeView.page_num = 12;

function UserHeadChangeView:ctor()
    UserHeadChangeView.super.ctor(self);
    self:init();
end

function UserHeadChangeView:init()
    self.panel = self:getChildByName("panel");
    
    self.nodeIndex = 1;
    self.selectedIndex = 1;

    self.headList = HeadInfo.headList();
    
    if #self.headList == 0 then
        self.page_total = 1;
    elseif #self.headList%self.page_num == 0 then
        self.page_total = math.floor(#self.headList/self.page_num);
    else
        self.page_total = math.floor(#self.headList/self.page_num)+1;
    end

    if UserModel.user_info.head%self.page_num == 0 then
        self.page_current = math.floor(UserModel.user_info.head/self.page_num);
    else
        self.page_current = math.floor(UserModel.user_info.head/self.page_num)+1;
    end

    self.scrollView = self.panel:getChildByName("ScrollView");

    self.nodes = {};

    self.btn_close = self:getChildByName("panel"):getChildByName("btn_close");
    self.btn_close.fn = handler(self,self.onClose);
    self.btn_close:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type,self.btn_close.fn)end);
    
    if IS_TV == 1 then
        self.btn_close:setVisible(false);
    end
    
    self:update();
    self:updateSelectedState();

    self:onUpdateItems();
    EventListener.addEventListener(self,EnumEvent.UPDATE_ITEMS,handler(self,self.onUpdateItems));
end

function UserHeadChangeView:update()
    self.scrollView:removeAllChildren();

    local line_num = 1;
    if #self.headList%4 == 0 then
        line_num = math.floor(#self.headList/4);
    elseif #self.headList > 0 then
        line_num = math.floor(#self.headList/4) + 1;
    end
    local _h = line_num*113 + 20;
    if _h < 330 then
        _h = 330;
    end
    for i=0,#self.headList-1 do
        local item = cc.CSLoader:createNode("ui/UserHeadItem.csb");
        item:setPosition(cc.p(i%4*123+10,_h - (math.floor(i/4) + 1)*113 + 10));
        self.scrollView:addChild(item);
        local info = self.headList[i+1];
        if info then
            item:setVisible(true);
            local item_panel = item:getChildByName("panel");
            local head = item_panel:getChildByName("head");
            head:removeAllChildren();
            local head_sp = NodeManager.getHeadSprite("head_"..info.id..".png",1);
            head:addChild(head_sp);

            local btn = item_panel:getChildByName("btn");
            btn:setSwallowTouches(false);
            btn.id = info.id;
            btn:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type, handler(self,self.onOkFun))end);

            local horizotal_index = math.floor(i/4)+1;
            local vertical_index = i%4+1;
            if not self.nodes[horizotal_index] then
                self.nodes[horizotal_index] = {};
            end
            if UserModel.user_info.head == info.id then
                btn:getChildByName("flag"):setVisible(true);
                self.nodeIndex = horizotal_index;
                self.selectedIndex = vertical_index;
            else
                btn:getChildByName("flag"):setVisible(false);
            end
            local info = HeadInfo.getHeadInfo(info.id);
            if info.needCard == 0 then
                btn:getChildByName("flag_free"):setVisible(true);
            else
                btn:getChildByName("flag_free"):setVisible(false);
            end
            item_panel.id = info.id;
            item_panel.fn = function()
                self:onOkFun(item_panel);
            end;
            self.nodes[horizotal_index][#self.nodes[horizotal_index]+1] = item_panel;
        else
            item:setVisible(false);
        end
    end
    self.scrollView:setInnerContainerSize(cc.size(500,_h));

    local node = self.nodes[self.nodeIndex][self.selectedIndex];
    self:setScrollPosition(node:getParent());
end

function UserHeadChangeView:onUpdateItems(params)
    local cardNum = UserModel.getItemNum(100011);
    self.panel:getChildByName("txt_num"):setString(cardNum);
end

function UserHeadChangeView:show()
    local scene = cc.Director:getInstance():getRunningScene()
    local inst = UserHeadChangeView:create();
    scene:addChild(inst, dialog.ZORDER_APP);

    local panel = inst:getChildByName("panel");
    panel:setScale(0.5);
    local scaleTo = cc.ScaleTo:create(0.2,1);
    panel:runAction(scaleTo);

    inst.layer = cc.Layer:create();
    inst:addChild(inst.layer,1);
    registerScriptTouchEvent(inst.layer,handler(inst,inst.onTouchBegin),handler(inst,inst.onTouchMove),handler(inst,inst.onTouchEnd));

    return inst;
end

function UserHeadChangeView:onTouchBegin(event)
    self.begin_touch_pos = self.layer:getParent():convertToWorldSpace(event:getLocation());
    self.isMoved = false;
    return true;
end

function UserHeadChangeView:onTouchMove(event)
    local move_touch_pos = self.layer:getParent():convertToWorldSpace(event:getLocation());
    local _distance = Point.distance(self.begin_touch_pos,move_touch_pos);
    if _distance > 5 then
        self.isMoved = true;
    end
end

function UserHeadChangeView:onTouchEnd(event)
    local p = self.layer:convertToWorldSpace(event:getLocation());
end

function UserHeadChangeView:onOkFun(ref)
    if self.isMoved then
        return;
    end

    local id = ref.id;

    if id ~= UserModel.user_info.head then
        local itemID = 100011;
        local cardNum = UserModel.getItemNum(itemID);
        local shopID = ItemInfo.getItemInfo(itemID).shopID;
        local info = HeadInfo.getHeadInfo(id);
        if info.needCard == 1 and cardNum == 0 then
            AppManager.show("ShopExchangeView",{shopID=shopID});
            return;
        end

        self.onChangeResFun = handler(self,self.onChangeRes);
        cmsg.on("gateway_msg.change_head_msg_res",self.onChangeResFun);
        SocketClient:getInstance():send("gateway_msg.change_head_msg", 
        {
            head = id
        });
    else
        EffectManager.showFntPop(strings.msg_1011);
        self:close();
    end
end

function UserHeadChangeView:onChangeRes(params)
    cmsg.off("gateway_msg.change_nick_msg_res",self.onChangeResFun);

    if params.errcode == EnumErrorCode.EC_SUCCESS then
        UserModel.user_info.head = params.data.head;
        EffectManager.showFntPop(strings.msg_1009);
        EventListener.dispatchEvent(EnumEvent.HEAD_CHANGE_SUCCESS);
        self:close();
    else
        
    end
end

function UserHeadChangeView:onClose()
    self:close();
end

--返回键处理函数
function UserHeadChangeView:onKeypadBack()
    self:close();
end

--上键处理函数
function UserHeadChangeView:onKeypadUp()
    UserHeadChangeView.super.onKeypadUp(self);

    local node = self.nodes[self.nodeIndex][self.selectedIndex];
    self:setScrollPosition(node:getParent());
end

--下键处理函数
function UserHeadChangeView:onKeypadDown()
    UserHeadChangeView.super.onKeypadDown(self);

    local node = self.nodes[self.nodeIndex][self.selectedIndex];
    self:setScrollPosition(node:getParent());
end

function UserHeadChangeView:setScrollPosition(node)
    local scrollSize = self.scrollView:getContentSize();

    local len = math.floor((#self.headList-1)/4)*113+113;
    local currentX = (len-scrollSize.height) - (node:getPositionY()-scrollSize.height/2);
    if currentX > len-scrollSize.height then
        currentX = len-scrollSize.height;
    elseif currentX < 0 then
        currentX = 0;
    end
    local per = currentX*100/(len-scrollSize.height);
    self.scrollView:scrollToPercentVertical(per,0.5,true);
end

return UserHeadChangeView