# Nhật ký cập nhật WebRadar

## 01/07/2026 — Follow zoom + thu nhỏ inferno

### Thêm tùy chỉnh zoom khi follow player
- **+** Thêm setting `followZoom` (mặc định 3.5) — cho phép tùy chỉnh độ phóng to khi đang follow player.
- **+** Slider "Follow Zoom" (1.5× → 8×) trong Settings → Map, hiện khi bật "Follow Yourself".
- **+** `usePovLock` nhận param `zoom` thay vì hardcode `POV_ZOOM = 3.5`.
- **−** Xoá hằng `POV_ZOOM` khỏi `usePovLock.js`.

### Thu nhỏ khung lửa (inferno) cho bằng smoke
- **−** `FireSpreadGrid` trong `grenade.jsx`: cell size từ `zoneSizePx × 1.8` → `× 1.3`, spacing từ `× 0.9` → `× 0.65`.
- **+** Grid tổng ~93px (bằng smoke ~92px ở 1024px), thay vì ~130px như trước.
- **−** Xoá biến `halfGrid` không dùng.

---

## 01/07/2026 — Sửa mũi tên + view cone (lần 2)

### Lỗi
- Lần sửa trước (`rotation + mapRotation`) làm mũi tên bị **ngược 180°** so với hướng xoay của bản đồ. Bản đồ xoay phải nhưng mũi tên chỉ sai — cần quay ngược lại mới đúng.

### Nguyên nhân
- Bản đồ và chấm người chơi nằm trong cùng một khung xoay (mapWrapper). Khi mapWrapper xoay, cả player dots cũng bị kéo theo.
- Công thức `rotation + mapRotation` cộng thêm góc xoay của map vào mũi tên, nhưng đáng ra phải **trừ đi** để bù lại cái xoay của mapWrapper.
- Kết quả: mũi tên quay sai 180°.

### Đã sửa
- **−** Bỏ công thức `rotation + mapRotation` → Sai.
- **+** Công thức `rotation - mapRotation` — đúng.
- **−** Sửa `cumulativeRotRef.current` ở **3 chỗ** trong `radar.jsx` và `PovPlayerList.jsx`: đang set = công thức cũ (`90 - m_eye_angle`) hoặc `rawTarget` → set về `0`.

### Nguyên nhân sâu hơn
- Khi bật "Xoay", `cumulativeRotRef` được gán = công thức cũ `90 - m_eye_angle` hoặc `rawTarget = m_eye_angle - 90`. Cả 2 đều tạo ra offset sai → map rotation tracking bị lệch → mũi tên và view cone chỉ sai hướng.
- Fix: set `cumulativeRotRef.current = 0`. Lúc đó `target = targetRot = m_eye_angle - 90` — chính xác.

### Giải thích đơn giản
- Khi **tắt xoay**: map không xoay → mũi tên chỉ hướng người chơi bình thường.
- Khi **bật xoay**: map xoay để hướng mặt người chơi luôn ở phía trên màn hình. Mũi tên lúc nào cũng chỉ LÊN TRÊN (vì người chơi luôn nhìn về phía trên).

---

## Đợt trước — Các thay đổi tổng thể

### Cài đặt + Menu
- **−** Xoá mấy nút cài đặt bị hỏng (Observe Follow, POV Lock, Rotate With Player).
- **+** Thay bằng nút **Theo dõi bản thân** (Follow Yourself) — bấm là radar tự động canh giữa người chơi của mình.
- **+** Thêm nút **Xoay theo** (Rotate) — bấm là bản đồ tự xoay theo hướng nhìn của người chơi.
- **+** Thiết kế lại menu "mắt" (POV) — bỏ bớt 200 dòng code dư thừa, gom vào một component gọn gàng.

### File chạy (.bat)
- **−** Sửa đường dẫn Visual Studio bị cứng nhà phát triển → dùng **vswhere** tự dò.
- **+** File `build_webradar.bat` giờ tự động build cả C++ lẫn web, rồi copy `dist/` vào thư mục `build/`.

### Mũi tên chỉ hướng
- **−** Xoá một mũi tên bị vẽ đúp (giấu sau vòng tròn, không cần).
- **−** Sửa công thức xoay bị sai (khi bản đồ xoay, mũi tên tự xoay thêm một lần nữa → sai hướng).
- **+** Thêm kiểm tra NaN — nếu game không gửi góc nhìn, mũi tên không bị vỡ.

### Camera (UsePovLock)
- **−** Sửa chiều xoay của camera map: trước đây xoay ngược (trái ↔ phải).
- **+** Công thức tính góc xoay camera đã đúng: `m_eye_angle - 90`.

### Frontend (giao diện web)
- **+** Build lại giao diện web (Vite), copy vào `build/`.

