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