"""
高级群体智能示例
演示复杂的群体行为和交互
"""

from panda3d.core import Vec3
import random

def create_bird_flock(swarm_manager):
    """
    创建鸟类群体
    """
    print("创建鸟类群体...")
    
    # 设置群体类型
    swarm_manager.update_swarm_type("鸟类")
    
    # 配置参数
    swarm_manager.config.set("member_count", 50)
    swarm_manager.config.set("cohesion_weight", 1.2)
    swarm_manager.config.set("separation_weight", 1.8)
    swarm_manager.config.set("alignment_weight", 1.0)
    swarm_manager.config.set("perception_radius", 15.0)
    swarm_manager.config.set("max_speed", 8.0)
    
    # 重新创建群体
    swarm_manager.reset()
    
    print("鸟类群体创建完成，包含50个成员")
    
def create_fish_school(swarm_manager):
    """
    创建鱼群
    """
    print("创建鱼群...")
    
    # 设置群体类型
    swarm_manager.update_swarm_type("鱼类")
    
    # 配置参数
    swarm_manager.config.set("member_count", 30)
    swarm_manager.config.set("cohesion_weight", 1.5)
    swarm_manager.config.set("separation_weight", 2.0)
    swarm_manager.config.set("alignment_weight", 1.2)
    swarm_manager.config.set("perception_radius", 8.0)
    swarm_manager.config.set("max_speed", 6.0)
    
    # 重新创建群体
    swarm_manager.reset()
    
    print("鱼群创建完成，包含30个成员")
    
def create_insect_swarm(swarm_manager):
    """
    创建昆虫群体
    """
    print("创建昆虫群体...")
    
    # 设置群体类型
    swarm_manager.update_swarm_type("昆虫")
    
    # 启用游走行为
    swarm_manager.config.set("wander_enabled", True)
    swarm_manager.config.set("wander_weight", 0.8)
    
    # 配置参数
    swarm_manager.config.set("member_count", 100)
    swarm_manager.config.set("cohesion_weight", 0.8)
    swarm_manager.config.set("separation_weight", 1.2)
    swarm_manager.config.set("alignment_weight", 0.6)
    swarm_manager.config.set("perception_radius", 5.0)
    swarm_manager.config.set("max_speed", 10.0)
    
    # 重新创建群体
    swarm_manager.reset()
    
    print("昆虫群体创建完成，包含100个成员")
    
def add_obstacles(swarm_manager, count=5):
    """
    添加障碍物
    """
    print(f"添加{count}个障碍物...")
    
    for i in range(count):
        # 随机位置
        position = Vec3(
            random.uniform(-30, 30),
            random.uniform(-30, 30),
            random.uniform(5, 20)
        )
        # 随机半径
        radius = random.uniform(2, 5)
        
        # 创建障碍物
        swarm_manager.create_obstacle(position, radius)
        
    print(f"障碍物添加完成")
    
def add_predators(swarm_manager, count=2):
    """
    添加捕食者
    """
    print(f"添加{count}个捕食者...")
    
    for i in range(count):
        # 随机位置
        position = Vec3(
            random.uniform(-40, 40),
            random.uniform(-40, 40),
            random.uniform(5, 25)
        )
        
        # 创建捕食者
        swarm_manager.create_predator(position)
        
    print(f"捕食者添加完成")
    
def create_v_formation(swarm_manager):
    """
    创建V字形队形
    """
    print("创建V字形队形...")
    
    # 启用队形保持
    swarm_manager.config.set("formation_enabled", True)
    swarm_manager.config.set("formation_type", "V字形")
    swarm_manager.config.set("formation_weight", 2.0)
    
    # 设置目标
    target = Vec3(0, 50, 15)
    swarm_manager.set_target(target)
    swarm_manager.config.set("seek_enabled", True)
    swarm_manager.config.set("seek_weight", 1.5)
    
    print("V字形队形创建完成")
    
def create_circular_formation(swarm_manager):
    """
    创建圆形队形
    """
    print("创建圆形队形...")
    
    # 启用队形保持
    swarm_manager.config.set("formation_enabled", True)
    swarm_manager.config.set("formation_type", "圆形")
    swarm_manager.config.set("formation_weight", 1.5)
    
    print("圆形队形创建完成")
    
def create_path_following(swarm_manager):
    """
    创建路径跟随场景
    """
    print("创建路径跟随场景...")
    
    # 定义路径点
    path = [
        Vec3(-30, -30, 10),
        Vec3(0, -40, 15),
        Vec3(30, -30, 10),
        Vec3(40, 0, 20),
        Vec3(30, 30, 10),
        Vec3(0, 40, 15),
        Vec3(-30, 30, 10),
        Vec3(-40, 0, 20),
    ]
    
    # 设置路径
    swarm_manager.set_path(path)
    
    # 启用路径跟随
    swarm_manager.config.set("path_following_enabled", True)
    swarm_manager.config.set("path_weight", 2.0)
    swarm_manager.config.set("prediction_distance", 15.0)
    
    print("路径跟随场景创建完成")
    
def create_hunting_scenario(swarm_manager):
    """
    创建捕猎场景
    """
    print("创建捕猎场景...")
    
    # 创建小规模鸟类群体
    swarm_manager.update_swarm_type("鸟类")
    swarm_manager.config.set("member_count", 20)
    swarm_manager.reset()
    
    # 添加捕食者
    predator_pos = Vec3(-20, -20, 15)
    swarm_manager.create_predator(predator_pos)
    
    # 启用捕食者躲避
    swarm_manager.config.set("predator_avoid_enabled", True)
    swarm_manager.config.set("predator_avoid_weight", 4.0)
    swarm_manager.config.set("predator_radius", 20.0)
    
    print("捕猎场景创建完成")
    
def create_obstacle_avoidance_scenario(swarm_manager):
    """
    创建避障场景
    """
    print("创建避障场景...")
    
    # 创建中等规模群体
    swarm_manager.config.set("member_count", 30)
    swarm_manager.reset()
    
    # 添加多个障碍物
    obstacles = [
        (Vec3(-10, 0, 10), 5),
        (Vec3(10, 0, 15), 4),
        (Vec3(0, 10, 12), 6),
        (Vec3(0, -10, 8), 3),
    ]
    
    for pos, radius in obstacles:
        swarm_manager.create_obstacle(pos, radius)
        
    # 设置移动目标
    target = Vec3(0, 30, 15)
    swarm_manager.set_target(target)
    swarm_manager.config.set("seek_enabled", True)
    
    # 启用避障
    swarm_manager.config.set("obstacle_avoidance_enabled", True)
    swarm_manager.config.set("obstacle_weight", 3.0)
    
    print("避障场景创建完成")

def run_advanced_example(swarm_manager):
    """
    运行高级示例
    """
    print("=== 群体智能高级示例 ===")
    
    # 创建鸟类群体
    create_bird_flock(swarm_manager)
    
    # 添加障碍物
    add_obstacles(swarm_manager, 3)
    
    # 添加捕食者
    add_predators(swarm_manager, 1)
    
    # 启用多种行为
    swarm_manager.config.set("wander_enabled", True)
    swarm_manager.config.set("boundary_enabled", True)
    
    print("高级示例设置完成，观察群体的复杂行为")