123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- import { gameMethod } from "../../common/gameMethod";
- import UEBase from "../../frameWork/compment/UEBase";
- import { eg } from "../../frameWork/eg";
- import GameMath from "../../utils/GameMath";
- const { ccclass, property } = cc._decorator;
- @ccclass
- export default class UESubHp extends UEBase {
- @property(cc.Node) buffTxt: cc.Node = null
- @property(cc.Node) txtHP: cc.Node = null
- @property(cc.Font) baojiFont: cc.Font = null
- @property(cc.Font) lianjiFont: cc.Font = null;
- @property(cc.Font) pugongFont: cc.Font = null;
- @property(cc.Font) huifuFont: cc.Font = null;
- @property(cc.Font) fanjiFont: cc.Font = null;
- @property(cc.Font) jiansheFnt: cc.Font = null;
- @property(cc.Font) gedangFnt: cc.Font = null;
- @property(cc.Font) jinengFnt: cc.Font = null;
- @property(cc.Font) cxshFnt: cc.Font = null;
- @property(cc.SpriteAtlas) buffTxtAtlas: cc.SpriteAtlas = null;
- static readonly BundleKey: string = "battle";
- static readonly PrefabUrl: string = "UESubHp";
- static readonly CLS: string = "UESubHp";
- show(data: [string, number], hpType?: string) {
- let type = data[0];
- if (hpType) {
- if (hpType == 'skill') {
- type = 'jineng';
- } else if (hpType == 'cxsh') {
- type = 'cxsh';
- }
- }
- let effectData = this.getEffect(type, data[1]);
- if (effectData) {
- this.ShowHP(data[0], data[1], effectData.effectDesc);
- } else {
- console.log(`${type} is not exist`);
- this.unuse();
- }
- }
- PauseAction() {
- this.txtHP.pauseAllActions();
- }
- ResumAction() {
- this.txtHP.resumeAllActions();
- }
- ShowBuffTxt(buffType: string) {
- cc.Tween.stopAllByTarget(this.buffTxt)
- this.buffTxt.active = true;
- this.txtHP.active = false;
- this.buffTxt.scale = 1.4;
- this.node.zIndex = 1500;
- this.buffTxt.setPosition(0, 50)
- this.buffTxt.opacity = 255;
- this.buffTxt.getComponent(cc.Sprite).spriteFrame = this.buffTxtAtlas.getSpriteFrame(buffType);
- cc.tween(this.buffTxt)
- .by(0.8, { position: cc.v3(0, 40, 0) })
- .by(0.1, { scale: -1.2, opacity: -255, position: cc.v3(0, -10, 0) })
- .call(() => {
- this.unuse();
- })
- .start();
- }
- ShowHP(type: string, val: number, effectDesc: string) {
- this.buffTxt.active = false;
- this.txtHP.active = true;
- if (gameMethod.isEmpty(this.txtHP)) {
- this.txtHP = this.node.getChildByName("txtHP")
- }
- cc.Tween.stopAllByTarget(this.txtHP)
- this.txtHP.getComponent(cc.Label).string = effectDesc;
- this.txtHP.scale = 1;
- let upTime = 0.35;
- let upLen = 0;
- // if (type == 'baoji') {
- // this.txtHP.setPosition(0, 25);
- // upTime = 0.55;
- // upLen = 80;
- // } else {
- // this.txtHP.setPosition(0, 30);
- // upTime = 0.45;
- // upLen = 60;
- // }
- if (type == 'baoji' || type == 'lianji'
- || type == 'jianshe' || type == 'fanji' || type == 'canbeatback' || type == 'cxsh'
- || type == 'block') {
- if (type == 'baoji') {
- this.txtHP.getComponent(cc.Label).fontSize = 40;
- } else {
- this.txtHP.getComponent(cc.Label).fontSize = 36;
- }
- if (type == 'cxsh') {
- this.txtHP.setPosition(0, 30);
- upTime = 0.45;
- upLen = 60;
- } else {
- this.txtHP.setPosition(0, 25);
- upTime = 0.55;
- upLen = 80;
- }
- this.node.zIndex = 1000;
- } else {
- // if (val > 0) {
- // //回血
- // } else {
- // }
- this.txtHP.getComponent(cc.Label).fontSize = 32;
- this.node.zIndex = 500;
- this.txtHP.setPosition(0, 30);
- upTime = 0.45;
- upLen = 60;
- }
- this.txtHP.opacity = 255;
- cc.tween(this.txtHP)
- .by(upTime, { position: cc.v3(0, upLen, 0) })
- .by(0.1, { opacity: -255, position: cc.v3(0, 0, 0) })
- .call(() => {
- this.unuse();
- })
- .start();
- }
- // put() 收回对象池时会调用
- unuse() {
- cc.Tween.stopAllByTarget(this.txtHP);
- cc.Tween.stopAllByTarget(this.buffTxt);
- this.txtHP.getComponent(cc.Label).string = "";
- this.txtHP.y = 0;
- this.txtHP.x = 0;
- this.txtHP.scale = 1;
- this.txtHP.opacity = 255;
- eg.poolManager.GetPool("subHPPool").put(this.node);
- }
- // 飘字效果描述
- getEffect(type: string, val: number) {
- let effectDesc: string;
- this.txtHP.getComponent(cc.Label).fontSize = 26;
- let divide = "";
- if (val < 0) {
- divide = "-";
- }
- let value = val || '';
-
- switch (type) {
- case "hp":
- //普通扣血
- effectDesc = divide ? `${this.GetVal(Number(value))}` : `h+${this.GetVal(Number(value))}`;
- this.txtHP.getComponent(cc.Label).font = divide ? this.pugongFont : this.huifuFont;
- break;
- case "xixue":
- case "huifu":
- //吸血
- effectDesc = `h+${this.GetVal(Number(value))}`;
- this.txtHP.getComponent(cc.Label).font = this.huifuFont;
- break;
- case "cxsh":
- //持续伤害
- effectDesc = divide ? `c${this.GetVal(Number(value))}` : `h+${this.GetVal(Number(value))}`;
- this.txtHP.getComponent(cc.Label).font = divide ? this.cxshFnt : this.huifuFont;
- break;
- case "jineng":
- //普通扣血
- effectDesc = divide ? `${this.GetVal(Number(value))}` : `+${this.GetVal(Number(value))}`;
- this.txtHP.getComponent(cc.Label).font = divide ? this.jinengFnt : this.huifuFont;
- break;
- case "block":
- //格挡
- effectDesc = `g${this.GetVal(Number(value))}`;
- this.txtHP.getComponent(cc.Label).font = this.gedangFnt;
- break;
- case "baoji":
- //暴扣扣血
- effectDesc = `b${this.GetVal(Number(value))}`
- this.txtHP.getComponent(cc.Label).font = this.baojiFont;
- break;
- case "fanji"://反击
- case "canbeatback": // 技能反击
- // if (gameMethod.isEmpty(value)) {
- // effectDesc = `f`
- // } else {
- // effectDesc = `${this.GetVal(Number(value))}`
- // }
- effectDesc = `f${this.GetVal(Number(value))}`
- this.txtHP.getComponent(cc.Label).font = this.fanjiFont;
- break;
- case "lianji":
- //连击
- effectDesc = `l${this.GetVal(Number(value))}`
- this.txtHP.getComponent(cc.Label).font = this.lianjiFont;
- break;
- case "jianshe":
- //溅射
- effectDesc = `j${this.GetVal(Number(value))}`
- this.txtHP.getComponent(cc.Label).font = this.jiansheFnt;
- break;
- case "shanbi":
- //闪避
- effectDesc = "闪避"
- this.txtHP.getComponent(cc.Label).font = null;
- break;
- default:
- break;
- }
- if (effectDesc) {
- return { effectDesc: effectDesc }
- } else {
- return null;
- }
- }
- GetVal(value) {
- let divide = "";
- if (value < 0) {
- divide = "-";
- }
- return divide + GameMath.showNum(Math.abs(value));
- }
- }
|