#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
射线显示测试 - 测试鼠标点击射线的可视化功能

使用说明：
1. 运行脚本启动3D编辑器
2. 点击鼠标左键，观察射线显示
3. 按R键切换射线显示开关
4. 射线颜色说明：
   - 蓝色：没有碰撞的射线
   - 绿色段：从相机到碰撞点
   - 红色段：从碰撞点到远处
   - 黄色十字：碰撞点标记
"""

import sys
import os

# 添加主目录到Python路径
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))

from main import MyWorld
from ui.main_window import setup_main_window
from PyQt5.QtCore import Qt


def setup_ray_display_demo():
    """设置射线显示演示"""
    
    # 创建世界对象
    world = MyWorld()
    
    # 使用新的UI模块创建主窗口
    app, main_window = setup_main_window(world)
    
    # 设置窗口标题
    main_window.setWindowTitle("射线显示测试 - 点击鼠标查看射线，按R键切换显示")
    
    # 设置焦点策略，确保主窗口能接收键盘事件
    main_window.setFocusPolicy(Qt.StrongFocus)
    main_window.setFocus()
    
    # 添加键盘事件处理
    def keyPressEvent(event):
        print(f"检测到按键: {event.key()}, Qt.Key_R = {Qt.Key_R}")
        key = event.key()
        if key == Qt.Key_R:  # R键
            state = world.toggleRayDisplay()
            status = "开启" if state else "关闭"
            print(f"\n=== 射线显示已{status} ===")
            print(f"当前射线显示状态: {world.getRayDisplay()}")
            event.accept()  # 标记事件已处理
            return
        
        # 调用原始的键盘事件处理（如果存在）
        if hasattr(main_window, '_original_keyPressEvent'):
            main_window._original_keyPressEvent(event)
        else:
            event.ignore()
    
    # 保存原始的键盘事件处理器（如果存在）
    if hasattr(main_window, 'keyPressEvent'):
        main_window._original_keyPressEvent = main_window.keyPressEvent
    main_window.keyPressEvent = keyPressEvent
    
    # 添加射线显示菜单项（备用方案）
    rayMenu = main_window.menuBar().addMenu('射线调试')
    toggleRayAction = rayMenu.addAction('切换射线显示 (R)')
    toggleRayAction.triggered.connect(lambda: toggle_and_print_ray_status())
    
    def toggle_and_print_ray_status():
        state = world.toggleRayDisplay()
        status = "开启" if state else "关闭"
        print(f"\n=== 射线显示已{status} ===")
        print(f"当前射线显示状态: {world.getRayDisplay()}")
    
    # 输出使用说明
    print("\n" + "="*60)
    print("射线显示测试启动完成！")
    print("="*60)
    print("使用说明：")
    print("1. 默认不显示射线")
    print("2. 切换射线显示的两种方式：")
    print("   - 按R键切换")
    print("   - 或点击菜单 [射线调试] -> [切换射线显示]")
    print("3. 点击鼠标左键查看射线（需先开启显示）")
    print("4. 射线颜色说明：")
    print("   - 蓝色：没有碰撞的射线")
    print("   - 绿色段：从相机到碰撞点") 
    print("   - 红色段：从碰撞点延伸")
    print("   - 黄色十字：碰撞点标记")
    print("5. 射线会在2秒后自动消失")
    print(f"6. 当前射线显示状态: {'开启' if world.getRayDisplay() else '关闭'}")
    print("="*60)
    
    return app, main_window, world


if __name__ == "__main__":
    try:
        app, main_window, world = setup_ray_display_demo()
        
        # 启动应用程序
        sys.exit(app.exec_())
        
    except Exception as e:
        print(f"启动失败: {str(e)}")
        import traceback
        traceback.print_exc() 