MainScene.lua 13.6 KB
local MainScene = class("MainScene", import(".BaseScene"));

require("app.views.view.HeadImageSprite");

MainScene.gm_id = 100001;

local nodeIndex = 1;
local selectedIndex = 1;

function MainScene:ctor(params)
    GAME_ID = 0;
    UserModel.where = EnumWhere.HALL;

    MainScene.super.ctor(self);
    self:onCreate(params);
end

function MainScene:onCreate(params)
    self.keypadManager = KeypadManager:create(self);
    
    self.ui = cc.CSLoader:createNode("ui/MainScene.csb");
    self:addChild(self.ui);

    self.ui:setContentSize(cc.size(display.width,display.height));
    ccui.Helper:doLayout(self.ui);

    self.wall = self.ui:getChildByName("wall");
    self.panel_decorate = self.ui:getChildByName("panel_decorate");
    self.mask_area_1 = self.ui:getChildByName("mask_area_1");
    self.mask_area_2 = self.ui:getChildByName("mask_area_2");
    self.mask_area_1:setVisible(false);
    self.mask_area_2:setVisible(false);

    self.btn_ylc = self.ui:getChildByName("panel_top"):getChildByName("btn_ylc");
    self.btn_ylc.fn = handler(self,self.onYlcClick);
    self.btn_ylc:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type, handler(self,self.onYlcClick))end);
    self.btn_gift = self.ui:getChildByName("panel_top"):getChildByName("btn_gift");
    self.btn_gift.fn = handler(self,self.onGiftClick);
    self.btn_gift:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type, handler(self,self.onGiftClick))end);
    self.btn_task = self.ui:getChildByName("panel_top"):getChildByName("btn_task");
    self.btn_task.fn = handler(self,self.onTaskClick);
    self.btn_task:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type, handler(self,self.onTaskClick))end);
    self.btn_achievement = self.ui:getChildByName("panel_top"):getChildByName("btn_achievement");
    self.btn_achievement.fn = handler(self,self.onAchievementClick);
    self.btn_achievement:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type, handler(self,self.onAchievementClick))end);
    self.btn_shop = self.ui:getChildByName("panel_top"):getChildByName("btn_shop");
    self.btn_shop.fn = handler(self,self.onShopClick);
    self.btn_shop:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type, handler(self,self.onShopClick))end);
    self.btn_friend = self.ui:getChildByName("panel_top"):getChildByName("btn_friend");
    self.btn_friend.fn = handler(self,self.onFriendClick);
    self.btn_friend:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type, handler(self,self.onFriendClick))end);
    self.btn_decorate = self.ui:getChildByName("panel_top"):getChildByName("btn_decorate");
    self.btn_decorate.fn = handler(self,self.onDecorateClick);
    self.btn_decorate:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type, handler(self,self.onDecorateClick))end);

    if DEBUG == 1 then
        local btn_add_reduce = self.ui:getChildByName("btn_add_reduce");
        btn_add_reduce:addTouchEventListener(function(ref,type) self:onButtonClick(ref,type,handler(self,self.onAddOrReduceItem)) end);
    else
        self.ui:getChildByName("btn_add_reduce"):setVisible(false);
        self.ui:getChildByName("txt_id"):setVisible(false);
        self.ui:getChildByName("txt_num"):setVisible(false);
    end

    self.nodes[1] = {self.btn_ylc,self.btn_gift,self.btn_task,self.btn_achievement,self.btn_shop,self.btn_friend,self.btn_decorate};

    self.nodeIndex = nodeIndex;
    self.selectedIndex = selectedIndex;

    local function onNodeEventHandler(event)
        if event == "enter" then
            if params and params.class_name then
                local reciever = require(params.class_name):show();
                self.keypadManager:addKeypadReceiver(reciever);
            end

            if not UserModel.isLogin then
                EventListener.addEventListener(self,EnumEvent.LOGIN_SUCCESS,handler(self,self.onLoginSuccess));
                EventListener.addEventListener(self,EnumEvent.LOGIN_FAILD,handler(self,self.onLoginFaild));

                if PROXY_HTTP_ADDR then
                    logUI("HTTP 代理地址:"..PROXY_HTTP_ADDR);
                end
                if PROXY_SOCK_ADDR then
                    logUI("SOCK 代理地址:"..PROXY_SOCK_ADDR);
                end
                if GAME_LOGIN_URL then
                    logUI("登录服务器地址:"..GAME_LOGIN_URL);
                    logUI("登录平台号:"..PLATFORM);
                end

                local reciever = require("app.views.view.LoginView"):show();
                self.keypadManager:addKeypadReceiver(reciever);
                self:updateSelectedState(false);
            else
                self.headContainer:removeAllChildren();
                local head;
                if UserModel.user_info.head_url ~= "" then
                    head = HeadImageSprite:create(UserModel.user_info.head_url,76,76);
                else
                    head = NodeManager.getHeadSprite("head_"..UserModel.user_info.head..".png");
                end
                self.headContainer:addChild(head);
                self.btn_head:loadTextureNormal("res/headframe/"..UserModel.user_info.head_frame..".png");
                self.btn_head:loadTexturePressed("res/headframe/"..UserModel.user_info.head_frame..".png");
                SoundManager.playMusic("res/sound/bg_music_hall.mp3");
                self:updateSelectedState(false);

                self:showHallDecorate();
            end

        elseif event == "exit" then
            cmsg.off("gateway_msg.sys_notice_msg_res",self.noticeCallbackFun);
        end
    end
    self:registerScriptHandler(onNodeEventHandler);

    self.noticeCallbackFun = handler(self,self.onNoticeCallBackFun);
    cmsg.on("gateway_msg.sys_notice_msg_res",self.noticeCallbackFun);
end

MainScene.notice_list = {};
MainScene.is_notice_showing = false;
function MainScene:onNoticeCallBackFun(params)
    local notice = params.data.notice;
    self.notice_list[#self.notice_list+1] = notice;
    self:showNoticeView();
end

function MainScene:showNoticeView()
    if not self.is_notice_showing and #self.notice_list > 0 then
        local notice = table.remove(self.notice_list,1);
        local noticeView = require("app.views.view.NoticeView"):create(notice,function ()
            self.is_notice_showing = false;
            self:showNoticeView();
        end);
        noticeView:setPosition(cc.p(display.width*0.4,display.height*0.85));
        self:addChild(noticeView);
        self.is_notice_showing = true;
    end
end

function MainScene:onAddOrReduceItem()
    local id = tonumber(self.ui:getChildByName("txt_id"):getString());
    local cnt = tonumber(self.ui:getChildByName("txt_num"):getString());
    SocketClient:getInstance():send("gateway_msg.gm_change_item_msg",{id=id,cnt=cnt});
end

function MainScene:onLoginSuccess(params)
    local data = params.data;
    if data.errcode == 0 then
        SoundManager.playMusic("res/sound/bg_music_hall.mp3");

        self:showHallDecorate();
    end
end

function MainScene:onLoginFaild(params)
    SoundManager.playMusic("res/sound/bg_music_hall.mp3");
end

function MainScene:showHallDecorate()
    self.panel_decorate:removeAllChildren();

    if UserModel.wall > 0 then
        self.wall:setSpriteFrame(cc.Sprite:create("res/decorate/"..UserModel.wall..".png"):getSpriteFrame());
    end

    for i,v in ipairs(UserModel.furnitures) do
        if v.x > 0 and v.y > 0 then
            self:addDecorate(v.id,v.x,v.y);
        end
    end
end

function MainScene:addDecorate(id,x,y)
    local sp = cc.Sprite:create("res/decorate/"..id..".png");
    sp:setName("item_"..id);
    sp:setPosition(cc.p(x,y));
    self.panel_decorate:addChild(sp);

    print("------------------- add decorate:",id,x,y);
end

function MainScene:removeDecorate(id)
    local item = self.panel_decorate:getChildByName("item_"..id);
    if item then
        item:removeSelf();
    end

    print("------------------- remove decorate:",id);
end

function MainScene:updateMailButtonRed()
    if UserModel.hasNewMail() then
        self.btn_mail:getChildByName("redpoint"):setVisible(true);
    else
        self.btn_mail:getChildByName("redpoint"):setVisible(false);
    end
end

function MainScene:onYlcClick()
    if not UserModel.isLogin  then
        Alert.showOne(strings.msg_1002);
        return;
    end
    local reciever = require("app.views.view.UserInfoView"):show(UserModel.user_info.uid);
    self.keypadManager:addKeypadReceiver(reciever);
end

--商城
function MainScene:onGiftClick()
    if not UserModel.isLogin  then
        Alert.showOne(strings.msg_1002);
        return;
    end
    local reciever = require("app.views.view.ShopView"):show();
    self.keypadManager:addKeypadReceiver(reciever);
end

function MainScene:onTaskClick()
    if not UserModel.isLogin  then
        Alert.showOne(strings.msg_1002);
        return;
    end
    local reciever = require("app.views.view.ShopView"):show();
    self.keypadManager:addKeypadReceiver(reciever);
end

function MainScene:onAchievementClick()
    local reciever = require("app.views.view.AchievementView"):show();
    self.keypadManager:addKeypadReceiver(reciever);
end

--商城
function MainScene:onShopClick()
    if not UserModel.isLogin  then
        Alert.showOne(strings.msg_1002);
        return;
    end
    local reciever = require("app.views.view.ShopView"):show();
    self.keypadManager:addKeypadReceiver(reciever);
end

function MainScene:onFriendClick()
    if not UserModel.isLogin  then
        Alert.showOne(strings.msg_1002);
        return;
    end
    local reciever = require("app.views.view.ShopView"):show();
    self.keypadManager:addKeypadReceiver(reciever);
end

function MainScene:onDecorateClick()
    if not UserModel.isLogin  then
        Alert.showOne(strings.msg_1002);
        return;
    end
    local reciever = require("app.views.view.DecorateView"):show();
    self.keypadManager:addKeypadReceiver(reciever);
end

--邮件
function MainScene:onMail()
    if not UserModel.isLogin  then
        Alert.showOne(strings.msg_1002);
        return;
    end
    local reciever = require("app.views.view.MailView"):show();
    self.keypadManager:addKeypadReceiver(reciever);
end

function MainScene:onShare()
    local reciever = require("app.views.view.ShareWxView"):show();
    self.keypadManager:addKeypadReceiver(reciever);
end

function MainScene:onSet()
    local reciever = require("app.views.view.SettingView"):show();
    self.keypadManager:addKeypadReceiver(reciever);
end

--返回键处理函数
function MainScene:onKeypadBack()
    local function okFun()
        cc.Director:getInstance():endToLua();
    end
    Alert.showTwo("是否确定要退出游戏?",okFun,nil,2);

    if self.web then
        self.web:removeSelf();
        self.web = nil;
    end
end

--确认键处理函数
function MainScene:onKeypadOk()
    local node = self.nodes[self.nodeIndex][self.selectedIndex];
    if node and node.fn then
        node.fn();
    end
end

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

    if self.menuReciever then
        self.menuReciever:close();
        self.menuReciever = nil;
    end
end

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

    local curNode = self.nodes[self.nodeIndex][self.selectedIndex];
    if curNode:getName() == "btn_menu" then
        NodeManager.setHighlight(curNode,false);
        self:onMenu(curNode);
    end

    if self.menuReciever then
        self.menuReciever:close();
        self.menuReciever = nil;

        if curNode:getName() == "btn_menu" then
            NodeManager.setHighlight(curNode,true);
        end
    end
end

--左键处理函数
function MainScene:onKeypadLeft()
    if (self.nodeIndex == 2 and self.selectedIndex-1 <= 2) or (self.nodeIndex == 3 and self.selectedIndex-1 <= 4) then
        self.scrollView:scrollToPercentHorizontal(0,0.5,false);

        self.btn_1:setVisible(true);
        self.btn_2:setVisible(true);
        self.btn_3:setVisible(true);
        self.btn_4:setVisible(true);
        self.btn_5:setVisible(true);
        self.btn_6:setVisible(true);
        self.arrow_main:setVisible(true);
    end

    local curNode = self.nodes[self.nodeIndex][self.selectedIndex];
    if self.menuReciever then
        self.menuReciever:close();
        self.menuReciever = nil;
    end

    if curNode:getName() == "btn_3" then
        self.nodeIndex = self.nodeIndex + 1;
        self.selectedIndex = 2;
        self:updateSelectedState();
    else
        MainScene.super.onKeypadLeft(self);
    end
end

--右键处理函数
function MainScene:onKeypadRight()
    if (self.nodeIndex == 2 and self.selectedIndex+1 > 2) or (self.nodeIndex == 3 and self.selectedIndex+1 > 4) then
        self.scrollView:scrollToPercentHorizontal(100,0.5,false);

        self.btn_1:setVisible(false);
        self.btn_2:setVisible(false);
        self.btn_3:setVisible(false);
        self.btn_4:setVisible(false);
        self.btn_5:setVisible(false);
        self.btn_6:setVisible(false);
        self.arrow_main:setVisible(false);
    end

    local curNode = self.nodes[self.nodeIndex][self.selectedIndex];
    if curNode:getName() == "btn_2" then
        self.nodeIndex = self.nodeIndex - 1;
        self.selectedIndex = 1;
        self:updateSelectedState();
    else
        MainScene.super.onKeypadRight(self);
        curNode = self.nodes[self.nodeIndex][self.selectedIndex];
        if curNode:getName() == "btn_menu" then
            NodeManager.setHighlight(curNode,false);
            self:onMenu(curNode);
        end
    end
--    local params = {};
--    params.data = {};
--    params.data.notice = {id=5,uid=123,nick="大王叫我来巡山",param={"时间哦的粉丝哦急啊双方的",256}};
--    self:onNoticeCallBackFun(params);
end

return MainScene