feat: implement replay system with action dispatchers and context switching between main and playback modes

This commit is contained in:
taDuc
2026-05-15 19:39:02 +07:00
parent 3682f25282
commit 4c81862bb4
15 changed files with 595 additions and 59 deletions
+29 -15
View File
@@ -32,24 +32,38 @@ export type CommitSnapshot = {
// ---- Replay / Scripting System ----
export type UIFunctionName =
| "hide_timeline"
| "hide_layer_panel"
| "hide_wiki_panel"
| "hide_zoom_panel"
| "hide_all_UI"
| "open_wiki";
| "hide_timeline" // Ẩn thanh timeline
| "hide_layer_panel" // Ẩn panel lớp bản đồ
| "hide_wiki_panel" // Ẩn panel wiki (bên phải)
| "hide_zoom_panel" // Ẩn các nút điều khiển zoom
| "hide_all_UI" // Ẩn toàn bộ giao diện điều khiển (cinematic mode)
| "open_wiki" // Mở panel wiki
| "show_toast_message" // Hiển thị thông báo ngắn (toast)
| "focus_wiki_header" // Cuộn đến đề mục cụ thể trong Wiki
| "set_playback_speed"; // Thay đổi tốc độ phát replay
export type MapFunctionName =
| "zoom_to_lnglat"
| "zoom_scale"
| "zoom_geometries"
| "change_geometry_color"
| "change_geometries_color"
| "change_geometry_texture"
| "change_geometries_texture"
| "hide_geometries";
| "zoom_to_lnglat" // Di chuyển camera đến tọa độ [lng, lat]
| "zoom_scale" // Thay đổi mức zoom của bản đồ
| "zoom_geometries" // Zoom bao quát danh sách các geometry
| "change_geometry_color" // Thay đổi màu của một geometry
| "change_geometries_color" // Thay đổi màu của danh sách geometry
| "change_geometry_texture" // Thay đổi texture của một geometry
| "change_geometries_texture"// Thay đổi texture của danh sách geometry
| "hide_geometries" // Ẩn danh sách các geometry
| "set_camera_view" // Đặt trạng thái camera (center, zoom, pitch, bearing)
| "fly_to_geometry" // Di chuyển mượt mà đến một geometry
| "rotate_around_point" // Xoay camera quanh một điểm
| "pulse_geometry" // Hiệu ứng nhấp nháy cho geometry
| "set_time_filter" // Thay đổi bộ lọc thời gian trên bản đồ
| "toggle_labels"; // Bật/tắt hiển thị nhãn (labels) trên bản đồ
export type NarrativeFunctionName = "set_title" | "set_descriptions";
export type NarrativeFunctionName =
| "set_title" // Đặt tiêu đề cho bước replay
| "set_descriptions" // Đặt mô tả/nội dung diễn giải
| "show_dialog_box" // Hiển thị hộp thoại dẫn chuyện (có avatar)
| "display_historical_image" // Hiển thị hình ảnh tư liệu đè lên bản đồ
| "set_step_subtitle"; // Hiển thị phụ đề phía dưới màn hình
export type ReplayAction<T> = {
function_name: T;