1
0
forked from Rowland/EG
EG/demo/quick_script_test.py
2025-07-10 09:19:51 +08:00

170 lines
5.7 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
脚本系统快速测试
验证脚本系统的基本功能是否正常工作
"""
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
def quick_test():
"""快速测试脚本系统"""
print("=== 脚本系统快速测试 ===\n")
try:
# 1. 导入主程序
print("1. 导入主程序...")
from main import MyWorld
print("✓ 主程序导入成功")
# 2. 创建世界实例
print("\n2. 创建世界实例...")
world = MyWorld()
print("✓ 世界实例创建成功")
# 3. 检查脚本管理器
print("\n3. 检查脚本管理器...")
if hasattr(world, 'script_manager'):
print("✓ 脚本管理器存在")
print(f" - 脚本引擎: {world.script_manager.engine}")
print(f" - 脚本加载器: {world.script_manager.loader}")
print(f" - 脚本API: {world.script_manager.api}")
else:
print("✗ 脚本管理器不存在")
return False
# 4. 测试脚本目录创建
print("\n4. 测试脚本目录...")
scripts_dir = world.script_manager.scripts_directory
if os.path.exists(scripts_dir):
print(f"✓ 脚本目录存在: {scripts_dir}")
# 列出目录中的文件
files = os.listdir(scripts_dir)
print(f" - 目录中的文件: {files}")
else:
print(f"✗ 脚本目录不存在: {scripts_dir}")
# 5. 测试脚本加载
print("\n5. 测试脚本加载...")
world.loadAllScripts()
available_scripts = world.getAvailableScripts()
print(f"✓ 可用脚本: {available_scripts}")
# 6. 测试对象创建和脚本挂载
print("\n6. 测试脚本挂载...")
test_object = world.render.attachNewNode("TestObject")
print(f"✓ 创建测试对象: {test_object.getName()}")
if "ExampleScript" in available_scripts:
script_comp = world.addScript(test_object, "ExampleScript")
if script_comp:
print("✓ 脚本挂载成功")
print(f" - 脚本类型: {script_comp.script_instance.__class__.__name__}")
print(f" - 脚本启用: {script_comp.enabled}")
else:
print("✗ 脚本挂载失败")
else:
print("! 没有ExampleScript可用于测试")
# 7. 测试脚本系统状态
print("\n7. 脚本系统状态...")
engine = world.script_manager.engine
print(f" - 脚本引擎运行: {engine.update_task is not None}")
print(f" - 脚本组件数量: {len(engine.script_components)}")
print(f" - 有脚本的对象数量: {len(world.script_manager.object_scripts)}")
# 8. 测试脚本创建
print("\n8. 测试脚本创建...")
new_script_path = world.createScript("test_quick_script", "basic")
print(f"✓ 创建新脚本: {new_script_path}")
if os.path.exists(new_script_path):
print("✓ 脚本文件创建成功")
else:
print("✗ 脚本文件创建失败")
print("\n=== 快速测试完成 ===")
print("✓ 脚本系统基本功能正常")
return True
except Exception as e:
print(f"\n✗ 测试过程中出现错误: {e}")
import traceback
traceback.print_exc()
return False
def test_script_execution():
"""测试脚本执行"""
print("\n=== 脚本执行测试 ===")
try:
from main import MyWorld
world = MyWorld()
world.loadAllScripts()
# 创建测试对象
test_obj = world.render.attachNewNode("ExecutionTest")
test_obj.setPos(0, 10, 0)
# 添加脚本
available_scripts = world.getAvailableScripts()
if available_scripts:
script_name = available_scripts[0]
script_comp = world.addScript(test_obj, script_name)
if script_comp:
print(f"✓ 添加脚本: {script_name}")
# 手动触发脚本生命周期
print("\n模拟脚本执行...")
# Start
if not script_comp._started:
script_comp.start()
print("✓ 调用脚本start()方法")
# Update几次
for i in range(3):
script_comp.update(0.016) # 约60FPS
print(f"✓ 调用脚本update()方法 ({i+1}/3)")
# 禁用/启用测试
script_comp.set_enabled(False)
print("✓ 禁用脚本")
script_comp.set_enabled(True)
print("✓ 重新启用脚本")
# 销毁
script_comp.destroy()
print("✓ 销毁脚本")
print("\n✓ 脚本执行测试完成")
else:
print("✗ 脚本添加失败")
else:
print("! 没有可用脚本进行测试")
except Exception as e:
print(f"✗ 脚本执行测试失败: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
# 运行快速测试
success = quick_test()
if success:
# 如果基本测试通过,运行执行测试
test_script_execution()
else:
print("\n基本测试失败,跳过执行测试")
print("\n测试完成!")