| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- import { AssetManager, director, instantiate, Node, Prefab } from "cc";
- import { bundleMgr } from "../Mgr/BundleMgr";
- import { resMgr } from "../Mgr/ResMgr";
- import { PassCfg } from "../Config/PassCfg";
- import { ch } from "../../ch";
- export interface evt {
- onComClick: () => void;
- onGetReward: (itemId: number, count: number) => void;
- onViedoReward: (success: boolean) => void;
- onSaveGameData: (save_data: PassObj) => void;
- }
- export interface PassObj {
- rewardId: Array<{ id: number, indexArr: Array<number> }>; //领取的奖励数据
- keyCount: number; // 钥匙数量
- unlockLevel: number; //解锁等级
- curTimetatmp: number; //当前时间戳
- }
- /** 主窗口 */
- const mainPopup = "Pass/passPopup";
- /** 包名 */
- const bundleName = "Pass";
- /** 定义一个类 */
- class Ch_pass {
- /** 私有构造函数 */
- private constructor() { }
- /** 单例模式 */
- public static readonly instance: Ch_pass = new Ch_pass();
- private _firstParent: Node | null = null;
- private _secondParent: Node | null = null;
- private _data: PassObj = {
- rewardId: [],
- keyCount: 0,
- unlockLevel: 0,
- curTimetatmp: 0
- };
- private _evt = chsdk.get_new_event<evt>();
- get evt() {
- return this._evt;
- }
- /**
- * 初始化数据
- * @param data
- */
- init(data: any) {
- // 初始化
- this._data = data ? data : this._data;
- //是否初始化数据
- let diffTime = this.getDiffTime();
- if (diffTime <= 0) {
- this.clear();
- this.onSaveGameData();
- }
- }
- /** 公共点击事件 */
- onComClick() {
- this.evt.emit(this.evt.key.onComClick);
- }
- /**
- * 获得奖励
- * @param itemId
- */
- onGetReward(itemId: number, count: number) {
- // console.log("获得奖励", itemId);
- this.evt.emit(this.evt.key.onGetReward, itemId, count);
- this.onSaveGameData();
- }
- /**
- * 看视频广告
- */
- onViedoReward(success: boolean) {
- this.evt.emit(this.evt.key.onViedoReward, success);
- }
- /**
- * 保存游戏数据
- * @param save_data
- */
- onSaveGameData() {
- this.evt.emit(this.evt.key.onSaveGameData, this._data);
- }
- /**
- * 获取内部父节点
- * @returns
- */
- getInterParent() {
- return this._secondParent;
- }
- /**
- * 获取游戏数据
- */
- getGameData() {
- return this._data;
- }
- /**
- * 添加通行证钥匙
- */
- addPassKey(count: number = 1) {
- if (this._data.unlockLevel < this.getItemLength()) {
- this._data.keyCount += count;
- // 更新解锁等级
- while (this._data.keyCount >= PassCfg.maxKeyCount) {
- this._data.keyCount -= PassCfg.maxKeyCount;
- this._data.unlockLevel++;
- }
- this.onSaveGameData();
- }
- }
- /**
- * 检测是否有未领取的奖励
- */
- checkHasReward() {
- let pidArr = this.getUnlockPidArr();
- let hasReward = false;
- for (let i = this._data.rewardId.length - 1; i >= 0; i--) {
- let reward = this._data.rewardId[i];
- if (pidArr.indexOf(reward.id) != -1) {
- if (reward.indexArr.length == PassCfg.passItems[reward.id].reward.length) {
- pidArr.splice(pidArr.indexOf(reward.id), 1);
- }
- }
- }
- hasReward = pidArr.length > 0;
- return hasReward;
- }
- /**
- * 获取预领取奖励
- */
- getPreRewaedIs() {
- let pidArr = this.getUnlockPidArr();
- for (let i = this._data.rewardId.length - 1; i >= 0; i--) {
- let reward = this._data.rewardId[i];
- if (pidArr.indexOf(reward.id) != -1) {
- if (reward.indexArr.indexOf(1) != -1) {
- pidArr.splice(pidArr.indexOf(reward.id), 1);
- }
- }
- }
- return pidArr.length;
- }
- /**
- * 获取解锁的pidArr
- */
- private getUnlockPidArr() {
- let pidArr = [];
- let items = PassCfg.passItems;
- let keys = Object.keys(items);
- for (let i = 0; i < keys.length; i++) {
- let key = keys[i];
- let item = items[key];
- if (i < this._data.unlockLevel) {
- pidArr.push(item.id);
- }
- }
- return pidArr;
- }
- /**
- * 获取奖励等级
- */
- private getItemLength() {
- let level = 0;
- let items = PassCfg.passItems;
- for (let key in items) {
- level++;
- }
- return level;
- }
- /**
- * 获取当前时间差
- * @returns 当前时间差
- */
- private getDiffTime(): number {
- const now = ch.date.getTime();
- if (!ch.date.isSameDate(now, this._data.curTimetatmp)) {
- return 0;
- }
- let diffTime = ch.date.getDayEndTime(now) - now;
- return diffTime;
- }
- /**
- * 清空数据
- */
- clear() {
- this._data.curTimetatmp = ch.date.getTime();
- this._data.keyCount = 0;
- this._data.unlockLevel = 0;
- this._data.rewardId = [];
- }
- /**
- * 加载分包
- * @param preogerss
- * @param onComplete
- */
- loadBundle(preogerss?: (progress: number) => void, onComplete?: (err: Error | null, bundle: AssetManager.Bundle | null) => void): void {
- const onProgress = (progress: number) => {
- chsdk.log.debug(`加载进度:${progress}%`);
- if (preogerss) {
- preogerss(progress);
- }
- };
- bundleMgr.getBundle(bundleName, onProgress)
- .then((bundle) => {
- if (bundle) {
- chsdk.log.debug('分包加载成功!');
- // 在这里可以执行加载完成后的操作
- if (onComplete) {
- onComplete(null, bundle);
- }
- } else {
- chsdk.log.debug('分包加载失败!');
- // 这里可以执行失败后的操作
- setTimeout(() => {
- // 这里可以尝试重新加载分包
- this.loadBundle(preogerss, onComplete);
- }, 1000);
- }
- })
- }
- /**
- * 显示主窗口
- * @param parent 父节点
- * @param interParent 界面父节点
- */
- show(parent?: Node, interParent?: Node) {
- this._firstParent = parent ? parent : null;
- this._secondParent = interParent ? interParent : null;
- resMgr.loadRes<Prefab>(mainPopup).then((prefab: Prefab) => {
- let node = instantiate(prefab);
- if (parent) {
- node.parent = parent;
- }
- else {
- let canvas = director.getScene().getChildByName("Canvas");
- if (canvas) {
- node.parent = canvas;
- }
- }
- });
- }
- hide() {
- this._firstParent.removeAllChildren();
- this._secondParent.removeAllChildren();
- }
- }
- /** 导出单例模式的实例 */
- export const ch_pass: Ch_pass = Ch_pass.instance;
|