143 lines
4.5 KiB
TypeScript
143 lines
4.5 KiB
TypeScript
/*
|
|
* @Author: dgflash
|
|
* @Date: 2021-11-18 17:42:59
|
|
* @LastEditors: dgflash
|
|
* @LastEditTime: 2022-08-17 12:36:18
|
|
*/
|
|
|
|
import { _decorator,Sprite,Color} 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 { HeroSpine } from "./HeroSpine";
|
|
import { Hero } from "./Hero";
|
|
import { HeroModelComp } from "./HeroModelComp";
|
|
import { BoxSet } from "../common/config/BoxSet";
|
|
import { smc } from "../common/SingletonModuleComp";
|
|
import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
|
|
import { Skill } from "../skills/Skill";
|
|
import { Timer } from "../../../../extensions/oops-plugin-framework/assets/core/common/timer/Timer";
|
|
import { SkillCom } from "../skills/SkillCom";
|
|
import { BoxRangComp } from "./BoxRangComp";
|
|
import { Tooltip } from "../skills/Tooltip";
|
|
import { HeroViewComp } from "./HeroViewComp";
|
|
const { ccclass, property } = _decorator;
|
|
|
|
/** 角色显示组件 */
|
|
@ccclass('HeroBuffComp') // 定义为 Cocos Creator 组件
|
|
@ecs.register('HeroBuff', false) // 定义为 ECS 组件
|
|
export class HeroBuffComp extends CCComp {
|
|
/** 角色动画 */
|
|
as: HeroSpine = null!;
|
|
mv!: HeroViewComp;
|
|
|
|
timer:Timer = new Timer(0.1);
|
|
buffs:any=[];
|
|
group:number=BoxSet.HERO;
|
|
/**
|
|
skill_uuid:number=0;
|
|
atk:number=0;
|
|
hp:number=0;
|
|
shield:number=0;
|
|
time:number=0;
|
|
**/
|
|
|
|
|
|
onLoad() {
|
|
this.as = this.node.getComponent(HeroSpine);
|
|
this.mv= this.getComponent(HeroViewComp);
|
|
} /** 视图层逻辑代码分离演示 */
|
|
start () {
|
|
|
|
|
|
}
|
|
add_buff(uuid:number=0,args:any[]){
|
|
|
|
let new_buff={
|
|
skill_uuid:uuid,
|
|
skill_name:smc.skills[uuid].name,
|
|
atk:smc.skills[uuid].atk,
|
|
hp:smc.skills[uuid].hp,
|
|
shield:smc.skills[uuid].shield,
|
|
time:smc.skills[uuid].bsd,
|
|
bcd:smc.skills[uuid].bcd,
|
|
sk_uuid:smc.skills[uuid].uuid,
|
|
args:args
|
|
}
|
|
this.buff_add(new_buff);
|
|
}
|
|
|
|
|
|
update(dt: number){
|
|
if (this.timer.update(dt)) {
|
|
this.buff_update()
|
|
}
|
|
}
|
|
|
|
reset() {
|
|
|
|
this.node.destroy();
|
|
}
|
|
|
|
buff_add(buff:any){
|
|
if(!this.node.isValid){ return }
|
|
let i = 0
|
|
if(this.buffs.length >=0){
|
|
this.buffs.forEach((b:any,index:number)=>{
|
|
if(b.skill_uuid==buff.skill_uuid){
|
|
b.time=buff.time;
|
|
if(buff.atk>0){
|
|
this.mv.atk+=(buff.atk+buff.args.atk-b.atk);
|
|
}
|
|
if(buff.hp>0){
|
|
this.mv.hp+=(buff.hp+buff.args.hp);
|
|
this.mv.add_hp(buff.hp+buff.args.hp);
|
|
// this.mv.hp_max+=(buff.hp-b.hp);
|
|
}
|
|
if(buff.shield>0){
|
|
this.mv.shield=(buff.shield+buff.args.shield);
|
|
// this.mv.shield_max=(buff.shield+buff.args.shield);
|
|
}
|
|
|
|
i=index
|
|
}
|
|
})
|
|
}
|
|
if (i==0||this.buffs.length==0) {
|
|
this.buffs.push(buff);
|
|
if(buff.atk>0){
|
|
this.mv.atk+=(buff.atk+buff.args.atk);
|
|
}
|
|
if(buff.hp>0){
|
|
this.mv.hp+=(buff.hp+buff.args.hp);
|
|
this.mv.add_hp(buff.hp+buff.args.hp);
|
|
// this.mv.hp_max+=buff.hp;
|
|
}
|
|
if(buff.shield>0){
|
|
this.mv.shield=(buff.shield+buff.args.shield);
|
|
// this.mv.shield_max=(buff.shield+buff.args.shield);
|
|
}
|
|
|
|
}
|
|
}
|
|
buff_remove(index:number){
|
|
if(this.buffs[index].atk>0){
|
|
this.mv.atk-=(this.buffs[index].atk+this.buffs[index].args.atk);
|
|
}
|
|
if(this.buffs[index].shield>0){
|
|
this.mv.shield=0
|
|
// this.mv.shield_max-=(this.buffs[index].shield+this.buffs[index].args.shield);
|
|
}
|
|
// if(this.buffs[index].hp>0){
|
|
// this.mv.hp_max-=this.buffs[index].hp;
|
|
// }
|
|
}
|
|
buff_update(){
|
|
this.buffs.forEach((buff:any,index:number)=>{
|
|
buff.time -= 0.1;
|
|
if(buff.time <= 0){
|
|
this.buff_remove(index);
|
|
}
|
|
})
|
|
this.buffs = this.buffs.filter((buff:any) => buff.time > 0);
|
|
}
|
|
} |