feat(wireframe): 3D 透视里给人机坦克标「人机」文字

- hornet_3d_wireframe:坦克绘制后在其上方投影并写「人机」(先描黑边再填黄字,任何背景下可读)

- 复用 lib.ScanBots / IsBot,节流约每 0.3 秒扫描一次;雷达的方块标记保留
This commit is contained in:
TermiNexus committed 2026-10-15 15:47:52 +08:00
1 parent 2b64211173
commit 529868b194
3 files changed
+84 -3

No files matched your search

@@ -1624,6 +1624,9 @@
return lib.GetCameraInfo(gm);
}
var Project3D = lib.Project3D;
// 人机标记:同队内装备分数相同且 < 8000(lib.ScanBots 定期扫描 → IsBot 查询)
var ScanBots = lib.ScanBots, IsBot = lib.IsBot;
var LastBotScanAt = 0; // 人机扫描节流(约每 0.3 秒一次)
// ===== 热点优化:相机基每帧只算一次(避免逐顶点重复三角函数 + 对象分配)=====
var Cam = {
@@ -2418,7 +2421,13 @@
var tankList = gm.q100_1.r11l();
var count = tankList.e1();
var drawnCount = 0;
var drawnCount = 0, botDrawn = 0;
// 人机扫描(装备分数不会每帧变,节流到约每 0.3 秒一次)
if (ScanBots && (Date.now() - LastBotScanAt > 300)) {
LastBotScanAt = Date.now();
ScanBots();
}
for (var i = 0; i < count; i++) {
var tank = tankList.g1(i);
@@ -2517,6 +2526,24 @@
DrawTankMarker(ctx, pos, camInfo, screenW, screenH, color);
}
// 人机标记:坦克上方写「人机」(同队装备分数相同且 < 8000)
if (typeof IsBot === 'function' && IsBot(tank)) {
var botPt = Project3D({ x: pos.x, y: pos.y, z: pos.z + 1300 },
camInfo.pos, camInfo.yaw, camInfo.pitch, camInfo.fov, screenW, screenH);
if (botPt) {
ctx.save();
ctx.font = 'bold 13px Consolas,monospace';
ctx.textAlign = 'center';
ctx.lineWidth = 3;
ctx.strokeStyle = 'rgba(0,0,0,0.85)';
ctx.strokeText('人机', botPt.x, botPt.y); // 先描黑边,保证任何背景下都看得清
ctx.fillStyle = '#ffd24a';
ctx.fillText('人机', botPt.x, botPt.y);
ctx.restore();
botDrawn++;
}
}
drawnCount++;
}
+28 -1
View File
@@ -1624,6 +1624,9 @@
return lib.GetCameraInfo(gm);
}
var Project3D = lib.Project3D;
// 人机标记:同队内装备分数相同且 < 8000(lib.ScanBots 定期扫描 → IsBot 查询)
var ScanBots = lib.ScanBots, IsBot = lib.IsBot;
var LastBotScanAt = 0; // 人机扫描节流(约每 0.3 秒一次)
// ===== 热点优化:相机基每帧只算一次(避免逐顶点重复三角函数 + 对象分配)=====
var Cam = {
@@ -2418,7 +2421,13 @@
var tankList = gm.q100_1.r11l();
var count = tankList.e1();
var drawnCount = 0;
var drawnCount = 0, botDrawn = 0;
// 人机扫描(装备分数不会每帧变,节流到约每 0.3 秒一次)
if (ScanBots && (Date.now() - LastBotScanAt > 300)) {
LastBotScanAt = Date.now();
ScanBots();
}
for (var i = 0; i < count; i++) {
var tank = tankList.g1(i);
@@ -2517,6 +2526,24 @@
DrawTankMarker(ctx, pos, camInfo, screenW, screenH, color);
}
// 人机标记:坦克上方写「人机」(同队装备分数相同且 < 8000)
if (typeof IsBot === 'function' && IsBot(tank)) {
var botPt = Project3D({ x: pos.x, y: pos.y, z: pos.z + 1300 },
camInfo.pos, camInfo.yaw, camInfo.pitch, camInfo.fov, screenW, screenH);
if (botPt) {
ctx.save();
ctx.font = 'bold 13px Consolas,monospace';
ctx.textAlign = 'center';
ctx.lineWidth = 3;
ctx.strokeStyle = 'rgba(0,0,0,0.85)';
ctx.strokeText('人机', botPt.x, botPt.y); // 先描黑边,保证任何背景下都看得清
ctx.fillStyle = '#ffd24a';
ctx.fillText('人机', botPt.x, botPt.y);
ctx.restore();
botDrawn++;
}
}
drawnCount++;
}
+28 -1
View File
@@ -107,6 +107,9 @@
return lib.GetCameraInfo(gm);
}
var Project3D = lib.Project3D;
// 人机标记:同队内装备分数相同且 < 8000(lib.ScanBots 定期扫描 → IsBot 查询)
var ScanBots = lib.ScanBots, IsBot = lib.IsBot;
var LastBotScanAt = 0; // 人机扫描节流(约每 0.3 秒一次)
// ===== 热点优化:相机基每帧只算一次(避免逐顶点重复三角函数 + 对象分配)=====
var Cam = {
@@ -901,7 +904,13 @@
var tankList = gm.q100_1.r11l();
var count = tankList.e1();
var drawnCount = 0;
var drawnCount = 0, botDrawn = 0;
// 人机扫描(装备分数不会每帧变,节流到约每 0.3 秒一次)
if (ScanBots && (Date.now() - LastBotScanAt > 300)) {
LastBotScanAt = Date.now();
ScanBots();
}
for (var i = 0; i < count; i++) {
var tank = tankList.g1(i);
@@ -1000,6 +1009,24 @@
DrawTankMarker(ctx, pos, camInfo, screenW, screenH, color);
}
// 人机标记:坦克上方写「人机」(同队装备分数相同且 < 8000)
if (typeof IsBot === 'function' && IsBot(tank)) {
var botPt = Project3D({ x: pos.x, y: pos.y, z: pos.z + 1300 },
camInfo.pos, camInfo.yaw, camInfo.pitch, camInfo.fov, screenW, screenH);
if (botPt) {
ctx.save();
ctx.font = 'bold 13px Consolas,monospace';
ctx.textAlign = 'center';
ctx.lineWidth = 3;
ctx.strokeStyle = 'rgba(0,0,0,0.85)';
ctx.strokeText('人机', botPt.x, botPt.y); // 先描黑边,保证任何背景下都看得清
ctx.fillStyle = '#ffd24a';
ctx.fillText('人机', botPt.x, botPt.y);
ctx.restore();
botDrawn++;
}
}
drawnCount++;
}