# Cơ chế Di chuyển WASD & Khung Bất tử Lướt né (WASD & Dodge Roll Iframe)

> **Path of Exile 2 (v0.5.5) Wiki**  
> **Chuyên đề**: Hệ thống Di chuyển 8 Hướng, Tách rời Hướng Nhắm Chuột & Khung Bất tử 300ms

---

## 1. Cơ chế Di chuyển WASD Đột phá trong POE2

Trong khi POE1 buộc người chơi phải dùng chuột cho cả 2 mục đích (vừa chỉ hướng đi vừa nhắm mục tiêu tấn công), POE2 cho phép **tách rời hoàn toàn hướng di chuyển và hướng ngắm bắn**:

```mermaid
graph LR
    subgraph POE1_Old ["Hệ thống Cũ (POE1)"]
        Mouse1["Con trỏ Chuột"] --> Move1["Chỉ hướng Di chuyển"]
        Mouse1 --> Attack1["Chỉ hướng Ra chiêu"]
        Conflict["Xung đột: Không thể vừa lùi vừa bắn!"]
    end

    subgraph POE2_New ["Hệ thống Mới (POE2)"]
        WASD["Bàn phím: Phím W-A-S-D"] --> Move2["Di chuyển tự do 8 hướng"]
        Mouse2["Con trỏ Chuột"] --> Aim2["Nhắm mục tiêu độc lập 360 độ"]
        Strafe["Thả diều Cơ động: Vừa lùi/né vòng tròn vừa xả chiêu!"]
    end
```

### Ưu điểm Chiến thuật:
- **Kiting hoàn hảo**: Nhân vật có thể lùi về phía sau (nhấn phím `S`) trong khi mắt và cung tên vẫn hướng về phía trước bắn gục bầy quái đang truy đuổi.
- **Di chuyển vòng tròn (Circle Strafing)**: Giữ phím `A` hoặc `D` kết hợp chuột khóa vào Boss để liên tục xoay quanh né các đòn tấn công tầm xa thẳng hàng.

---

## 2. Hệ thống Lướt né (Dodge Roll) & Khung Bất tử (Iframe)

Phím **Spacebar** kích hoạt động tác lăn né trên mặt đất:

```mermaid
timeline
    title Chu kỳ Thời gian của một Cú Lăn né (Dodge Roll) trong POE2
    0ms - 50ms : Bắt đầu Động tác & Hủy hoạt ảnh tấn công cũ (Animation Cancel)
    50ms - 350ms : Khung Bất tử Tuyệt đối (Invulnerability Window - 300ms Iframe)
    350ms - 500ms : Giai đoạn Phục hồi Đứng dậy (Recovery Frames - Có thể nhận sát thương)
    500ms+ : Hoàn tất chu kỳ & Cho phép thực hiện cú lăn né tiếp theo
```

### Các Đặc tính Trọng yếu:
1. **Khung Bất tử 300 mili-giây (300ms Iframe)**:
   - Trong khoảng thời gian từ mili-giây thứ 50 đến 350, nhân vật hoàn toàn miễn nhiễm với mọi loại sát thương (sát thương vật lý, nguyên tố, đòn đập slam của boss, và cả sát thương diện rộng dưới sàn đấu).
2. **Xuyên qua Va chạm Thực thể (Collision Bypass)**:
   - Động tác lăn né cho phép người chơi lăn xuyên qua quái vật, giải thoát hoàn toàn khỏi tình trạng bị bao vây hoặc kẹt vào góc tường (Body-blocking).
3. **Hủy Hoạt ảnh Tấn công Chậm (Animation Canceling)**:
   - Nếu nhân vật đang vung một chiếc búa khổng lồ 2 tay (động tác kéo dài 1 giây) mà đột ngột thấy Boss giáng đòn chí mạng xuống đầu, bấm `Spacebar` sẽ lập tức hủy đòn đánh cũ và đưa nhân vật vào trạng thái lướt né ngay tức khắc.
4. **Hướng Lăn né**:
   - Nếu đang bấm các phím WASD, nhân vật sẽ lăn theo vector hướng của các phím đó.
   - Nếu không bấm phím WASD nào, nhân vật sẽ tự động lăn về phía con trỏ chuột.

---

## 3. Thuật toán Lướt né Phản xạ cho Hệ thống Tự động (Auto Dodge Algorithm)

Trong tiến trình C++ Core Engine (Tier 1), mô-đun né chiêu vận hành với logic sau:

```cpp
void ProcessAutoDodge(const PlayerState& player, const std::vector<EntityData>& bosses) {
    for (const auto& boss : bosses) {
        if (!boss.isBoss || boss.isDead) continue;
        
        // Kiểm tra xem Boss có đang ở trong hoạt ảnh Slam chí mạng không
        if (IsDangerousSlamAnimation(boss.currentAnimationId)) {
            float dist = CalculateDistance(player.posX, player.posY, boss.posX, boss.posY);
            
            // Nếu nhân vật đang đứng trong bán kính nổ nguy hiểm của Boss
            if (dist < DANGER_SLAM_RADIUS) {
                // Tính vector né ngược hướng tâm chấn
                Vector2 dodgeDir = Normalize(Vector2(player.posX - boss.posX, player.posY - boss.posY));
                
                // Gửi tổ hợp phím WASD tương ứng kèm nháy Spacebar qua KMBox
                SendHardwareDodgeCommand(dodgeDir);
                break;
            }
        }
    }
}
```
