super-hero/assets/cc-game/scripts/global/GameGlobalData.ts

346 lines
12 KiB
TypeScript
Raw Normal View History

2024-05-08 04:03:33 -07:00
import { _decorator, Component, Node } from 'cc';
import { EGAME_STATE, GameDefine } from '../config/GameDefine';
import { HeroData } from '../game_data/HeroData';
import { EnemyData } from '../game_data/EnemyData';
import { director } from 'cc';
import { Tween } from 'cc';
import { UmClientEvent } from '../../../cc-common/cc-util/UmOneToMultiListener';
2024-06-04 21:28:00 -07:00
import { ActiveSkillData, GameDataConfig, LevelDesignInfo, PassiveSkillInfo } from '../game_data/GameDataConfig';
2024-05-08 04:03:33 -07:00
import { UmLog } from '../../../cc-common/cc-util/UmLog';
import { Vec3 } from 'cc';
import { UserDataSaver } from '../game_data/UserDataSaver';
import { CCClass } from 'cc';
import { SkillInfo } from './GameInterface';
import { UmUtil } from '../../../cc-common/cc-util/UmUtil';
2024-06-04 21:28:00 -07:00
import { MapDataConfig, MapSagaInfo } from '../game_data/MapDataConfig';
2024-05-08 04:03:33 -07:00
const { ccclass, property } = _decorator;
@ccclass('GameGlobalData')
export class GameGlobalData extends Component {
@property(UserDataSaver) public userDataSaver: UserDataSaver = null!;
@property(GameDataConfig) public gameDataConfig: GameDataConfig = null!;
2024-05-20 00:03:32 -07:00
@property(MapDataConfig) public mapDataConfig: MapDataConfig = null!;
2024-05-08 04:03:33 -07:00
public static Instance: GameGlobalData = null;
public gameState = EGAME_STATE.INIT;
public isHeroManaReady: boolean = false;
public currentActiveSkill: number = 0;
public lastHeroMoveDirection: Vec3 = new Vec3(0, 1, 0);
2024-05-20 00:03:32 -07:00
public heroLevel = 1; //hero level
2024-05-08 04:03:33 -07:00
private levelDesignConfigData: LevelDesignInfo = null;
public expCollected = 0;
2024-05-20 00:03:32 -07:00
public goldCollected = 0;
public ticketCollected = 0;
2024-05-08 04:03:33 -07:00
2024-05-29 19:24:12 -07:00
public killedCount: any = {};
2024-05-08 04:03:33 -07:00
public passiveSkillCollected = {};
2024-05-29 19:24:12 -07:00
public mapObjectCount: any = {};
public HERO_CONTROL_CONFIG: any = { heroMoveSpeed: 5 };
2024-06-04 21:28:00 -07:00
public totalWave = 50;
2024-05-20 00:03:32 -07:00
public waveLevel = 1; //game level
2024-06-04 21:28:00 -07:00
public currentMapSagaId = 0;
public currentSagaWaveInfo: MapSagaInfo;
2024-05-29 19:24:12 -07:00
public ironShieldBonusTime = 0;
2024-05-08 04:03:33 -07:00
protected onLoad(): void {
GameGlobalData.Instance = this;
this.userDataSaver.loadData();
2024-06-04 21:28:00 -07:00
// this.prepareDataOnStartNewStage();
2024-05-08 04:03:33 -07:00
UmLog.log("skill_collected = ", JSON.stringify(this.userDataSaver.activeSkillCollected));
}
protected start(): void {
this.checkLevelUp();
}
public changeState(state: EGAME_STATE) {
this.gameState = state;
}
public isStatePlay(): boolean {
return this.gameState == EGAME_STATE.PLAY;
}
2024-05-15 01:53:18 -07:00
public isHeroCanMove(): boolean {
return this.gameState == EGAME_STATE.PLAY || this.gameState == EGAME_STATE.CLEAR_WAVE;
}
2024-05-08 04:03:33 -07:00
public isStateWait(): boolean {
return this.gameState == EGAME_STATE.WAIT;
}
public get skillSpecialDataInfo(): any {
return GameDefine.SKILL_SPECIAL_DATA_INFO;
}
public newGame() {
UmClientEvent.offAll();
Tween.stopAll();
director.loadScene("mainscene");
}
public manaToTime(mana: number) {
return mana / GameDefine.MANA_UNIT;
}
public timeToMana(time: number) {
return time * GameDefine.MANA_UNIT;
}
2024-06-04 21:28:00 -07:00
resetDataSaveBeforeStartNewMapSaga() {
2024-05-08 04:03:33 -07:00
this.expCollected = 0;
2024-05-20 00:03:32 -07:00
this.ticketCollected = 0;
this.goldCollected = 0;
2024-05-08 04:03:33 -07:00
this.passiveSkillCollected = {};
2024-05-29 19:24:12 -07:00
this.killedCount = {};
this.mapObjectCount = {};
this.HERO_CONTROL_CONFIG = UmUtil.clone(this.gameDataConfig.HERO_CONTROL_CONFIG);
2024-05-20 00:03:32 -07:00
this.waveLevel = 1;
2024-06-04 21:28:00 -07:00
this.totalWave = this.getTotalLevel();
2024-05-29 19:24:12 -07:00
this.ironShieldBonusTime = 0;
}
2024-06-04 21:28:00 -07:00
public setChooseMapSaga(noId: number)
{
this.currentMapSagaId = noId;
this.currentSagaWaveInfo = this.mapDataConfig.getMapSagaInfoByNoId(noId);
GameGlobalData.Instance.prepareDataOnStartNewStage();
}
public get mapLevel(): number {
return this.currentSagaWaveInfo.start_level + this.waveLevel - 1;
}
public getTotalLevel(): number{
return this.currentSagaWaveInfo.end_level - this.currentSagaWaveInfo.start_level;
2024-05-08 04:03:33 -07:00
}
listActiveSkillData: ActiveSkillData[];
listActiveSkillUses = new Array();
public prepareDataOnStartNewStage() {
2024-06-04 21:28:00 -07:00
this.resetDataSaveBeforeStartNewMapSaga();
2024-05-08 04:03:33 -07:00
this.userDataSaver.resetData();
2024-05-20 00:03:32 -07:00
this.heroLevel = this.userDataSaver.hero_level;
2024-05-08 04:03:33 -07:00
this.loadActiveSkillData();
}
loadActiveSkillData() {
var listSkillCollected = this.userDataSaver.activeSkillCollected;
var listKeys = UmUtil.clone(GameDefine.ACTIVE_SKILL_KEY);
for (var i = 0; i < listKeys.length; i++) {
var key = listKeys[i];
listKeys[i] = `${key}|${listSkillCollected[key]}`;
}
this.listActiveSkillData = this.gameDataConfig.getActiveSkillConfig(listKeys);
UmLog.log("listActiveSkillData => ", JSON.stringify(this.listActiveSkillData));
this.listActiveSkillUses = this.gameDataConfig.ACTIVE_SKILL_USE_INFO;
for (var i = 0; i < this.listActiveSkillData.length; i++) {
var data = this.listActiveSkillData[i];
this.listActiveSkillUses[i].mana = data.Mana;
2024-05-29 19:24:12 -07:00
if (i == 2) {
2024-05-08 04:03:33 -07:00
this.listActiveSkillUses[i].useTime = data.Range;
}
}
UmLog.log("listActiveSkillUses => ", JSON.stringify(this.listActiveSkillUses));
}
get heroDataConfig(): any {
2024-05-20 00:03:32 -07:00
var result = this.gameDataConfig.getHeroDataByLevel(this.heroLevel);
2024-05-29 19:24:12 -07:00
//hard_hero
// result.Atk = 1;
2024-06-04 21:28:00 -07:00
// result.Hp = 1000;
2024-05-08 04:03:33 -07:00
return result;
}
getEnemyDataConfigAfterRatioById(enemyId: string) {
var enemyData = this.gameDataConfig.getEnemyDataConfigById(enemyId);
var levelData = this.getLevelDesignConfigData();
enemyData.atk *= levelData.atkratio;
enemyData.hp *= levelData.hpratio;
enemyData.exp *= levelData.expratio;
return enemyData;
}
getBossDataConfigAfterRaitoById(enemyId: string) {
var bossData = this.gameDataConfig.getBossDataConfigById(enemyId);
var levelData = this.getLevelDesignConfigData();
bossData.atk *= levelData.atkratio;
bossData.hp *= levelData.hpratio;
bossData.exp *= levelData.expratio;
return bossData;
}
getLevelDesignConfigData(): LevelDesignInfo {
2024-05-20 00:03:32 -07:00
if (!this.levelDesignConfigData || this.levelDesignConfigData.level != this.waveLevel) {
this.levelDesignConfigData = this.gameDataConfig.getLevelDesignByLevel(this.waveLevel);
2024-05-08 04:03:33 -07:00
}
return this.levelDesignConfigData;
}
getExpInlevelNeed(): number {
return this.heroDataConfig.Exp;
}
checkLevelUp(): boolean {
var userDataSaver = GameGlobalData.Instance.userDataSaver;
var levelExp = GameGlobalData.Instance.getExpInlevelNeed();
UmLog.log("checkLevelUp => user exp = ", userDataSaver.expInLevel);
UmLog.log("checkLevelUp => level exp = ", levelExp);
if (userDataSaver.expInLevel < levelExp)
return false;
userDataSaver.expInLevel -= levelExp;
2024-05-20 00:03:32 -07:00
userDataSaver.hero_level++;
this.heroLevel = userDataSaver.hero_level;
2024-05-08 04:03:33 -07:00
userDataSaver.saveData();
return true;
}
checkLevelUpWithSessionExpCollected(expCollect: number): boolean {
var userDataSaver = GameGlobalData.Instance.userDataSaver;
2024-05-29 19:24:12 -07:00
var levelExp = GameGlobalData.Instance.getExpInlevelNeed();
2024-05-08 04:03:33 -07:00
var expCheck = userDataSaver.expInLevel + expCollect;
UmLog.log("checkLevelUp => user exp = ", userDataSaver.expInLevel);
UmLog.log("checkLevelUp => check exp = ", expCheck);
UmLog.log("checkLevelUp => level exp = ", levelExp);
if (expCheck < levelExp)
return false;
userDataSaver.expInLevel = expCheck - levelExp;
2024-05-20 00:03:32 -07:00
userDataSaver.hero_level++;
this.heroLevel = userDataSaver.hero_level;
2024-05-08 04:03:33 -07:00
userDataSaver.saveData();
this.expCollected = 0;
return true;
}
2024-05-20 00:03:32 -07:00
getListSkillReward(level: number = this.heroLevel): SkillInfo[] {
2024-05-08 04:03:33 -07:00
var skillConfig: string = this.gameDataConfig.getSkillUnlockDataByLevel(level);
var skillSplits = skillConfig.split("_");
var skillRewards = new Array();
for (var i = 0; i < skillSplits.length; i++) {
var skillls = skillSplits[i].split("|");
if (skillls.length < 2)
continue;
2024-05-29 19:24:12 -07:00
2024-05-08 04:03:33 -07:00
var skillInfo: SkillInfo = { skillName: skillls[0], level: Number(skillls[1]) };
skillRewards.push(skillInfo);
}
skillRewards.shuffleArray();
skillRewards.splice(3, skillRewards.length - 3);
return skillRewards;
}
//Passive Skill
collectPassiveSkill(skillName: string, plusLevel: number): PassiveSkillInfo {
var skillLevel = 0;
if (this.passiveSkillCollected.hasOwnProperty((skillName)))
skillLevel = this.passiveSkillCollected[skillName];
skillLevel += plusLevel;
skillLevel = Math.min(skillLevel, GameDefine.MAX_PASSIVE_SKILL_LEVEL);
this.passiveSkillCollected[skillName] = skillLevel;
return this.gameDataConfig.getPassiveSkillDataByNameAndLevel(skillName, skillLevel);
}
2024-05-29 19:24:12 -07:00
isActiveSkill(skillName: string) {
2024-05-08 04:03:33 -07:00
return skillName.includes("AS");
}
2024-05-29 19:24:12 -07:00
getGold(): number {
2024-05-12 20:54:17 -07:00
return this.userDataSaver.gold;
}
2024-05-29 19:24:12 -07:00
setGold(value: number) {
2024-05-12 20:54:17 -07:00
this.userDataSaver.gold = value;
this.userDataSaver.saveData();
}
2024-05-20 00:03:32 -07:00
addGold(value: number) {
2024-05-12 20:54:17 -07:00
this.userDataSaver.gold += value;
this.userDataSaver.saveData();
}
2024-05-08 04:03:33 -07:00
2024-05-29 19:24:12 -07:00
isClearWave() {
UmLog.log("KILL CREEP => ", this.killedCount[GameDefine.OBJECT_GROUP.CREEP]);
return this.waveLevel > this.totalWave ||
(this.getKilledCount(GameDefine.OBJECT_GROUP.CREEP) >= this.getMapObjectCountByGroup(GameDefine.OBJECT_GROUP.CREEP)
&& this.getKilledCount(GameDefine.OBJECT_GROUP.BOSS) >= this.getMapObjectCountByGroup(GameDefine.OBJECT_GROUP.BOSS)
&& this.getKilledCount(GameDefine.OBJECT_GROUP.GATE) >= this.getMapObjectCountByGroup(GameDefine.OBJECT_GROUP.GATE));
2024-05-20 00:03:32 -07:00
}
2024-05-29 19:24:12 -07:00
collectKilledCount(objectGroup: string) {
objectGroup = objectGroup.toLowerCase();
var count = this.getKilledCount(objectGroup);
count++;
this.killedCount[objectGroup] = count;
return count;
}
getKilledCount(objectGroup: string) {
objectGroup = objectGroup.toLowerCase();
var count = 0;
if (this.killedCount.hasOwnProperty(objectGroup))
count = this.killedCount[objectGroup];
return count;
}
getMapObjectCountByGroup(objectGroup: string) {
objectGroup = objectGroup.toLowerCase();
var count = 0;
if (this.mapObjectCount.hasOwnProperty(objectGroup))
count = this.mapObjectCount[objectGroup];
return count;
}
addCountMapOjectGroup(objectGroup: string) {
objectGroup = objectGroup.toLowerCase();
var mapObjectCount = GameGlobalData.Instance.mapObjectCount;
var count = 0;
if (mapObjectCount.hasOwnProperty(objectGroup))
count = mapObjectCount[objectGroup];
count++;
mapObjectCount[objectGroup] = count;
return count;
}
getRewardData() {
2024-05-20 00:03:32 -07:00
var rewardData = {};
rewardData[GameDefine.REWARD_TYPE.GOLD] = this.goldCollected;
2024-05-29 19:24:12 -07:00
rewardData[GameDefine.REWARD_TYPE.KEY] = this.ticketCollected;
rewardData[GameDefine.REWARD_TYPE.ENERGY] = this.expCollected;
2024-05-20 00:03:32 -07:00
return rewardData;
}
2024-05-29 19:24:12 -07:00
collectRewardDataWhenClearWave() {
2024-05-20 00:03:32 -07:00
var levelDataConfig = GameGlobalData.Instance.getLevelDesignConfigData();
this.goldCollected += levelDataConfig.goldcollect;
//TODO
2024-05-15 01:53:18 -07:00
}
2024-05-08 04:03:33 -07:00
}