refactor(game): 统一游戏地平线高度并优化技能目标选择
将GameSet中的GAME_LINE从0调整为120,并在英雄和怪物位置配置中使用该常量 简化SACastSystem中的目标选择逻辑,移除未使用的治疗和BUFF目标选择方法 使用BoxSet.GAME_LINE作为技能目标的默认Y坐标
This commit is contained in:
@@ -8,6 +8,7 @@ import { Skill } from "../skill/Skill";
|
||||
import { smc } from "../common/SingletonModuleComp";
|
||||
import { TalComp } from "./TalComp";
|
||||
import { TalEffet, TriType } from "../common/config/TalSet";
|
||||
import { BoxSet } from "../common/config/GameSet";
|
||||
|
||||
/**
|
||||
* ==================== 自动施法系统 ====================
|
||||
@@ -192,7 +193,7 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
||||
/**
|
||||
* 创建技能实体
|
||||
*/
|
||||
private createSkill(s_uuid: number, caster: HeroViewComp,targets,isWFuny:boolean) {
|
||||
private createSkill(s_uuid: number, caster: HeroViewComp,targets:Vec3[]=[],isWFuny:boolean) {
|
||||
// 检查节点有效性
|
||||
if (!caster.node || !caster.node.isValid) {
|
||||
console.warn("[SACastSystem] 施法者节点无效");
|
||||
@@ -226,17 +227,9 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
||||
*/
|
||||
private sTargets(caster: HeroViewComp): Vec3[] {
|
||||
// 简化版:选择最前方的敌人
|
||||
const targets: Vec3[] = [];
|
||||
|
||||
// 这里可以调用 SkillConComp 的目标选择逻辑
|
||||
// 暂时返回默认位置
|
||||
if (caster == null) return targets;
|
||||
if (caster.ent == null) return targets;
|
||||
const heroAttrs = caster.ent.get(HeroAttrsComp);
|
||||
const fac = heroAttrs?.fac ?? 0;
|
||||
const defaultX = fac === 0 ? 400 : -400;
|
||||
targets.push(v3(defaultX, 0, 0));
|
||||
|
||||
let heroAttrs = caster.ent.get(HeroAttrsComp);
|
||||
if (!heroAttrs) return [];
|
||||
let targets=this.sDefaultTargets(caster,heroAttrs.fac)
|
||||
return targets;
|
||||
}
|
||||
|
||||
@@ -264,82 +257,30 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
||||
return targets;
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择治疗技能目标
|
||||
*/
|
||||
private sHealTargets(caster: HeroViewComp, config: any, maxTargets: number): Vec3[] {
|
||||
const targets: Vec3[] = [];
|
||||
const heroAttrs = caster.ent.get(HeroAttrsComp);
|
||||
if (!heroAttrs) return targets;
|
||||
|
||||
// 寻找血量最低的友军
|
||||
const allyPositions = this.findLowHealthAllies(caster, heroAttrs.fac, config.range || 200);
|
||||
|
||||
for (let i = 0; i < Math.min(maxTargets, allyPositions.length); i++) {
|
||||
targets.push(allyPositions[i]);
|
||||
}
|
||||
|
||||
// 如果没有找到友军,治疗自己
|
||||
if (targets.length === 0 && caster.node) {
|
||||
targets.push(caster.node.position.clone());
|
||||
}
|
||||
|
||||
return targets;
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择BUFF技能目标
|
||||
*/
|
||||
private sBuffTargets(caster: HeroViewComp, config: any, maxTargets: number): Vec3[] {
|
||||
// BUFF技能通常施放在自己或友军身上
|
||||
return this.sHealTargets(caster, config, maxTargets);
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择DEBUFF技能目标
|
||||
*/
|
||||
private sDebuffTargets(caster: HeroViewComp, config: any, maxTargets: number): Vec3[] {
|
||||
// DEBUFF技能通常施放在敌人身上
|
||||
return this.sDamageTargets(caster, config, maxTargets);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 选择默认目标
|
||||
*/
|
||||
private sDefaultTargets(caster: HeroViewComp, faction: number): Vec3[] {
|
||||
private sDefaultTargets(caster: HeroViewComp, fac: number): Vec3[] {
|
||||
const targets: Vec3[] = [];
|
||||
const defaultX = faction === 0 ? 400 : -400;
|
||||
targets.push(v3(defaultX, 0, 0));
|
||||
const defaultX = fac === 0 ? 400 : -400;
|
||||
targets.push(v3(defaultX, BoxSet.GAME_LINE, 1));
|
||||
return targets;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查找附近的敌人
|
||||
*/
|
||||
private findNearbyEnemies(caster: HeroViewComp, faction: number, range: number): Vec3[] {
|
||||
// 简化实现,实际应该查询ECS中的敌方实体
|
||||
private findNearbyEnemies(caster: HeroViewComp, fac: number, range: number): Vec3[] {
|
||||
const enemies: Vec3[] = [];
|
||||
|
||||
// 模拟敌人位置
|
||||
const enemyX = faction === 0 ? 300 : -300;
|
||||
enemies.push(v3(enemyX, 0, 0));
|
||||
enemies.push(v3(enemyX + 50, 20, 0));
|
||||
|
||||
|
||||
return enemies;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查找血量低的友军
|
||||
*/
|
||||
private findLowHealthAllies(caster: HeroViewComp, faction: number, range: number): Vec3[] {
|
||||
// 简化实现,实际应该查询ECS中的友方实体并按血量排序
|
||||
const allies: Vec3[] = [];
|
||||
|
||||
// 如果自己血量低,优先治疗自己
|
||||
|
||||
|
||||
return allies;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检查技能攻击范围内是否有敌人
|
||||
|
||||
Reference in New Issue
Block a user