Compare commits
3 Commits
oh/1017
...
4706a128f3
| Author | SHA1 | Date | |
|---|---|---|---|
| 4706a128f3 | |||
| 13874f3618 | |||
| d9282b7469 |
@@ -146,8 +146,9 @@ export enum Attrs {
|
||||
SPEED = 27, //移动速度加成,默认都是百分比
|
||||
}
|
||||
|
||||
|
||||
export const getAttrs=()=>{
|
||||
// 遍历枚举的数字值(枚举会生成双向映射)
|
||||
// 遍历枚举的数字值(枚举会生成双向映射)
|
||||
let reAttrs = {};
|
||||
Object.keys(Attrs).forEach(key => {
|
||||
if (!isNaN(Number(key))) {
|
||||
@@ -157,6 +158,74 @@ export const getAttrs=()=>{
|
||||
return reAttrs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Buff类型枚举
|
||||
* VALUE: 数值型 - 直接加减数值
|
||||
* RATIO: 百分比型 - 按百分比计算
|
||||
*/
|
||||
export enum BType {
|
||||
VALUE=0, //数值型
|
||||
RATIO=1 //百分比型
|
||||
}
|
||||
|
||||
/**
|
||||
* 属性类型配置表
|
||||
* 用于区分每个属性是数值型还是百分比型
|
||||
* - VALUE: 数值型属性(如生命值、攻击力等绝对数值)
|
||||
* - RATIO: 百分比型属性(如暴击率、闪避率等百分比数值)
|
||||
*/
|
||||
export const AttrsType: Record<Attrs, BType> = {
|
||||
// ========== 数值型属性 ==========
|
||||
[Attrs.HP_MAX]: BType.VALUE, // 最大生命值 - 数值型
|
||||
[Attrs.MP_MAX]: BType.VALUE, // 最大魔法值 - 数值型
|
||||
[Attrs.SHIELD_MAX]: BType.VALUE, // 最大护盾值 - 数值型
|
||||
[Attrs.AP]: BType.VALUE, // 攻击力 - 数值型
|
||||
[Attrs.MAP]: BType.VALUE, // 魔法攻击力 - 数值型
|
||||
[Attrs.DEF]: BType.VALUE, // 防御 - 数值型
|
||||
[Attrs.MDEF]: BType.VALUE, // 魔法防御 - 数值型
|
||||
[Attrs.DIS]: BType.VALUE, // 攻击距离 - 数值型
|
||||
|
||||
// ========== 百分比型属性 ==========
|
||||
[Attrs.CRITICAL]: BType.RATIO, // 暴击率 - 百分比型
|
||||
[Attrs.CRITICAL_DMG]: BType.RATIO, // 暴击伤害 - 百分比型
|
||||
[Attrs.DODGE]: BType.RATIO, // 闪避 - 百分比型
|
||||
[Attrs.HIT]: BType.RATIO, // 命中 - 百分比型
|
||||
[Attrs.WFUNY]: BType.RATIO, // 风怒 - 百分比型
|
||||
[Attrs.AS]: BType.RATIO, // 攻击速度 - 百分比型
|
||||
[Attrs.REFLICT]: BType.RATIO, // 反伤比率 - 百分比型
|
||||
[Attrs.LIFESTEAL]: BType.RATIO, // 吸血比率 - 百分比型
|
||||
[Attrs.KNOCKBACK]: BType.RATIO, // 击退概率 - 百分比型
|
||||
[Attrs.CON_RES]: BType.RATIO, // 控制抗性 - 百分比型
|
||||
[Attrs.ICE_RES]: BType.RATIO, // 冰冻抗性 - 百分比型
|
||||
[Attrs.FIRE_RES]: BType.RATIO, // 火抗性 - 百分比型
|
||||
[Attrs.WIND_RES]: BType.RATIO, // 风抗性 - 百分比型
|
||||
[Attrs.ICE_POWER]: BType.RATIO, // 冰冻伤害效果提升 - 百分比型
|
||||
[Attrs.FIRE_POWER]: BType.RATIO, // 火伤害效果提升 - 百分比型
|
||||
[Attrs.WIND_POWER]: BType.RATIO, // 风伤害效果提升 - 百分比型
|
||||
[Attrs.SHIELD_UP]: BType.RATIO, // 护盾效果提升 - 百分比型
|
||||
[Attrs.BUFF_UP]: BType.RATIO, // buff效果提升 - 百分比型
|
||||
[Attrs.DBUFF_UP]: BType.RATIO, // debuff效果提升 - 百分比型
|
||||
[Attrs.SPEED]: BType.RATIO, // 移动速度加成 - 百分比型
|
||||
};
|
||||
|
||||
/**
|
||||
* 判断属性是否为百分比型
|
||||
* @param attrType 属性类型
|
||||
* @returns true: 百分比型, false: 数值型
|
||||
*/
|
||||
export const isRatioAttr = (attrType: Attrs): boolean => {
|
||||
return AttrsType[attrType] === BType.RATIO;
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取属性的类型
|
||||
* @param attrType 属性类型
|
||||
* @returns BType.VALUE 或 BType.RATIO
|
||||
*/
|
||||
export const getAttrType = (attrType: Attrs): BType => {
|
||||
return AttrsType[attrType];
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取 debuff 对应的属性字段
|
||||
* @param debuffType DBuff 类型
|
||||
@@ -214,14 +283,6 @@ export const getAttrFieldFromDebuff = (debuffType: DBuff): number => {
|
||||
|
||||
return attrField;
|
||||
};
|
||||
|
||||
|
||||
export enum BType {
|
||||
VALUE=0, //数值型
|
||||
RATIO=1 //百分比型
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
=== 技能配置系统使用说明 ===
|
||||
|
||||
@@ -29,9 +29,7 @@ export class BattleMoveSystem extends ecs.ComblockSystem implements ecs.ISystemU
|
||||
|
||||
if (!shouldStop) { //在攻击范围内停止移动
|
||||
// if(view.fac==1){
|
||||
const hasStun = view.V_DBUFF.some(d => d.debuff === DBuff.STUN);
|
||||
const hasFrost = view.V_DBUFF.some(d => d.debuff === DBuff.FROST);
|
||||
if(view.is_stop||view.is_dead||hasStun||hasFrost) {
|
||||
if(view.is_stop||view.is_dead||view.isStun()||view.isFrost()) {
|
||||
view.status_change("idle");
|
||||
return; //停止移动或者死亡不移动
|
||||
}
|
||||
@@ -40,7 +38,6 @@ export class BattleMoveSystem extends ecs.ComblockSystem implements ecs.ISystemU
|
||||
view.status_change("idle");
|
||||
return;
|
||||
}
|
||||
|
||||
// 英雄阵营特殊逻辑:根据职业区分行为
|
||||
if (view.fac == FacSet.HERO) {
|
||||
const hasEnemies = this.checkEnemiesExist(e);
|
||||
@@ -65,7 +62,7 @@ export class BattleMoveSystem extends ecs.ComblockSystem implements ecs.ISystemU
|
||||
}
|
||||
|
||||
// 继续向敌人方向移动
|
||||
const delta = ((view.speed-view.DEBUFF_SLOW)/3) * this.dt * move.direction;
|
||||
const delta = (view.Attrs[Attrs.SPEED]/3) * this.dt * move.direction;
|
||||
const newX = view.node.position.x + delta;
|
||||
|
||||
// 对于战士,允许更自由的移动范围
|
||||
@@ -91,10 +88,8 @@ export class BattleMoveSystem extends ecs.ComblockSystem implements ecs.ISystemU
|
||||
// 如果不在目标位置,移动到目标位置
|
||||
if (Math.abs(currentX - finalTargetX) > 1) {
|
||||
// 确定移动方向
|
||||
let B_SPEED=view.R_BUFFS[Attrs.SPEED]?view.R_BUFFS[Attrs.SPEED]:0;
|
||||
let D_SPEED=view.R_DBUFFS[Attrs.SPEED]?view.R_DBUFFS[Attrs.SPEED]:0;
|
||||
const direction = currentX > finalTargetX ? -1 : 1;
|
||||
const delta = ((view.speed*(100+B_SPEED+D_SPEED))/3) * this.dt * direction;
|
||||
const delta = (view.Attrs[Attrs.SPEED]/3) * this.dt * direction;
|
||||
const newX = view.node.position.x + delta;
|
||||
|
||||
// 设置朝向
|
||||
@@ -126,7 +121,7 @@ export class BattleMoveSystem extends ecs.ComblockSystem implements ecs.ISystemU
|
||||
}
|
||||
|
||||
// 计算移动量
|
||||
const delta = ((view.speed-view.DEBUFF_SLOW)/3) * this.dt * move.direction;
|
||||
const delta =(view.Attrs[Attrs.SPEED]/3) * this.dt * move.direction;
|
||||
const newX = view.node.position.x + delta;
|
||||
|
||||
// 限制移动范围
|
||||
|
||||
@@ -18,10 +18,10 @@ const { ccclass, property } = _decorator;
|
||||
* ==================== BUFF 系统使用说明 ====================
|
||||
*
|
||||
* 1. 系统架构:
|
||||
* - V_BUFF/V_BUFFS: 数值型 buff(持久/临时)
|
||||
* - R_BUFF/R_BUFFS: 百分比型 buff(持久/临时)
|
||||
* - V_DBUFF/V_DBUFFS: 数值型 debuff(持久/临时)
|
||||
* - R_DBUFF/R_DBUFFS: 百分比型 debuff(持久/临时)
|
||||
* - BUFF_V/BUFFS_V: 数值型 buff(持久/临时)
|
||||
* - BUFF_R/BUFFS_R: 百分比型 buff(持久/临时)
|
||||
* - DBUFF_V/DBUFFS_V: 数值型 debuff(持久/临时)
|
||||
* - DBUFF_R/DBUFFS_R: 百分比型 debuff(持久/临时)
|
||||
*
|
||||
* 2. 初始化(在英雄加载时自动调用):
|
||||
* - initBuffsDebuffs(): 从 HeroInfo 读取初始配置
|
||||
@@ -95,7 +95,6 @@ export class HeroViewComp extends CCComp {
|
||||
is_friend:boolean =false;
|
||||
is_kalami:boolean =false;
|
||||
|
||||
speed: number = 100; /** 角色移动速度 */
|
||||
mp: number = 100;
|
||||
hp: number = 100; /** 血量 */
|
||||
shield:number=0; //当前护甲值
|
||||
@@ -105,19 +104,19 @@ export class HeroViewComp extends CCComp {
|
||||
base_def: number = 5;
|
||||
base_hp: number = 100;
|
||||
base_mp: number = 100;
|
||||
base_speed: number = 100; /** 角色移动速度 */
|
||||
|
||||
Attrs:any=[]
|
||||
//数值型debuff - 改为键值对形式,可通过 V_DBUFF[Attrs.HP_MAX] 直接访问
|
||||
V_DBUFF:Record<number, any> = {} //持久
|
||||
R_DBUFF:Record<number, any> = {} //持久
|
||||
V_BUFF:Record<number, any> = {} //持久
|
||||
R_BUFF:Record<number, any> = {} //持久
|
||||
//数值型debuff
|
||||
DBUFF_V:any[]=[] //持久
|
||||
DBUFF_R:any[]=[] //持久
|
||||
BUFF_V:any[]=[] //持久
|
||||
BUFF_R:any[]=[] //持久
|
||||
|
||||
|
||||
V_DBUFFS:Record<number, any> = {} //临时 带时间
|
||||
R_DBUFFS:Record<number, any> = {} //临时 带时间
|
||||
V_BUFFS:Record<number, any> = {} //临时 带时间
|
||||
R_BUFFS:Record<number, any> = {} //临时 带时间
|
||||
DBUFFS_V:any[]=[] //临时 带时间
|
||||
DBUFFS_R:any[]=[] //临时 带时间
|
||||
BUFFS_V:any[]=[] //临时 带时间
|
||||
BUFFS_R:any[]=[] //临时 带时间
|
||||
|
||||
atk_count: number = 0;
|
||||
atked_count: number = 0;
|
||||
@@ -172,14 +171,14 @@ export class HeroViewComp extends CCComp {
|
||||
if (!heroInfo) return;
|
||||
|
||||
// 清空现有 buff/debuff
|
||||
this.V_BUFF = {};
|
||||
this.V_BUFFS = {};
|
||||
this.R_BUFF = {};
|
||||
this.R_BUFFS = {};
|
||||
this.V_DBUFF = {};
|
||||
this.V_DBUFFS = {};
|
||||
this.R_DBUFF = {};
|
||||
this.R_DBUFFS = {};
|
||||
this.BUFF_V = [];
|
||||
this.BUFFS_V = [];
|
||||
this.BUFF_R = [];
|
||||
this.BUFFS_R = [];
|
||||
this.DBUFF_V = [];
|
||||
this.DBUFFS_V = [];
|
||||
this.DBUFF_R = [];
|
||||
this.DBUFFS_R = [];
|
||||
|
||||
// 加载初始 buff
|
||||
if (heroInfo.buff && heroInfo.buff.length > 0) {
|
||||
@@ -205,50 +204,30 @@ export class HeroViewComp extends CCComp {
|
||||
* @param buffConf buff 配置 (来自 SkillSet.BuffConf 或 heroSet.buff)
|
||||
*/
|
||||
addBuff(buffConf: BuffConf) {
|
||||
// 基于类型和持续时间分类存储,使用属性作为键
|
||||
const attrKey = buffConf.buff;
|
||||
|
||||
// 基于类型和持续时间分类存储
|
||||
if (buffConf.BType === BType.VALUE) {
|
||||
// 数值型 buff
|
||||
if (buffConf.buC === 0) {
|
||||
// 持久型 - 如果已存在,累加数值
|
||||
if (this.V_BUFF[attrKey]) {
|
||||
this.V_BUFF[attrKey].buV += buffConf.buV;
|
||||
} else {
|
||||
this.V_BUFF[attrKey] = {...buffConf};
|
||||
}
|
||||
// 持久型
|
||||
this.BUFF_V.push({...buffConf});
|
||||
} else {
|
||||
// 临时型 - 如果已存在,累加数值并重置时间
|
||||
if (this.V_BUFFS[attrKey]) {
|
||||
this.V_BUFFS[attrKey].buV += buffConf.buV;
|
||||
this.V_BUFFS[attrKey].remainTime = Math.max(this.V_BUFFS[attrKey].remainTime, buffConf.buC);
|
||||
} else {
|
||||
this.V_BUFFS[attrKey] = {
|
||||
...buffConf,
|
||||
remainTime: buffConf.buC
|
||||
};
|
||||
}
|
||||
// 临时型 - 添加剩余时间属性
|
||||
this.BUFFS_V.push({
|
||||
...buffConf,
|
||||
remainTime: buffConf.buC
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// 百分比型 buff
|
||||
if (buffConf.buC === 0) {
|
||||
// 持久型 - 如果已存在,累加百分比
|
||||
if (this.R_BUFF[attrKey]) {
|
||||
this.R_BUFF[attrKey].buV += buffConf.buV;
|
||||
} else {
|
||||
this.R_BUFF[attrKey] = {...buffConf};
|
||||
}
|
||||
// 持久型
|
||||
this.BUFF_R.push({...buffConf});
|
||||
} else {
|
||||
// 临时型 - 如果已存在,累加百分比并重置时间
|
||||
if (this.R_BUFFS[attrKey]) {
|
||||
this.R_BUFFS[attrKey].buV += buffConf.buV;
|
||||
this.R_BUFFS[attrKey].remainTime = Math.max(this.R_BUFFS[attrKey].remainTime, buffConf.buC);
|
||||
} else {
|
||||
this.R_BUFFS[attrKey] = {
|
||||
...buffConf,
|
||||
remainTime: buffConf.buC
|
||||
};
|
||||
}
|
||||
// 临时型 - 添加剩余时间属性
|
||||
this.BUFFS_R.push({
|
||||
...buffConf,
|
||||
remainTime: buffConf.buC
|
||||
});
|
||||
}
|
||||
}
|
||||
// 立即重新计算属性
|
||||
@@ -269,60 +248,39 @@ export class HeroViewComp extends CCComp {
|
||||
// attrField = -1 表示状态类 debuff(只缓存,不修改属性)
|
||||
// attrField >= 0 表示属性类 debuff(会修改属性)
|
||||
const attrField = getAttrFieldFromDebuff(dbuffConf.debuff);
|
||||
|
||||
// 使用 debuff 类型作为键(支持状态类 debuff,attrField = -1)
|
||||
const debuffKey = dbuffConf.debuff;
|
||||
|
||||
// 基于类型和持续时间分类存储
|
||||
if (dbuffConf.BType === BType.VALUE) {
|
||||
// 数值型 debuff
|
||||
if (dbuffConf.deC === 0) {
|
||||
// 持久型 - 如果已存在,累加数值
|
||||
if (this.V_DBUFF[debuffKey]) {
|
||||
this.V_DBUFF[debuffKey].deV += dbuffConf.deV;
|
||||
} else {
|
||||
this.V_DBUFF[debuffKey] = {
|
||||
...dbuffConf,
|
||||
attrField: attrField
|
||||
};
|
||||
}
|
||||
// 持久型
|
||||
this.DBUFF_V.push({
|
||||
...dbuffConf,
|
||||
attrField: attrField
|
||||
});
|
||||
} else {
|
||||
// 临时型 - 如果已存在,累加数值并重置时间
|
||||
if (this.V_DBUFFS[debuffKey]) {
|
||||
this.V_DBUFFS[debuffKey].deV += dbuffConf.deV;
|
||||
this.V_DBUFFS[debuffKey].remainTime = Math.max(this.V_DBUFFS[debuffKey].remainTime, dbuffConf.deC);
|
||||
} else {
|
||||
this.V_DBUFFS[debuffKey] = {
|
||||
...dbuffConf,
|
||||
attrField: attrField,
|
||||
remainTime: dbuffConf.deC
|
||||
};
|
||||
}
|
||||
// 临时型 - 添加剩余时间属性
|
||||
this.DBUFFS_V.push({
|
||||
...dbuffConf,
|
||||
attrField: attrField,
|
||||
remainTime: dbuffConf.deC
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// 百分比型 debuff
|
||||
if (dbuffConf.deC === 0) {
|
||||
// 持久型 - 如果已存在,累加百分比
|
||||
if (this.R_DBUFF[debuffKey]) {
|
||||
this.R_DBUFF[debuffKey].deV += dbuffConf.deV;
|
||||
} else {
|
||||
this.R_DBUFF[debuffKey] = {
|
||||
...dbuffConf,
|
||||
attrField: attrField
|
||||
};
|
||||
}
|
||||
// 持久型
|
||||
this.DBUFF_R.push({
|
||||
...dbuffConf,
|
||||
attrField: attrField
|
||||
});
|
||||
} else {
|
||||
// 临时型 - 如果已存在,累加百分比并重置时间
|
||||
if (this.R_DBUFFS[debuffKey]) {
|
||||
this.R_DBUFFS[debuffKey].deV += dbuffConf.deV;
|
||||
this.R_DBUFFS[debuffKey].remainTime = Math.max(this.R_DBUFFS[debuffKey].remainTime, dbuffConf.deC);
|
||||
} else {
|
||||
this.R_DBUFFS[debuffKey] = {
|
||||
...dbuffConf,
|
||||
attrField: attrField,
|
||||
remainTime: dbuffConf.deC
|
||||
};
|
||||
}
|
||||
// 临时型 - 添加剩余时间属性
|
||||
this.DBUFFS_R.push({
|
||||
...dbuffConf,
|
||||
attrField: attrField,
|
||||
remainTime: dbuffConf.deC
|
||||
});
|
||||
}
|
||||
}
|
||||
// 立即重新计算属性
|
||||
@@ -342,13 +300,15 @@ export class HeroViewComp extends CCComp {
|
||||
this.Attrs[Attrs.DEF] = this.base_def;
|
||||
this.Attrs[Attrs.AP] = this.base_ap;
|
||||
this.Attrs[Attrs.MAP] = this.base_map;
|
||||
this.Attrs[Attrs.SPEED] = this.base_speed;
|
||||
this.Attrs[Attrs.SHIELD_MAX] = 0; // 护盾默认为 0
|
||||
|
||||
// 2. 初始化其他属性(无初始值的)
|
||||
for (let i = 0; i <= 26; i++) {
|
||||
let length = Object.keys(this.Attrs).length;
|
||||
for (let i = 0; i < length; i++) {
|
||||
if (!(i in this.Attrs) ||
|
||||
(i !== Attrs.HP_MAX && i !== Attrs.MP_MAX && i !== Attrs.DEF &&
|
||||
i !== Attrs.AP && i !== Attrs.MAP && i !== Attrs.SHIELD_MAX)) {
|
||||
i !== Attrs.AP && i !== Attrs.MAP && i !== Attrs.SHIELD_MAX&&13 && i !== Attrs.SPEED)) {
|
||||
this.Attrs[i] = 0;
|
||||
}
|
||||
}
|
||||
@@ -374,16 +334,14 @@ export class HeroViewComp extends CCComp {
|
||||
*/
|
||||
private applyValueBuffs() {
|
||||
// 持久型 buff
|
||||
for (const attrKey in this.V_BUFF) {
|
||||
const buff = this.V_BUFF[attrKey];
|
||||
for (const buff of this.BUFF_V) {
|
||||
if (buff.buff !== undefined) {
|
||||
this.Attrs[buff.buff] += buff.buV;
|
||||
}
|
||||
}
|
||||
|
||||
// 临时型 buff
|
||||
for (const attrKey in this.V_BUFFS) {
|
||||
const buff = this.V_BUFFS[attrKey];
|
||||
for (const buff of this.BUFFS_V) {
|
||||
if (buff.buff !== undefined) {
|
||||
this.Attrs[buff.buff] += buff.buV;
|
||||
}
|
||||
@@ -402,10 +360,10 @@ export class HeroViewComp extends CCComp {
|
||||
baseValues[Attrs.DEF] = this.base_def;
|
||||
baseValues[Attrs.AP] = this.base_ap;
|
||||
baseValues[Attrs.MAP] = this.base_map;
|
||||
baseValues[Attrs.SPEED] = this.base_speed;
|
||||
|
||||
// 持久型 buff
|
||||
for (const attrKey in this.R_BUFF) {
|
||||
const buff = this.R_BUFF[attrKey];
|
||||
for (const buff of this.BUFF_R) {
|
||||
if (buff.buff !== undefined) {
|
||||
const baseVal = baseValues[buff.buff] || this.Attrs[buff.buff];
|
||||
this.Attrs[buff.buff] += Math.floor(baseVal * (buff.buV / 100));
|
||||
@@ -413,8 +371,7 @@ export class HeroViewComp extends CCComp {
|
||||
}
|
||||
|
||||
// 临时型 buff
|
||||
for (const attrKey in this.R_BUFFS) {
|
||||
const buff = this.R_BUFFS[attrKey];
|
||||
for (const buff of this.BUFFS_R) {
|
||||
if (buff.buff !== undefined) {
|
||||
const baseVal = baseValues[buff.buff] || this.Attrs[buff.buff];
|
||||
this.Attrs[buff.buff] += Math.floor(baseVal * (buff.buV / 100));
|
||||
@@ -427,8 +384,7 @@ export class HeroViewComp extends CCComp {
|
||||
*/
|
||||
private applyValueDebuffs() {
|
||||
// 持久型 debuff
|
||||
for (const debuffKey in this.V_DBUFF) {
|
||||
const debuff = this.V_DBUFF[debuffKey];
|
||||
for (const debuff of this.DBUFF_V) {
|
||||
// 跳过状态类 debuff(attrField === -1)
|
||||
if (debuff.attrField !== undefined && debuff.attrField >= 0) {
|
||||
this.Attrs[debuff.attrField] -= debuff.deV;
|
||||
@@ -436,8 +392,7 @@ export class HeroViewComp extends CCComp {
|
||||
}
|
||||
|
||||
// 临时型 debuff
|
||||
for (const debuffKey in this.V_DBUFFS) {
|
||||
const debuff = this.V_DBUFFS[debuffKey];
|
||||
for (const debuff of this.DBUFFS_V) {
|
||||
// 跳过状态类 debuff(attrField === -1)
|
||||
if (debuff.attrField !== undefined && debuff.attrField >= 0) {
|
||||
this.Attrs[debuff.attrField] -= debuff.deV;
|
||||
@@ -457,10 +412,10 @@ export class HeroViewComp extends CCComp {
|
||||
baseValues[Attrs.DEF] = this.base_def;
|
||||
baseValues[Attrs.AP] = this.base_ap;
|
||||
baseValues[Attrs.MAP] = this.base_map;
|
||||
this.Attrs[Attrs.SPEED] = this.base_speed;
|
||||
|
||||
// 持久型 debuff
|
||||
for (const debuffKey in this.R_DBUFF) {
|
||||
const debuff = this.R_DBUFF[debuffKey];
|
||||
for (const debuff of this.DBUFF_R) {
|
||||
// 跳过状态类 debuff(attrField === -1)
|
||||
if (debuff.attrField !== undefined && debuff.attrField >= 0) {
|
||||
const baseVal = baseValues[debuff.attrField] || this.Attrs[debuff.attrField];
|
||||
@@ -469,8 +424,7 @@ export class HeroViewComp extends CCComp {
|
||||
}
|
||||
|
||||
// 临时型 debuff
|
||||
for (const debuffKey in this.R_DBUFFS) {
|
||||
const debuff = this.R_DBUFFS[debuffKey];
|
||||
for (const debuff of this.DBUFFS_R) {
|
||||
// 跳过状态类 debuff(attrField === -1)
|
||||
if (debuff.attrField !== undefined && debuff.attrField >= 0) {
|
||||
const baseVal = baseValues[debuff.attrField] || this.Attrs[debuff.attrField];
|
||||
@@ -509,37 +463,37 @@ export class HeroViewComp extends CCComp {
|
||||
let needRecalculate = false;
|
||||
|
||||
// 更新临时型数值 buff
|
||||
for (const attrKey in this.V_BUFFS) {
|
||||
this.V_BUFFS[attrKey].remainTime -= dt;
|
||||
if (this.V_BUFFS[attrKey].remainTime <= 0) {
|
||||
delete this.V_BUFFS[attrKey];
|
||||
for (let i = this.BUFFS_V.length - 1; i >= 0; i--) {
|
||||
this.BUFFS_V[i].remainTime -= dt;
|
||||
if (this.BUFFS_V[i].remainTime <= 0) {
|
||||
this.BUFFS_V.splice(i, 1);
|
||||
needRecalculate = true;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新临时型百分比 buff
|
||||
for (const attrKey in this.R_BUFFS) {
|
||||
this.R_BUFFS[attrKey].remainTime -= dt;
|
||||
if (this.R_BUFFS[attrKey].remainTime <= 0) {
|
||||
delete this.R_BUFFS[attrKey];
|
||||
for (let i = this.BUFFS_R.length - 1; i >= 0; i--) {
|
||||
this.BUFFS_R[i].remainTime -= dt;
|
||||
if (this.BUFFS_R[i].remainTime <= 0) {
|
||||
this.BUFFS_R.splice(i, 1);
|
||||
needRecalculate = true;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新临时型数值 debuff
|
||||
for (const debuffKey in this.V_DBUFFS) {
|
||||
this.V_DBUFFS[debuffKey].remainTime -= dt;
|
||||
if (this.V_DBUFFS[debuffKey].remainTime <= 0) {
|
||||
delete this.V_DBUFFS[debuffKey];
|
||||
for (let i = this.DBUFFS_V.length - 1; i >= 0; i--) {
|
||||
this.DBUFFS_V[i].remainTime -= dt;
|
||||
if (this.DBUFFS_V[i].remainTime <= 0) {
|
||||
this.DBUFFS_V.splice(i, 1);
|
||||
needRecalculate = true;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新临时型百分比 debuff
|
||||
for (const debuffKey in this.R_DBUFFS) {
|
||||
this.R_DBUFFS[debuffKey].remainTime -= dt;
|
||||
if (this.R_DBUFFS[debuffKey].remainTime <= 0) {
|
||||
delete this.R_DBUFFS[debuffKey];
|
||||
for (let i = this.DBUFFS_R.length - 1; i >= 0; i--) {
|
||||
this.DBUFFS_R[i].remainTime -= dt;
|
||||
if (this.DBUFFS_R[i].remainTime <= 0) {
|
||||
this.DBUFFS_R.splice(i, 1);
|
||||
needRecalculate = true;
|
||||
}
|
||||
}
|
||||
@@ -550,6 +504,12 @@ export class HeroViewComp extends CCComp {
|
||||
}
|
||||
}
|
||||
|
||||
public isStun() {
|
||||
return this.DBUFF_V.some(d => d.debuff === DBuff.STUN)
|
||||
}
|
||||
public isFrost() {
|
||||
return this.DBUFF_V.some(d => d.debuff === DBuff.FROST)
|
||||
}
|
||||
|
||||
update(dt: number){
|
||||
if(!smc.mission.play||smc.mission.pause) return
|
||||
|
||||
@@ -3,7 +3,7 @@ import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ec
|
||||
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
|
||||
import { smc } from "../common/SingletonModuleComp";
|
||||
import { GameEvent } from "../common/config/GameEvent";
|
||||
import { AType, BuffAttr, DTType, EType, SkillSet, SType, TGroup } from "../common/config/SkillSet";
|
||||
import { AType, DTType, EType, SkillSet, SType, TGroup } from "../common/config/SkillSet";
|
||||
import { BoxSet, FacSet } from "../common/config/BoxSet";
|
||||
import { HeroViewComp } from "../hero/HeroViewComp";
|
||||
import { BezierMove } from "../BezierMove/BezierMove";
|
||||
|
||||
Reference in New Issue
Block a user