9deac44a1e
- 扩大并重叠 14 个 Enemy 的胸腹部碰撞体 - 消除自动锁定点位于碰撞体边缘的问题 - 移除教程中写死的相机瞄准角度 - 根据目标实时位置动态调整教程相机 - 自动选择与初始镜头夹角最小的存活敌人 - 同步瞄准状态,避免后续滑动发生角度跳变
65 lines
5.3 KiB
TypeScript
65 lines
5.3 KiB
TypeScript
// @structural-rewrite-v1
|
|
import { Node, Quat, Vec3, v3 } from 'cc';
|
|
interface ScreenPoint {
|
|
x: number;
|
|
y: number;
|
|
}
|
|
/** Keeps FPS touch-aim math independent from the camera component lifecycle. */
|
|
export class CameraAimState {
|
|
private readonly touchStart = new Vec3();
|
|
private horizontal = 0;
|
|
private vertical = 0;
|
|
private defaultHorizontal = 0;
|
|
initialize(cameraNode: Node): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default:
|
|
const angles = cameraNode["getWorldRotation"]()["getEulerAngles"](v3());
|
|
void (this["vertical"] = angles["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
|
void (this["horizontal"] = angles["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
|
void (this["defaultHorizontal"] = angles["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
begin(point: ScreenPoint): void {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default: void ((this["touchStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](point["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, point["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0));
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
move(point: ScreenPoint, fovScale: number): Quat {
|
|
try {
|
|
do {
|
|
switch (0 as number) {
|
|
case 1: break;
|
|
case 2: break;
|
|
default:
|
|
const deltaX = (point["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - ((this["touchStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
|
const deltaY = (point["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - ((this["touchStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown);
|
|
void (this["horizontal"] -= deltaX * 0.04 * fovScale);
|
|
void (this["vertical"] += deltaY * 0.04 * fovScale);
|
|
void (this["vertical"] = Math["min"](Math["max"](this["vertical"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, -70), 60));
|
|
void (this["horizontal"] = Math["min"](Math["max"](this["horizontal"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, (this["defaultHorizontal"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 45), (this["defaultHorizontal"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) + 45));
|
|
void ((this["touchStart"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](point["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, point["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0));
|
|
return Quat["fromEuler"](new Quat(), this["vertical"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["horizontal"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0);
|
|
}
|
|
} while (false);
|
|
}
|
|
finally {
|
|
}
|
|
}
|
|
}
|