import GameConfig from "./GameConfig"; import gameData from "./gameData"; const { ccclass, property } = cc._decorator; @ccclass export default class DataObj extends cc.Component { onLoad() { } /** 怪物数据*/ public monsterData = { /**预制体名 */ name1: '', /**模型缩放比 */ model_scaling: 1, /**阵营 1敌方 2我方 3npc*/ camp: 1, /**单位类型 1地面单位 2空中单位*/ company_type: 1, /**血量总量 */ totalHp: 16, /**攻击力 */ attack: '', /** 物理减伤*/ physics_reduction: 0, /** 魔法减伤*/ magic_reduction: 0, /**移动速度 基础35==1 */ Movespeed: 35, /**攻击频率 单位秒 */ attack_speed: 1.5, /**攻击范围 */ attack_range: 0.2, /**预警范围 */ warning_range: 1, /**回血速率 0回血量 1频率*/ recovery: [], /**攻击类型 1主动 2被动 3不攻击*/ active_attack_type: '1', /**技能 */ skills: 0, /**对空开关*/ air_attack_switch: 'OFF', /**扣血值 */ hurt_level_hp: 1, /**掉落金币 */ drop_group_1: 1, /** 掉落钻石*/ drop_group_2: '', /**掉落砖石百分比几率 */ percentage: 10, /**血量难度系数 */ hp_diff_coefficient: 1, /**攻击难度系数 */ attack_diff_coefficient: 1, /**当前血量 */ nowHp: 16, }; /**初始化怪物数据 */ public writeMonster_Config(ID: number) { let nameData = []; let oneData = []; for (let i = 0; i < gameData.instance().monster_Config.length; i++) { const arr = gameData.instance().monster_Config[i]; if (i == 2) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; nameData.push(element); } } if (Number(arr[0]) == ID) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; oneData.push(element); } break; } } for (let i = 0; i < nameData.length; i++) { const element = nameData[i]; switch (element) { case 'id': break; case 'name': break; case 'name1': this.monsterData.name1 = oneData[i]; break; case 'monster_icon_path': break; case 'model_scaling': this.monsterData.model_scaling = Number(oneData[i]); break; case 'skills': this.monsterData.skills = Number(oneData[i]); break; case 'physics_reduction': this.monsterData.physics_reduction = Number(oneData[i]); break; case 'magic_reduction': this.monsterData.magic_reduction = Number(oneData[i]); break; case 'camp': this.monsterData.camp = Number(oneData[i]); break; case 'company_type': this.monsterData.company_type = Number(oneData[i]); break; case 'hp': { this.monsterData.totalHp = Number(oneData[i]); this.monsterData.nowHp = this.monsterData.totalHp; } break; case 'attack': this.monsterData.attack = oneData[i]; break; case 'move_speed': this.monsterData.Movespeed = Number(oneData[i]); break; case 'attack_speed': this.monsterData.attack_speed = Number(oneData[i]); break; case 'attack_range': this.monsterData.attack_range = Number(oneData[i]); break; case 'warning_range': this.monsterData.warning_range = Number(oneData[i]); break; case 'recovery': this.monsterData.recovery = this.getArr(oneData[i]); break; case 'active_attack_type': this.monsterData.active_attack_type = oneData[i]; break; case 'air_attack_switch': this.monsterData.air_attack_switch = oneData[i]; break; case 'hurt_level_hp': this.monsterData.hurt_level_hp = Number(oneData[i]); break; case 'drop_group_1': this.monsterData.drop_group_1 = Number(oneData[i]); break; case 'drop_group_2': { this.monsterData.drop_group_2 = oneData[i]; let attackarr = oneData[i].split("*"); this.monsterData.percentage = Number(attackarr[0]); } break; case 'hp_diff_coefficient': { this.monsterData.hp_diff_coefficient = this.getDiff(oneData[i]); if (this.monsterData.hp_diff_coefficient > 0) { this.monsterData.totalHp *= this.monsterData.hp_diff_coefficient; this.monsterData.nowHp = this.monsterData.totalHp; } } break; case 'attack_diff_coefficient': { this.monsterData.attack_diff_coefficient = this.getDiff(oneData[i]); } break; default: break; } } } /**塔数据 */ public TowerData = { /** ID*/ id: 1, /** 塔名*/ name: 1, /** 塔等级*/ tower_level: 1, /**塔类 */ tower_type: 1, /**对空开关 */ air_attack_switch: '', /**初始建造金币 */ first_gold: 1, /**升级金币 */ up_gold: [], /**变卖金币 */ value_gold: 1, /**攻击频率 单位秒*/ attack_cd: 1, /** 攻击范围 基础单位135*/ attack_range: 1, /**子弹ID */ bullet_id: 1, /**士兵ID,数量 */ monster_id: [], /** 下一级塔ID*/ next_tower_id: [], /**塔技能 */ next_skill: [], /** 预制体塔路径*/ name1: '', /** 预制体小兵路径*/ name2: '', /**塔图标路径 */ tower_icon_path: '', /**模型缩放比 */ model_scaling: 1, }; /**初始塔数据 */ public writeTower_Config(ID: number) { let nameData = []; let oneData = []; for (let i = 0; i < gameData.instance().tower_Config.length; i++) { const arr = gameData.instance().tower_Config[i]; if (i == 2) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; nameData.push(element); } } if (Number(arr[0]) == ID) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; oneData.push(element); } break; } } for (let i = 0; i < nameData.length; i++) { const element = nameData[i]; switch (element) { case 'id': this.TowerData.id = Number(oneData[i]); break; case 'tower_level': this.TowerData.tower_level = Number(oneData[i]); break; case 'tower_type': this.TowerData.tower_type = Number(oneData[i]); break; case 'air_attack_switch': this.TowerData.air_attack_switch = oneData[i]; break; case 'first_gold': this.TowerData.first_gold = Number(oneData[i]); break; case 'up_gold': this.TowerData.up_gold = this.getArr(oneData[i]); break; case 'value_gold': this.TowerData.value_gold = Number(oneData[i]); break; case 'attack_cd': this.TowerData.attack_cd = Number(oneData[i]); break; case 'attack_range': this.TowerData.attack_range = Number(oneData[i]); break; case 'bullet_id': this.TowerData.bullet_id = Number(oneData[i]); break; case 'monster_id': this.TowerData.monster_id = this.getArr(oneData[i]); break; case 'next_tower_id': this.TowerData.next_tower_id = this.getArr(oneData[i]); break; case 'next_skill': this.TowerData.next_skill = this.getArr(oneData[i]); break; case 'name1': this.TowerData.name1 = oneData[i]; break; case 'name2': this.TowerData.name2 = oneData[i]; break; case 'tower_icon_path': break; case 'model_scaling': this.TowerData.model_scaling = Number(oneData[i]); break; default: break; } } } /**子弹数据 */ public BulletData = { /**ID */ id: 0, /**子弹名 */ name: '', /**子弹类型 */ bullet_type: 0, /** 伤害类型*/ injury_type: 0, /** 攻击力*/ attack: '', /** 飞行速度*/ speed: 0, /** 抛物线系数*/ parabola: [], /**爆炸范围 */ boom_range: 0, /**爆炸伤害 */ boom_hurt: '', /** 子弹模型路径*/ bullet_model_path: '', /**爆炸特效路径 */ effect_bullet_path: '', /**模型缩放比 */ model_scaling: 1, } /**初始子弹数据 */ public writeBullet_Config(ID: number) { let nameData = []; let oneData = []; for (let i = 0; i < gameData.instance().bullet_Config.length; i++) { const arr = gameData.instance().bullet_Config[i]; if (i == 2) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; nameData.push(element); } } if (Number(arr[0]) == ID) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; oneData.push(element); } break; } } for (let i = 0; i < nameData.length; i++) { const element = nameData[i]; switch (element) { case 'id': this.BulletData.id = Number(oneData[i]); break; case 'name': break; case 'bullet_type': this.BulletData.bullet_type = Number(oneData[i]); break; case 'injury_type': this.BulletData.injury_type = Number(oneData[i]); break; case 'attack': this.BulletData.attack = oneData[i]; break; case 'speed': this.BulletData.speed = Number(oneData[i]); break; case 'parabola': this.BulletData.parabola = this.getArr(oneData[i]); break; case 'boom_range': this.BulletData.boom_range = Number(oneData[i]); break; case 'boom_hurt': this.BulletData.boom_hurt = oneData[i]; break; case 'bullet_model_path': break; case 'effect_bullet_path': break; case 'model_scaling': this.BulletData.model_scaling = Number(oneData[i]); break; default: break; } } } /**关卡数据 */ public LevelData = { /**ID */ id: 0, /** 关卡名*/ name: '', /**关卡场景路径 */ scene_path: 1, /**地图类型 */ map_type: 1, /**关卡节数 */ level_num: '', /** 关卡怪物一览*/ level_monster: [], /**难度 */ diff: 0, /** 初始金币*/ start_gold: 0, /** 关卡血量*/ level_hp: 0, /**基础通关奖励 */ reward: 0, /** 下一章节*/ next_level: 0, /** 1星条件血量*/ stars_1_hp: 0, /** 2星条件血量*/ stars_2_hp: 0, /** 3星条件血量*/ stars_3_hp: 0, /** 挑战模式*/ events: 0, /**空地X坐标 */ coordinate_x: [], /**空地Y坐标 */ coordinate_y: [], /** 关卡文本介绍*/ story: '', /** 塔升级上限*/ tower_limit: [], } /**初始关卡数据 */ public writeLevel_Config(ID: number) { let nameData = []; let oneData = []; for (let i = 0; i < gameData.instance().level_Config.length; i++) { const arr = gameData.instance().level_Config[i]; if (i == 2) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; nameData.push(element); } } if (Number(arr[0]) == ID) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; oneData.push(element); } break; } } for (let i = 0; i < nameData.length; i++) { const element = nameData[i]; switch (element) { case 'id': this.LevelData.id = Number(oneData[i]); break; case 'name': this.LevelData.name = oneData[i]; break; case 'level_num': this.LevelData.level_num = oneData[i]; break; case 'scene_path': this.LevelData.scene_path = Number(oneData[i]); break; case 'map_type': this.LevelData.map_type = Number(oneData[i]); break; case 'level_monster': this.LevelData.level_monster = this.getArr(oneData[i]); break; case 'diff': this.LevelData.diff = Number(oneData[i]); break; case 'start_gold': this.LevelData.start_gold = Number(oneData[i]); break; case 'level_hp': this.LevelData.level_hp = Number(oneData[i]); break; case 'reward': this.LevelData.reward = Number(oneData[i]); break; case 'next_level': this.LevelData.next_level = Number(oneData[i]); break; case 'stars_1_hp': this.LevelData.stars_1_hp = Number(oneData[i]); break; case 'stars_2_hp': this.LevelData.stars_2_hp = Number(oneData[i]); break; case 'stars_3_hp': this.LevelData.stars_3_hp = Number(oneData[i]); break; case 'events': this.LevelData.events = Number(oneData[i]); break; case 'story': this.LevelData.story = oneData[i]; break; case 'tower_limit': this.LevelData.tower_limit = this.getArr(oneData[i]); break; case 'coordinate_x': this.LevelData.coordinate_x = this.getArr(oneData[i]); break; case 'coordinate_y': this.LevelData.coordinate_y = this.getArr(oneData[i]); break; default: break; } } } /**技能数据 */ public SkillData = { /**ID */ id: 1, /**技能名 */ name: '', /**技能类型 */ skill_type: 1, /**参数1 */ parameter_1: 1, /**参数2 */ parameter_2: '', /**参数3 */ parameter_3: '', /** 参数4*/ parameter_4: 1, /** 参数5*/ parameter_5: 1, /**子弹ID */ bullet_id: 1, /** 下级技能ID*/ next_skill: 1, /**升级金币 */ up_gold: 1, /** 技能特效路径*/ skill_effect_path: '', /**技能图标 */ skill_icon: '', /** 技能文本介绍*/ skill_text: '', } /**初始技能数据 */ public writeSkill_Config(ID: number) { let nameData = []; let oneData = []; for (let i = 0; i < gameData.instance().skill_Config.length; i++) { const arr = gameData.instance().skill_Config[i]; if (i == 2) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; nameData.push(element); } } if (Number(arr[0]) == ID) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; oneData.push(element); } break; } } for (let i = 0; i < nameData.length; i++) { const element = nameData[i]; switch (element) { case 'id': this.SkillData.id = Number(oneData[i]); break; case 'name': this.SkillData.name = oneData[i]; break; case 'skill_type': this.SkillData.skill_type = Number(oneData[i]); break; case 'parameter_1': this.SkillData.parameter_1 = Number(oneData[i]); break; case 'parameter_2': this.SkillData.parameter_2 = oneData[i]; break; case 'parameter_3': this.SkillData.parameter_3 = oneData[i]; break; case 'parameter_4': this.SkillData.parameter_4 = Number(oneData[i]); break; case 'parameter_5': this.SkillData.parameter_5 = Number(oneData[i]); break; case 'bullet_id': this.SkillData.bullet_id = Number(oneData[i]); break; case 'next_skill': this.SkillData.next_skill = Number(oneData[i]); break; case 'up_gold': this.SkillData.up_gold = Number(oneData[i]); break; case 'skill_effect_path': this.SkillData.skill_effect_path = oneData[i]; break; case 'skill_icon': this.SkillData.skill_icon = oneData[i]; break; case 'skill_text': this.SkillData.skill_text = oneData[i]; break; default: break; } } } /**天赋数据 */ public talentData = { /**ID */ id: 1, /**天赋名 */ name: '', /** 消耗星数*/ star_required: 1, /**天赋类型 */ talent_type: 1, /**参数1 */ parameter_1: 1, /**参数2 */ parameter_2: 1, /**参数3 */ parameter_3: 1, /** 参数4*/ parameter_4: 1, /**参数5 */ parameter_5: 1, /**图片名 */ talent_icon: '', /**技能文本介绍 */ talent_text: '', } /**初始天赋数据 */ public writeTalent_Config(ID: number) { let nameData = []; let oneData = []; for (let i = 0; i < gameData.instance().uiSkill_Config.length; i++) { const arr = gameData.instance().uiSkill_Config[i]; if (i == 2) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; nameData.push(element); } } if (Number(arr[0]) == ID) { for (let k = 0; k < arr.length; k++) { const element = arr[k]; oneData.push(element); } break; } } for (let i = 0; i < nameData.length; i++) { const element = nameData[i]; switch (element) { case 'id': this.talentData.id = Number(oneData[i]); break; case 'name': this.talentData.name = oneData[i]; break; case 'star_required': this.talentData.star_required = Number(oneData[i]); break; case 'talent_type': this.talentData.talent_type = Number(oneData[i]); break; case 'parameter_1': this.talentData.parameter_1 = Number(oneData[i]); break; case 'parameter_2': this.talentData.parameter_2 = Number(oneData[i]); break; case 'parameter_3': this.talentData.parameter_3 = Number(oneData[i]); break; case 'parameter_4': this.talentData.parameter_4 = Number(oneData[i]); break; case 'parameter_5': this.talentData.parameter_5 = Number(oneData[i]); break; case 'talent_icon': this.talentData.talent_icon = oneData[i]; break; case 'talent_text': this.talentData.talent_text = ''; for (let k = i; k < oneData.length; k++) { const element = oneData[k]; if (element == '') { continue; } this.talentData.talent_text += element; } break; default: break; } } } /**获取数组 */ public getArr(str: string): number[] { let numarr: number[] = []; if (str != '') { let arrr = str.split("*"); for (let m = 0; m < arrr.length; m++) { const element = arrr[m]; numarr.push(Number(element)); } } return numarr; } /**根据难度获取系数 */ private getDiff(strrr): number { if (strrr == '') { return 0; } let attackarr = strrr.split("*"); return Number(attackarr[GameConfig.instance().levelDiff]); } /**type:1,取整数。2,取小数*/ public getRanm(type: number, strrr: string): number { if (strrr == '' || !strrr) { return 0; } let attackarr = strrr.split("*"); let leth = attackarr.length; if (leth < 0) { return 0; } let num1 = Number(attackarr[leth - 2]); let num2 = Number(attackarr[leth - 1]); let ranm = 0; if (num1 < num2) { if (type == 1) { ranm = num1 + Math.floor(Math.random() * (num2 - num1 + 1)); } if (type == 2) { ranm = num1 + Math.random() * (num2 - num1); } } else { if (type == 1) { ranm = num2 + Math.floor(Math.random() * (num1 - num2 + 1)); } if (type == 2) { ranm = num2 + Math.random() * (num1 - num2); } } return ranm; } }