278 lines
13 KiB
Markdown
278 lines
13 KiB
Markdown
# 项目任务清单(Project Task Checklist)
|
||
|
||
更新时间:2026-03-01
|
||
适用范围:`d:\IMGUI\EG` 本地工作区(不含远程仓库内容)
|
||
|
||
## 目标
|
||
|
||
- 保持编辑器主路径稳定运行在 ImGui + Panda3D。
|
||
- 持续收敛历史兼容耦合(`interface_manager/treeWidget/gui_manager`)。
|
||
- 基于可执行任务包推进非 VR 优化重构。
|
||
|
||
## 当前状态总览
|
||
|
||
- Qt 运行依赖主路径已清理完成(排除 `RenderPipelineFile`)。
|
||
- 项目已进入“非 VR 结构优化阶段”。
|
||
- `_getActor`、`updateGizmoDrag`、`_update_drag` 第一轮拆分已完成。
|
||
- `资源管理器面板` 已完成“保留原布局/样式/交互”的第二轮拆分收敛。
|
||
- `_draw_component_properties` 已完成第一轮“编排入口 + 子流程”拆分(入口 `1441 -> 3` 行)。
|
||
- `_handle_resize_drag` 已完成第三轮“边界计算 / 更新应用”细拆(核心 `44` 行)。
|
||
- `_draw_video_source_and_audio_controls` 已完成第三轮“音频/视频源/加载应用”拆分(`231 -> 4` 行)。
|
||
- `_draw_text_and_button_properties` 已完成第四轮“文本/颜色/按钮贴图”拆分(`216 -> 14` 行)。
|
||
- `_set_parent_child_relationship` 已完成第四轮“关系编排 + 可见层级”拆分(`234 -> 43` 行)。
|
||
- `_draw_layout_transform_properties` 已完成第四轮“布局/尺寸/Z-Offset”拆分(`200 -> 10` 行)。
|
||
|
||
## 已完成(Done)
|
||
|
||
### A. Qt 清理与迁移完成
|
||
|
||
- [x] 清理主路径 Qt 直接依赖:`PyQt/PySide/Qt` 扫描主路径为 `0`。
|
||
- [x] `core/InfoPanelManager.py`:去除 Qt 直接导入。
|
||
- [x] `core/selection.py`:光标逻辑改为 Panda3D 路径。
|
||
- [x] `scene/scene_manager_convert_tiles_mixin.py`:移除 `QProgressDialog`。
|
||
- [x] `ui/widgets.py`:替换为 legacy 占位模块。
|
||
- [x] `ui/icon_manager.py`:替换为无 Qt 兼容实现。
|
||
- [x] `core/world.py` / `core/vr_manager.py` / `core/vr/testing/test_mode.py`:清理 `qtWidget` 语义依赖。
|
||
- [x] `requirements/*`:移除 Qt/PySide 运行依赖。
|
||
|
||
### B. 上下文收敛与基础重构完成
|
||
|
||
- [x] 建立 `core/editor_context.py`,并完成第一批接入:
|
||
- `core/event_handler.py`
|
||
- `core/selection.py`
|
||
- `core/InfoPanelManager.py`
|
||
- `ui/panels/runtime_actions.py`
|
||
- `core/terrain_manager.py`
|
||
- `scene/scene_manager_convert_tiles_mixin.py`
|
||
- `scene/scene_manager_serialization_mixin.py`
|
||
- `scene/scene_manager_model_mixin.py`
|
||
- [x] `scene/scene_manager_io_mixin.py::loadScene` 完成两轮拆分(`556 -> 74` 行)。
|
||
- [x] `main.py::__init__` 第一轮拆分完成(`375 -> 27` 行,VR 初始化逻辑保持原样)。
|
||
|
||
### C. 面板模块化完成
|
||
|
||
- [x] `ui/panels/editor_panels.py` 按布局拆分为 4 个模块:
|
||
- `editor_panels_top.py`
|
||
- `editor_panels_left.py`
|
||
- `editor_panels_center.py`
|
||
- `editor_panels_right.py`
|
||
- [x] `editor_panels_right.py` 再拆分为 3 个子 mixin:
|
||
- `editor_panels_right_transform.py`
|
||
- `editor_panels_right_material.py`
|
||
- `editor_panels_right_collision.py`
|
||
|
||
### D. 动画加载入口拆分完成(第一轮)
|
||
|
||
- [x] `ui/panels/animation_tools.py::_getActor` 第一轮拆分完成:
|
||
- 行数:`510 -> 39`
|
||
- 新增 helper:`_sync_owner_model_path_tags`、`_get_valid_cached_actor`、`_try_memory_fallback_actor`、`_collect_actor_candidate_paths`、`_try_actor_from_path` 等
|
||
- 保持策略:文件路径优先,失败后内存/autoBind 兜底
|
||
|
||
### E. Gizmo 拖拽拆分完成(第一轮)
|
||
|
||
- [x] `core/selection.py::updateGizmoDrag` 第一轮拆分完成:
|
||
- 行数:`278 -> 32`
|
||
- 近似圈复杂度:`65 -> 10`
|
||
- 新增 helper:`_validate_gizmo_drag_state`、`_apply_scale_drag`、`_apply_rotate_drag`、`_compute_axis_movement_distance`、`_apply_translate_drag`
|
||
- 保持目标:gizmo 缩放/旋转/平移行为不变
|
||
|
||
### F. LUI 拖拽链路拆分完成(第一轮)
|
||
|
||
- [x] `ui/LUI/lui_manager_interaction.py::_update_drag` 第一轮拆分完成:
|
||
- 行数:`348 -> 28`
|
||
- 近似圈复杂度:`79 -> 7`
|
||
- 新增 helper:`_process_canvas_drag`、`_try_start_pending_component_drag`、`_finish_component_drag_if_released`、`_update_active_component_drag`
|
||
- 保持目标:Canvas/组件拖拽、吸附与释放语义不变
|
||
|
||
### G. 资源管理器面板拆分完成(保留布局版)
|
||
|
||
- [x] 第一轮低侵入优化:
|
||
- 行数:`310 -> 163`
|
||
- 近似圈复杂度:`88 -> 41`
|
||
- 新增 helper:`_draw_resource_toolbar_and_filters`、`_load_resource_icon`、`_handle_resource_item_selection`、`_open_resource_item_context_menu`、`_handle_resource_file_double_click`、`_draw_resource_context_menu`
|
||
- [x] 第二轮(按当前标准重启,保持布局/样式/文案/交互顺序):
|
||
- 入口函数行数:`163 -> 23`(相对原始 `310 -> 23`)
|
||
- 新增 helper:`_update_resource_manager_window_rect`、`_draw_resource_directory_entries`、`_draw_resource_directory_entry`、`_draw_resource_directory_children`、`_draw_resource_subdir_entry`、`_draw_resource_subfile_entry`、`_draw_resource_file_entries`、`_draw_resource_file_entry`
|
||
- 保持目标:不改视觉布局,不改交互语义,仅做结构分解
|
||
|
||
### H. LUI 属性面板拆分完成(第一轮编排)
|
||
|
||
- [x] `ui/LUI/lui_function_properties.py::_draw_component_properties` 第一轮拆分完成:
|
||
- 入口函数行数:`1441 -> 3`
|
||
- 编排主流程函数:`_draw_component_properties_core = 34` 行
|
||
- 新增 helper:
|
||
- `_draw_text_and_button_properties`(`216` 行)
|
||
- `_draw_layout_transform_properties`(`200` 行)
|
||
- `_draw_type_specific_properties`(`835` 行)
|
||
- `_draw_anchor_and_hierarchy_properties`(`168` 行)
|
||
- 保持目标:属性面板行为不变,先完成入口和流程层收敛
|
||
|
||
### I. LUI 缩放链路拆分完成(第二轮)
|
||
|
||
- [x] `ui/LUI/lui_manager_interaction.py::_handle_resize_drag` 第二轮拆分完成:
|
||
- 入口函数行数:`257 -> 3`
|
||
- 编排主流程函数:`_handle_resize_drag_core = 44` 行
|
||
- 新增 helper:
|
||
- `_finish_resize_drag_if_released`(`19` 行)
|
||
- `_compute_resize_drag_bounds`(`109` 行)
|
||
- `_apply_resize_drag_updates`(`110` 行)
|
||
- 保持目标:缩放手柄行为与边界语义保持一致
|
||
|
||
### J. LUI 属性类型分支拆分完成(第二轮)
|
||
|
||
- [x] `ui/LUI/lui_function_properties.py::_draw_type_specific_properties` 第二轮拆分完成:
|
||
- 主函数行数:`835 -> 25`(类型分发入口)
|
||
- 新增类型 helper:
|
||
- `_draw_type_props_input_field`(`91` 行)
|
||
- `_draw_type_props_slider`(`11` 行)
|
||
- `_draw_type_props_checkbox`(`19` 行)
|
||
- `_draw_type_props_plane_image`(`152` 行)
|
||
- `_draw_type_props_frame`(`14` 行)
|
||
- `_draw_type_props_selectbox`(`84` 行)
|
||
- `_draw_type_props_http_text`(`72` 行)
|
||
- `_draw_type_props_video`(`10` 行)
|
||
- `_draw_video_source_and_audio_controls`(`231` 行)
|
||
- `_draw_video_playback_controls`(`147` 行)
|
||
- 保持目标:各组件类型交互语义保持一致,先完成类型分发层收敛
|
||
|
||
### K. LUI 视频属性段拆分完成(第三轮)
|
||
|
||
- [x] `ui/LUI/lui_function_properties.py::_draw_video_source_and_audio_controls` 第三轮拆分完成:
|
||
- 主函数行数:`231 -> 4`(编排入口)
|
||
- 新增 helper:
|
||
- `_draw_video_audio_controls`(`26` 行)
|
||
- `_draw_video_source_controls`(`19` 行)
|
||
- `_process_pending_video_source`(`22` 行)
|
||
- `_load_video_texture_from_source`(`21` 行)
|
||
- `_apply_loaded_video_texture`(`14` 行)
|
||
- `_sync_video_size_and_sprite`(`28` 行)
|
||
- `_replace_video_sprite`(`23` 行)
|
||
- `_refresh_video_keep_alive_node`(`22` 行)
|
||
- `_load_audio_for_component`(`22` 行)
|
||
- `_start_video_texture_playback`(`7` 行)
|
||
- 保持目标:本地视频加载/URL加载回退/音频联动语义保持一致
|
||
|
||
### L. LUI 缩放链路细拆完成(第三轮)
|
||
|
||
- [x] `ui/LUI/lui_manager_interaction.py::_compute_resize_drag_bounds` / `_apply_resize_drag_updates` 第三轮细拆完成:
|
||
- 主函数行数:`109 -> 27` / `110 -> 21`
|
||
- 新增 helper:
|
||
- `_get_resize_start_values`(`7` 行)
|
||
- `_apply_resize_handle_delta`(`36` 行)
|
||
- `_apply_resize_min_size_clamp`(`15` 行)
|
||
- `_apply_shift_keep_ratio_resize`(`17` 行)
|
||
- `_apply_alt_center_resize`(`22` 行)
|
||
- `_cache_resize_canvas_bounds`(`8` 行)
|
||
- `_sanitize_resize_dimensions`(`6` 行)
|
||
- `_resolve_resize_parent_context`(`13` 行)
|
||
- `_write_resize_component_data`(`5` 行)
|
||
- `_apply_resize_component_position`(`9` 行)
|
||
- `_apply_resize_component_size_by_type`(`24` 行)
|
||
- `_apply_button_resize_size`(`7` 行)
|
||
- `_apply_input_field_resize_size`(`10` 行)
|
||
- `_sync_input_field_layout_stretch`(`22` 行)
|
||
- `_post_resize_component_sync`(`7` 行)
|
||
- `_get_resize_modifier_info`(`7` 行)
|
||
- 保持目标:缩放手柄行为与边界语义保持一致
|
||
|
||
### M. LUI 文本按钮属性段拆分完成(第四轮)
|
||
|
||
- [x] `ui/LUI/lui_function_properties.py::_draw_text_and_button_properties` 第四轮拆分完成:
|
||
- 主函数行数:`216 -> 14`
|
||
- 新增 helper:
|
||
- `_draw_text_content_editor`(`13` 行)
|
||
- `_draw_text_font_size_editor`(`18` 行)
|
||
- `_draw_text_color_editor`(`11` 行)
|
||
- `_sync_text_or_button_color`(`10` 行)
|
||
- `_apply_button_layout_color`(`12` 行)
|
||
- `_apply_text_color`(`3` 行)
|
||
- `_draw_button_texture_controls`(`19` 行)
|
||
- `_draw_button_texture_pick_button`(`22` 行)
|
||
- `_apply_button_texture_variant`(`28` 行)
|
||
- `_unpack_button_atlas_result`(`9` 行)
|
||
- `_apply_button_custom_textures`(`11` 行)
|
||
- `_fit_button_to_default_texture_size`(`22` 行)
|
||
- `_clear_button_custom_textures`(`13` 行)
|
||
- `_draw_button_texture_path_labels`(`7` 行)
|
||
- 保持目标:文本/按钮编辑行为与贴图切换语义保持一致
|
||
|
||
### N. LUI 层级编辑父子关系拆分完成(第四轮)
|
||
|
||
- [x] `ui/LUI/lui_manager_editor.py::_set_parent_child_relationship` 第四轮拆分完成:
|
||
- 主函数行数:`234 -> 43`
|
||
- 新增 helper:
|
||
- `_is_valid_relationship_index`(`5` 行)
|
||
- `_prepare_parent_child_link`(`8` 行)
|
||
- `_remove_child_from_old_parent`(`8` 行)
|
||
- `_attach_child_to_new_parent`(`6` 行)
|
||
- `_compute_new_child_local_position`(`7` 行)
|
||
- `_resolve_parent_visual_object`(`10` 行)
|
||
- `_set_child_visual_parent_policy`(`12` 行)
|
||
- `_clamp_child_local_within_parent`(`27` 行)
|
||
- `_sync_child_canvas_index_with_parent`(`7` 行)
|
||
- `_apply_child_absolute_position`(`10` 行)
|
||
- `_ensure_child_visibility_and_layer`(`19` 行)
|
||
- `_ensure_button_child_visibility`(`15` 行)
|
||
- `_ensure_frame_child_visibility`(`9` 行)
|
||
- `_ensure_media_child_visibility`(`13` 行)
|
||
- `_ensure_child_sprite_visibility_and_layer`(`24` 行)
|
||
- `_finalize_parent_child_link`(`9` 行)
|
||
- 保持目标:逻辑父子关系/可见层级/画布索引同步语义保持一致
|
||
|
||
### O. LUI 布局变换属性段拆分完成(第四轮)
|
||
|
||
- [x] `ui/LUI/lui_function_properties.py::_draw_layout_transform_properties` 第四轮拆分完成:
|
||
- 主函数行数:`200 -> 10`
|
||
- 新增 helper:
|
||
- `_draw_fill_layout_controls`(`37` 行)
|
||
- `_draw_position_controls`(`18` 行)
|
||
- `_draw_size_controls`(`17` 行)
|
||
- `_draw_width_control`(`23` 行)
|
||
- `_draw_height_control`(`19` 行)
|
||
- `_post_size_control_sync`(`9` 行)
|
||
- `_draw_layout_group_controls`(`53` 行)
|
||
- `_draw_z_offset_controls`(`27` 行)
|
||
- 保持目标:填充模式/尺寸联动/Layout Group/Z-Offset 行为一致
|
||
|
||
## 下一步(Next)
|
||
|
||
### N1 `顶部菜单栏` 拆分(最高优先级,非 VR)
|
||
|
||
- 目标文件:`ui/panels/editor_panels_top.py::draw_menu_bar`
|
||
- 当前规模:`227` 行
|
||
- 验收目标:
|
||
- 拆分为“菜单组渲染 / 行为分发 / 状态同步”子流程
|
||
- 单函数规模收敛到 `<= 170` 行
|
||
- 保持现有菜单项顺序与功能一致
|
||
|
||
### N2 `场景保存链路` 拆分(高优先级,非 VR)
|
||
|
||
- 目标文件:`scene/scene_manager_io_mixin.py::saveScene`
|
||
- 当前规模:`222` 行
|
||
- 验收目标:
|
||
- 拆分为“保存前校验 / 节点序列化 / 后处理”子流程
|
||
- 单函数规模收敛到 `<= 170` 行
|
||
- 保持保存行为与输出格式一致
|
||
|
||
### N3 `属性面板方法注入` 拆分(中优先级,非 VR)
|
||
|
||
- 目标文件:`core/InfoPanelManager.py::add_methods_to_property_panel`
|
||
- 当前规模:`209` 行
|
||
- 验收目标:
|
||
- 拆分为“能力绑定 / 兼容兜底 / 日志分层”子流程
|
||
- 单函数规模收敛到 `<= 170` 行
|
||
- 保持属性面板行为一致
|
||
|
||
## 验收标准(阶段)
|
||
|
||
- 不安装 PyQt/PySide 时,`python main.py` 可进入编辑器主界面。
|
||
- 非 VR 主流程(导入/选择/变换/保存/加载)无 Qt 残余异常。
|
||
- 每轮重构后可通过最小回归(启动、导入、播放动画、保存加载)。
|
||
|
||
## 关联文档
|
||
|
||
- 优化分析:`PROJECT_OPTIMIZATION_ANALYSIS.md`
|
||
- 模块索引:`PROJECT_MODULE_INDEX.md`
|
||
- 全量目录:`PROJECT_FULL_CATALOG.md`
|
||
- 历史分析:`IMGUI_MODULE_ANALYSIS.md`
|