LoadingScene.lua 9.31 KB

local LoadingScene = class("LoadingScene", import(".BaseScene"))

local AssetsUpdate = require("core.utils.AssetsUpdate");

require "core.utils.DeviceUtil";
require("app.manager.KeypadManager");
require("app.manager.SoundManager");

LoadingScene.nextSceneName = "MainScene";
LoadingScene.nextParams = {};

LoadingScene.isInit = false;

isUseUpdate = true;
isUpdateInit = false;

function LoadingScene:ctor(params)
    print("loading scene params:",params);
    if params then
        self.nextSceneName = params.nextSceneName;
        self.nextParams = params;
    else
        if ALONE_GAME_ID == 4 then
            self.nextSceneName = "AloneDdzHallScene";
        end
    end
    self:onCreate();
end

function LoadingScene:onCreate()
    self.keypadManager = KeypadManager:create(self);

    SoundManager.playEffect("sound/common/loading.mp3");
    self.ui = cc.CSLoader:createNode("ui/LoadingScene.csb");
    self:addChild(self.ui);

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

    self.panel_logo = self.ui:getChildByName("panel_logo");

    local _platform_logo_path = "res/common/logo_"..CHANNEL..".png";
    if not LoadingScene.isInit and cc.FileUtils:getInstance():isFileExist(_platform_logo_path) then
        self.panel_logo:getChildByName("logo_2"):setSpriteFrame(cc.Sprite:create(_platform_logo_path):getSpriteFrame());
    else
        self.panel_logo:setVisible(false);
    end

    self.ui:getChildByName("txt_update_ver"):setVisible(false);

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

    self.loading_bar = self.ui:getChildByName("LoadingBar"):getChildByName("bar");
    self.loading_bar_light = self.ui:getChildByName("LoadingBar"):getChildByName("bar_light");
    self.loading_bar_width = self.loading_bar:getBoundingBox().width;

    local function onNodeEventHandler(event)
        if event == "enter" then
            if self.nextSceneName and self.nextSceneName == "main" then
                require("main");
                return;
            end

            if isUseUpdate and not isUpdateInit then
                logUI("检查热更新");
                AssetsUpdate.init(handler(self, self.updateSuccess),handler(self, self.updateProgress),handler(self, self.updateFailed));
                isUpdateInit = true;
                self.ui:getChildByName("txt_update_ver"):setVisible(true);
                self.ui:getChildByName("txt_update_ver"):setString("原始版本:"..AssetsUpdate.VERSION_NUM.."  更新版本:"..AssetsUpdate.localUpdateVersion);
            else
                self:loadNextSceneResource();
            end
        end
    end
    self:registerScriptHandler(onNodeEventHandler);

    local ver_name = DeviceUtil.getAppVersionName();
    self.ui:getChildByName("txt_ver"):setString("ver:"..ver_name);
end

function LoadingScene:updateProgress(data)
    local per = math.floor(data.count/data.total*100);
    self.ui:getChildByName("txt"):setString("正在更新资源"..per.."%");
    self.loading_bar:setPercent(per);
    self.loading_bar_light:setPositionX(4.5+per/100*self.loading_bar_width);
    print("AssetsUpdate download progress:"..per.."%");
end

function LoadingScene:updateFailed()
    print("AssetsUpdate download failed");
    self:loadNextSceneResource();
end

function LoadingScene:updateSuccess()
    print("AssetsUpdate download success");
    cc.FileUtils:getInstance():purgeCachedEntries()
    require("main");
end

function LoadingScene:loadNextSceneResource()
    if not LoadingScene.isInit then
        self:requireFiles();
        LoadingScene.isInit = true;
    end
    if self.nextSceneName == "HallScene" or self.nextSceneName == "MainScene" then
        cc.SpriteFrameCache:getInstance():addSpriteFrames("res/head.plist");
        cc.SpriteFrameCache:getInstance():addSpriteFrames("res/ui/plist/buttons.plist");
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","gold","gold"), handler(self, self.loadFileCallback));
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","loading","loading"), handler(self, self.loadFileCallback));
    elseif self.nextSceneName == "GuandanRoomScene" or self.nextSceneName == "SingleRoomScene" or self.nextSceneName == "DdzRoomScene" then
        if self.nextSceneName == "DdzRoomScene" then
            cc.SpriteFrameCache:getInstance():addSpriteFrames("res/ui/plist/ui_ddz.plist");
        else
            cc.SpriteFrameCache:getInstance():addSpriteFrames("res/ui/plist/ui_guandan.plist");
        end
        cc.SpriteFrameCache:getInstance():addSpriteFrames("res/cards.plist");
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","bao","bao"), handler(self, self.loadFileCallback));
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","item_100002","item_100002"), handler(self, self.loadFileCallback));
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","item_100003","item_100003"), handler(self, self.loadFileCallback));
    elseif self.nextSceneName == "XueZhanMutilRoomScene" then
        cc.SpriteFrameCache:getInstance():addSpriteFrames("res/ui/plist/mahjong.plist");
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","bao","bao"), handler(self, self.loadFileCallback));
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/mj/%s/%s.ExportJson","dingque","dingque"), handler(self, self.loadFileCallback));
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","item_100002","item_100002"), handler(self, self.loadFileCallback));
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","item_100003","item_100003"), handler(self, self.loadFileCallback));
    elseif self.nextSceneName == "NiuRoomScene" then
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","start","start"), handler(self, self.loadFileCallback));
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","win","win"), handler(self, self.loadFileCallback));
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","fail","fail"), handler(self, self.loadFileCallback));
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","item_100002","item_100002"), handler(self, self.loadFileCallback));
        ccs.ArmatureDataManager:getInstance():addArmatureFileInfoAsync(string.format("res/effects/%s/%s.ExportJson","item_100003","item_100003"), handler(self, self.loadFileCallback));
    end
    
    local percent = 0;
    local function showProgressFun()
        percent = percent + 1;
        local per = math.ceil(100*percent*0.2);
        if per <= 100 then
            self.ui:getChildByName("txt"):setString("正在载入资源"..per.."%");
            self.loading_bar:setPercent(per);
            self.loading_bar_light:setPositionX(4.5+per/100*self.loading_bar_width);
        else
            self:loadFileComplete();
        end
    end
    schedule(self,showProgressFun,0.1);
end

function LoadingScene:requireFiles()
    require "core.ui.init";
    require "core.helpers.UmengHelper";
    require "core.utils.TableUtil";
    require "core.utils.StringUtil";
    require "core.utils.CustomMath";
    require "core.utils.TimeUtil";
    require "core.utils.DisplayUtil";

    require("app.enum.init");
    require("app.event.EventListener");
    require("app.manager.ItemManager");
    require("app.manager.MedalItemManager");
    require("app.manager.NodeManager");
    require("app.manager.EffectManager");
    require("app.manager.LoadingManager");
    require("app.manager.Alert");
    require("app.manager.AppManager");

    require("app.SocketClient");

    require("core.net.HttpRequest");
    require("core.net.MyHttpRequest");
    require("core.geom.Point");

    require("app.config.strings");
    require("app.config.GameConfig");
    require("app.info.ItemInfo");
    require("app.info.ScoreInfo");
    require("app.info.CharmInfo");
    require("app.info.SignInfo");
    require("app.info.ShopInfo");
    require("app.info.MailInfo");
    require("app.info.GiftInfo");
    require("app.info.NickInfo");
    require("app.info.HeadInfo");
    require("app.info.OnlineRewardInfo");
    require("app.info.TurntableInfo");
    require("app.info.LoginRewardInfo");
    require("app.info.RankYesterdayRewardInfo");
    require("app.info.RankExprieRewardInfo");
    require("app.info.AchievementInfo");

    require("app.model.UserModel");
    require("app.model.ShopModel");

    UserModel.init();
    ShopModel.init();
end

function LoadingScene:loadFileCallback(percent)
--    if percent == 1 then
--        self:loadFileComplete();
--    else
--        local per = math.ceil(100*percent);
--        self.ui:getChildByName("txt"):setString("正在载入资源"..per.."%");
--    end
end

function LoadingScene:loadFileComplete()
    app:enterScene(self.nextSceneName,self.nextParams);
end

return LoadingScene