1. -- 
  2. -- Uwe R. Zimmer, Australia, 2013 
  3. -- 
  4.  
  5. with Vectors_3D; use Vectors_3D; 
  6.  
  7. package body Swarm_Configurations is 
  8.  
  9.    function Default_Globes (Configuration : Configurations) return Energy_Globes is 
  10.  
  11.    begin 
  12.       case Configuration is 
  13.          when Single_Globe_In_Orbit => 
  14.             return (1 => (Position => Zero_Vector_3D, Velocity => Zero_Vector_3D)); 
  15.          when Dual_Globes_In_Orbit => 
  16.             return (1 => (Position => Zero_Vector_3D, Velocity => Zero_Vector_3D), 
  17.                     2 => (Position => Zero_Vector_3D, Velocity => Zero_Vector_3D)); 
  18.          when Globe_Grid_In_Centre  => 
  19.             declare 
  20.                Grid_Space : constant Real := 0.1; 
  21.             begin 
  22.                return (1 => (Position =>  (-Grid_Space, -Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  23.                        2 => (Position =>  (-Grid_Space, -Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  24.                        3 => (Position =>  (-Grid_Space, +Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  25.                        4 => (Position =>  (-Grid_Space, +Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  26.                        5 => (Position =>  (-Grid_Space,         0.0, -Grid_Space), Velocity => Zero_Vector_3D), 
  27.                        6 => (Position =>  (-Grid_Space,         0.0, +Grid_Space), Velocity => Zero_Vector_3D), 
  28.                        7 => (Position =>  (-Grid_Space,         0.0,         0.0), Velocity => Zero_Vector_3D), 
  29.                        8 => (Position =>  (-Grid_Space, -Grid_Space,         0.0), Velocity => Zero_Vector_3D), 
  30.                        9 => (Position =>  (-Grid_Space, +Grid_Space,         0.0), Velocity => Zero_Vector_3D), 
  31.                        10 => (Position => (0.0,         -Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  32.                        11 => (Position => (0.0,         -Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  33.                        12 => (Position => (0.0,         +Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  34.                        13 => (Position => (0.0,         +Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  35.                        14 => (Position => (0.0,                 0.0, -Grid_Space), Velocity => Zero_Vector_3D), 
  36.                        15 => (Position => (0.0,                 0.0, +Grid_Space), Velocity => Zero_Vector_3D), 
  37.                        16 => (Position => (0.0,                 0.0,         0.0), Velocity => Zero_Vector_3D), 
  38.                        17 => (Position => (0.0,         -Grid_Space,         0.0), Velocity => Zero_Vector_3D), 
  39.                        18 => (Position => (0.0,         +Grid_Space,         0.0), Velocity => Zero_Vector_3D), 
  40.                        19 => (Position => (+Grid_Space, -Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  41.                        20 => (Position => (+Grid_Space, -Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  42.                        21 => (Position => (+Grid_Space, +Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  43.                        22 => (Position => (+Grid_Space, +Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  44.                        23 => (Position => (+Grid_Space,         0.0, -Grid_Space), Velocity => Zero_Vector_3D), 
  45.                        24 => (Position => (+Grid_Space,         0.0, +Grid_Space), Velocity => Zero_Vector_3D), 
  46.                        25 => (Position => (+Grid_Space,         0.0,         0.0), Velocity => Zero_Vector_3D), 
  47.                        26 => (Position => (+Grid_Space, -Grid_Space,         0.0), Velocity => Zero_Vector_3D), 
  48.                        27 => (Position => (+Grid_Space, +Grid_Space,         0.0), Velocity => Zero_Vector_3D)); 
  49.             end; 
  50.          when Globe_Grid_Drifting  => 
  51.             declare 
  52.                Grid_Space : constant Real := 0.2; 
  53.             begin 
  54.                return (1 => (Position =>  (-Grid_Space, -Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  55.                        2 => (Position =>  (-Grid_Space, -Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  56.                        3 => (Position =>  (-Grid_Space, +Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  57.                        4 => (Position =>  (-Grid_Space, +Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  58.                        5 => (Position =>  (-Grid_Space,         0.0, -Grid_Space), Velocity => Zero_Vector_3D), 
  59.                        6 => (Position =>  (-Grid_Space,         0.0, +Grid_Space), Velocity => Zero_Vector_3D), 
  60.                        7 => (Position =>  (-Grid_Space,         0.0,         0.0), Velocity => Zero_Vector_3D), 
  61.                        8 => (Position =>  (-Grid_Space, -Grid_Space,         0.0), Velocity => Zero_Vector_3D), 
  62.                        9 => (Position =>  (-Grid_Space, +Grid_Space,         0.0), Velocity => Zero_Vector_3D), 
  63.                        10 => (Position => (0.0,         -Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  64.                        11 => (Position => (0.0,         -Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  65.                        12 => (Position => (0.0,         +Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  66.                        13 => (Position => (0.0,         +Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  67.                        14 => (Position => (0.0,                 0.0, -Grid_Space), Velocity => Zero_Vector_3D), 
  68.                        15 => (Position => (0.0,                 0.0, +Grid_Space), Velocity => Zero_Vector_3D), 
  69.                        16 => (Position => (0.0,                 0.0,         0.0), Velocity => Zero_Vector_3D), 
  70.                        17 => (Position => (0.0,         -Grid_Space,         0.0), Velocity => Zero_Vector_3D), 
  71.                        18 => (Position => (0.0,         +Grid_Space,         0.0), Velocity => Zero_Vector_3D), 
  72.                        19 => (Position => (+Grid_Space, -Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  73.                        20 => (Position => (+Grid_Space, -Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  74.                        21 => (Position => (+Grid_Space, +Grid_Space, -Grid_Space), Velocity => Zero_Vector_3D), 
  75.                        22 => (Position => (+Grid_Space, +Grid_Space, +Grid_Space), Velocity => Zero_Vector_3D), 
  76.                        23 => (Position => (+Grid_Space,         0.0, -Grid_Space), Velocity => Zero_Vector_3D), 
  77.                        24 => (Position => (+Grid_Space,         0.0, +Grid_Space), Velocity => Zero_Vector_3D), 
  78.                        25 => (Position => (+Grid_Space,         0.0,         0.0), Velocity => Zero_Vector_3D), 
  79.                        26 => (Position => (+Grid_Space, -Grid_Space,         0.0), Velocity => Zero_Vector_3D), 
  80.                        27 => (Position => (+Grid_Space, +Grid_Space,         0.0), Velocity => Zero_Vector_3D)); 
  81.             end; 
  82.       end case; 
  83.    end Default_Globes; 
  84.  
  85.    function Default_Protected_Globes (Configuration : Configurations) return Energy_Globes_Protected is 
  86.  
  87.       Globes           : constant Energy_Globes := Default_Globes (Configuration); 
  88.       Globes_Protected : Energy_Globes_Protected (Globes'Range); 
  89.  
  90.    begin 
  91.       for Each in Globes'Range loop 
  92.          Globes_Protected (Each) := (Position => Protected_Point_3D.Allocate  (Globes (Each).Position), 
  93.                                      Velocity => Protected_Vector_3D.Allocate (Globes (Each).Velocity)); 
  94.       end loop; 
  95.       return Globes_Protected; 
  96.    end Default_Protected_Globes; 
  97.  
  98. end Swarm_Configurations;