update
This commit is contained in:
File diff suppressed because one or more lines are too long
21
.idea/.idea.BABA_YAGA/.idea/workspace.xml
generated
21
.idea/.idea.BABA_YAGA/.idea/workspace.xml
generated
@@ -5,13 +5,22 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="d308d1cb-09fc-4331-ba20-00f7b43d1576" name="Changes" comment="">
|
<list default="true" id="d308d1cb-09fc-4331-ba20-00f7b43d1576" name="Changes" comment="">
|
||||||
|
<change beforePath="$PROJECT_DIR$/.gemini-workspace-history/active-context.md" beforeDir="false" afterPath="$PROJECT_DIR$/.gemini-workspace-history/active-context.md" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/.idea.BABA_YAGA/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.BABA_YAGA/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/.idea.BABA_YAGA/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.BABA_YAGA/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/core/models.py" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/core/models.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/.gemini-workspace-history/active-context.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/.gemini-workspace-history/active-context.md" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/main.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/00_header.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/00_header.md" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/mappers/markdown_builder.py" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/mappers/markdown_builder.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/01_vision.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/01_vision.md" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/mappers/sheet_mapper.py" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/mappers/sheet_mapper.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/02_mechanics.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/02_mechanics.md" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/03_architecture.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/03_architecture.md" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/04_maze.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/04_maze.md" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/05_networking.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/05_networking.md" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/06_comeback.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/06_comeback.md" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/07_roadmap.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/07_roadmap.md" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/08_team_standards.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/08_team_standards.md" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/08_team_standards.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/08_team_standards.md" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/services/readme_editor.py" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/services/readme_editor.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/09_structure.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/09_structure.md" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/10_footer.md" beforeDir="false" afterPath="$PROJECT_DIR$/BABA_YAGA_Updater/sections/10_footer.md" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/ProjectSettings/Packages/com.unity.probuilder/Settings.json" beforeDir="false" afterPath="$PROJECT_DIR$/ProjectSettings/Packages/com.unity.probuilder/Settings.json" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/ProjectSettings/ShaderGraphSettings.asset" beforeDir="false" afterPath="$PROJECT_DIR$/ProjectSettings/ShaderGraphSettings.asset" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
@@ -103,7 +112,7 @@
|
|||||||
<option name="number" value="Default" />
|
<option name="number" value="Default" />
|
||||||
<option name="presentableId" value="Default" />
|
<option name="presentableId" value="Default" />
|
||||||
<updated>1780826181670</updated>
|
<updated>1780826181670</updated>
|
||||||
<workItem from="1780826183468" duration="11195000" />
|
<workItem from="1780826183468" duration="14344000" />
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
71
Assets/Editor/ReadmeUpdater.cs
Normal file
71
Assets/Editor/ReadmeUpdater.cs
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEditor;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
public class ReadmeUpdater : EditorWindow
|
||||||
|
{
|
||||||
|
private const string PythonScriptPath = "BABA_YAGA_Updater/main.py";
|
||||||
|
private const string VenvPythonPath = "BABA_YAGA_Updater/.venv/Scripts/python.exe";
|
||||||
|
private const string UpdaterDir = "BABA_YAGA_Updater";
|
||||||
|
|
||||||
|
[MenuItem("BABA YAGA/Update README")]
|
||||||
|
public static void UpdateReadme()
|
||||||
|
{
|
||||||
|
string projectRoot = Directory.GetParent(Application.dataPath).FullName;
|
||||||
|
string fullVenvPath = Path.Combine(projectRoot, VenvPythonPath);
|
||||||
|
string fullScriptPath = Path.Combine(projectRoot, PythonScriptPath);
|
||||||
|
string workingDir = Path.Combine(projectRoot, UpdaterDir);
|
||||||
|
|
||||||
|
if (!File.Exists(fullVenvPath))
|
||||||
|
{
|
||||||
|
UnityEngine.Debug.LogError($"[README Updater] Python venv not found at: {fullVenvPath}. Please ensure the .venv is set up in BABA_YAGA_Updater.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UnityEngine.Debug.Log("[README Updater] Starting update process...");
|
||||||
|
|
||||||
|
ProcessStartInfo startInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = fullVenvPath,
|
||||||
|
Arguments = $"\"{fullScriptPath}\"",
|
||||||
|
WorkingDirectory = workingDir,
|
||||||
|
UseShellExecute = false,
|
||||||
|
RedirectStandardOutput = true,
|
||||||
|
RedirectStandardError = true,
|
||||||
|
StandardOutputEncoding = System.Text.Encoding.UTF8,
|
||||||
|
StandardErrorEncoding = System.Text.Encoding.UTF8,
|
||||||
|
CreateNoWindow = true
|
||||||
|
};
|
||||||
|
|
||||||
|
// Force Python to use UTF-8 for IO to handle emojis
|
||||||
|
startInfo.EnvironmentVariables["PYTHONIOENCODING"] = "utf-8";
|
||||||
|
|
||||||
|
using (Process process = Process.Start(startInfo))
|
||||||
|
{
|
||||||
|
using (StreamReader reader = process.StandardOutput)
|
||||||
|
{
|
||||||
|
string result = reader.ReadToEnd();
|
||||||
|
if (!string.IsNullOrEmpty(result))
|
||||||
|
UnityEngine.Debug.Log($"[README Updater] Output:\n{result}");
|
||||||
|
}
|
||||||
|
|
||||||
|
using (StreamReader reader = process.StandardError)
|
||||||
|
{
|
||||||
|
string errors = reader.ReadToEnd();
|
||||||
|
if (!string.IsNullOrEmpty(errors))
|
||||||
|
UnityEngine.Debug.LogError($"[README Updater] Errors:\n{errors}");
|
||||||
|
}
|
||||||
|
|
||||||
|
process.WaitForExit();
|
||||||
|
if (process.ExitCode == 0)
|
||||||
|
{
|
||||||
|
UnityEngine.Debug.Log("🎉 [README Updater] README.md successfully updated!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UnityEngine.Debug.LogError($"[README Updater] Process exited with code {process.ExitCode}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Editor/ReadmeUpdater.cs.meta
Normal file
2
Assets/Editor/ReadmeUpdater.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ae55b686282bc5248a82e3164817a074
|
||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@@ -41,7 +41,7 @@
|
|||||||
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333&flip=horizontal" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
|
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333&flip=horizontal" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://scove-vault.duckdns.org/files/share/vakALUeH" width="100%" style="border-radius: 10px; border: 1px solid #333;">
|
<img src="https://scove-vault.duckdns.org/files/api/public/dl/vakALUeH" width="100%" style="border-radius: 10px; border: 1px solid #333;">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
> **BABA_YAGA** không chỉ là một trò chơi; nó là một thí nghiệm về sự cô lập. Dự án được xây dựng trên triết lý **"High-Stakes Hide & Seek"**, nơi mỗi giây im lặng đều mang trọng lượng ngàn cân.
|
> **BABA_YAGA** không chỉ là một trò chơi; nó là một thí nghiệm về sự cô lập. Dự án được xây dựng trên triết lý **"High-Stakes Hide & Seek"**, nơi mỗi giây im lặng đều mang trọng lượng ngàn cân.
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
|
<div id="vision"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
|
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://scove-vault.duckdns.org/files/share/vakALUeH" width="100%" style="border-radius: 12px; border: 1px solid #222; box-shadow: 0 4px 20px rgba(0,0,0,0.5);">
|
<img src="https://scove-vault.duckdns.org/files/api/public/dl/vakALUeH" width="100%" style="border-radius: 12px; border: 1px solid #222; box-shadow: 0 4px 20px rgba(0,0,0,0.5);">
|
||||||
<br>
|
<br>
|
||||||
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="100%" height="2px">
|
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="100%" height="2px">
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<div id="mechanics"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/gamepad-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cơ chế Cốt lõi (Core Mechanics)
|
## <img src="https://api.iconify.design/lucide/gamepad-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cơ chế Cốt lõi (Core Mechanics)
|
||||||
|
|
||||||
> Kiến trúc gameplay của **BABA_YAGA** được xây dựng dựa trên nguyên lý **"Thông tin Bất xứng" (Information Asymmetry)**. Hai phe tham gia không chỉ khác biệt về công cụ, mà còn trải nghiệm trò chơi ở hai chiều không gian và logic hoàn toàn trái ngược nhau.
|
> Kiến trúc gameplay của **BABA_YAGA** được xây dựng dựa trên nguyên lý **"Thông tin Bất xứng" (Information Asymmetry)**. Hai phe tham gia không chỉ khác biệt về công cụ, mà còn trải nghiệm trò chơi ở hai chiều không gian và logic hoàn toàn trái ngược nhau.
|
||||||
@@ -86,80 +88,71 @@
|
|||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
graph TD
|
graph TD
|
||||||
%% Định nghĩa Style cho các nhóm (Dark Theme Optimized)
|
|
||||||
classDef initStyle fill:#1a2b3c,stroke:#33CCFF,stroke-width:2px,color:#E0E0E0;
|
classDef initStyle fill:#1a2b3c,stroke:#33CCFF,stroke-width:2px,color:#E0E0E0;
|
||||||
classDef seekerStyle fill:#332200,stroke:#FFD700,stroke-width:2px,color:#FFD700;
|
classDef seekerStyle fill:#332200,stroke:#FFD700,stroke-width:2px,color:#FFD700;
|
||||||
classDef trapperStyle fill:#2b0000,stroke:#FF3333,stroke-width:2px,color:#FF3333;
|
classDef trapperStyle fill:#2b0000,stroke:#FF3333,stroke-width:2px,color:#FF3333;
|
||||||
classDef netStyle fill:#111111,stroke:#888888,stroke-dasharray: 5 5,color:#E0E0E0;
|
classDef netStyle fill:#111111,stroke:#888888,stroke-dasharray:5 5,color:#E0E0E0;
|
||||||
classDef winStyle fill:#003311,stroke:#00FF55,stroke-width:3px,color:#00FF55;
|
classDef winStyle fill:#003311,stroke:#00FF55,stroke-width:3px,color:#00FF55;
|
||||||
classDef criticalStyle fill:#4d0000,stroke:#FF0000,stroke-width:2px,color:#FF0000;
|
classDef criticalStyle fill:#4d0000,stroke:#FF0000,stroke-width:2px,color:#FF0000;
|
||||||
|
|
||||||
%% Phase 1: Initialization
|
subgraph Initialization ["1. KHỞI TẠO HỆ THỐNG (NET-SYNC)"]
|
||||||
subgraph Initialization ["<b>1. KHỞI TẠO HỆ THỐNG (NET-SYNC)</b>"]
|
A["🚀 Bắt đầu Trận đấu"] --> B{"🤝 Matchmaking\nPhoton Fusion"}
|
||||||
A["<img src='https://api.iconify.design/lucide/rocket.svg?color=%2333CCFF' width='20' height='20' style='vertical-align: middle;'> Bắt đầu Trận đấu"] --> B{"<img src='https://api.iconify.design/lucide/handshake.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Matchmaking<br/>(Photon Fusion)"}
|
B --> C["🎭 Phân vai: Seeker vs Trapper"]
|
||||||
B --> C["<img src='https://api.iconify.design/lucide/masks-theater.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Phân vai: Seeker vs Trapper"]
|
C --> D["🧩 Maze Generator\nPrims/Wilsons"]
|
||||||
C --> D["<img src='https://api.iconify.design/lucide/puzzle.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Maze Generator<br/>(Prims/Wilsons)"]
|
D --> E["🏛️ Baking NavMesh & Colliders"]
|
||||||
D --> E["<img src='https://api.iconify.design/lucide/building-2.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Baking NavMesh & Colliders"]
|
E --> F["👤 Character Auto-Setup"]
|
||||||
E --> F["<img src='https://api.iconify.design/lucide/user.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Character Auto-Setup"]
|
F --> G["📍 Spawn Players"]
|
||||||
F --> G["<img src='https://api.iconify.design/lucide/map-pin.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Spawn Players"]
|
|
||||||
end
|
end
|
||||||
class Initialization,A,B,C,D,E,F,G initStyle;
|
class A,B,C,D,E,F,G initStyle;
|
||||||
|
|
||||||
%% Phase 2: Core Loop
|
subgraph Active_Round ["2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)"]
|
||||||
subgraph Active_Round ["<b>2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)</b>"]
|
G --> Loop(["⚙️ TICK: FixedUpdateNetwork"])
|
||||||
G --> Loop((TICK: FixedUpdateNetwork))
|
|
||||||
|
|
||||||
%% Seeker Branch
|
subgraph Seeker_Logic ["⚡ SEEKER - POV 1st Person"]
|
||||||
subgraph Seeker_Logic ["<b><img src='https://api.iconify.design/lucide/run.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> SEEKER (POV 1st)</b>"]
|
S1["⌨️ Input: WASD/Space"] --> S2["🏃 State: Move/Dash"]
|
||||||
S1["<img src='https://api.iconify.design/lucide/keyboard.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Input: WASD/Space"] --> S2["<img src='https://api.iconify.design/lucide/run.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> State: Move/Dash"]
|
S2 --> S3{"❓ Hành động?"}
|
||||||
S2 --> S3{"<img src='https://api.iconify.design/lucide/zap.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Hành động?"}
|
S3 -- "Sprinting" --> S4["🔊 Noise Up"]
|
||||||
S3 -- "Sprinting" --> S4["<img src='https://api.iconify.design/lucide/volume-2.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Noise Up"]
|
S3 -- "Sneaking" --> S5["🔇 Noise Down"]
|
||||||
S3 -- "Sneaking" --> S5["<img src='https://api.iconify.design/lucide/volume-x.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Noise Down"]
|
S3 -- "Flashlight" --> S6["🔦 Lộ vị trí"]
|
||||||
S3 -- "Flashlight" --> S6["<img src='https://api.iconify.design/lucide/flashlight.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Lộ vị trí"]
|
S4 & S5 & S6 --> S_Check{"🔍 Check Env"}
|
||||||
|
S_Check -- "Dẫm bẫy" --> S_Trap["⚠️ Bị khống chế"]
|
||||||
S4 & S5 & S6 --> S_Check{"<img src='https://api.iconify.design/lucide/search.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Check Env"}
|
|
||||||
S_Check -- "Dẫm bẫy" --> S_Trap["<img src='https://api.iconify.design/lucide/alert-triangle.svg?color=%23FF0000' width='20' height='20' style='vertical-align: middle;'> Bị khống chế"]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
%% Trapper Branch
|
subgraph Trapper_Logic ["🔧 TRAPPER - Strategy View"]
|
||||||
subgraph Trapper_Logic ["<b><img src='https://api.iconify.design/lucide/settings.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> TRAPPER (STRATEGY)</b>"]
|
T1["🖱️ Mouse Input"] --> T2["🗺️ View: Heatmap/Cams"]
|
||||||
T1["<img src='https://api.iconify.design/lucide/mouse.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Mouse Input"] --> T2["<img src='https://api.iconify.design/lucide/map.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> View: Heatmap/Cams"]
|
T2 --> T3{"🔨 Kỹ năng?"}
|
||||||
T2 --> T3{"<img src='https://api.iconify.design/lucide/wrench.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Kỹ năng?"}
|
T3 -- "Đặt bẫy" --> T4["💾 Sync Trap"]
|
||||||
T3 -- "Đặt bẫy" --> T4["<img src='https://api.iconify.design/lucide/binary.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Sync Trap"]
|
T3 -- "Scan" --> T5["📡 Ping Seeker"]
|
||||||
T3 -- "Scan" --> T5["<img src='https://api.iconify.design/lucide/rss.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Ping Seeker"]
|
T3 -- "Lock" --> T6["🚪 Khóa cửa"]
|
||||||
T3 -- "Lock" --> T6["<img src='https://api.iconify.design/lucide/door-closed.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Khóa cửa"]
|
T4 & T5 & T6 --> T_Check{"👁️ Theo dõi"}
|
||||||
|
|
||||||
T4 & T5 & T6 --> T_Check{"<img src='https://api.iconify.design/lucide/eye.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Theo dõi"}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
%% Networking Layer
|
subgraph Network_Sync ["🌐 NETWORK SYNC LAYER"]
|
||||||
subgraph Network_Sync ["<b><img src='https://api.iconify.design/lucide/globe.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> NETWORK SYNC LAYER</b>"]
|
|
||||||
Loop --> NS1["⏩ Client Prediction"]
|
Loop --> NS1["⏩ Client Prediction"]
|
||||||
NS1 --> NS2["<img src='https://api.iconify.design/lucide/refresh-cw.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Server Reconciliation"]
|
NS1 --> NS2["🔄 Server Reconciliation"]
|
||||||
NS2 --> NS3["<img src='https://api.iconify.design/lucide/package.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> State Sync"]
|
NS2 --> NS3["📦 State Sync"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
class Seeker_Logic,S1,S2,S3,S4,S5,S6,S_Check seekerStyle;
|
class S1,S2,S3,S4,S5,S6,S_Check seekerStyle;
|
||||||
class Trapper_Logic,T1,T2,T3,T4,T5,T6,T_Check trapperStyle;
|
class T1,T2,T3,T4,T5,T6,T_Check trapperStyle;
|
||||||
class Network_Sync,NS1,NS2,NS3,Loop netStyle;
|
class NS1,NS2,NS3,Loop netStyle;
|
||||||
class S_Trap criticalStyle;
|
class S_Trap criticalStyle;
|
||||||
|
|
||||||
%% Phase 3: Results
|
subgraph Result_Logic ["3. KẾT THÚC & THƯỞNG"]
|
||||||
subgraph Result_Logic ["<b>3. KẾT THÚC & THƯỞNG</b>"]
|
S_Check -- "Chạm Exit" --> Win_S["🏆 SEEKER THẮNG"]
|
||||||
S_Check -- "Chạm Exit" --> Win_S["<img src='https://api.iconify.design/lucide/trophy.svg?color=%2300FF55' width='20' height='20' style='vertical-align: middle;'> SEEKER THẮNG"]
|
T_Check -- "Bắt được Seeker" --> Win_T["🏆 TRAPPER THẮNG"]
|
||||||
T_Check -- "Bắt được Seeker" --> Win_T["<img src='https://api.iconify.design/lucide/trophy.svg?color=%2300FF55' width='20' height='20' style='vertical-align: middle;'> TRAPPER THẮNG"]
|
|
||||||
Loop -- "Timer = 0" --> Win_T
|
Loop -- "Timer = 0" --> Win_T
|
||||||
|
|
||||||
Win_S & Win_T --> Post_Match["<img src='https://api.iconify.design/lucide/bar-chart-3.svg?color=%2333CCFF' width='20' height='20' style='vertical-align: middle;'> Thống kê Match"]
|
Win_S & Win_T --> Post_Match["📊 Thống kê Match"]
|
||||||
Post_Match --> Buff{"<img src='https://api.iconify.design/lucide/scale.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Hệ thống Adaptive"}
|
Post_Match --> Buff{"⚖️ Hệ thống Adaptive"}
|
||||||
Buff -- "Thua liên tiếp" --> Buff_Apply["<img src='https://api.iconify.design/lucide/gem.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Kích hoạt Comeback Buff"]
|
Buff -- "Thua liên tiếp" --> Buff_Apply["💎 Kích hoạt Comeback Buff"]
|
||||||
Buff_Apply --> A
|
Buff_Apply --> A
|
||||||
end
|
end
|
||||||
class Win_S,Win_T winStyle;
|
class Win_S,Win_T winStyle;
|
||||||
class Result_Logic,Post_Match,Buff,Buff_Apply initStyle;
|
class Post_Match,Buff,Buff_Apply initStyle;
|
||||||
|
|
||||||
%% Interactions (Dashed Lines)
|
S_Trap -.->|"Cảnh báo State"| T_Check
|
||||||
S_Trap -.->|Cảnh báo State| T_Check
|
S4 -.->|"Phát xạ Sóng âm"| T2
|
||||||
S4 -.->|Phát xạ Sóng âm| T2
|
T4 -.->|"Collision Vô hình"| S_Check
|
||||||
T4 -.->|Collision Vô hình| S_Check
|
|
||||||
NS3 --> Loop
|
NS3 --> Loop
|
||||||
|
```
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<div id="arch"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Kỹ thuật (Technical Architecture)
|
## <img src="https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Kỹ thuật (Technical Architecture)
|
||||||
|
|
||||||
> Hệ thống của **BABA_YAGA** được thiết kế theo chuẩn **Modular Architecture** (Kiến trúc Module), tách biệt hoàn toàn giữa logic xử lý vật lý (Kinematics), trạng thái mạng (Net-State) và phản hồi thị giác (Visual Feedbacks). Điều này đảm bảo hiệu năng cao (High Tickrate) ngay cả trong các môi trường mê cung phức tạp.
|
> Hệ thống của **BABA_YAGA** được thiết kế theo chuẩn **Modular Architecture** (Kiến trúc Module), tách biệt hoàn toàn giữa logic xử lý vật lý (Kinematics), trạng thái mạng (Net-State) và phản hồi thị giác (Visual Feedbacks). Điều này đảm bảo hiệu năng cao (High Tickrate) ngay cả trong các môi trường mê cung phức tạp.
|
||||||
@@ -14,83 +16,81 @@ Hệ thống điều khiển nhân vật cốt lõi được xây dựng trên m
|
|||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
direction TB
|
direction TB
|
||||||
|
|
||||||
state "<img src='https://api.iconify.design/lucide/footprints.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> KINEMATIC GROUND" as Ground {
|
state "👣 KINEMATIC GROUND" as Ground {
|
||||||
[*] --> Idle
|
[*] --> Idle
|
||||||
|
|
||||||
state Idle {
|
state Idle {
|
||||||
I_P: <img src='https://api.iconify.design/lucide/anchor.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Vel < 0.1m/s
|
I_P: ⚓ Vel < 0.1m/s
|
||||||
I_C: <img src='https://api.iconify.design/lucide/activity.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Breathing Cam (0.5Hz)
|
I_C: 📈 Breathing Cam (0.5Hz)
|
||||||
}
|
}
|
||||||
|
|
||||||
Idle --> Moving : Input.mag > 0.1
|
Idle --> Moving : Input.mag > 0.1
|
||||||
state Moving {
|
state Moving {
|
||||||
M_P: <img src='https://api.iconify.design/lucide/move.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Speed 2-4m/s
|
M_P: 🚶 Speed 2-4m/s
|
||||||
M_C: <img src='https://api.iconify.design/lucide/video.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Head Bob (1.2Hz)
|
M_C: 🎥 Head Bob (1.2Hz)
|
||||||
}
|
}
|
||||||
|
|
||||||
Moving --> Sneaking : Hold [Sneak]
|
Moving --> Sneaking : Hold [Sneak]
|
||||||
state Sneaking {
|
state Sneaking {
|
||||||
Sn_P: <img src='https://api.iconify.design/lucide/volume-x.svg?color=%2300FF55' width='16' style='vertical-align: middle;'> Acoustic Profile -50%
|
Sn_P: 🔇 Acoustic Profile -50%
|
||||||
Sn_C: <img src='https://api.iconify.design/lucide/arrow-down-to-line.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Collider Height ↓
|
Sn_C: ⬇️ Collider Height Down
|
||||||
}
|
}
|
||||||
|
|
||||||
Moving --> Sprinting : Hold [Sprint]
|
Moving --> Sprinting : Hold [Sprint]
|
||||||
Sneaking --> Moving : Release [Sneak]
|
Sneaking --> Moving : Release [Sneak]
|
||||||
|
|
||||||
state Sprinting {
|
state Sprinting {
|
||||||
Sp_P: <img src='https://api.iconify.design/lucide/zap.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Speed > 6.5m/s
|
Sp_P: ⚡ Speed > 6.5m/s
|
||||||
Sp_C: <img src='https://api.iconify.design/lucide/aperture.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Dynamic FOV Warp
|
Sp_C: 🔵 Dynamic FOV Warp
|
||||||
}
|
}
|
||||||
|
|
||||||
Sprinting --> Moving : Stamina Depleted
|
Sprinting --> Moving : Stamina Depleted
|
||||||
}
|
}
|
||||||
|
|
||||||
state "<img src='https://api.iconify.design/lucide/feather.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> AIRBORNE DYNAMICS" as Air {
|
state "🪶 AIRBORNE DYNAMICS" as Air {
|
||||||
state Jump {
|
state Jump {
|
||||||
J_P: <img src='https://api.iconify.design/lucide/arrow-up-circle.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> AddForce Up
|
J_P: ⬆️ AddForce Up
|
||||||
}
|
}
|
||||||
state Falling {
|
state Falling {
|
||||||
F_P: <img src='https://api.iconify.design/lucide/trending-down.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Gravity x1.5
|
F_P: 📉 Gravity x1.5
|
||||||
}
|
}
|
||||||
state Landing {
|
state Landing {
|
||||||
L_P: <img src='https://api.iconify.design/lucide/ruler.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Impact Raycast
|
L_P: 📐 Impact Raycast
|
||||||
}
|
}
|
||||||
|
|
||||||
Jump --> Falling : Vel.y < 0
|
Jump --> Falling : Vel.y < 0
|
||||||
Falling --> Landing : KCC.IsGrounded == true
|
Falling --> Landing : KCC.IsGrounded == true
|
||||||
}
|
}
|
||||||
|
|
||||||
state "<img src='https://api.iconify.design/lucide/crosshair.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> UTILITY / ACTION" as Utility {
|
state "🎯 UTILITY / ACTION" as Utility {
|
||||||
state Dashing {
|
state Dashing {
|
||||||
D_P: <img src='https://api.iconify.design/lucide/wind.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Vector Burst (15m/s)
|
D_P: 💨 Vector Burst (15m/s)
|
||||||
}
|
}
|
||||||
state Interacting {
|
state Interacting {
|
||||||
Int_P: <img src='https://api.iconify.design/lucide/lock.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Root Motion Lock
|
Int_P: 🔒 Root Motion Lock
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
state "<img src='https://api.iconify.design/lucide/globe.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> NET-SYNC LAYER" as Net {
|
state "🌐 NET-SYNC LAYER" as Net {
|
||||||
state "Input Authority (Client)" as IA
|
state "Input Authority (Client)" as IA
|
||||||
state "State Authority (Server)" as SA
|
state "State Authority (Server)" as SA
|
||||||
IA --> SA : Send Input Tick
|
IA --> SA : Send Input Tick
|
||||||
SA --> IA : Force Reconcile
|
SA --> IA : Force Reconcile
|
||||||
}
|
}
|
||||||
|
|
||||||
%% Main Transitions
|
|
||||||
Ground --> Air : KCC.IsGrounded == false
|
Ground --> Air : KCC.IsGrounded == false
|
||||||
Air --> Ground : OnLandEvent.Fire()
|
Air --> Ground : OnLandEvent.Fire()
|
||||||
Ground --> Utility : InvokeAbility()
|
Ground --> Utility : InvokeAbility()
|
||||||
Utility --> Ground : Action Complete
|
Utility --> Ground : Action Complete
|
||||||
|
|
||||||
%% Sticky Notes for Technical Context
|
|
||||||
note left of Ground
|
note left of Ground
|
||||||
<img src='https://api.iconify.design/lucide/database.svg?color=%23FFD700' width='14' style='vertical-align: middle;'> Sync: KCC Velocity
|
💾 Sync: KCC Velocity
|
||||||
<img src='https://api.iconify.design/lucide/layers.svg?color=%23E0E0E0' width='14' style='vertical-align: middle;'> State: Networked Enum
|
🗂️ State: Networked Enum
|
||||||
end note
|
end note
|
||||||
|
|
||||||
note right of Net
|
note right of Net
|
||||||
<img src='https://api.iconify.design/lucide/server-cog.svg?color=%2333CCFF' width='14' style='vertical-align: middle;'> Photon Fusion
|
⚙️ Photon Fusion
|
||||||
<img src='https://api.iconify.design/lucide/shield-check.svg?color=%2300FF55' width='14' style='vertical-align: middle;'> Anti-Cheat Validated
|
🛡️ Anti-Cheat Validated
|
||||||
end note
|
end note
|
||||||
```
|
```
|
||||||
<br>
|
<br>
|
||||||
@@ -110,4 +110,3 @@ Sử dụng kết hợp <code>Physics.OverlapSphereNonAlloc</code> để tối
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
```
|
|
||||||
@@ -42,49 +42,45 @@
|
|||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
autonumber
|
autonumber
|
||||||
|
|
||||||
%% Khai báo các thực thể
|
box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
|
||||||
participant IR as <img src='https://api.iconify.design/lucide/mouse-pointer-2.svg?color=%23FFD700' width='20' style='vertical-align: middle;'> Input
|
participant IR as "🖱️ Input"
|
||||||
participant CP as <img src='https://api.iconify.design/lucide/monitor.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Local Client
|
participant CP as "💻 Local Player"
|
||||||
participant NT as <img src='https://api.iconify.design/lucide/router.svg?color=%23E0E0E0' width='20' style='vertical-align: middle;'> Fusion Net
|
end
|
||||||
participant S as <img src='https://api.iconify.design/lucide/server.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Server Auth
|
|
||||||
participant RP as <img src='https://api.iconify.design/lucide/ghost.svg?color=%23888888' width='20' style='vertical-align: middle;'> Proxies
|
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 1 ---
|
box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
|
||||||
Note over IR, CP: [PHASE 1] Data Sampling (Thu thập)
|
participant NT as "📡 Network Layer"
|
||||||
IR->>CP: Hành động (Move / Ability / Interact)
|
participant S as "🖥️ Server Tick"
|
||||||
CP->>CP: Đóng gói NetworkInputStruct
|
end
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 2 ---
|
box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
|
||||||
Note over CP: [PHASE 2] Client Prediction (Dự đoán)
|
participant RP as "👥 Proxies"
|
||||||
CP->>CP: Thực thi Physics & Kinematics tức thì (Tick N)
|
end
|
||||||
CP->>NT: Transmit Input Payload (Gửi lên mạng)
|
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 3 ---
|
Note over IR,CP: [PHASE 1] DATA ACQUISITION
|
||||||
Note over NT, S: [PHASE 3] Server Validation (Xác thực)
|
IR->>CP: OnMove / OnAbility (Raw Input)
|
||||||
NT->>S: UDP Reliable Packet Delivery
|
CP->>CP: 📦 Pack NetworkInputStruct
|
||||||
Note right of S: SERVER TICK SIMULATION
|
|
||||||
S->>S: Validate Ruleset & Apply Physics State
|
|
||||||
S-->>NT: Broadcast Global State Snapshot (Tick N)
|
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 4 ---
|
Note over CP: [PHASE 2] FORWARD PREDICTION
|
||||||
Note over NT, CP: [PHASE 4] Reconciliation (Điều chỉnh bù trừ)
|
CP->>CP: ⚡ Run Local Kinematics (Tick N)
|
||||||
NT-->>CP: Nhận State Snapshot Feed
|
CP->>NT: 📤 Transmit Input Payload
|
||||||
Note over CP: ERROR CORRECTION PROTOCOL
|
|
||||||
CP->>CP: Detect Desync -> Snap Transform -> Resimulate Ticks
|
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 5 ---
|
rect rgba(255, 51, 51, 0.1)
|
||||||
Note over NT, RP: [PHASE 5] Proxy Update (Cập nhật thực thể bên thứ 3)
|
Note over NT,S: [PHASE 3] SERVER VALIDATION (Simulation)
|
||||||
NT-->>RP: Nhận State Snapshot Feed
|
NT->>S: Deliver UDP Packet
|
||||||
Note over RP: NETWORK INTERPOLATION
|
S->>S: 🛡️ Validate Rules & Apply Physics
|
||||||
RP->>RP: Lerp Position/Rotation (Bù nội suy mượt mà)
|
S-->>NT: 📢 Broadcast State Snapshot (Tick N)
|
||||||
|
end
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 6 ---
|
Note over NT,CP: [PHASE 4] RECONCILIATION PROTOCOL
|
||||||
Note over CP, RP: [PHASE 6] Visual Render (Hiển thị)
|
NT-->>CP: State Snapshot (Global Truth)
|
||||||
CP->>CP: Trigger Camera Shake / Local VFX
|
CP->>CP: ⚖️ Check Desync (Threshold)
|
||||||
RP->>RP: Cập nhật Animation Parameters & Mesh
|
CP->>CP: 🔄 Snap Pos & Resimulate if Error
|
||||||
|
|
||||||
<div align="right">
|
Note over NT,RP: [PHASE 5] PROXY INTERPOLATION
|
||||||
<img src="https://api.iconify.design/lucide/activity-square.svg?color=%23555555" width="14" style="vertical-align: middle;">
|
NT-->>RP: State Snapshot
|
||||||
<small><i>Hệ thống được thiết lập chạy ở <b>60 Ticks/Second</b>, băng thông ước tính <b><10kb/s</b> mỗi Client.</i></small>
|
RP->>RP: 〰️ Lerp Position / Rotation Smoothly
|
||||||
</div>
|
|
||||||
|
Note over CP,RP: [PHASE 6] VISUAL RENDERING
|
||||||
|
CP->>CP: 🎥 Update Local VFX / Camera Shake
|
||||||
|
RP->>RP: 👻 Update Animator & Mesh Transforms
|
||||||
```
|
```
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<div id="networking"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/globe-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Netcode (Deterministic Networking)
|
## <img src="https://api.iconify.design/lucide/globe-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Netcode (Deterministic Networking)
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
@@ -33,55 +35,48 @@
|
|||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
autonumber
|
autonumber
|
||||||
|
|
||||||
%% Phân vùng không gian hệ thống (Sử dụng Box Grouping)
|
|
||||||
box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
|
box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
|
||||||
participant IR as <img src='https://api.iconify.design/lucide/mouse-pointer-click.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Input
|
participant IR as "🖱️ Input"
|
||||||
participant CP as <img src='https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Local Player
|
participant CP as "💻 Local Player"
|
||||||
end
|
end
|
||||||
|
|
||||||
box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
|
box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
|
||||||
participant NT as <img src='https://api.iconify.design/lucide/router.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Network Layer
|
participant NT as "📡 Network Layer"
|
||||||
participant S as <img src='https://api.iconify.design/lucide/server.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Server Tick
|
participant S as "🖥️ Server Tick"
|
||||||
end
|
end
|
||||||
|
|
||||||
box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
|
box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
|
||||||
participant RP as <img src='https://api.iconify.design/lucide/users.svg?color=%23FFD700' width='20' style='vertical-align: middle;'> Proxies
|
participant RP as "👥 Proxies"
|
||||||
end
|
end
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 1 ---
|
Note over IR,CP: [PHASE 1] DATA ACQUISITION
|
||||||
Note over IR, CP: [PHASE 1] DATA ACQUISITION
|
|
||||||
IR->>CP: OnMove / OnAbility (Raw Input)
|
IR->>CP: OnMove / OnAbility (Raw Input)
|
||||||
CP->>CP: <img src='https://api.iconify.design/lucide/package-plus.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Pack NetworkInputStruct
|
CP->>CP: 📦 Pack NetworkInputStruct
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 2 ---
|
|
||||||
Note over CP: [PHASE 2] FORWARD PREDICTION
|
Note over CP: [PHASE 2] FORWARD PREDICTION
|
||||||
CP->>CP: <img src='https://api.iconify.design/lucide/zap.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Run Local Kinematics (Tick N)
|
CP->>CP: ⚡ Run Local Kinematics (Tick N)
|
||||||
CP->>NT: <img src='https://api.iconify.design/lucide/send.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Transmit Input Payload
|
CP->>NT: 📤 Transmit Input Payload
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 3 ---
|
|
||||||
rect rgba(255, 51, 51, 0.1)
|
rect rgba(255, 51, 51, 0.1)
|
||||||
Note over NT, S: [PHASE 3] SERVER VALIDATION (Simulation)
|
Note over NT,S: [PHASE 3] SERVER VALIDATION (Simulation)
|
||||||
NT->>S: Deliver UDP Packet
|
NT->>S: Deliver UDP Packet
|
||||||
S->>S: <img src='https://api.iconify.design/lucide/shield-alert.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Validate Rules & Apply Physics
|
S->>S: 🛡️ Validate Rules & Apply Physics
|
||||||
S-->>NT: <img src='https://api.iconify.design/lucide/broadcast.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Broadcast State Snapshot (Tick N)
|
S-->>NT: 📢 Broadcast State Snapshot (Tick N)
|
||||||
end
|
end
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 4 ---
|
Note over NT,CP: [PHASE 4] RECONCILIATION PROTOCOL
|
||||||
Note over NT, CP: [PHASE 4] RECONCILIATION PROTOCOL
|
|
||||||
NT-->>CP: State Snapshot (Global Truth)
|
NT-->>CP: State Snapshot (Global Truth)
|
||||||
CP->>CP: <img src='https://api.iconify.design/lucide/scale.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Check Desync (Threshold)
|
CP->>CP: ⚖️ Check Desync (Threshold)
|
||||||
CP->>CP: <img src='https://api.iconify.design/lucide/rotate-ccw.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Snap Pos & Resimulate if Error
|
CP->>CP: 🔄 Snap Pos & Resimulate if Error
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 5 ---
|
Note over NT,RP: [PHASE 5] PROXY INTERPOLATION
|
||||||
Note over NT, RP: [PHASE 5] PROXY INTERPOLATION
|
|
||||||
NT-->>RP: State Snapshot
|
NT-->>RP: State Snapshot
|
||||||
RP->>RP: <img src='https://api.iconify.design/lucide/spline.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Lerp Position / Rotation Smoothly
|
RP->>RP: 〰️ Lerp Position / Rotation Smoothly
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 6 ---
|
|
||||||
Note over CP, RP: [PHASE 6] VISUAL RENDERING
|
|
||||||
CP->>CP: <img src='https://api.iconify.design/lucide/video.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Update Local VFX / Camera Shake
|
|
||||||
RP->>RP: <img src='https://api.iconify.design/lucide/ghost.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Update Animator & Mesh Transforms
|
|
||||||
|
|
||||||
|
Note over CP,RP: [PHASE 6] VISUAL RENDERING
|
||||||
|
CP->>CP: 🎥 Update Local VFX / Camera Shake
|
||||||
|
RP->>RP: 👻 Update Animator & Mesh Transforms
|
||||||
|
```
|
||||||
<br>
|
<br>
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://api.iconify.design/lucide/shield-alert.svg?color=%23555555" width="16" style="vertical-align: middle;">
|
<img src="https://api.iconify.design/lucide/shield-alert.svg?color=%23555555" width="16" style="vertical-align: middle;">
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<div id="comeback"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/scale.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Hệ thống Cân bằng Thích ứng (Tiered "Despair" Mechanics)
|
## <img src="https://api.iconify.design/lucide/scale.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Hệ thống Cân bằng Thích ứng (Tiered "Despair" Mechanics)
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<div id="roadmap"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/milestone.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Lộ trình Triển khai (Development Roadmap)
|
## <img src="https://api.iconify.design/lucide/milestone.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Lộ trình Triển khai (Development Roadmap)
|
||||||
|
|
||||||
> Tiến trình xây dựng kiến trúc **BABA_YAGA**. Dự án được phát triển theo mô hình Agile, ưu tiên hoàn thiện độ ổn định của lõi Netcode (Networking) trước khi mở rộng các module Meta-game và Visuals.
|
> Tiến trình xây dựng kiến trúc **BABA_YAGA**. Dự án được phát triển theo mô hình Agile, ưu tiên hoàn thiện độ ổn định của lõi Netcode (Networking) trước khi mở rộng các module Meta-game và Visuals.
|
||||||
|
|||||||
@@ -84,61 +84,41 @@
|
|||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<!-- BẢNG GRID 2x2 CHO TIÊU CHUẨN KỸ THUẬT -->
|
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;border:none;">
|
||||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: none;">
|
<tr>
|
||||||
|
<td width="50%" style="padding:15px;background:rgba(51,204,255,0.02);border-right:2px solid #222;border-bottom:2px solid #222;">
|
||||||
<!-- HÀNG 1 -->
|
<h3 style="margin:0 0 10px 0;color:#33CCFF;"><img src="https://api.iconify.design/lucide/network.svg?color=%2333CCFF" width="20" style="vertical-align:middle;"> Net-Sync <i>(Assigned to: Duy)</i></h3>
|
||||||
<tr>
|
<div style="font-size:13px;color:#AAA;line-height:1.6;">
|
||||||
<!-- CỘT 1: NETWORKING -->
|
<strong style="color:#E0E0E0;">» RTT Optimization:</strong> Duy trì Round Trip Time < 150ms. Tối ưu kích thước Payload mạng qua <code>[Networked]</code> và <code>Reliable RPCs</code>.<br>
|
||||||
<td width="50%" style="padding: 15px; background: rgba(51,204,255,0.02); border-right: 2px solid #222; border-bottom: 2px solid #222;">
|
<strong style="color:#E0E0E0;">» Absolute Server Auth:</strong> Mọi logic Thắng/Thua, Gây sát thương, Kích hoạt bẫy <b>bắt buộc</b> phải được xác thực trên Server để chống Hack/Desync.<br>
|
||||||
<h3 style="margin: 0 0 10px 0; color: #33CCFF;">
|
<strong style="color:#E0E0E0;">» Proxy Smoothing:</strong> Nội suy (Interpolate) chuyển động của Remote Players để bù đắp hiện tượng Jitter do Packet Loss.
|
||||||
<img src="https://api.iconify.design/lucide/network.svg?color=%2333CCFF" width="20" style="vertical-align: middle;"> Net-Sync <i>(Assigned to: Duy)</i>
|
</div>
|
||||||
</h3>
|
</td>
|
||||||
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
|
<td width="50%" style="padding:15px;background:rgba(176,38,255,0.02);border-bottom:2px solid #222;">
|
||||||
<strong style="color: #E0E0E0;">» RTT Optimization:</strong> Duy trì Round Trip Time < 150ms. Tối ưu kích thước Payload mạng qua <code>[Networked]</code> và <code>Reliable RPCs</code>.<br>
|
<h3 style="margin:0 0 10px 0;color:#B026FF;"><img src="https://api.iconify.design/lucide/layers.svg?color=%23B026FF" width="20" style="vertical-align:middle;"> World & Perf <i>(Assigned to: Scove)</i></h3>
|
||||||
<strong style="color: #E0E0E0;">» Absolute Server Auth:</strong> Mọi logic Thắng/Thua, Gây sát thương, Kích hoạt bẫy <b>bắt buộc</b> phải được xác thực trên Server để chống Hack/Desync.<br>
|
<div style="font-size:13px;color:#AAA;line-height:1.6;">
|
||||||
<strong style="color: #E0E0E0;">» Proxy Smoothing:</strong> Nội suy (Interpolate) chuyển động của Remote Players để bù đắp hiện tượng Jitter do Packet Loss.
|
<strong style="color:#E0E0E0;">» Algorithmic Constraints:</strong> Thuật toán tạo hình mê cung phải bị giới hạn ở độ phức tạp <code>O(N)</code> hoặc <code>O(N log N)</code> tránh chặn luồng Main Thread.<br>
|
||||||
</div>
|
<strong style="color:#E0E0E0;">» Draw Call Budget:</strong> Mesh mê cung sau khi sinh ra phải gộp (Static Batching / GPU Instancing) để giữ số lượng Draw Calls ở mức vi mô.<br>
|
||||||
</td>
|
<strong style="color:#E0E0E0;">» Dynamic NavMesh:</strong> Bake tự động NavMesh <i>tại Runtime</i> sau khi chốt Seed mê cung, phục vụ AI Trapper hoặc kỹ năng đặc biệt.
|
||||||
|
</div>
|
||||||
<!-- CỘT 2: WORLD GEN -->
|
</td>
|
||||||
<td width="50%" style="padding: 15px; background: rgba(176,38,255,0.02); border-bottom: 2px solid #222;">
|
</tr>
|
||||||
<h3 style="margin: 0 0 10px 0; color: #B026FF;">
|
<tr>
|
||||||
<img src="https://api.iconify.design/lucide/layers.svg?color=%23B026FF" width="20" style="vertical-align: middle;"> World & Perf <i>(Assigned to: Scove)</i>
|
<td width="50%" style="padding:15px;background:rgba(255,51,51,0.02);border-right:2px solid #222;">
|
||||||
</h3>
|
<h3 style="margin:0 0 10px 0;color:#FF3333;"><img src="https://api.iconify.design/lucide/swords.svg?color=%23FF3333" width="20" style="vertical-align:middle;"> Mechanics <i>(Assigned to: Tuấn)</i></h3>
|
||||||
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
|
<div style="font-size:13px;color:#AAA;line-height:1.6;">
|
||||||
<strong style="color: #E0E0E0;">» Algorithmic Constraints:</strong> Thuật toán tạo hình mê cung phải bị giới hạn ở độ phức tạp <code>O(N)</code> hoặc <code>O(N log N)</code> tránh chặn luồng Main Thread.<br>
|
<strong style="color:#E0E0E0;">» Deterministic Input:</strong> Polling Input phải được dời vào hàm <code>FixedUpdateNetwork</code> để đồng bộ hoàn hảo với Tickrate của Server.<br>
|
||||||
<strong style="color: #E0E0E0;">» Draw Call Budget:</strong> Mesh mê cung sau khi sinh ra phải gộp (Static Batching / GPU Instancing) để giữ số lượng Draw Calls ở mức vi mô.<br>
|
<strong style="color:#E0E0E0;">» Physics Matrix:</strong> Quy hoạch chặt chẽ Layer Collision Matrix. Khuyến khích dùng Box/Capsule Colliders cho môi trường lắt léo để giảm tải CPU.<br>
|
||||||
<strong style="color: #E0E0E0;">» Dynamic NavMesh:</strong> Bake tự động NavMesh <i>tại Runtime</i> sau khi chốt Seed mê cung, phục vụ AI Trapper hoặc kỹ năng đặc biệt.
|
<strong style="color:#E0E0E0;">» FSM Integrity:</strong> Mỗi State trong Kinematic FSM là một Sandbox độc lập, nghiêm cấm tiêm/thay đổi biến (Mutate) chéo giữa các trạng thái.
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
<td width="50%" style="padding:15px;background:rgba(255,215,0,0.02);">
|
||||||
|
<h3 style="margin:0 0 10px 0;color:#FFD700;"><img src="https://api.iconify.design/lucide/palette.svg?color=%23FFD700" width="20" style="vertical-align:middle;"> Render & UX <i>(Assigned to: Tuấn)</i></h3>
|
||||||
<!-- HÀNG 2 -->
|
<div style="font-size:13px;color:#AAA;line-height:1.6;">
|
||||||
<tr>
|
<strong style="color:#E0E0E0;">» URP 6.0 Pipeline:</strong> Khai thác tối đa Render Graph của Unity 6 để tạo ra Light-baking & Shadow-mapping chân thực cao với chi phí thấp.<br>
|
||||||
<!-- CỘT 3: GAMEPLAY -->
|
<strong style="color:#E0E0E0;">» Asset Compression:</strong> Chuẩn hóa mọi Texture về định dạng ASTC/DXT5. Polycount phải được kiểm duyệt khắt khe cho PC tầm trung.<br>
|
||||||
<td width="50%" style="padding: 15px; background: rgba(255,51,51,0.02); border-right: 2px solid #222;">
|
<strong style="color:#E0E0E0;">» UX Consistency:</strong> Các phản hồi thị giác/thính giác (Máu me, Cảnh báo bẫy, Tiếng tim đập) phải đồng nhất về cường độ, tạo phản xạ có điều kiện cho User.
|
||||||
<h3 style="margin: 0 0 10px 0; color: #FF3333;">
|
</div>
|
||||||
<img src="https://api.iconify.design/lucide/swords.svg?color=%23FF3333" width="20" style="vertical-align: middle;"> Mechanics <i>(Assigned to: Tuấn)</i>
|
</td>
|
||||||
</h3>
|
</tr>
|
||||||
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
|
|
||||||
<strong style="color: #E0E0E0;">» Deterministic Input:</strong> Polling Input phải được dời vào hàm <code>FixedUpdateNetwork</code> để đồng bộ hoàn hảo với Tickrate của Server.<br>
|
|
||||||
<strong style="color: #E0E0E0;">» Physics Matrix:</strong> Quy hoạch chặt chẽ Layer Collision Matrix. Khuyến khích dùng Box/Capsule Colliders cho môi trường lắt léo để giảm tải CPU.<br>
|
|
||||||
<strong style="color: #E0E0E0;">» FSM Integrity:</strong> Mỗi State trong Kinematic FSM là một Sandbox độc lập, nghiêm cấm tiêm/thay đổi biến (Mutate) chéo giữa các trạng thái.
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<!-- CỘT 4: VISUALS -->
|
|
||||||
<td width="50%" style="padding: 15px; background: rgba(255,215,0,0.02);">
|
|
||||||
<h3 style="margin: 0 0 10px 0; color: #FFD700;">
|
|
||||||
<img src="https://api.iconify.design/lucide/palette.svg?color=%23FFD700" width="20" style="vertical-align: middle;"> Render & UX <i>(Assigned to: Tuấn)</i>
|
|
||||||
</h3>
|
|
||||||
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
|
|
||||||
<strong style="color: #E0E0E0;">» URP 6.0 Pipeline:</strong> Khai thác tối đa Render Graph của Unity 6 để tạo ra Light-baking & Shadow-mapping chân thực cao với chi phí thấp.<br>
|
|
||||||
<strong style="color: #E0E0E0;">» Asset Compression:</strong> Chuẩn hóa mọi Texture về định dạng ASTC/DXT5. Polycount phải được kiểm duyệt khắt khe cho PC tầm trung.<br>
|
|
||||||
<strong style="color: #E0E0E0;">» UX Consistency:</strong> Các phản hồi thị giác/thính giác (Máu me, Cảnh báo bẫy, Tiếng tim đập) phải đồng nhất về cường độ, tạo phản xạ có điều kiện cho User.
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<div id="folders"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/folder-tree.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cấu trúc Thư mục (Workspace Architecture)
|
## <img src="https://api.iconify.design/lucide/folder-tree.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cấu trúc Thư mục (Workspace Architecture)
|
||||||
|
|
||||||
> Cấu trúc không gian làm việc của **BABA_YAGA** tuân thủ nghiêm ngặt mô hình **Quy chuẩn Công nghiệp (Standard Industry Practices)**. Sự phân tách rạch ròi giữa Dữ liệu tĩnh (Assets), Lõi Logic (Core Scripts) và Cấu hình hệ thống (Configs) đảm bảo khả năng mở rộng (Scalability) và triệt tiêu Conflict khi làm việc nhóm.
|
> Cấu trúc không gian làm việc của **BABA_YAGA** tuân thủ nghiêm ngặt mô hình **Quy chuẩn Công nghiệp (Standard Industry Practices)**. Sự phân tách rạch ròi giữa Dữ liệu tĩnh (Assets), Lõi Logic (Core Scripts) và Cấu hình hệ thống (Configs) đảm bảo khả năng mở rộng (Scalability) và triệt tiêu Conflict khi làm việc nhóm.
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<div id="install"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/terminal-square.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Giao thức Triển khai (Deployment Protocol)
|
## <img src="https://api.iconify.design/lucide/terminal-square.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Giao thức Triển khai (Deployment Protocol)
|
||||||
|
|
||||||
> Hướng dẫn thiết lập môi trường phát triển và kết nối mạng lưới cho **BABA_YAGA**. Khuyến nghị sử dụng công cụ **ParrelSync** để tối ưu hóa quy trình kiểm thử Multiplayer (Mô phỏng Host/Client) ngay trên một Editor duy nhất.
|
> Hướng dẫn thiết lập môi trường phát triển và kết nối mạng lưới cho **BABA_YAGA**. Khuyến nghị sử dụng công cụ **ParrelSync** để tối ưu hóa quy trình kiểm thử Multiplayer (Mô phỏng Host/Client) ngay trên một Editor duy nhất.
|
||||||
@@ -63,7 +65,7 @@ git clone https://github.com/OnlyScove/BABA_YAGA.git
|
|||||||
|
|
||||||
Nhấp vào Smart Bootstrapper (Nằm trên thanh Menu Top-bar của Unity) để tự động hóa quy trình tiêm (Inject) cấu hình Network Runner.
|
Nhấp vào Smart Bootstrapper (Nằm trên thanh Menu Top-bar của Unity) để tự động hóa quy trình tiêm (Inject) cấu hình Network Runner.
|
||||||
|
|
||||||
Nhấn nút Play <img src="https://api.iconify.design/lucide/play.svg?color=%2300FF55" width="14" style="vertical-align: middle;"> trong Editor.
|
Nhấn nút Play <img src="https://api.iconify.design/lucide/play.svg?color=%2300FF55" width="14" style="vertical-align: middle;"> trong Editor.
|
||||||
|
|
||||||
Để test thực tế: Khuyến nghị Build ra file .exe độc lập, hoặc sử dụng hệ thống ParrelSync Clone Editor để chạy 2 Instances song song.
|
Để test thực tế: Khuyến nghị Build ra file .exe độc lập, hoặc sử dụng hệ thống ParrelSync Clone Editor để chạy 2 Instances song song.
|
||||||
|
|
||||||
@@ -92,7 +94,7 @@ git clone https://github.com/OnlyScove/BABA_YAGA.git
|
|||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
<br>
|
<br>
|
||||||
<img src="https://scove-vault.duckdns.org/files/share/hARx-n28" alt="Network Visitors" style="border-radius: 4px; opacity: 0.8;">
|
<img src="https://scove-vault.duckdns.org/files/api/public/dl/hARx-n28" alt="Network Visitors" style="border-radius: 4px; opacity: 0.8;">
|
||||||
<br><br>
|
<br><br>
|
||||||
<!-- SEPARATOR LINE -->
|
<!-- SEPARATOR LINE -->
|
||||||
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="80%" height="2px" style="filter: grayscale(100%) contrast(200%) sepia(100%) hue-rotate(300deg) saturate(500%);">
|
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="80%" height="2px" style="filter: grayscale(100%) contrast(200%) sepia(100%) hue-rotate(300deg) saturate(500%);">
|
||||||
|
|||||||
382
README.md
382
README.md
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<!-- ANIMATED BANNER (Sử dụng SVG Pulse hoặc GIF) -->
|
<!-- ANIMATED BANNER (Sử dụng SVG Pulse hoặc GIF) -->
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://capsule-render.vercel.app/render?type=koding&color=000000&customColorList=10&text=BABA_YAGA&fontSize=80&animation=fadeIn&fontAlignY=40&fontColor=FF0000" alt="Animated Header" />
|
<img src="https://scove-vault.duckdns.org/files/api/public/dl/S8eQwp-Y" alt="Animated Header" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
### ⚡ THE ASYMMETRIC PSYCHOLOGICAL SURVIVAL ENGINE
|
### ⚡ THE ASYMMETRIC PSYCHOLOGICAL SURVIVAL ENGINE
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333&flip=horizontal" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
|
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333&flip=horizontal" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://scove-vault.duckdns.org/files/share/vakALUeH" width="100%" style="border-radius: 10px; border: 1px solid #333;">
|
<img src="https://scove-vault.duckdns.org/files/api/public/dl/vakALUeH" width="100%" style="border-radius: 10px; border: 1px solid #333;">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
> **BABA_YAGA** không chỉ là một trò chơi; nó là một thí nghiệm về sự cô lập. Dự án được xây dựng trên triết lý **"High-Stakes Hide & Seek"**, nơi mỗi giây im lặng đều mang trọng lượng ngàn cân.
|
> **BABA_YAGA** không chỉ là một trò chơi; nó là một thí nghiệm về sự cô lập. Dự án được xây dựng trên triết lý **"High-Stakes Hide & Seek"**, nơi mỗi giây im lặng đều mang trọng lượng ngàn cân.
|
||||||
@@ -108,10 +108,12 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<div id="vision"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
|
## <img src="https://api.iconify.design/lucide/eye.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Tầm nhìn Dự án (Project Vision)
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://scove-vault.duckdns.org/files/share/vakALUeH" width="100%" style="border-radius: 12px; border: 1px solid #222; box-shadow: 0 4px 20px rgba(0,0,0,0.5);">
|
<img src="https://scove-vault.duckdns.org/files/api/public/dl/SCjSqhKH" width="100%" style="border-radius: 12px; border: 1px solid #222; box-shadow: 0 4px 20px rgba(0,0,0,0.5); alt="Animated Header";>
|
||||||
<br>
|
<br>
|
||||||
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="100%" height="2px">
|
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="100%" height="2px">
|
||||||
</div>
|
</div>
|
||||||
@@ -155,6 +157,8 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<div id="mechanics"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/gamepad-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cơ chế Cốt lõi (Core Mechanics)
|
## <img src="https://api.iconify.design/lucide/gamepad-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cơ chế Cốt lõi (Core Mechanics)
|
||||||
|
|
||||||
> Kiến trúc gameplay của **BABA_YAGA** được xây dựng dựa trên nguyên lý **"Thông tin Bất xứng" (Information Asymmetry)**. Hai phe tham gia không chỉ khác biệt về công cụ, mà còn trải nghiệm trò chơi ở hai chiều không gian và logic hoàn toàn trái ngược nhau.
|
> Kiến trúc gameplay của **BABA_YAGA** được xây dựng dựa trên nguyên lý **"Thông tin Bất xứng" (Information Asymmetry)**. Hai phe tham gia không chỉ khác biệt về công cụ, mà còn trải nghiệm trò chơi ở hai chiều không gian và logic hoàn toàn trái ngược nhau.
|
||||||
@@ -243,86 +247,79 @@
|
|||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
graph TD
|
graph TD
|
||||||
%% Định nghĩa Style cho các nhóm (Dark Theme Optimized)
|
|
||||||
classDef initStyle fill:#1a2b3c,stroke:#33CCFF,stroke-width:2px,color:#E0E0E0;
|
classDef initStyle fill:#1a2b3c,stroke:#33CCFF,stroke-width:2px,color:#E0E0E0;
|
||||||
classDef seekerStyle fill:#332200,stroke:#FFD700,stroke-width:2px,color:#FFD700;
|
classDef seekerStyle fill:#332200,stroke:#FFD700,stroke-width:2px,color:#FFD700;
|
||||||
classDef trapperStyle fill:#2b0000,stroke:#FF3333,stroke-width:2px,color:#FF3333;
|
classDef trapperStyle fill:#2b0000,stroke:#FF3333,stroke-width:2px,color:#FF3333;
|
||||||
classDef netStyle fill:#111111,stroke:#888888,stroke-dasharray: 5 5,color:#E0E0E0;
|
classDef netStyle fill:#111111,stroke:#888888,stroke-dasharray:5 5,color:#E0E0E0;
|
||||||
classDef winStyle fill:#003311,stroke:#00FF55,stroke-width:3px,color:#00FF55;
|
classDef winStyle fill:#003311,stroke:#00FF55,stroke-width:3px,color:#00FF55;
|
||||||
classDef criticalStyle fill:#4d0000,stroke:#FF0000,stroke-width:2px,color:#FF0000;
|
classDef criticalStyle fill:#4d0000,stroke:#FF0000,stroke-width:2px,color:#FF0000;
|
||||||
|
|
||||||
%% Phase 1: Initialization
|
subgraph Initialization ["1. KHỞI TẠO HỆ THỐNG (NET-SYNC)"]
|
||||||
subgraph Initialization ["<b>1. KHỞI TẠO HỆ THỐNG (NET-SYNC)</b>"]
|
A["🚀 Bắt đầu Trận đấu"] --> B{"🤝 Matchmaking\nPhoton Fusion"}
|
||||||
A["<img src='https://api.iconify.design/lucide/rocket.svg?color=%2333CCFF' width='20' height='20' style='vertical-align: middle;'> Bắt đầu Trận đấu"] --> B{"<img src='https://api.iconify.design/lucide/handshake.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Matchmaking<br/>(Photon Fusion)"}
|
B --> C["🎭 Phân vai: Seeker vs Trapper"]
|
||||||
B --> C["<img src='https://api.iconify.design/lucide/masks-theater.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Phân vai: Seeker vs Trapper"]
|
C --> D["🧩 Maze Generator\nPrims/Wilsons"]
|
||||||
C --> D["<img src='https://api.iconify.design/lucide/puzzle.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Maze Generator<br/>(Prims/Wilsons)"]
|
D --> E["🏛️ Baking NavMesh & Colliders"]
|
||||||
D --> E["<img src='https://api.iconify.design/lucide/building-2.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Baking NavMesh & Colliders"]
|
E --> F["👤 Character Auto-Setup"]
|
||||||
E --> F["<img src='https://api.iconify.design/lucide/user.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Character Auto-Setup"]
|
F --> G["📍 Spawn Players"]
|
||||||
F --> G["<img src='https://api.iconify.design/lucide/map-pin.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Spawn Players"]
|
|
||||||
end
|
end
|
||||||
class Initialization,A,B,C,D,E,F,G initStyle;
|
class A,B,C,D,E,F,G initStyle;
|
||||||
|
|
||||||
%% Phase 2: Core Loop
|
subgraph Active_Round ["2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)"]
|
||||||
subgraph Active_Round ["<b>2. VÒNG LẶP CHIẾN ĐẤU (CORE LOOP)</b>"]
|
G --> Loop(["⚙️ TICK: FixedUpdateNetwork"])
|
||||||
G --> Loop((TICK: FixedUpdateNetwork))
|
|
||||||
|
|
||||||
%% Seeker Branch
|
subgraph Seeker_Logic ["⚡ SEEKER - POV 1st Person"]
|
||||||
subgraph Seeker_Logic ["<b><img src='https://api.iconify.design/lucide/run.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> SEEKER (POV 1st)</b>"]
|
S1["⌨️ Input: WASD/Space"] --> S2["🏃 State: Move/Dash"]
|
||||||
S1["<img src='https://api.iconify.design/lucide/keyboard.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Input: WASD/Space"] --> S2["<img src='https://api.iconify.design/lucide/run.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> State: Move/Dash"]
|
S2 --> S3{"❓ Hành động?"}
|
||||||
S2 --> S3{"<img src='https://api.iconify.design/lucide/zap.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Hành động?"}
|
S3 -- "Sprinting" --> S4["🔊 Noise Up"]
|
||||||
S3 -- "Sprinting" --> S4["<img src='https://api.iconify.design/lucide/volume-2.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Noise Up"]
|
S3 -- "Sneaking" --> S5["🔇 Noise Down"]
|
||||||
S3 -- "Sneaking" --> S5["<img src='https://api.iconify.design/lucide/volume-x.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Noise Down"]
|
S3 -- "Flashlight" --> S6["🔦 Lộ vị trí"]
|
||||||
S3 -- "Flashlight" --> S6["<img src='https://api.iconify.design/lucide/flashlight.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Lộ vị trí"]
|
S4 & S5 & S6 --> S_Check{"🔍 Check Env"}
|
||||||
|
S_Check -- "Dẫm bẫy" --> S_Trap["⚠️ Bị khống chế"]
|
||||||
S4 & S5 & S6 --> S_Check{"<img src='https://api.iconify.design/lucide/search.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Check Env"}
|
|
||||||
S_Check -- "Dẫm bẫy" --> S_Trap["<img src='https://api.iconify.design/lucide/alert-triangle.svg?color=%23FF0000' width='20' height='20' style='vertical-align: middle;'> Bị khống chế"]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
%% Trapper Branch
|
subgraph Trapper_Logic ["🔧 TRAPPER - Strategy View"]
|
||||||
subgraph Trapper_Logic ["<b><img src='https://api.iconify.design/lucide/settings.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> TRAPPER (STRATEGY)</b>"]
|
T1["🖱️ Mouse Input"] --> T2["🗺️ View: Heatmap/Cams"]
|
||||||
T1["<img src='https://api.iconify.design/lucide/mouse.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Mouse Input"] --> T2["<img src='https://api.iconify.design/lucide/map.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> View: Heatmap/Cams"]
|
T2 --> T3{"🔨 Kỹ năng?"}
|
||||||
T2 --> T3{"<img src='https://api.iconify.design/lucide/wrench.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Kỹ năng?"}
|
T3 -- "Đặt bẫy" --> T4["💾 Sync Trap"]
|
||||||
T3 -- "Đặt bẫy" --> T4["<img src='https://api.iconify.design/lucide/binary.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Sync Trap"]
|
T3 -- "Scan" --> T5["📡 Ping Seeker"]
|
||||||
T3 -- "Scan" --> T5["<img src='https://api.iconify.design/lucide/rss.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Ping Seeker"]
|
T3 -- "Lock" --> T6["🚪 Khóa cửa"]
|
||||||
T3 -- "Lock" --> T6["<img src='https://api.iconify.design/lucide/door-closed.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Khóa cửa"]
|
T4 & T5 & T6 --> T_Check{"👁️ Theo dõi"}
|
||||||
|
|
||||||
T4 & T5 & T6 --> T_Check{"<img src='https://api.iconify.design/lucide/eye.svg?color=%23FF3333' width='20' height='20' style='vertical-align: middle;'> Theo dõi"}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
%% Networking Layer
|
subgraph Network_Sync ["🌐 NETWORK SYNC LAYER"]
|
||||||
subgraph Network_Sync ["<b><img src='https://api.iconify.design/lucide/globe.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> NETWORK SYNC LAYER</b>"]
|
|
||||||
Loop --> NS1["⏩ Client Prediction"]
|
Loop --> NS1["⏩ Client Prediction"]
|
||||||
NS1 --> NS2["<img src='https://api.iconify.design/lucide/refresh-cw.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Server Reconciliation"]
|
NS1 --> NS2["🔄 Server Reconciliation"]
|
||||||
NS2 --> NS3["<img src='https://api.iconify.design/lucide/package.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> State Sync"]
|
NS2 --> NS3["📦 State Sync"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
class Seeker_Logic,S1,S2,S3,S4,S5,S6,S_Check seekerStyle;
|
class S1,S2,S3,S4,S5,S6,S_Check seekerStyle;
|
||||||
class Trapper_Logic,T1,T2,T3,T4,T5,T6,T_Check trapperStyle;
|
class T1,T2,T3,T4,T5,T6,T_Check trapperStyle;
|
||||||
class Network_Sync,NS1,NS2,NS3,Loop netStyle;
|
class NS1,NS2,NS3,Loop netStyle;
|
||||||
class S_Trap criticalStyle;
|
class S_Trap criticalStyle;
|
||||||
|
|
||||||
%% Phase 3: Results
|
subgraph Result_Logic ["3. KẾT THÚC & THƯỞNG"]
|
||||||
subgraph Result_Logic ["<b>3. KẾT THÚC & THƯỞNG</b>"]
|
S_Check -- "Chạm Exit" --> Win_S["🏆 SEEKER THẮNG"]
|
||||||
S_Check -- "Chạm Exit" --> Win_S["<img src='https://api.iconify.design/lucide/trophy.svg?color=%2300FF55' width='20' height='20' style='vertical-align: middle;'> SEEKER THẮNG"]
|
T_Check -- "Bắt được Seeker" --> Win_T["🏆 TRAPPER THẮNG"]
|
||||||
T_Check -- "Bắt được Seeker" --> Win_T["<img src='https://api.iconify.design/lucide/trophy.svg?color=%2300FF55' width='20' height='20' style='vertical-align: middle;'> TRAPPER THẮNG"]
|
|
||||||
Loop -- "Timer = 0" --> Win_T
|
Loop -- "Timer = 0" --> Win_T
|
||||||
|
|
||||||
Win_S & Win_T --> Post_Match["<img src='https://api.iconify.design/lucide/bar-chart-3.svg?color=%2333CCFF' width='20' height='20' style='vertical-align: middle;'> Thống kê Match"]
|
Win_S & Win_T --> Post_Match["📊 Thống kê Match"]
|
||||||
Post_Match --> Buff{"<img src='https://api.iconify.design/lucide/scale.svg?color=%23E0E0E0' width='20' height='20' style='vertical-align: middle;'> Hệ thống Adaptive"}
|
Post_Match --> Buff{"⚖️ Hệ thống Adaptive"}
|
||||||
Buff -- "Thua liên tiếp" --> Buff_Apply["<img src='https://api.iconify.design/lucide/gem.svg?color=%23FFD700' width='20' height='20' style='vertical-align: middle;'> Kích hoạt Comeback Buff"]
|
Buff -- "Thua liên tiếp" --> Buff_Apply["💎 Kích hoạt Comeback Buff"]
|
||||||
Buff_Apply --> A
|
Buff_Apply --> A
|
||||||
end
|
end
|
||||||
class Win_S,Win_T winStyle;
|
class Win_S,Win_T winStyle;
|
||||||
class Result_Logic,Post_Match,Buff,Buff_Apply initStyle;
|
class Post_Match,Buff,Buff_Apply initStyle;
|
||||||
|
|
||||||
%% Interactions (Dashed Lines)
|
S_Trap -.->|"Cảnh báo State"| T_Check
|
||||||
S_Trap -.->|Cảnh báo State| T_Check
|
S4 -.->|"Phát xạ Sóng âm"| T2
|
||||||
S4 -.->|Phát xạ Sóng âm| T2
|
T4 -.->|"Collision Vô hình"| S_Check
|
||||||
T4 -.->|Collision Vô hình| S_Check
|
|
||||||
NS3 --> Loop
|
NS3 --> Loop
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<div id="arch"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Kỹ thuật (Technical Architecture)
|
## <img src="https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Kỹ thuật (Technical Architecture)
|
||||||
|
|
||||||
> Hệ thống của **BABA_YAGA** được thiết kế theo chuẩn **Modular Architecture** (Kiến trúc Module), tách biệt hoàn toàn giữa logic xử lý vật lý (Kinematics), trạng thái mạng (Net-State) và phản hồi thị giác (Visual Feedbacks). Điều này đảm bảo hiệu năng cao (High Tickrate) ngay cả trong các môi trường mê cung phức tạp.
|
> Hệ thống của **BABA_YAGA** được thiết kế theo chuẩn **Modular Architecture** (Kiến trúc Module), tách biệt hoàn toàn giữa logic xử lý vật lý (Kinematics), trạng thái mạng (Net-State) và phản hồi thị giác (Visual Feedbacks). Điều này đảm bảo hiệu năng cao (High Tickrate) ngay cả trong các môi trường mê cung phức tạp.
|
||||||
@@ -339,83 +336,81 @@ Hệ thống điều khiển nhân vật cốt lõi được xây dựng trên m
|
|||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
direction TB
|
direction TB
|
||||||
|
|
||||||
state "<img src='https://api.iconify.design/lucide/footprints.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> KINEMATIC GROUND" as Ground {
|
state "👣 KINEMATIC GROUND" as Ground {
|
||||||
[*] --> Idle
|
[*] --> Idle
|
||||||
|
|
||||||
state Idle {
|
state Idle {
|
||||||
I_P: <img src='https://api.iconify.design/lucide/anchor.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Vel < 0.1m/s
|
I_P: ⚓ Vel < 0.1m/s
|
||||||
I_C: <img src='https://api.iconify.design/lucide/activity.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Breathing Cam (0.5Hz)
|
I_C: 📈 Breathing Cam (0.5Hz)
|
||||||
}
|
}
|
||||||
|
|
||||||
Idle --> Moving : Input.mag > 0.1
|
Idle --> Moving : Input.mag > 0.1
|
||||||
state Moving {
|
state Moving {
|
||||||
M_P: <img src='https://api.iconify.design/lucide/move.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Speed 2-4m/s
|
M_P: 🚶 Speed 2-4m/s
|
||||||
M_C: <img src='https://api.iconify.design/lucide/video.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Head Bob (1.2Hz)
|
M_C: 🎥 Head Bob (1.2Hz)
|
||||||
}
|
}
|
||||||
|
|
||||||
Moving --> Sneaking : Hold [Sneak]
|
Moving --> Sneaking : Hold [Sneak]
|
||||||
state Sneaking {
|
state Sneaking {
|
||||||
Sn_P: <img src='https://api.iconify.design/lucide/volume-x.svg?color=%2300FF55' width='16' style='vertical-align: middle;'> Acoustic Profile -50%
|
Sn_P: 🔇 Acoustic Profile -50%
|
||||||
Sn_C: <img src='https://api.iconify.design/lucide/arrow-down-to-line.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Collider Height ↓
|
Sn_C: ⬇️ Collider Height Down
|
||||||
}
|
}
|
||||||
|
|
||||||
Moving --> Sprinting : Hold [Sprint]
|
Moving --> Sprinting : Hold [Sprint]
|
||||||
Sneaking --> Moving : Release [Sneak]
|
Sneaking --> Moving : Release [Sneak]
|
||||||
|
|
||||||
state Sprinting {
|
state Sprinting {
|
||||||
Sp_P: <img src='https://api.iconify.design/lucide/zap.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Speed > 6.5m/s
|
Sp_P: ⚡ Speed > 6.5m/s
|
||||||
Sp_C: <img src='https://api.iconify.design/lucide/aperture.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Dynamic FOV Warp
|
Sp_C: 🔵 Dynamic FOV Warp
|
||||||
}
|
}
|
||||||
|
|
||||||
Sprinting --> Moving : Stamina Depleted
|
Sprinting --> Moving : Stamina Depleted
|
||||||
}
|
}
|
||||||
|
|
||||||
state "<img src='https://api.iconify.design/lucide/feather.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> AIRBORNE DYNAMICS" as Air {
|
state "🪶 AIRBORNE DYNAMICS" as Air {
|
||||||
state Jump {
|
state Jump {
|
||||||
J_P: <img src='https://api.iconify.design/lucide/arrow-up-circle.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> AddForce Up
|
J_P: ⬆️ AddForce Up
|
||||||
}
|
}
|
||||||
state Falling {
|
state Falling {
|
||||||
F_P: <img src='https://api.iconify.design/lucide/trending-down.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Gravity x1.5
|
F_P: 📉 Gravity x1.5
|
||||||
}
|
}
|
||||||
state Landing {
|
state Landing {
|
||||||
L_P: <img src='https://api.iconify.design/lucide/ruler.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Impact Raycast
|
L_P: 📐 Impact Raycast
|
||||||
}
|
}
|
||||||
|
|
||||||
Jump --> Falling : Vel.y < 0
|
Jump --> Falling : Vel.y < 0
|
||||||
Falling --> Landing : KCC.IsGrounded == true
|
Falling --> Landing : KCC.IsGrounded == true
|
||||||
}
|
}
|
||||||
|
|
||||||
state "<img src='https://api.iconify.design/lucide/crosshair.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> UTILITY / ACTION" as Utility {
|
state "🎯 UTILITY / ACTION" as Utility {
|
||||||
state Dashing {
|
state Dashing {
|
||||||
D_P: <img src='https://api.iconify.design/lucide/wind.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Vector Burst (15m/s)
|
D_P: 💨 Vector Burst (15m/s)
|
||||||
}
|
}
|
||||||
state Interacting {
|
state Interacting {
|
||||||
Int_P: <img src='https://api.iconify.design/lucide/lock.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Root Motion Lock
|
Int_P: 🔒 Root Motion Lock
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
state "<img src='https://api.iconify.design/lucide/globe.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> NET-SYNC LAYER" as Net {
|
state "🌐 NET-SYNC LAYER" as Net {
|
||||||
state "Input Authority (Client)" as IA
|
state "Input Authority (Client)" as IA
|
||||||
state "State Authority (Server)" as SA
|
state "State Authority (Server)" as SA
|
||||||
IA --> SA : Send Input Tick
|
IA --> SA : Send Input Tick
|
||||||
SA --> IA : Force Reconcile
|
SA --> IA : Force Reconcile
|
||||||
}
|
}
|
||||||
|
|
||||||
%% Main Transitions
|
|
||||||
Ground --> Air : KCC.IsGrounded == false
|
Ground --> Air : KCC.IsGrounded == false
|
||||||
Air --> Ground : OnLandEvent.Fire()
|
Air --> Ground : OnLandEvent.Fire()
|
||||||
Ground --> Utility : InvokeAbility()
|
Ground --> Utility : InvokeAbility()
|
||||||
Utility --> Ground : Action Complete
|
Utility --> Ground : Action Complete
|
||||||
|
|
||||||
%% Sticky Notes for Technical Context
|
|
||||||
note left of Ground
|
note left of Ground
|
||||||
<img src='https://api.iconify.design/lucide/database.svg?color=%23FFD700' width='14' style='vertical-align: middle;'> Sync: KCC Velocity
|
💾 Sync: KCC Velocity
|
||||||
<img src='https://api.iconify.design/lucide/layers.svg?color=%23E0E0E0' width='14' style='vertical-align: middle;'> State: Networked Enum
|
🗂️ State: Networked Enum
|
||||||
end note
|
end note
|
||||||
|
|
||||||
note right of Net
|
note right of Net
|
||||||
<img src='https://api.iconify.design/lucide/server-cog.svg?color=%2333CCFF' width='14' style='vertical-align: middle;'> Photon Fusion
|
⚙️ Photon Fusion
|
||||||
<img src='https://api.iconify.design/lucide/shield-check.svg?color=%2300FF55' width='14' style='vertical-align: middle;'> Anti-Cheat Validated
|
🛡️ Anti-Cheat Validated
|
||||||
end note
|
end note
|
||||||
```
|
```
|
||||||
<br>
|
<br>
|
||||||
@@ -435,7 +430,7 @@ Sử dụng kết hợp <code>Physics.OverlapSphereNonAlloc</code> để tối
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -483,55 +478,53 @@ Sử dụng kết hợp <code>Physics.OverlapSphereNonAlloc</code> để tối
|
|||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
autonumber
|
autonumber
|
||||||
|
|
||||||
%% Khai báo các thực thể
|
box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
|
||||||
participant IR as <img src='https://api.iconify.design/lucide/mouse-pointer-2.svg?color=%23FFD700' width='20' style='vertical-align: middle;'> Input
|
participant IR as "🖱️ Input"
|
||||||
participant CP as <img src='https://api.iconify.design/lucide/monitor.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Local Client
|
participant CP as "💻 Local Player"
|
||||||
participant NT as <img src='https://api.iconify.design/lucide/router.svg?color=%23E0E0E0' width='20' style='vertical-align: middle;'> Fusion Net
|
end
|
||||||
participant S as <img src='https://api.iconify.design/lucide/server.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Server Auth
|
|
||||||
participant RP as <img src='https://api.iconify.design/lucide/ghost.svg?color=%23888888' width='20' style='vertical-align: middle;'> Proxies
|
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 1 ---
|
box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
|
||||||
Note over IR, CP: [PHASE 1] Data Sampling (Thu thập)
|
participant NT as "📡 Network Layer"
|
||||||
IR->>CP: Hành động (Move / Ability / Interact)
|
participant S as "🖥️ Server Tick"
|
||||||
CP->>CP: Đóng gói NetworkInputStruct
|
end
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 2 ---
|
box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
|
||||||
Note over CP: [PHASE 2] Client Prediction (Dự đoán)
|
participant RP as "👥 Proxies"
|
||||||
CP->>CP: Thực thi Physics & Kinematics tức thì (Tick N)
|
end
|
||||||
CP->>NT: Transmit Input Payload (Gửi lên mạng)
|
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 3 ---
|
Note over IR,CP: [PHASE 1] DATA ACQUISITION
|
||||||
Note over NT, S: [PHASE 3] Server Validation (Xác thực)
|
IR->>CP: OnMove / OnAbility (Raw Input)
|
||||||
NT->>S: UDP Reliable Packet Delivery
|
CP->>CP: 📦 Pack NetworkInputStruct
|
||||||
Note right of S: SERVER TICK SIMULATION
|
|
||||||
S->>S: Validate Ruleset & Apply Physics State
|
|
||||||
S-->>NT: Broadcast Global State Snapshot (Tick N)
|
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 4 ---
|
Note over CP: [PHASE 2] FORWARD PREDICTION
|
||||||
Note over NT, CP: [PHASE 4] Reconciliation (Điều chỉnh bù trừ)
|
CP->>CP: ⚡ Run Local Kinematics (Tick N)
|
||||||
NT-->>CP: Nhận State Snapshot Feed
|
CP->>NT: 📤 Transmit Input Payload
|
||||||
Note over CP: ERROR CORRECTION PROTOCOL
|
|
||||||
CP->>CP: Detect Desync -> Snap Transform -> Resimulate Ticks
|
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 5 ---
|
rect rgba(255, 51, 51, 0.1)
|
||||||
Note over NT, RP: [PHASE 5] Proxy Update (Cập nhật thực thể bên thứ 3)
|
Note over NT,S: [PHASE 3] SERVER VALIDATION (Simulation)
|
||||||
NT-->>RP: Nhận State Snapshot Feed
|
NT->>S: Deliver UDP Packet
|
||||||
Note over RP: NETWORK INTERPOLATION
|
S->>S: 🛡️ Validate Rules & Apply Physics
|
||||||
RP->>RP: Lerp Position/Rotation (Bù nội suy mượt mà)
|
S-->>NT: 📢 Broadcast State Snapshot (Tick N)
|
||||||
|
end
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 6 ---
|
Note over NT,CP: [PHASE 4] RECONCILIATION PROTOCOL
|
||||||
Note over CP, RP: [PHASE 6] Visual Render (Hiển thị)
|
NT-->>CP: State Snapshot (Global Truth)
|
||||||
CP->>CP: Trigger Camera Shake / Local VFX
|
CP->>CP: ⚖️ Check Desync (Threshold)
|
||||||
RP->>RP: Cập nhật Animation Parameters & Mesh
|
CP->>CP: 🔄 Snap Pos & Resimulate if Error
|
||||||
|
|
||||||
<div align="right">
|
Note over NT,RP: [PHASE 5] PROXY INTERPOLATION
|
||||||
<img src="https://api.iconify.design/lucide/activity-square.svg?color=%23555555" width="14" style="vertical-align: middle;">
|
NT-->>RP: State Snapshot
|
||||||
<small><i>Hệ thống được thiết lập chạy ở <b>60 Ticks/Second</b>, băng thông ước tính <b><10kb/s</b> mỗi Client.</i></small>
|
RP->>RP: 〰️ Lerp Position / Rotation Smoothly
|
||||||
</div>
|
|
||||||
|
Note over CP,RP: [PHASE 6] VISUAL RENDERING
|
||||||
|
CP->>CP: 🎥 Update Local VFX / Camera Shake
|
||||||
|
RP->>RP: 👻 Update Animator & Mesh Transforms
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<div id="networking"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/globe-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Netcode (Deterministic Networking)
|
## <img src="https://api.iconify.design/lucide/globe-2.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Kiến trúc Netcode (Deterministic Networking)
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
@@ -567,55 +560,48 @@ sequenceDiagram
|
|||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
autonumber
|
autonumber
|
||||||
|
|
||||||
%% Phân vùng không gian hệ thống (Sử dụng Box Grouping)
|
|
||||||
box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
|
box rgba(51, 204, 255, 0.05) "⚡ LOCAL ENVIRONMENT (Client Auth)"
|
||||||
participant IR as <img src='https://api.iconify.design/lucide/mouse-pointer-click.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Input
|
participant IR as "🖱️ Input"
|
||||||
participant CP as <img src='https://api.iconify.design/lucide/cpu.svg?color=%2333CCFF' width='20' style='vertical-align: middle;'> Local Player
|
participant CP as "💻 Local Player"
|
||||||
end
|
end
|
||||||
|
|
||||||
box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
|
box rgba(255, 51, 51, 0.05) "👑 SERVER ENVIRONMENT (State Auth)"
|
||||||
participant NT as <img src='https://api.iconify.design/lucide/router.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Network Layer
|
participant NT as "📡 Network Layer"
|
||||||
participant S as <img src='https://api.iconify.design/lucide/server.svg?color=%23FF3333' width='20' style='vertical-align: middle;'> Server Tick
|
participant S as "🖥️ Server Tick"
|
||||||
end
|
end
|
||||||
|
|
||||||
box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
|
box rgba(255, 215, 0, 0.05) "👁️ REMOTE OBSERVERS"
|
||||||
participant RP as <img src='https://api.iconify.design/lucide/users.svg?color=%23FFD700' width='20' style='vertical-align: middle;'> Proxies
|
participant RP as "👥 Proxies"
|
||||||
end
|
end
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 1 ---
|
Note over IR,CP: [PHASE 1] DATA ACQUISITION
|
||||||
Note over IR, CP: [PHASE 1] DATA ACQUISITION
|
|
||||||
IR->>CP: OnMove / OnAbility (Raw Input)
|
IR->>CP: OnMove / OnAbility (Raw Input)
|
||||||
CP->>CP: <img src='https://api.iconify.design/lucide/package-plus.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Pack NetworkInputStruct
|
CP->>CP: 📦 Pack NetworkInputStruct
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 2 ---
|
|
||||||
Note over CP: [PHASE 2] FORWARD PREDICTION
|
Note over CP: [PHASE 2] FORWARD PREDICTION
|
||||||
CP->>CP: <img src='https://api.iconify.design/lucide/zap.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Run Local Kinematics (Tick N)
|
CP->>CP: ⚡ Run Local Kinematics (Tick N)
|
||||||
CP->>NT: <img src='https://api.iconify.design/lucide/send.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Transmit Input Payload
|
CP->>NT: 📤 Transmit Input Payload
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 3 ---
|
|
||||||
rect rgba(255, 51, 51, 0.1)
|
rect rgba(255, 51, 51, 0.1)
|
||||||
Note over NT, S: [PHASE 3] SERVER VALIDATION (Simulation)
|
Note over NT,S: [PHASE 3] SERVER VALIDATION (Simulation)
|
||||||
NT->>S: Deliver UDP Packet
|
NT->>S: Deliver UDP Packet
|
||||||
S->>S: <img src='https://api.iconify.design/lucide/shield-alert.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Validate Rules & Apply Physics
|
S->>S: 🛡️ Validate Rules & Apply Physics
|
||||||
S-->>NT: <img src='https://api.iconify.design/lucide/broadcast.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Broadcast State Snapshot (Tick N)
|
S-->>NT: 📢 Broadcast State Snapshot (Tick N)
|
||||||
end
|
end
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 4 ---
|
Note over NT,CP: [PHASE 4] RECONCILIATION PROTOCOL
|
||||||
Note over NT, CP: [PHASE 4] RECONCILIATION PROTOCOL
|
|
||||||
NT-->>CP: State Snapshot (Global Truth)
|
NT-->>CP: State Snapshot (Global Truth)
|
||||||
CP->>CP: <img src='https://api.iconify.design/lucide/scale.svg?color=%23E0E0E0' width='16' style='vertical-align: middle;'> Check Desync (Threshold)
|
CP->>CP: ⚖️ Check Desync (Threshold)
|
||||||
CP->>CP: <img src='https://api.iconify.design/lucide/rotate-ccw.svg?color=%23FF3333' width='16' style='vertical-align: middle;'> Snap Pos & Resimulate if Error
|
CP->>CP: 🔄 Snap Pos & Resimulate if Error
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 5 ---
|
Note over NT,RP: [PHASE 5] PROXY INTERPOLATION
|
||||||
Note over NT, RP: [PHASE 5] PROXY INTERPOLATION
|
|
||||||
NT-->>RP: State Snapshot
|
NT-->>RP: State Snapshot
|
||||||
RP->>RP: <img src='https://api.iconify.design/lucide/spline.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Lerp Position / Rotation Smoothly
|
RP->>RP: 〰️ Lerp Position / Rotation Smoothly
|
||||||
|
|
||||||
%% --- GIAI ĐOẠN 6 ---
|
|
||||||
Note over CP, RP: [PHASE 6] VISUAL RENDERING
|
|
||||||
CP->>CP: <img src='https://api.iconify.design/lucide/video.svg?color=%2333CCFF' width='16' style='vertical-align: middle;'> Update Local VFX / Camera Shake
|
|
||||||
RP->>RP: <img src='https://api.iconify.design/lucide/ghost.svg?color=%23FFD700' width='16' style='vertical-align: middle;'> Update Animator & Mesh Transforms
|
|
||||||
|
|
||||||
|
Note over CP,RP: [PHASE 6] VISUAL RENDERING
|
||||||
|
CP->>CP: 🎥 Update Local VFX / Camera Shake
|
||||||
|
RP->>RP: 👻 Update Animator & Mesh Transforms
|
||||||
|
```
|
||||||
<br>
|
<br>
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://api.iconify.design/lucide/shield-alert.svg?color=%23555555" width="16" style="vertical-align: middle;">
|
<img src="https://api.iconify.design/lucide/shield-alert.svg?color=%23555555" width="16" style="vertical-align: middle;">
|
||||||
@@ -625,6 +611,8 @@ sequenceDiagram
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<div id="comeback"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/scale.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Hệ thống Cân bằng Thích ứng (Tiered "Despair" Mechanics)
|
## <img src="https://api.iconify.design/lucide/scale.svg?color=%23FF3333" width="28" height="28" style="vertical-align: middle;"> Hệ thống Cân bằng Thích ứng (Tiered "Despair" Mechanics)
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
@@ -756,6 +744,8 @@ Khi Trapper để mất quyền kiểm soát, Mê cung sẽ tự động phân r
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<div id="roadmap"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/milestone.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Lộ trình Triển khai (Development Roadmap)
|
## <img src="https://api.iconify.design/lucide/milestone.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Lộ trình Triển khai (Development Roadmap)
|
||||||
|
|
||||||
> Tiến trình xây dựng kiến trúc **BABA_YAGA**. Dự án được phát triển theo mô hình Agile, ưu tiên hoàn thiện độ ổn định của lõi Netcode (Networking) trước khi mở rộng các module Meta-game và Visuals.
|
> Tiến trình xây dựng kiến trúc **BABA_YAGA**. Dự án được phát triển theo mô hình Agile, ưu tiên hoàn thiện độ ổn định của lõi Netcode (Networking) trước khi mở rộng các module Meta-game và Visuals.
|
||||||
@@ -954,67 +944,49 @@ Khi Trapper để mất quyền kiểm soát, Mê cung sẽ tự động phân r
|
|||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<!-- BẢNG GRID 2x2 CHO TIÊU CHUẨN KỸ THUẬT -->
|
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;border:none;">
|
||||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: none;">
|
<tr>
|
||||||
|
<td width="50%" style="padding:15px;background:rgba(51,204,255,0.02);border-right:2px solid #222;border-bottom:2px solid #222;">
|
||||||
<!-- HÀNG 1 -->
|
<h3 style="margin:0 0 10px 0;color:#33CCFF;"><img src="https://api.iconify.design/lucide/network.svg?color=%2333CCFF" width="20" style="vertical-align:middle;"> Net-Sync <i>(Assigned to: Duy)</i></h3>
|
||||||
<tr>
|
<div style="font-size:13px;color:#AAA;line-height:1.6;">
|
||||||
<!-- CỘT 1: NETWORKING -->
|
<strong style="color:#E0E0E0;">» RTT Optimization:</strong> Duy trì Round Trip Time < 150ms. Tối ưu kích thước Payload mạng qua <code>[Networked]</code> và <code>Reliable RPCs</code>.<br>
|
||||||
<td width="50%" style="padding: 15px; background: rgba(51,204,255,0.02); border-right: 2px solid #222; border-bottom: 2px solid #222;">
|
<strong style="color:#E0E0E0;">» Absolute Server Auth:</strong> Mọi logic Thắng/Thua, Gây sát thương, Kích hoạt bẫy <b>bắt buộc</b> phải được xác thực trên Server để chống Hack/Desync.<br>
|
||||||
<h3 style="margin: 0 0 10px 0; color: #33CCFF;">
|
<strong style="color:#E0E0E0;">» Proxy Smoothing:</strong> Nội suy (Interpolate) chuyển động của Remote Players để bù đắp hiện tượng Jitter do Packet Loss.
|
||||||
<img src="https://api.iconify.design/lucide/network.svg?color=%2333CCFF" width="20" style="vertical-align: middle;"> Net-Sync <i>(Assigned to: Duy)</i>
|
</div>
|
||||||
</h3>
|
</td>
|
||||||
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
|
<td width="50%" style="padding:15px;background:rgba(176,38,255,0.02);border-bottom:2px solid #222;">
|
||||||
<strong style="color: #E0E0E0;">» RTT Optimization:</strong> Duy trì Round Trip Time < 150ms. Tối ưu kích thước Payload mạng qua <code>[Networked]</code> và <code>Reliable RPCs</code>.<br>
|
<h3 style="margin:0 0 10px 0;color:#B026FF;"><img src="https://api.iconify.design/lucide/layers.svg?color=%23B026FF" width="20" style="vertical-align:middle;"> World & Perf <i>(Assigned to: Scove)</i></h3>
|
||||||
<strong style="color: #E0E0E0;">» Absolute Server Auth:</strong> Mọi logic Thắng/Thua, Gây sát thương, Kích hoạt bẫy <b>bắt buộc</b> phải được xác thực trên Server để chống Hack/Desync.<br>
|
<div style="font-size:13px;color:#AAA;line-height:1.6;">
|
||||||
<strong style="color: #E0E0E0;">» Proxy Smoothing:</strong> Nội suy (Interpolate) chuyển động của Remote Players để bù đắp hiện tượng Jitter do Packet Loss.
|
<strong style="color:#E0E0E0;">» Algorithmic Constraints:</strong> Thuật toán tạo hình mê cung phải bị giới hạn ở độ phức tạp <code>O(N)</code> hoặc <code>O(N log N)</code> tránh chặn luồng Main Thread.<br>
|
||||||
</div>
|
<strong style="color:#E0E0E0;">» Draw Call Budget:</strong> Mesh mê cung sau khi sinh ra phải gộp (Static Batching / GPU Instancing) để giữ số lượng Draw Calls ở mức vi mô.<br>
|
||||||
</td>
|
<strong style="color:#E0E0E0;">» Dynamic NavMesh:</strong> Bake tự động NavMesh <i>tại Runtime</i> sau khi chốt Seed mê cung, phục vụ AI Trapper hoặc kỹ năng đặc biệt.
|
||||||
|
</div>
|
||||||
<!-- CỘT 2: WORLD GEN -->
|
</td>
|
||||||
<td width="50%" style="padding: 15px; background: rgba(176,38,255,0.02); border-bottom: 2px solid #222;">
|
</tr>
|
||||||
<h3 style="margin: 0 0 10px 0; color: #B026FF;">
|
<tr>
|
||||||
<img src="https://api.iconify.design/lucide/layers.svg?color=%23B026FF" width="20" style="vertical-align: middle;"> World & Perf <i>(Assigned to: Scove)</i>
|
<td width="50%" style="padding:15px;background:rgba(255,51,51,0.02);border-right:2px solid #222;">
|
||||||
</h3>
|
<h3 style="margin:0 0 10px 0;color:#FF3333;"><img src="https://api.iconify.design/lucide/swords.svg?color=%23FF3333" width="20" style="vertical-align:middle;"> Mechanics <i>(Assigned to: Tuấn)</i></h3>
|
||||||
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
|
<div style="font-size:13px;color:#AAA;line-height:1.6;">
|
||||||
<strong style="color: #E0E0E0;">» Algorithmic Constraints:</strong> Thuật toán tạo hình mê cung phải bị giới hạn ở độ phức tạp <code>O(N)</code> hoặc <code>O(N log N)</code> tránh chặn luồng Main Thread.<br>
|
<strong style="color:#E0E0E0;">» Deterministic Input:</strong> Polling Input phải được dời vào hàm <code>FixedUpdateNetwork</code> để đồng bộ hoàn hảo với Tickrate của Server.<br>
|
||||||
<strong style="color: #E0E0E0;">» Draw Call Budget:</strong> Mesh mê cung sau khi sinh ra phải gộp (Static Batching / GPU Instancing) để giữ số lượng Draw Calls ở mức vi mô.<br>
|
<strong style="color:#E0E0E0;">» Physics Matrix:</strong> Quy hoạch chặt chẽ Layer Collision Matrix. Khuyến khích dùng Box/Capsule Colliders cho môi trường lắt léo để giảm tải CPU.<br>
|
||||||
<strong style="color: #E0E0E0;">» Dynamic NavMesh:</strong> Bake tự động NavMesh <i>tại Runtime</i> sau khi chốt Seed mê cung, phục vụ AI Trapper hoặc kỹ năng đặc biệt.
|
<strong style="color:#E0E0E0;">» FSM Integrity:</strong> Mỗi State trong Kinematic FSM là một Sandbox độc lập, nghiêm cấm tiêm/thay đổi biến (Mutate) chéo giữa các trạng thái.
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
<td width="50%" style="padding:15px;background:rgba(255,215,0,0.02);">
|
||||||
|
<h3 style="margin:0 0 10px 0;color:#FFD700;"><img src="https://api.iconify.design/lucide/palette.svg?color=%23FFD700" width="20" style="vertical-align:middle;"> Render & UX <i>(Assigned to: Tuấn)</i></h3>
|
||||||
<!-- HÀNG 2 -->
|
<div style="font-size:13px;color:#AAA;line-height:1.6;">
|
||||||
<tr>
|
<strong style="color:#E0E0E0;">» URP 6.0 Pipeline:</strong> Khai thác tối đa Render Graph của Unity 6 để tạo ra Light-baking & Shadow-mapping chân thực cao với chi phí thấp.<br>
|
||||||
<!-- CỘT 3: GAMEPLAY -->
|
<strong style="color:#E0E0E0;">» Asset Compression:</strong> Chuẩn hóa mọi Texture về định dạng ASTC/DXT5. Polycount phải được kiểm duyệt khắt khe cho PC tầm trung.<br>
|
||||||
<td width="50%" style="padding: 15px; background: rgba(255,51,51,0.02); border-right: 2px solid #222;">
|
<strong style="color:#E0E0E0;">» UX Consistency:</strong> Các phản hồi thị giác/thính giác (Máu me, Cảnh báo bẫy, Tiếng tim đập) phải đồng nhất về cường độ, tạo phản xạ có điều kiện cho User.
|
||||||
<h3 style="margin: 0 0 10px 0; color: #FF3333;">
|
</div>
|
||||||
<img src="https://api.iconify.design/lucide/swords.svg?color=%23FF3333" width="20" style="vertical-align: middle;"> Mechanics <i>(Assigned to: Tuấn)</i>
|
</td>
|
||||||
</h3>
|
</tr>
|
||||||
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
|
|
||||||
<strong style="color: #E0E0E0;">» Deterministic Input:</strong> Polling Input phải được dời vào hàm <code>FixedUpdateNetwork</code> để đồng bộ hoàn hảo với Tickrate của Server.<br>
|
|
||||||
<strong style="color: #E0E0E0;">» Physics Matrix:</strong> Quy hoạch chặt chẽ Layer Collision Matrix. Khuyến khích dùng Box/Capsule Colliders cho môi trường lắt léo để giảm tải CPU.<br>
|
|
||||||
<strong style="color: #E0E0E0;">» FSM Integrity:</strong> Mỗi State trong Kinematic FSM là một Sandbox độc lập, nghiêm cấm tiêm/thay đổi biến (Mutate) chéo giữa các trạng thái.
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<!-- CỘT 4: VISUALS -->
|
|
||||||
<td width="50%" style="padding: 15px; background: rgba(255,215,0,0.02);">
|
|
||||||
<h3 style="margin: 0 0 10px 0; color: #FFD700;">
|
|
||||||
<img src="https://api.iconify.design/lucide/palette.svg?color=%23FFD700" width="20" style="vertical-align: middle;"> Render & UX <i>(Assigned to: Tuấn)</i>
|
|
||||||
</h3>
|
|
||||||
<div style="font-size: 13px; color: #AAA; line-height: 1.6;">
|
|
||||||
<strong style="color: #E0E0E0;">» URP 6.0 Pipeline:</strong> Khai thác tối đa Render Graph của Unity 6 để tạo ra Light-baking & Shadow-mapping chân thực cao với chi phí thấp.<br>
|
|
||||||
<strong style="color: #E0E0E0;">» Asset Compression:</strong> Chuẩn hóa mọi Texture về định dạng ASTC/DXT5. Polycount phải được kiểm duyệt khắt khe cho PC tầm trung.<br>
|
|
||||||
<strong style="color: #E0E0E0;">» UX Consistency:</strong> Các phản hồi thị giác/thính giác (Máu me, Cảnh báo bẫy, Tiếng tim đập) phải đồng nhất về cường độ, tạo phản xạ có điều kiện cho User.
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<div id="folders"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/folder-tree.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cấu trúc Thư mục (Workspace Architecture)
|
## <img src="https://api.iconify.design/lucide/folder-tree.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Cấu trúc Thư mục (Workspace Architecture)
|
||||||
|
|
||||||
> Cấu trúc không gian làm việc của **BABA_YAGA** tuân thủ nghiêm ngặt mô hình **Quy chuẩn Công nghiệp (Standard Industry Practices)**. Sự phân tách rạch ròi giữa Dữ liệu tĩnh (Assets), Lõi Logic (Core Scripts) và Cấu hình hệ thống (Configs) đảm bảo khả năng mở rộng (Scalability) và triệt tiêu Conflict khi làm việc nhóm.
|
> Cấu trúc không gian làm việc của **BABA_YAGA** tuân thủ nghiêm ngặt mô hình **Quy chuẩn Công nghiệp (Standard Industry Practices)**. Sự phân tách rạch ròi giữa Dữ liệu tĩnh (Assets), Lõi Logic (Core Scripts) và Cấu hình hệ thống (Configs) đảm bảo khả năng mở rộng (Scalability) và triệt tiêu Conflict khi làm việc nhóm.
|
||||||
@@ -1111,6 +1083,8 @@ Khi Trapper để mất quyền kiểm soát, Mê cung sẽ tự động phân r
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<div id="install"></div>
|
||||||
|
|
||||||
## <img src="https://api.iconify.design/lucide/terminal-square.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Giao thức Triển khai (Deployment Protocol)
|
## <img src="https://api.iconify.design/lucide/terminal-square.svg?color=%2333CCFF" width="28" height="28" style="vertical-align: middle;"> Giao thức Triển khai (Deployment Protocol)
|
||||||
|
|
||||||
> Hướng dẫn thiết lập môi trường phát triển và kết nối mạng lưới cho **BABA_YAGA**. Khuyến nghị sử dụng công cụ **ParrelSync** để tối ưu hóa quy trình kiểm thử Multiplayer (Mô phỏng Host/Client) ngay trên một Editor duy nhất.
|
> Hướng dẫn thiết lập môi trường phát triển và kết nối mạng lưới cho **BABA_YAGA**. Khuyến nghị sử dụng công cụ **ParrelSync** để tối ưu hóa quy trình kiểm thử Multiplayer (Mô phỏng Host/Client) ngay trên một Editor duy nhất.
|
||||||
@@ -1176,7 +1150,7 @@ git clone https://github.com/OnlyScove/BABA_YAGA.git
|
|||||||
|
|
||||||
Nhấp vào Smart Bootstrapper (Nằm trên thanh Menu Top-bar của Unity) để tự động hóa quy trình tiêm (Inject) cấu hình Network Runner.
|
Nhấp vào Smart Bootstrapper (Nằm trên thanh Menu Top-bar của Unity) để tự động hóa quy trình tiêm (Inject) cấu hình Network Runner.
|
||||||
|
|
||||||
Nhấn nút Play <img src="https://api.iconify.design/lucide/play.svg?color=%2300FF55" width="14" style="vertical-align: middle;"> trong Editor.
|
Nhấn nút Play <img src="https://api.iconify.design/lucide/play.svg?color=%2300FF55" width="14" style="vertical-align: middle;"> trong Editor.
|
||||||
|
|
||||||
Để test thực tế: Khuyến nghị Build ra file .exe độc lập, hoặc sử dụng hệ thống ParrelSync Clone Editor để chạy 2 Instances song song.
|
Để test thực tế: Khuyến nghị Build ra file .exe độc lập, hoặc sử dụng hệ thống ParrelSync Clone Editor để chạy 2 Instances song song.
|
||||||
|
|
||||||
@@ -1205,7 +1179,7 @@ git clone https://github.com/OnlyScove/BABA_YAGA.git
|
|||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
<br>
|
<br>
|
||||||
<img src="https://scove-vault.duckdns.org/files/share/hARx-n28" alt="Network Visitors" style="border-radius: 4px; opacity: 0.8;">
|
<img src="https://scove-vault.duckdns.org/files/api/public/dl/hARx-n28" alt="Network Visitors" style="border-radius: 4px; opacity: 0.8;">
|
||||||
<br><br>
|
<br><br>
|
||||||
<!-- SEPARATOR LINE -->
|
<!-- SEPARATOR LINE -->
|
||||||
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="80%" height="2px" style="filter: grayscale(100%) contrast(200%) sepia(100%) hue-rotate(300deg) saturate(500%);">
|
<img src="https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png" width="80%" height="2px" style="filter: grayscale(100%) contrast(200%) sepia(100%) hue-rotate(300deg) saturate(500%);">
|
||||||
|
|||||||
Reference in New Issue
Block a user