CCGameCenterComponent.ts 3.84 KB
import { EventCenter } from "../event/EventCenter";
import { CompositeDisposable } from "../event/EventKit";
import CooperationDataCenter from "./CooperationDataCenter";
import CCGameCenterNodeFactory from "./CCGameCenterNodeFactory";
import GameCenter from "./GameCenter";
import { DummyNode, DummyPrefab } from "../../common/CCDummyObjects";

/**
 * 游戏盒子组件
 */
const { ccclass, property } = cc._decorator;

@ccclass
export default class CCGameCenterComponent extends cc.Component {

    @property({ type: cc.Prefab, tooltip: "游戏盒子按钮prefab", displayName: "gameCenterBtnPrefab" })
    gameCenterBtnPrefab: cc.Prefab = DummyPrefab;

    @property({ type: cc.Prefab, tooltip: "游戏列表prefab", displayName: "gameCenterViewPrefab" })
    gameCenterViewPrefab: cc.Prefab = DummyPrefab;

    @property({ type: cc.Prefab, tooltip: "子游戏prefab", displayName: "gameCenterItemPrefab" })
    gameCenterItemPrefab: cc.Prefab = DummyPrefab;

    @property({ type: cc.Prefab, tooltip: "游戏朋友圈prefab", displayName: "gameCenterMomentPrefab" })
    gameCenterMomentPrefab: cc.Prefab = DummyPrefab;

    @property({ type: cc.Node, tooltip: "游戏中心列表的父节点" })
    gameCenterParentNode: cc.Node = DummyNode;

    @property({ type: cc.Node, tooltip: "在外面展示的子游戏" })
    mainUISubGameNode: cc.Node = DummyNode;

    @property({ tooltip: "是否是release环境" })
    isRelease: boolean = false;

    @property({ tooltip: "当前游戏的微信APPID" })
    appID: string = "";

    @property({ tooltip: "当前游戏的GameID:" })
    gameID: string = "";

    @property({ tooltip: "当前游戏的渠道" })
    gameChannel: string = "wechat";

    private _disposable: CompositeDisposable = new CompositeDisposable;

    private _gameCenterViewNode: cc.Node = DummyNode;

    onLoad() {

    }

    init() {
        this.registerEventListener();
        this.createNode();
        this.onShowGameCenterListView(false);
        CooperationDataCenter.getInstance().setCurGameID(this.gameID);
        CooperationDataCenter.getInstance().setCurGameAppID(this.appID);
        CooperationDataCenter.getInstance().setCurGameChannel(this.gameChannel);

        GameCenter.getInstance().init();
        CCGameCenterNodeFactory.getInstance().init();

        CCGameCenterNodeFactory.getInstance().registerMomentPrefab(this.gameCenterMomentPrefab);
        CCGameCenterNodeFactory.getInstance().registerSubGamePrefab(this.gameCenterItemPrefab);
        CCGameCenterNodeFactory.getInstance().registerMainUISubGameNode(this.mainUISubGameNode);

        EventCenter.REQUEST_COOPERATION_DATA_FROM_OSS.emit(this.isRelease);
    }

    registerEventListener() {
        this._disposable.add(EventCenter.COOPERATION_DATA_DOWNLOAD_SUCCEED.on(this.onDownloadCooperationDataSucceed));
        this._disposable.add(EventCenter.SHOW_GAME_CENTER_LIST_VIEW.on(this.onShowGameCenterListView));
    }

    private onDownloadCooperationDataSucceed = () => {
        EventCenter.REFRESH_SUB_GAME_LIST.emit();
    }

    /**创建prefab对应的节点 */
    createNode() {
        if (!this.gameCenterViewPrefab) {
            cc.error("gameCenterViewPrefab is not set , please check it over");
        } else {
            this._gameCenterViewNode = cc.instantiate(this.gameCenterViewPrefab);
        }
        let parentNode: cc.Node = cc.director.getScene();
        if (this.gameCenterParentNode) {
            parentNode = this.gameCenterParentNode;
        }
        this._gameCenterViewNode.parent = parentNode;
        this._gameCenterViewNode.position = cc.v3(cc.winSize.width / 2, cc.winSize.height / 2, 0);
    }

    start() {

    }

    update(dt) {

    }

    /**控制游戏列表是否展示 */
    onShowGameCenterListView = (isShow: boolean) => {
        if (!this._gameCenterViewNode) {
            return;
        }
        this._gameCenterViewNode.active = isShow;
    }
}