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

@@ -14,19 +14,11 @@ export enum BoxSet {
DEFAULT = 1, DEFAULT = 1,
MONSTER = 2, MONSTER = 2,
HERO = 4, HERO = 4,
// MONSTER_SKILL = 8,
// HERO_SKILL = 16,
// PLAYER=32,
// BOSS=64,
// BOX_WIDTH = 64,
// BOX_HEIGHT = 64,
//地图边界 //地图边界
LETF_END = -420, LETF_END = -420,
RIGHT_END = 420, RIGHT_END = 420,
//游戏地平线 //游戏地平线
GAME_LINE = 0, GAME_LINE = 120,
//攻击距离 //攻击距离
} }

View File

@@ -1,5 +1,5 @@
import { v3 } from "cc" import { v3 } from "cc"
import { FacSet } from "./GameSet" import { BoxSet, FacSet } from "./GameSet"
import { smc } from "../SingletonModuleComp" import { smc } from "../SingletonModuleComp"
import { BuffConf } from "./SkillSet" import { BuffConf } from "./SkillSet"
@@ -46,23 +46,23 @@ export const getMonList = ()=>{
} }
export const HeroPos={ export const HeroPos={
0:{pos:v3(-240,120,0)}, 0:{pos:v3(-240,BoxSet.GAME_LINE,0)},
1:{pos:v3(0,120,0)}, 1:{pos:v3(0,BoxSet.GAME_LINE,0)},
2:{pos:v3(0,120,0)}, 2:{pos:v3(0,BoxSet.GAME_LINE,0)},
} }
export const MonSet = { export const MonSet = {
0:{pos:v3(240,130,0)}, 0:{pos:v3(240,BoxSet.GAME_LINE+10,0)},
1:{pos:v3(240,110,0)}, 1:{pos:v3(240,BoxSet.GAME_LINE-10,0)},
2:{pos:v3(300,130,0)}, 2:{pos:v3(300,BoxSet.GAME_LINE+10,0)},
3:{pos:v3(300,110,0)}, 3:{pos:v3(300,BoxSet.GAME_LINE-10,0)},
4:{pos:v3(320,130,0)}, 4:{pos:v3(320,BoxSet.GAME_LINE+10,0)},
5:{pos:v3(320,110,0)}, 5:{pos:v3(320,BoxSet.GAME_LINE-10,0)},
6:{pos:v3(360,130,0)}, 6:{pos:v3(360,BoxSet.GAME_LINE+10,0)},
7:{pos:v3(360,110,0)}, 7:{pos:v3(360,BoxSet.GAME_LINE-10,0)},
8:{pos:v3(400,130,0)}, 8:{pos:v3(400,BoxSet.GAME_LINE+10,0)},
9:{pos:v3(400,110,0)}, 9:{pos:v3(400,BoxSet.GAME_LINE-10,0)},
10:{pos:v3(440,130,0)}, 10:{pos:v3(440,BoxSet.GAME_LINE+10,0)},
11:{pos:v3(440,110,0)}, 11:{pos:v3(440,BoxSet.GAME_LINE-10,0)},
} }
export enum MonStart { export enum MonStart {

View File

@@ -8,6 +8,7 @@ import { Skill } from "../skill/Skill";
import { smc } from "../common/SingletonModuleComp"; import { smc } from "../common/SingletonModuleComp";
import { TalComp } from "./TalComp"; import { TalComp } from "./TalComp";
import { TalEffet, TriType } from "../common/config/TalSet"; 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) { if (!caster.node || !caster.node.isValid) {
console.warn("[SACastSystem] 施法者节点无效"); console.warn("[SACastSystem] 施法者节点无效");
@@ -226,17 +227,9 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
*/ */
private sTargets(caster: HeroViewComp): Vec3[] { private sTargets(caster: HeroViewComp): Vec3[] {
// 简化版:选择最前方的敌人 // 简化版:选择最前方的敌人
const targets: Vec3[] = []; let heroAttrs = caster.ent.get(HeroAttrsComp);
if (!heroAttrs) return [];
// 这里可以调用 SkillConComp 的目标选择逻辑 let targets=this.sDefaultTargets(caster,heroAttrs.fac)
// 暂时返回默认位置
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));
return targets; return targets;
} }
@@ -264,82 +257,30 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
return targets; 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 targets: Vec3[] = [];
const defaultX = faction === 0 ? 400 : -400; const defaultX = fac === 0 ? 400 : -400;
targets.push(v3(defaultX, 0, 0)); targets.push(v3(defaultX, BoxSet.GAME_LINE, 1));
return targets; return targets;
} }
/** /**
* 查找附近的敌人 * 查找附近的敌人
*/ */
private findNearbyEnemies(caster: HeroViewComp, faction: number, range: number): Vec3[] { private findNearbyEnemies(caster: HeroViewComp, fac: number, range: number): Vec3[] {
// 简化实现实际应该查询ECS中的敌方实体
const enemies: 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; return enemies;
} }
/**
* 查找血量低的友军
*/
private findLowHealthAllies(caster: HeroViewComp, faction: number, range: number): Vec3[] {
// 简化实现实际应该查询ECS中的友方实体并按血量排序
const allies: Vec3[] = [];
// 如果自己血量低,优先治疗自己
return allies;
}
/** /**
* 检查技能攻击范围内是否有敌人 * 检查技能攻击范围内是否有敌人