refactor(game): 统一游戏地平线高度并优化技能目标选择

将GameSet中的GAME_LINE从0调整为120,并在英雄和怪物位置配置中使用该常量
简化SACastSystem中的目标选择逻辑,移除未使用的治疗和BUFF目标选择方法
使用BoxSet.GAME_LINE作为技能目标的默认Y坐标
This commit is contained in:
2025-11-19 14:59:50 +08:00
parent 78ac2e949f
commit 5935b20094
3 changed files with 30 additions and 97 deletions

View File

@@ -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;
}
/**
* 检查技能攻击范围内是否有敌人