import BaseModel from "./BaseModel"; import DateUtils from "../../uitl/DateUtils"; import Util, { DataKey } from "../../uitl/Util"; import ObjectInstance from "../../uitl/ObjectInstance"; import PcSdk from "../PcSdk"; /** * */ export default class ShakeModel extends BaseModel { private conf: any; private eleProbabilityArr: number[] = []; private totalWeight: number = 0; private proArrLen: number = 0; /**红包出现的总次数每日 */ private red_day_limit: number = 0; private cur_red_day_limit: number = 0; /**摇一摇出现的总次数 */ private shake_day_limit: number = 0; private cur_shake_day_limit: number = 0; async init() { let result = PcSdk.I.gameConfig;; console.log('---------------ShakeModel-- 获取摇一摇静态表-----' + JSON.stringify(result)) if (result['config']) { let gameData = result['config']; this.update(this.initData(gameData)); } } initData(gameData) { let data = new ShakeData; let lastTime = Util.I.getItem(DataKey.shakeLastTime) || '0'; let lt = parseInt(lastTime); let last = DateUtils.timeDay(lt); let today = DateUtils.today; if (last != today) { this.cur_shake_day_limit = 0; this.cur_red_day_limit = 0; lastTime = DateUtils.nowTime.toString(); Util.I.setItem(DataKey.cur_shake_day_limit, 0); Util.I.setItem(DataKey.cur_red_day_limit, 0); Util.I.setItem(DataKey.shakeLastTime, lastTime); } else { let cur_red_day_limit = Util.I.getItem(DataKey.cur_red_day_limit) || '0'; this.cur_red_day_limit = parseInt(cur_red_day_limit); let cur_shake_day_limit = Util.I.getItem(DataKey.cur_shake_day_limit) || '0'; this.cur_shake_day_limit = parseInt(cur_shake_day_limit); } data.config = gameData['config']; gameData['shake'].forEach(ele => { data.shakeWeightList.push(ele); }); this.conf = []; this.conf = data.shakeWeightList; this.initProbability(); this.shake_day_limit = data.config.shake_day_limit; this.red_day_limit = data.config.red_day_limit; return data; } initProbability() { this.totalWeight = 0; this.conf.forEach((ele, index) => { this.totalWeight += ele.weight; let itemW = ele.weight; if (index > 0) itemW += this.eleProbabilityArr[index - 1]; this.eleProbabilityArr = [...this.eleProbabilityArr, itemW]; }) this.proArrLen = this.eleProbabilityArr.length; } getShakeType() { ++this.cur_shake_day_limit; Util.I.setItem(DataKey.cur_shake_day_limit, this.cur_shake_day_limit); if (this.cur_shake_day_limit > this.shake_day_limit) { /**'次数达到上限,请明天再来*/ /**在此处可以弹框等处理 */ return false; } let ran = Math.floor(Math.random() * this.totalWeight); for (let index = 0; index < this.proArrLen; index++) { const ele = this.eleProbabilityArr[index]; if (ele >= ran) { if (0 === index || 1 === index) { ++this.cur_red_day_limit; Util.I.setItem(DataKey.cur_red_day_limit, this.cur_red_day_limit); if (this.cur_red_day_limit > this.red_day_limit) { return this.conf[this.proArrLen - 1]; } } return this.conf[index]; } } return this.conf[this.proArrLen - 1]; } get data(): ShakeData { return this._data; } static get I(): ShakeModel { return ObjectInstance.get(ShakeModel) as ShakeModel; } } class ShakeData { config: ShakeConfig; shakeWeightList: ShakeWeightData[] = []; } interface ShakeConfig { red_day_limit: number, shake_day_limit: number, interstitial_cnt: number, interstitial_delay: number } interface ShakeWeightData { id: number; type: number; weight: number; num: number; }