""" 环境感知示例 演示如何使用环境感知和响应机制 """ from panda3d.core import Vec3 import sys import os # 添加插件路径 plugin_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, plugin_dir) from swarm_manager import SwarmManager from config import Config def create_environment_demo(world): """ 创建环境感知演示 """ print("创建环境感知演示...") # 创建群体管理器 swarm_manager = SwarmManager(world) # 配置环境感知参数 config = swarm_manager.config # 启用环境感知 config.set("environment_awareness_enabled", True) # 设置传感器参数 config.set("sensor_range", 20.0) # 增加传感器范围 config.set("sensor_accuracy", 0.95) # 提高传感器精度 # 设置环境响应权重 config.set("obstacle_response_weight", 2.5) config.set("predator_response_weight", 3.5) config.set("resource_seek_weight", 0.8) config.set("hazard_avoid_weight", 4.0) # 创建示例群体 swarm_manager.create_example_swarm("鸟类", 30) # 添加环境元素 # 1. 添加障碍物 swarm_manager.create_obstacle(Vec3(10, 10, 5), 3.0) swarm_manager.create_obstacle(Vec3(-15, 5, 8), 2.5) swarm_manager.create_obstacle(Vec3(0, -20, 3), 4.0) # 2. 添加捕食者 predator = swarm_manager.create_predator(Vec3(25, 0, 10)) # 3. 添加资源点 if hasattr(swarm_manager, 'environment_manager'): swarm_manager.environment_manager.add_resource(Vec3(-10, 15, 5), "食物", 100.0) swarm_manager.environment_manager.add_resource(Vec3(20, -10, 7), "水源", 80.0) # 4. 添加危险区域 if hasattr(swarm_manager, 'environment_manager'): swarm_manager.environment_manager.add_hazard(Vec3(5, 0, 5), "有毒气体", 6.0) swarm_manager.environment_manager.add_hazard(Vec3(-25, -15, 3), "辐射区", 8.0) # 设置目标点(让群体向目标移动,观察环境响应) swarm_manager.set_target(Vec3(30, 30, 15)) config.set("seek_enabled", True) print("环境感知演示创建完成") print(f"- 群体成员数量: {len(swarm_manager.members)}") print(f"- 障碍物数量: {len(swarm_manager.obstacles)}") print(f"- 捕食者数量: {len(swarm_manager.predators)}") if hasattr(swarm_manager, 'environment_manager'): env_info = swarm_manager.environment_manager.get_environment_info() print(f"- 资源点数量: {len(env_info.get('resources', []))}") print(f"- 危险区域数量: {len(env_info.get('hazards', []))}") return swarm_manager def update_environment_demo(swarm_manager, dt): """ 更新环境感知演示 """ # 更新环境时间 if hasattr(swarm_manager, 'environment_manager'): swarm_manager.environment_manager.advance_time(dt) swarm_manager.environment_manager.update_environment_dynamics() # 可以在这里添加动态环境变化 # 例如:移动障碍物、改变天气等 def demo_environment_awareness_features(): """ 演示环境感知特性的使用方法 """ print("=== 环境感知特性演示 ===") # 1. 传感器配置 print("1. 传感器配置:") print(" - sensor_range: 传感器的感知范围") print(" - sensor_accuracy: 传感器的精度 (0.0-1.0)") # 2. 环境响应权重 print("2. 环境响应权重:") print(" - obstacle_response_weight: 避障响应权重") print(" - predator_response_weight: 躲避捕食者响应权重") print(" - resource_seek_weight: 寻找资源响应权重") print(" - hazard_avoid_weight: 避开危险区域响应权重") # 3. 环境元素 print("3. 环境元素:") print(" - obstacles: 障碍物") print(" - predators: 捕食者") print(" - resources: 资源点") print(" - hazards: 危险区域") # 4. 环境动态 print("4. 环境动态:") print(" - time_of_day: 时间变化") print(" - weather: 天气变化") print(" - resource regeneration: 资源恢复") if __name__ == "__main__": # 如果直接运行此脚本,显示特性说明 demo_environment_awareness_features()