This commit is contained in:
2024-09-29 08:06:30 +08:00
parent 2a88532ef4
commit 331b22da07
31 changed files with 5067 additions and 7357 deletions

View File

@@ -16,6 +16,7 @@ import { RoleSpine } from "./RoleSpine";
import { RoleViewComp } from "./RoleViewComp";
import { BoxSet } from "../common/config/BoxSet";
import { HeroModelComp } from "../hero/HeroModelComp";
import { Talents } from "../common/config/TalentSet";
/** 角色实体 */
@ecs.register(`Role`)
export class Role extends ecs.Entity {
@@ -51,28 +52,30 @@ export class Role extends ecs.Entity {
hero_init(uuid:number=1001,node:Node,pos:Vec3=v3(0,0,0)){
var rv = node.getComponent(RoleViewComp)!;
let role=smc.vm_data.role;
let role_talent= smc.vm_data.talent
let talents=Talents;
rv.hero_uuid=uuid;
rv.speed =rv.ospeed = role.speed;
rv.atk_dis = role.atk_dis;
rv.hero_name= "role";
rv.hp= rv.hp_max = role.hp*(1+smc.vm_data.talent[1].bonus*smc.vm_data.talent[1].lv);
rv.level = role.lv;
rv.atk = role.atk*(1+smc.vm_data.talent[2].bonus*smc.vm_data.talent[2].lv);
rv.atk_cd = role.atk_cd*(1-smc.vm_data.talent[3].bonus*smc.vm_data.talent[3].lv);
rv.st_boncus=1+smc.vm_data.talent[15].bonus*smc.vm_data.talent[15].lv;
rv.s_boncus=1+smc.vm_data.talent[16].bonus*smc.vm_data.talent[16].lv;
rv.power = role.power;
rv.skill1 = role.skill1;
rv.skill1.cd=rv.skill1.cd_max=rv.skill1.cd_max*(1-smc.vm_data.talent[4].bonus*smc.vm_data.talent[4].lv)
rv.skill2 = role.skill2;
rv.skill2.cd=rv.skill2.cd_max=rv.skill1.cd_max*(1-smc.vm_data.talent[4].bonus*smc.vm_data.talent[4].lv)
rv.skill3 = role.skill3;
rv.skill3.cd=rv.skill3.cd_max=rv.skill1.cd_max*(1-smc.vm_data.talent[4].bonus*smc.vm_data.talent[4].lv)
rv.skill4 = role.skill4;
rv.skill4.cd=rv.skill4.cd_max=rv.skill1.cd_max*(1-smc.vm_data.talent[4].bonus*smc.vm_data.talent[4].lv)
rv.skill3 = role.skill3;
rv.skill4 = role.skill4;
rv.skill5 = role.skill5;
rv.skill5.cd=rv.skill5.cd_max=rv.skill1.cd_max*(1-smc.vm_data.talent[4].bonus*smc.vm_data.talent[4].lv)
rv.skill = role.skill;
rv.skill1.cd=rv.skill1.cd_max=rv.skill1.cd_max*(1-talents[1004].bonus*role_talent[1004].lv)
rv.skill2.cd=rv.skill2.cd_max=rv.skill1.cd_max*(1-talents[1004].bonus*role_talent[1004].lv)
rv.skill3.cd=rv.skill3.cd_max=rv.skill1.cd_max*(1-talents[1004].bonus*role_talent[1004].lv)
rv.skill4.cd=rv.skill4.cd_max=rv.skill1.cd_max*(1-talents[1004].bonus*role_talent[1004].lv)
rv.skill5.cd=rv.skill5.cd_max=rv.skill1.cd_max*(1-talents[1004].bonus*role_talent[1004].lv)
rv.hp= rv.hp_max = role.hp*(1+talents[1001].bonus*role_talent[1001].lv);
rv.atk = role.atk*(1+talents[1002].bonus*role_talent[1002].lv);
rv.atk_cd = role.atk_cd*(1-talents[1003].bonus*role_talent[1003].lv);
rv.st_boncus=1+talents[1005].bonus*role_talent[1005].lv;
rv.s_boncus=1+talents[1006].bonus*role_talent[1006].lv;
rv.box_group = BoxSet.HERO;
this.add(rv);
}

View File

@@ -10,7 +10,9 @@ export class Talent extends ecs.Entity {
/** ---------- 数据层 ---------- */
TalentView!: TalentComp
protected init() {
}
destroy(): void {
this.remove(TalentComp);
super.destroy();
@@ -19,11 +21,14 @@ export class Talent extends ecs.Entity {
/** 加载角色 */
load(pos: Vec3 = Vec3.ZERO,uuid:number=101,parent:Node) {
// var path = "game/monster/"+prefab_path;
var path = "game/heros/role";
var path = "game/talent";
var prefab: Prefab = oops.res.get(path, Prefab)!;
var node = instantiate(prefab);
node.parent = parent;
node.setScale(node.scale.x, node.scale.y, node.scale.z);
node.setPosition(pos)
console.log("load_talent",node)
let tv = node.getComponent(TalentComp)!;
tv.t_uuid = uuid;
this.add(tv);
}
}

View File

@@ -1,6 +1,8 @@
import { _decorator } from "cc";
import { _decorator, Label } from "cc";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
import { Talents } from "../common/config/TalentSet";
import { smc } from "../common/SingletonModuleComp";
const { ccclass, property } = _decorator;
@@ -8,12 +10,35 @@ const { ccclass, property } = _decorator;
@ccclass('TalentComp')
@ecs.register('TalentView', false)
export class TalentComp extends CCComp {
t_uuid:number = 0;
/** 视图层逻辑代码分离演示 */
start() {
// var entity = this.ent as ecs.Entity; // ecs.Entity 可转为当前模块的具体实体对象
// this.on(ModuleEvent.Cmd, this.onHandler, this);
let name =this.node.getChildByName("name")
let info =this.node.getChildByName("info")
let icon =this.node.getChildByName("icon")
let cost =this.node.getChildByName("cost")
let lv =this.node.getChildByName("lv")
let talent= Talents[this.t_uuid]
let role_talents = smc.vm_data.talent[talent.uuid]
cost.getComponent(Label).string = (talent.cost*(1+role_talents.lv)).toString()
name.getComponent(Label).string = talent.name
info.getComponent(Label).string = talent.info
lv.getComponent(Label).string = role_talents.lv.toString()
if (talent.type == 1){
this.node.getChildByName("role").active=true
}
if (talent.type == 2){
this.node.getChildByName("hero").active=true
}
if (talent.type == 3){
this.node.getChildByName("mission").active=true
}
}
to_update_t(){
console.log("to_update_t",this.t_uuid)
}
/** 全局消息逻辑处理 */
// private onHandler(event: string, args: any) {
// switch (event) {

View File

@@ -77,6 +77,8 @@ export class SingletonModuleComp extends ecs.Comp {
gems: 4,
unlock:5,
mission:{
play:false,
pause:false,
victory:0,
once:6, //每波刷新怪物数量
total:120, //总怪物数
@@ -133,26 +135,24 @@ export class SingletonModuleComp extends ecs.Comp {
skill3:{uuid:1001,cd:3,cd_max:3,alive:false},
skill4:{uuid:1001,cd:3,cd_max:3,alive:false},
skill5:{uuid:1001,cd:3,cd_max:3,alive:false},
},
talent:{
1:{bonus:3,lv:0,lv_max:5,info:"英雄血量加成",name:""},
2:{bonus:3,lv:0,lv_max:5,info:"英雄攻击加成",name:""},
3:{bonus:3,lv:0,lv_max:5,info:"英雄攻击加速",name:""},
4:{bonus:3,lv:0,lv_max:5,info:"英雄技能cd加速",name:""},
5:{bonus:3,lv:0,lv_max:5,info:"英雄技能效果加强",name:""},
6:{bonus:3,lv:0,lv_max:5,info:"铜币收益增加",name:""},
7:{bonus:3,lv:0,lv_max:5,info:"",name:""},
8:{bonus:3,lv:0,lv_max:5,info:"",name:""},
9:{bonus:3,lv:0,lv_max:5,info:"",name:""},
10:{bonus:3,lv:0,lv_max:5,info:"",name:""},
11:{bonus:3,lv:0,lv_max:5,info:"血量加成",name:""},
12:{bonus:3,lv:0,lv_max:5,info:"攻击加成",name:""},
13:{bonus:3,lv:0,lv_max:5,info:"攻击加速",name:""},
14:{bonus:3,lv:0,lv_max:5,info:"技能cd加速",name:""},
15:{bonus:3,lv:0,lv_max:5,info:"技能效果加强",name:""},
16:{bonus:3,lv:0,lv_max:5,info:"技能持续时间",name:""},
1001:{uuid:1001,lv:0,},
1002:{uuid:1002,lv:0,},
1003:{uuid:1003,lv:0,},
1004:{uuid:1004,lv:0,},
1005:{uuid:1005,lv:0,},
1006:{uuid:1006,lv:0,},
1007:{uuid:1007,lv:0,},
1008:{uuid:1008,lv:0,},
1009:{uuid:1009,lv:0,},
1010:{uuid:1010,lv:0,},
1011:{uuid:1011,lv:0,},
1012:{uuid:1012,lv:0,},
1013:{uuid:1013,lv:0,},
1014:{uuid:1014,lv:0,},
1015:{uuid:1015,lv:0,},
1016:{uuid:1016,lv:0,},
},
monster:{
gold_add:1,

View File

@@ -0,0 +1,19 @@
export const talent_num=2
export const Talents={
1001:{uuid:1001,type: 1,bonus:3,cost:1,lv_max:99,info:"勇者血量加成",name:"强身"},
1002:{uuid:1002,type: 1,bonus:3,cost:1,lv_max:99,info:"勇者攻击加成",name:"历练"},
1003:{uuid:1003,type: 1,bonus:3,cost:1,lv_max:99,info:"勇者攻击加速",name:"迅捷"},
1004:{uuid:1004,type: 1,bonus:3,cost:1,lv_max:99,info:"勇者技能cd加速",name:"咏唱"},
1005:{uuid:1005,type: 1,bonus:3,cost:1,lv_max:99,info:"勇者技能效果加强",name:"凝聚"},
1006:{uuid:1006,type: 1,bonus:3,cost:1,lv_max:99,info:"铜币收益增加",name:"精打细算"},
// 1007:{uuid:1007,type: 1,bonus:3,cost:1,lv_max:99,info:"",name:""},
// 1008:{uuid:1008,type: 1,bonus:3,cost:1,lv_max:99,info:"",name:""},
// 1009:{uuid:1009,type: 1,bonus:3,cost:1,lv_max:99,info:"",name:""},
// 1010:{uuid:1010,type: 1,bonus:3,cost:1,lv_max:99,info:"",name:""},
1011:{uuid:1011,type: 2,bonus:3,cost:1,lv_max:99,info:"佣兵血量加成",name:"后援"},
1012:{uuid:1012,type: 2,bonus:3,cost:1,lv_max:99,info:"佣兵攻击加成",name:"激励"},
1013:{uuid:1013,type: 2,bonus:3,cost:1,lv_max:99,info:"佣兵攻击加速",name:"鼓舞"},
1014:{uuid:1014,type: 2,bonus:3,cost:1,lv_max:99,info:"佣兵技能cd加速",name:"联结"},
1015:{uuid:1015,type: 2,bonus:3,cost:1,lv_max:99,info:"佣兵技能效果加强",name:"祝福"},
1016:{uuid:1016,type: 2,bonus:3,cost:1,lv_max:99,info:"佣兵技能持续时间",name:"透支"},
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "5fdc5c44-f438-4c0e-8c5c-a2673d49aafd",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -19,6 +19,7 @@ import { RandomManager } from "../../../../extensions/oops-plugin-framework/asse
import { HeroSet,MonSet } from "../common/config/heroSet";
import { Role } from "../Role/Role";
import { MoveToComp } from "../common/ecs/position/MoveTo";
import { Talents } from "../common/config/TalentSet";
/** 角色实体 */
@ecs.register(`Hero`)
export class Hero extends ecs.Entity {
@@ -59,24 +60,26 @@ export class Hero extends ecs.Entity {
var hv = node.getComponent(HeroViewComp)!;
// console.log("hero_init",buff)
let hero_set= smc.heros[uuid]
let role_talent= smc.vm_data.talent
let talents=Talents;
hv.scale = 1;
hv.speed =hv.ospeed = hero_set.speed;
hv.hero_uuid= uuid;
hv.hero_name= hero_set.name;
hv.hp= hv.hp_max =Math.floor(hero_set.hp*(1+smc.vm_data.talent[11].bonus*smc.vm_data.talent[11].lv)*smc.vm_data.mission.hero.hp);
hv.atk = Math.floor(hero_set.atk*(1+smc.vm_data.talent[12].bonus*smc.vm_data.talent[12].lv))
hv.atk_cd = hero_set.atk_cd*(1-smc.vm_data.talent[13].bonus*smc.vm_data.talent[13].lv);
hv.st_boncus=1+smc.vm_data.talent[15].bonus*smc.vm_data.talent[15].lv;
hv.s_boncus=1+smc.vm_data.talent[16].bonus*smc.vm_data.talent[16].lv;
hv.atk_dis = hero_set.atk_dis;
hv.power = hero_set.power;
hv.level = hero_set.level;
hv.power_max= hero_set.power_max*(1-smc.vm_data.talent[14].bonus*smc.vm_data.talent[14].lv);;
hv.type = hero_set.type;
hv.skill_uuid = hero_set.skill_uuid;
hv.max_skill_uuid = hero_set.max_skill_uuid;
hv.scale = 1;
hv.role_heros_index = index;
hv.type = hero_set.type;
hv.hp= hv.hp_max =Math.floor(hero_set.hp*(1+talents[1011].bonus*role_talent[1011].lv)*smc.vm_data.mission.hero.hp);
hv.atk = Math.floor(hero_set.atk*(1+talents[1012].bonus*role_talent[1012].lv))
hv.atk_cd = hero_set.atk_cd*(1-talents[1013].bonus*role_talent[1013].lv);
hv.st_boncus=1+talents[1015].bonus*role_talent[1015].lv;
hv.s_boncus=1+talents[1016].bonus*role_talent[1016].lv;
hv.power_max= hero_set.power_max*(1-talents[1014].bonus*role_talent[1014].lv);;
this.add(hv);
}
set_ratio(uuid:number){

View File

@@ -277,6 +277,7 @@ export class HeroViewComp extends CCComp {
get_hero_pos(hero:any){
let pos =this.skill_pos()
let t_pos:Vec3 = v3(720,0)
console.log("hero.node.isValid",hero);
if(!hero.node.isValid){
return
}else{
@@ -315,7 +316,7 @@ export class HeroViewComp extends CCComp {
hero.add_shield(increase_shield,smc.skills[s_uuid].bsd*this.st_boncus)
}
}
push_least_buff(skill:number){
let heros:any = ecs.query(ecs.allOf(HeroModelComp));
let least_hp:number=0
@@ -363,20 +364,20 @@ export class HeroViewComp extends CCComp {
handle_skill(skill:number){
switch (smc.skills[skill].tg) {
case 0: //自己
this.to_add_buff(this.ent,skill)
this.to_add_buff(this.node.getComponent(HeroViewComp),skill)
break;
case 1: //伙伴
this.push_least_buff(skill)
break;
case 2: //自己和伙伴
this.to_add_buff(this.ent,skill)
this.to_add_buff(this.node.getComponent(HeroViewComp),skill)
this.push_least_buff(skill)
break;
case 3: //敌人
this.shoot_enemy(skill)
break;
case 4: //敌人和自己
this.to_add_buff(this.ent,skill)
this.to_add_buff(this.node.getComponent(HeroViewComp),skill)
this.shoot_enemy(skill)
break;
}

View File

@@ -10,6 +10,8 @@ import { RewardSet } from "../common/config/RewardSet";
import { GameSet } from "../common/config/BoxSet";
import { GameMap } from "./GameMap";
import { MapModelComp } from "./model/MapModelComp";
import { Talent } from "../Role/Talent";
import { Talents } from "../common/config/TalentSet";
const { ccclass, property } = _decorator;
/** 视图层对象 */
@@ -42,7 +44,9 @@ export class CardControllerComp extends CCComp {
oops.message.on("minssion_defeat", this.do_minssion_defeat, this)
}
start() {
}
show_info(uuid:number,type:number){
// console.log("show_info",uuid)
let node =this.node.getChildByName("item_box")
@@ -188,7 +192,7 @@ export class CardControllerComp extends CCComp {
coin_add(dt: number) {
smc.vm_data.gold.time += dt;
if (smc.vm_data.gold.time >= smc.vm_data.gold.cd) {
let coin =(GameSet.COIN_ADD*smc.vm_data.mission.coin_reward_add*(1+smc.vm_data.talent[6].bonus*smc.vm_data.talent[6].lv)).toFixed(0)
let coin =(GameSet.COIN_ADD*smc.vm_data.mission.coin_reward_add*(1+Talents[1006].bonus*smc.vm_data.talent[1006].lv)).toFixed(0)
smc.vm_data.mission.coin += parseFloat(coin)
smc.vm_data.gold.time = 0;
}
@@ -204,6 +208,13 @@ export class CardControllerComp extends CCComp {
this.node.getChildByName("bar").getChildByName("hero_btn").setScale(1,1)
this.node.getChildByName("bar").getChildByName("home_btn").setScale(1,1)
}
mission_start(){
this.node.getChildByName("bar").active=false;
this.node.getChildByName("mission_home").active=false
this.node.getChildByName("mission").active=true
smc.vm_data.mission.play = true;
oops.message.dispatchEvent("mission_start")
}
to_home(){
this.node.getChildByName("mission_home").active=false
this.node.getChildByName("hero_home").active=false

View File

@@ -10,6 +10,8 @@ import { RewardSet } from "../common/config/RewardSet";
import { GameSet } from "../common/config/BoxSet";
import { GameMap } from "./GameMap";
import { MapModelComp } from "./model/MapModelComp";
import { Talent } from "../Role/Talent";
import { Talents } from "../common/config/TalentSet";
const { ccclass, property } = _decorator;
/** 视图层对象 */
@@ -21,12 +23,34 @@ export class HeroHomeComp extends CCComp {
}
start() {
let hero_talent_content=this.node.getChildByName("hero_talent").getChildByName("view").getChildByName("content").getComponent(UITransform)
hero_talent_content.height=2000
this.load_talents()
console.log("hero_home start")
}
load_talents(){
let y=-70
let pos = v3(0,y)
let talents:any= Talents
let parent= this.node.getChildByName("talents").getChildByName("view").getChildByName("content")
console.log("talents:",talents,)
const keys = Object.keys(talents);
if (keys.length === 0) {
console.log("No talents to process.");
} else {
for (const key of keys) {
const talentData = talents[key];
let talent = ecs.getEntity<Talent>(Talent);
console.log("talent:", talentData);
let uuid = talentData.uuid;
talent.load(pos, uuid, parent);
pos.y -= 140; // 更新位置
}
}
let hero_talent_content=parent.getComponent(UITransform)
hero_talent_content.height=2000
console.log("hero_talent_content:",parent)
}
/** 视图对象通过 ecs.Entity.remove(ControllerComp) 删除组件是触发组件处理自定义释放逻辑 */
reset() {
this.node.destroy();

View File

@@ -53,7 +53,8 @@ export class MapMonsterComp extends CCComp {
onLoad(){
// 监听全局事件
oops.message.on("other_add_monster", this.on_other_add_monster, this);
oops.message.on("do_add_hero", this.on_do_add_hero, this);
oops.message.on("do_add_hero", this.on_do_add_hero, this);
oops.message.on("mission_start", this.mission_start, this);
oops.message.on("normal_call", this.on_normal_call, this);
oops.message.on("better_call", this.on_better_call, this);
@@ -72,14 +73,10 @@ export class MapMonsterComp extends CCComp {
// console.log("当前关卡方案",this.cur_mission,this.mission_list)
this.refresh_timer= new Timer(smc.vm_data.shuaxin.max);
smc.vm_data.mission.m_less=smc.vm_data.mission.m_alive=JSON.parse(JSON.stringify(this.total));
this.monster_refresh()
this.load_role()
this.load_boss()
}
protected update(dt: number): void {
if(smc.vm_data.game_over||smc.vm_data.game_pause){
if(!smc.vm_data.mission.play||smc.vm_data.pause){
return
}
if(this.setp_timer.update(dt)){
@@ -102,6 +99,10 @@ export class MapMonsterComp extends CCComp {
// }
// this.shuaxin(dt)
}
mission_start(){
this.load_role()
this.load_boss()
}
on_normal_call(){
let hero:any =RandomManager.instance.getRandomByObjectList(smc.cards, 1);
this.addHero(hero[0].uuid)
@@ -150,7 +151,7 @@ export class MapMonsterComp extends CCComp {
this.addMonster(args.uuid,monster_layer,pos)
}
set_start_point(){
this.start_p.setPosition(-240,BoxSet.GAME_LINE+this.start_ys[this.hero_index]+30,0)
// this.start_p.setPosition(-240,BoxSet.GAME_LINE+this.start_ys[this.hero_index]+30,0)
}
check_mon_count(){
let count = 0;

View File

@@ -21,6 +21,7 @@ import { SkillSet } from "../common/config/SkillSet";
import { Tooltip } from "../skills/Tooltip";
import { MoveToComp } from "../common/ecs/position/MoveTo";
import { BoxRangComp } from "./BoxRangComp";
import { Talents } from "../common/config/TalentSet";
const { ccclass, property } = _decorator;
/** 角色显示组件 */
@@ -429,7 +430,7 @@ export class MonViewComp extends CCComp {
}
dead(){
let coin =(GameSet.MON_COIN_ADD*smc.vm_data.mission.coin_reward_add*(1+smc.vm_data.talent[6].bonus*smc.vm_data.talent[6].lv)).toFixed(0)
let coin =(GameSet.MON_COIN_ADD*smc.vm_data.mission.coin_reward_add*(1+Talents[1006].bonus*smc.vm_data.talent[1006].lv)).toFixed(0)
smc.vm_data.mission.coin += parseFloat(coin)
smc.vm_data.mission.reward_num += 1;
smc.vm_data.mission.m_alive -= 1;